lnd-client (empty) → 0.1.0.0
raw patch · 61 files changed
+23496/−0 lines, 61 filesdep +JuicyPixelsdep +aesondep +asn1-encodingsetup-changed
Dependencies added: JuicyPixels, aeson, asn1-encoding, asn1-types, async, base, base16-bytestring, base64-bytestring, bytestring, chronos, containers, cryptohash-sha256, cryptonite, deepseq, envparse, extra, hspec, http2, http2-client, http2-client-grpc, http2-grpc-proto-lens, http2-grpc-types, katip, lnd-client, microlens, network-bitcoin, pem, persistent, proto-lens, proto-lens-runtime, qrcode-core, qrcode-juicypixels, scientific, stm, template-haskell, text, unbounded-delays, universum, unliftio, x509
Files
- ChangeLog.md +3/−0
- LICENSE +30/−0
- README.md +28/−0
- Setup.hs +2/−0
- lnd-client.cabal +183/−0
- src/LndClient.hs +13/−0
- src/LndClient/Class.hs +48/−0
- src/LndClient/Data/AddHodlInvoice.hs +35/−0
- src/LndClient/Data/AddInvoice.hs +48/−0
- src/LndClient/Data/Channel.hs +55/−0
- src/LndClient/Data/ChannelPoint.hs +64/−0
- src/LndClient/Data/CloseChannel.hs +90/−0
- src/LndClient/Data/ClosedChannel.hs +35/−0
- src/LndClient/Data/ClosedChannels.hs +53/−0
- src/LndClient/Data/ForceClosedChannel.hs +50/−0
- src/LndClient/Data/GetInfo.hs +25/−0
- src/LndClient/Data/HtlcEvent.hs +45/−0
- src/LndClient/Data/InitWallet.hs +37/−0
- src/LndClient/Data/Invoice.hs +54/−0
- src/LndClient/Data/Kind.hs +11/−0
- src/LndClient/Data/ListChannels.hs +40/−0
- src/LndClient/Data/ListInvoices.hs +54/−0
- src/LndClient/Data/LndEnv.hs +225/−0
- src/LndClient/Data/NewAddress.hs +57/−0
- src/LndClient/Data/Newtype.hs +289/−0
- src/LndClient/Data/OpenChannel.hs +108/−0
- src/LndClient/Data/PayReq.hs +23/−0
- src/LndClient/Data/Payment.hs +41/−0
- src/LndClient/Data/Peer.hs +66/−0
- src/LndClient/Data/PendingChannel.hs +50/−0
- src/LndClient/Data/PendingChannels.hs +40/−0
- src/LndClient/Data/PendingOpenChannel.hs +41/−0
- src/LndClient/Data/SendPayment.hs +52/−0
- src/LndClient/Data/SubscribeChannelEvents.hs +66/−0
- src/LndClient/Data/SubscribeInvoices.hs +29/−0
- src/LndClient/Data/TrackPayment.hs +29/−0
- src/LndClient/Data/Type.hs +40/−0
- src/LndClient/Data/UnlockWallet.hs +35/−0
- src/LndClient/Data/WaitingCloseChannel.hs +37/−0
- src/LndClient/Import.hs +9/−0
- src/LndClient/Import/External.hs +65/−0
- src/LndClient/LndTest.hs +603/−0
- src/LndClient/QRCode.hs +53/−0
- src/LndClient/RPC/Generic.hs +170/−0
- src/LndClient/RPC/Katip.hs +164/−0
- src/LndClient/RPC/Silent.hs +143/−0
- src/LndClient/RPC/TH.hs +429/−0
- src/LndClient/Util.hs +109/−0
- src/LndClient/Watcher.hs +231/−0
- src/LndGrpc/Client.hs +60/−0
- src/Proto/InvoiceGrpc.hs +1568/−0
- src/Proto/InvoiceGrpc_Fields.hs +114/−0
- src/Proto/LndGrpc.hs too large to diff
- src/Proto/LndGrpc_Fields.hs +3320/−0
- src/Proto/RouterGrpc.hs +10865/−0
- src/Proto/RouterGrpc_Fields.hs +620/−0
- src/Proto/WalletUnlockerGrpc.hs +2121/−0
- src/Proto/WalletUnlockerGrpc_Fields.hs +118/−0
- test/LndClient/RPCSpec.hs +341/−0
- test/LndClient/TestApp.hs +160/−0
- test/Spec.hs +2/−0
+ ChangeLog.md view
@@ -0,0 +1,3 @@+# Version 0.1++- Initial version.
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright Author name here (c) 2020++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * Neither the name of Author name here nor the names of other+ contributors may be used to endorse or promote products derived+ from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ README.md view
@@ -0,0 +1,28 @@+# lnd-client++Lightning Network Daemon (LND) client library for Haskell. Docker is the only thing required to get started. Development environment is packed into [nix-shell](https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html)++```bash+# start nix-shell+./nix/shell.sh++# run tests in nix-shell+stack test++# develop in nix-shell+vi .+```++Optional nix-shell environment variables++```bash+vi ~/.zshrc++export VIM_BACKGROUND="light" # or "dark"+export VIM_COLOR_SCHEME="PaperColor" # or "jellybeans"+```++# gRPC schema upgrade+- we are using lnd version 0.13.1-beta.rc2+- download fresh grpc files to proto directory+- run `./script/generate-protoc.sh`
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ lnd-client.cabal view
@@ -0,0 +1,183 @@+cabal-version: 1.12++-- This file has been generated from package.yaml by hpack version 0.34.2.+--+-- see: https://github.com/sol/hpack++name: lnd-client+version: 0.1.0.0+synopsis: Lightning Network Daemon (LND) client library for Haskell+description: You can find documentation at <https://hackage.haskell.org/package/lnd-client>+category: Lightning, Bitcoin, Finance, Network, Payments+homepage: https://github.com/coingaming/lnd-client#readme+bug-reports: https://github.com/coingaming/lnd-client/issues+author: Mikhail Prushinskiy <mprushinsky@gmail.com>+maintainer: Mikhail Prushinskiy <mprushinsky@gmail.com>, Ilja Tkachuk <tkachuk.labs@gmail.com>, Artem Markov <drownbes@gmail.com>+copyright: 2020 Coingaming <hello@coingaming.io>+license: BSD3+license-file: LICENSE+build-type: Simple+extra-source-files:+ README.md+ ChangeLog.md++source-repository head+ type: git+ location: https://github.com/coingaming/lnd-client++library+ exposed-modules:+ LndClient+ LndClient.Class+ LndClient.Data.AddHodlInvoice+ LndClient.Data.AddInvoice+ LndClient.Data.Channel+ LndClient.Data.ChannelPoint+ LndClient.Data.CloseChannel+ LndClient.Data.ClosedChannel+ LndClient.Data.ClosedChannels+ LndClient.Data.ForceClosedChannel+ LndClient.Data.GetInfo+ LndClient.Data.HtlcEvent+ LndClient.Data.InitWallet+ LndClient.Data.Invoice+ LndClient.Data.Kind+ LndClient.Data.ListChannels+ LndClient.Data.ListInvoices+ LndClient.Data.LndEnv+ LndClient.Data.NewAddress+ LndClient.Data.Newtype+ LndClient.Data.OpenChannel+ LndClient.Data.Payment+ LndClient.Data.PayReq+ LndClient.Data.Peer+ LndClient.Data.PendingChannel+ LndClient.Data.PendingChannels+ LndClient.Data.PendingOpenChannel+ LndClient.Data.SendPayment+ LndClient.Data.SubscribeChannelEvents+ LndClient.Data.SubscribeInvoices+ LndClient.Data.TrackPayment+ LndClient.Data.Type+ LndClient.Data.UnlockWallet+ LndClient.Data.WaitingCloseChannel+ LndClient.Import+ LndClient.Import.External+ LndClient.LndTest+ LndClient.QRCode+ LndClient.RPC.Generic+ LndClient.RPC.Katip+ LndClient.RPC.Silent+ LndClient.RPC.TH+ LndClient.Util+ LndClient.Watcher+ LndGrpc.Client+ Proto.InvoiceGrpc+ Proto.InvoiceGrpc_Fields+ Proto.LndGrpc+ Proto.LndGrpc_Fields+ Proto.RouterGrpc+ Proto.RouterGrpc_Fields+ Proto.WalletUnlockerGrpc+ Proto.WalletUnlockerGrpc_Fields+ other-modules:+ Paths_lnd_client+ hs-source-dirs:+ src+ default-extensions: NoImplicitPrelude MultiParamTypeClasses LambdaCase OverloadedStrings ScopedTypeVariables DataKinds KindSignatures+ ghc-options: -Weverything -Wno-missing-export-lists -Wno-missing-exported-signatures -Wno-missing-import-lists -Wno-missed-specialisations -Wno-all-missed-specialisations -Wno-unsafe -Wno-safe -Wno-missing-local-signatures -Wno-monomorphism-restriction+ build-depends:+ JuicyPixels >=3.3.3 && <3.4+ , aeson >=1.4.4.0 && <1.4.8+ , asn1-encoding >=0.9.6 && <0.10+ , asn1-types >=0.3 && <0.4+ , async >=2.2.2 && <2.2.3+ , base >=4.7 && <5+ , base16-bytestring >=1.0.1.0 && <1.0.2+ , base64-bytestring >=1.0.0.2 && <1.0.1+ , bytestring >=0.10.8.2 && <0.10.9+ , chronos >=1.0.7 && <1.0.10+ , containers >=0.6.0.1 && <0.6.1+ , cryptohash-sha256 >=0.11.101.0 && <0.11.102+ , cryptonite >=0.25 && <0.29+ , deepseq >=1.4.4.0 && <1.4.5+ , envparse >=0.4.1 && <0.4.2+ , extra >=1.6.18 && <1.6.20+ , hspec >=2.7.1 && <2.7.2+ , http2 >=2.0.3 && <3.0.3+ , http2-client >=0.10.0.0 && <0.10.1+ , http2-client-grpc >=0.8.0.0 && <0.8.1+ , http2-grpc-proto-lens >=0.1.0.0 && <0.1.1+ , http2-grpc-types >=0.5.0.0 && <0.5.1+ , katip >=0.8.3.0 && <0.8.4+ , microlens >=0.4.10 && <0.5+ , network-bitcoin >=1.8.3 && <1.9.2+ , pem >=0.2.4 && <0.3+ , persistent >=2.11.0.2 && <2.11.1+ , proto-lens >=0.7.0 && <0.8+ , proto-lens-runtime >=0.7.0 && <0.8+ , qrcode-core >=0.9 && <0.9.3+ , qrcode-juicypixels >=0.8.0 && <0.8.1+ , scientific >=0.3.6.2 && <0.3.7+ , stm >=2.5.0.0 && <2.5.1+ , template-haskell >=2.14.0.0 && <2.14.1+ , text >=1.2.3.1 && <1.2.4+ , unbounded-delays >=0.1.1.0 && <0.1.2+ , universum >=1.5.0 && <1.5.1+ , unliftio >=0.2.12 && <0.2.13+ , x509 >=1.7.5 && <1.7.6+ default-language: Haskell2010++test-suite lnd-client-test+ type: exitcode-stdio-1.0+ main-is: Spec.hs+ other-modules:+ LndClient.RPCSpec+ LndClient.TestApp+ Paths_lnd_client+ hs-source-dirs:+ test+ default-extensions: NoImplicitPrelude MultiParamTypeClasses LambdaCase OverloadedStrings ScopedTypeVariables DataKinds KindSignatures+ ghc-options: -Weverything -Wno-missing-exported-signatures -Wno-missing-import-lists -Wno-missed-specialisations -Wno-all-missed-specialisations -Wno-unsafe -Wno-safe -Wno-missing-local-signatures -Wno-monomorphism-restriction -threaded -rtsopts -with-rtsopts=-N+ build-depends:+ JuicyPixels >=3.3.3 && <3.4+ , aeson >=1.4.4.0 && <1.4.8+ , asn1-encoding >=0.9.6 && <0.10+ , asn1-types >=0.3 && <0.4+ , async >=2.2.2 && <2.2.3+ , base >=4.7 && <5+ , base16-bytestring >=1.0.1.0 && <1.0.2+ , base64-bytestring >=1.0.0.2 && <1.0.1+ , bytestring >=0.10.8.2 && <0.10.9+ , chronos >=1.0.7 && <1.0.10+ , containers >=0.6.0.1 && <0.6.1+ , cryptohash-sha256 >=0.11.101.0 && <0.11.102+ , cryptonite >=0.25 && <0.29+ , deepseq >=1.4.4.0 && <1.4.5+ , envparse >=0.4.1 && <0.4.2+ , extra >=1.6.18 && <1.6.20+ , hspec >=2.7.1 && <2.7.2+ , http2 >=2.0.3 && <3.0.3+ , http2-client >=0.10.0.0 && <0.10.1+ , http2-client-grpc >=0.8.0.0 && <0.8.1+ , http2-grpc-proto-lens >=0.1.0.0 && <0.1.1+ , http2-grpc-types >=0.5.0.0 && <0.5.1+ , katip >=0.8.3.0 && <0.8.4+ , lnd-client+ , microlens >=0.4.10 && <0.5+ , network-bitcoin >=1.8.3 && <1.9.2+ , pem >=0.2.4 && <0.3+ , persistent >=2.11.0.2 && <2.11.1+ , proto-lens >=0.7.0 && <0.8+ , proto-lens-runtime >=0.7.0 && <0.8+ , qrcode-core >=0.9 && <0.9.3+ , qrcode-juicypixels >=0.8.0 && <0.8.1+ , scientific >=0.3.6.2 && <0.3.7+ , stm >=2.5.0.0 && <2.5.1+ , template-haskell >=2.14.0.0 && <2.14.1+ , text >=1.2.3.1 && <1.2.4+ , unbounded-delays >=0.1.1.0 && <0.1.2+ , universum >=1.5.0 && <1.5.1+ , unliftio >=0.2.12 && <0.2.13+ , x509 >=1.7.5 && <1.7.6+ default-language: Haskell2010
+ src/LndClient.hs view
@@ -0,0 +1,13 @@+-- | Lightning Network Daemon (LND) client library for Haskell.+-- Please use LndClient.RPC.Silent or LndClient.RPC.Katip to send/receive/subscribe to LND.+module LndClient+ ( module Import,+ )+where++import LndClient.Class as Import+import LndClient.Data.Kind as Import+import LndClient.Data.LndEnv as Import+import LndClient.Data.Newtype as Import+import LndClient.Data.Type as Import+import LndClient.Util as Import
+ src/LndClient/Class.hs view
@@ -0,0 +1,48 @@+{-# LANGUAGE FlexibleInstances #-}++module LndClient.Class+ ( FromGrpc (..),+ ToGrpc (..),+ )+where++import Data.ProtoLens.Message+import LndClient.Data.Type+import LndClient.Import.External++class ToGrpc a b where+ toGrpc :: a -> Either LndError b++class Eq b => FromGrpc a b where+ fromGrpc :: b -> Either LndError a++--+-- ToGrpc instances+--++instance ToGrpc a a where+ toGrpc = Right++instance (FieldDefault b, ToGrpc a b) => ToGrpc (Maybe a) b where+ toGrpc = \case+ Nothing -> Right fieldDefault+ Just x -> toGrpc x++--+-- FromGrpc instances+--++instance Eq a => FromGrpc a a where+ fromGrpc = Right++instance Eq b => FromGrpc () b where+ fromGrpc = const $ Right ()++instance (FieldDefault b, FromGrpc a b) => FromGrpc (Maybe a) b where+ fromGrpc x =+ if x == fieldDefault+ then Right Nothing+ else Just <$> fromGrpc x++instance FromGrpc a b => FromGrpc [a] [b] where+ fromGrpc x = sequence $ fromGrpc <$> x
+ src/LndClient/Data/AddHodlInvoice.hs view
@@ -0,0 +1,35 @@+{-# LANGUAGE FlexibleContexts #-}++module LndClient.Data.AddHodlInvoice+ ( AddHodlInvoiceRequest (..),+ )+where++import Data.ProtoLens.Message+import LndClient.Import+import qualified Proto.InvoiceGrpc as LnGRPC+import qualified Proto.InvoiceGrpc_Fields as LnGRPC++data AddHodlInvoiceRequest+ = AddHodlInvoiceRequest+ { memo :: Maybe Text,+ hash :: RHash,+ valueMsat :: MSat,+ expiry :: Maybe Seconds+ }+ deriving (Eq, Show)++instance ToGrpc AddHodlInvoiceRequest LnGRPC.AddHoldInvoiceRequest where+ toGrpc x =+ msg+ <$> toGrpc (memo x)+ <*> toGrpc (hash x)+ <*> toGrpc (valueMsat x)+ <*> toGrpc (expiry x)+ where+ msg gMemo gHash gValue gExp =+ defMessage+ & LnGRPC.memo .~ gMemo+ & LnGRPC.hash .~ gHash+ & LnGRPC.valueMsat .~ gValue+ & LnGRPC.expiry .~ gExp
+ src/LndClient/Data/AddInvoice.hs view
@@ -0,0 +1,48 @@+{-# LANGUAGE FlexibleContexts #-}++module LndClient.Data.AddInvoice+ ( AddInvoiceRequest (..),+ AddInvoiceResponse (..),+ )+where++import Data.ProtoLens.Message+import LndClient.Import+import qualified Proto.LndGrpc as LnGRPC+import qualified Proto.LndGrpc_Fields as LnGRPC++data AddInvoiceRequest+ = AddInvoiceRequest+ { valueMsat :: MSat,+ memo :: Maybe Text,+ expiry :: Maybe Seconds+ }+ deriving (Eq, Show)++data AddInvoiceResponse+ = AddInvoiceResponse+ { rHash :: RHash,+ paymentRequest :: PaymentRequest,+ addIndex :: AddIndex+ }+ deriving (Eq, Show)++instance ToGrpc AddInvoiceRequest LnGRPC.Invoice where+ toGrpc x =+ msg+ <$> toGrpc (memo x)+ <*> toGrpc (valueMsat x)+ <*> toGrpc (expiry x)+ where+ msg gMemo gValue gExp =+ defMessage+ & LnGRPC.memo .~ gMemo+ & LnGRPC.valueMsat .~ gValue+ & LnGRPC.expiry .~ gExp++instance FromGrpc AddInvoiceResponse LnGRPC.AddInvoiceResponse where+ fromGrpc x =+ AddInvoiceResponse+ <$> fromGrpc (x ^. LnGRPC.rHash)+ <*> fromGrpc (x ^. LnGRPC.paymentRequest)+ <*> fromGrpc (x ^. LnGRPC.addIndex)
+ src/LndClient/Data/Channel.hs view
@@ -0,0 +1,55 @@+{-# LANGUAGE FlexibleInstances #-}++module LndClient.Data.Channel+ ( Channel (..),+ PendingUpdate (..),+ )+where++import LndClient.Data.ChannelPoint+ ( ChannelPoint (..),+ channelPointParser,+ )+import LndClient.Data.Newtype+import LndClient.Import+import qualified Proto.LndGrpc as LnGRPC+import qualified Proto.LndGrpc_Fields as LnGRPC++data Channel+ = Channel+ { remotePubkey :: NodePubKey,+ channelPoint :: ChannelPoint,+ capacity :: MSat,+ localBalance :: MSat,+ remoteBalance :: MSat,+ commitFee :: MSat,+ active :: Bool+ }+ deriving (Eq, Ord, Show)++data PendingUpdate (a :: TxKind)+ = PendingUpdate+ { txid :: TxId a,+ outputIndex :: Vout a+ }+ deriving (Eq, Ord, Show)++instance FromGrpc Channel LnGRPC.Channel where+ fromGrpc x =+ Channel+ <$> fromGrpc (x ^. LnGRPC.remotePubkey)+ <*> channelPointParser (x ^. LnGRPC.channelPoint)+ <*> fromGrpc (x ^. LnGRPC.capacity)+ <*> fromGrpc (x ^. LnGRPC.localBalance)+ <*> fromGrpc (x ^. LnGRPC.remoteBalance)+ <*> fromGrpc (x ^. LnGRPC.commitFee)+ <*> fromGrpc (x ^. LnGRPC.active)++instance FromGrpc [Channel] LnGRPC.ListChannelsResponse where+ fromGrpc x = fromGrpc (x ^. LnGRPC.channels)++instance FromGrpc (PendingUpdate a) LnGRPC.PendingUpdate where+ fromGrpc x =+ PendingUpdate+ <$> fromGrpc (x ^. LnGRPC.txid)+ <*> fromGrpc (x ^. LnGRPC.outputIndex)
+ src/LndClient/Data/ChannelPoint.hs view
@@ -0,0 +1,64 @@+{-# LANGUAGE FlexibleContexts #-}++module LndClient.Data.ChannelPoint+ ( ChannelPoint (..),+ channelPointParser,+ )+where++import qualified Data.ByteString as BS (reverse)+import qualified Data.ByteString.Base16 as B16 (decode)+import qualified Data.ByteString.Char8 as C8 (split)+import Data.ProtoLens.Message+import qualified Data.Text as TS (unpack)+import LndClient.Import+import qualified Proto.LndGrpc as LnGRPC+import qualified Proto.LndGrpc_Fields as LnGRPC++data ChannelPoint+ = ChannelPoint+ { fundingTxId :: TxId 'Funding,+ outputIndex :: Vout 'Funding+ }+ deriving (Eq, Ord, Show)++instance FromGrpc ChannelPoint LnGRPC.ChannelPoint where+ fromGrpc x =+ ChannelPoint+ <$> fromGrpc (x ^. LnGRPC.fundingTxidBytes)+ <*> fromGrpc (x ^. LnGRPC.outputIndex)++instance ToGrpc ChannelPoint LnGRPC.ChannelPoint where+ toGrpc x =+ msg+ <$> toGrpc (fundingTxId x)+ <*> toGrpc (outputIndex x)+ where+ msg gFundingTxIdBytes gOutputIndex =+ defMessage+ & LnGRPC.fundingTxidBytes .~ gFundingTxIdBytes+ & LnGRPC.outputIndex .~ gOutputIndex++channelPointParser :: Text -> Either LndError ChannelPoint+channelPointParser x =+ case C8.split ':' str of+ [txid, idxBS] ->+ case B16.decode txid of+ Right txidHex -> do+ idxTS <-+ first+ ( const $+ FromGrpcError "Invalid ChannelPoint outputIndex"+ )+ $ decodeUtf8' idxBS+ ChannelPoint+ <$> (pure . TxId $ BS.reverse txidHex)+ <*> maybeToRight+ (FromGrpcError "Invalid ChannelPoint outputIndex")+ (readMaybe $ TS.unpack idxTS)+ Left {} ->+ Left $ FromGrpcError "Invalid ChannelPoint fundingTxidBytes"+ _ ->+ Left $ FromGrpcError "Invalid ChannelPoint text"+ where+ str = encodeUtf8 x
+ src/LndClient/Data/CloseChannel.hs view
@@ -0,0 +1,90 @@+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}++module LndClient.Data.CloseChannel+ ( CloseChannelRequest (..),+ CloseStatusUpdate (..),+ ChannelCloseUpdate (..),+ ChannelCloseSummary (..),+ )+where++import Data.ProtoLens.Message+import LndClient.Data.Channel (PendingUpdate)+import LndClient.Data.ChannelPoint+import LndClient.Import+import qualified Proto.LndGrpc as LnGRPC+import qualified Proto.LndGrpc_Fields as LnGRPC++data CloseChannelRequest+ = CloseChannelRequest+ { channelPoint :: ChannelPoint,+ force :: Bool,+ targetConf :: Maybe Int32,+ satPerByte :: Maybe Int64,+ deliveryAddress :: Maybe Text+ }+ deriving (Eq, Ord, Show)++data CloseStatusUpdate+ = Pending (PendingUpdate 'Closing)+ | Close ChannelCloseUpdate+ | NothingUpdate+ deriving (Eq, Ord, Show)++data ChannelCloseUpdate+ = ChannelCloseUpdate+ { closingTxid :: TxId 'Closing,+ success :: Bool+ }+ deriving (Eq, Ord, Show)++data ChannelCloseSummary+ = ChannelCloseSummary+ { remotePubkey :: NodePubKey,+ chPoint :: ChannelPoint,+ settledBalance :: MSat,+ closingTxId :: TxId 'Closing+ }+ deriving (Eq, Ord, Show)++instance FromGrpc [ChannelCloseSummary] LnGRPC.ClosedChannelsResponse where+ fromGrpc x = sequence $ fromGrpc <$> (x ^. LnGRPC.channels)++instance ToGrpc CloseChannelRequest LnGRPC.CloseChannelRequest where+ toGrpc x =+ msg+ <$> toGrpc (channelPoint x)+ <*> toGrpc (LndClient.Data.CloseChannel.force x)+ <*> toGrpc (targetConf x)+ <*> toGrpc (satPerByte x)+ <*> toGrpc (deliveryAddress x)+ where+ msg gChannelPoint gForce gTargetConf gSatPerByte gDeliveryAddress =+ defMessage+ & LnGRPC.channelPoint .~ gChannelPoint+ & LnGRPC.force .~ gForce+ & LnGRPC.targetConf .~ gTargetConf+ & LnGRPC.satPerByte .~ gSatPerByte+ & LnGRPC.deliveryAddress .~ gDeliveryAddress++instance FromGrpc CloseStatusUpdate LnGRPC.CloseStatusUpdate where+ fromGrpc x =+ case x ^. LnGRPC.maybe'update of+ Just (LnGRPC.CloseStatusUpdate'ClosePending a) -> Pending <$> fromGrpc a+ Just (LnGRPC.CloseStatusUpdate'ChanClose a) -> Close <$> fromGrpc a+ Nothing -> Right NothingUpdate++instance FromGrpc ChannelCloseUpdate LnGRPC.ChannelCloseUpdate where+ fromGrpc x =+ ChannelCloseUpdate+ <$> fromGrpc (x ^. LnGRPC.closingTxid)+ <*> fromGrpc (x ^. LnGRPC.success)++instance FromGrpc ChannelCloseSummary LnGRPC.ChannelCloseSummary where+ fromGrpc x =+ ChannelCloseSummary+ <$> fromGrpc (x ^. LnGRPC.remotePubkey)+ <*> channelPointParser (x ^. LnGRPC.channelPoint)+ <*> fromGrpc (x ^. LnGRPC.settledBalance)+ <*> fromGrpc (x ^. LnGRPC.closingTxHash)
+ src/LndClient/Data/ClosedChannel.hs view
@@ -0,0 +1,35 @@+module LndClient.Data.ClosedChannel+ ( ClosedChannel (..),+ )+where++import LndClient.Data.PendingChannel+import LndClient.Import+import qualified Proto.LndGrpc as LnGRPC+import qualified Proto.LndGrpc_Fields as LnGRPC++data ClosedChannel+ = ClosedChannel+ { channel :: PendingChannel,+ closingTxid :: TxId 'Closing+ }+ deriving (Eq, Show)++instance+ FromGrpc+ ClosedChannel+ LnGRPC.PendingChannelsResponse'ClosedChannel+ where+ fromGrpc x =+ ClosedChannel+ <$> ( case pendingChannel of+ Nothing ->+ Left $ FromGrpcError "PendingChannel is required"+ Just this ->+ fromGrpc this+ )+ <*> fromGrpc+ (x ^. LnGRPC.closingTxid)+ where+ pendingChannel =+ x ^. LnGRPC.maybe'channel
+ src/LndClient/Data/ClosedChannels.hs view
@@ -0,0 +1,53 @@+{-# LANGUAGE FlexibleContexts #-}++module LndClient.Data.ClosedChannels+ ( ClosedChannelsRequest (..),+ defReq,+ )+where++import Data.ProtoLens.Message+import LndClient.Import+import qualified Proto.LndGrpc as LnGRPC+import qualified Proto.LndGrpc_Fields as LnGRPC++data ClosedChannelsRequest+ = ClosedChannelsRequest+ { cooperative :: Bool,+ localForce :: Bool,+ remoteForce :: Bool,+ breach :: Bool,+ fundingCanceled :: Bool,+ abandoned :: Bool+ }+ deriving (Eq, Ord, Show)++instance ToGrpc ClosedChannelsRequest LnGRPC.ClosedChannelsRequest where+ toGrpc x =+ msg+ <$> toGrpc (cooperative x)+ <*> toGrpc (localForce x)+ <*> toGrpc (remoteForce x)+ <*> toGrpc (breach x)+ <*> toGrpc (fundingCanceled x)+ <*> toGrpc (abandoned x)+ where+ msg gCooperative gLocalForce gRemoteForce gBreach gFundingCanceled gAbandoned =+ defMessage+ & LnGRPC.cooperative .~ gCooperative+ & LnGRPC.localForce .~ gLocalForce+ & LnGRPC.remoteForce .~ gRemoteForce+ & LnGRPC.breach .~ gBreach+ & LnGRPC.fundingCanceled .~ gFundingCanceled+ & LnGRPC.abandoned .~ gAbandoned++defReq :: ClosedChannelsRequest+defReq =+ ClosedChannelsRequest+ { cooperative = True,+ localForce = True,+ remoteForce = True,+ breach = True,+ fundingCanceled = True,+ abandoned = True+ }
+ src/LndClient/Data/ForceClosedChannel.hs view
@@ -0,0 +1,50 @@+module LndClient.Data.ForceClosedChannel+ ( ForceClosedChannel (..),+ )+where++import LndClient.Data.PendingChannel+import LndClient.Import+import qualified Proto.LndGrpc as LnGRPC+import qualified Proto.LndGrpc_Fields as LnGRPC++data ForceClosedChannel+ = ForceClosedChannel+ { channel :: PendingChannel,+ closingTxid :: TxId 'Closing,+ limboBalance :: MSat,+ maturityHeight :: Word32,+ blocksTilMaturity :: Int32,+ recoveredBalance :: MSat+ }+ deriving (Eq, Show)++instance+ FromGrpc+ ForceClosedChannel+ LnGRPC.PendingChannelsResponse'ForceClosedChannel+ where+ fromGrpc x =+ ForceClosedChannel+ <$> ( case pendingChannel of+ Nothing ->+ Left $ FromGrpcError "PendingChannel is required"+ Just this ->+ fromGrpc this+ )+ <*> fromGrpc (x ^. LnGRPC.closingTxid)+ <*> ( toMSat+ <$> fromGrpc+ (x ^. LnGRPC.limboBalance)+ )+ <*> fromGrpc+ (x ^. LnGRPC.maturityHeight)+ <*> fromGrpc+ (x ^. LnGRPC.blocksTilMaturity)+ <*> ( toMSat+ <$> fromGrpc+ (x ^. LnGRPC.recoveredBalance)+ )+ where+ pendingChannel =+ x ^. LnGRPC.maybe'channel
+ src/LndClient/Data/GetInfo.hs view
@@ -0,0 +1,25 @@+{-# LANGUAGE FlexibleContexts #-}++module LndClient.Data.GetInfo+ ( GetInfoResponse (..),+ )+where++import LndClient.Import+import qualified Proto.LndGrpc as LnGRPC+import qualified Proto.LndGrpc_Fields as LnGRPC++data GetInfoResponse+ = GetInfoResponse+ { identityPubkey :: NodePubKey,+ syncedToChain :: Bool,+ syncedToGraph :: Bool+ }+ deriving (Eq, Show)++instance FromGrpc GetInfoResponse LnGRPC.GetInfoResponse where+ fromGrpc x =+ GetInfoResponse+ <$> fromGrpc (x ^. LnGRPC.identityPubkey)+ <*> fromGrpc (x ^. LnGRPC.syncedToChain)+ <*> fromGrpc (x ^. LnGRPC.syncedToGraph)
+ src/LndClient/Data/HtlcEvent.hs view
@@ -0,0 +1,45 @@+module LndClient.Data.HtlcEvent+ ( HtlcEvent (..),+ )+where++import LndClient.Import+import qualified Proto.RouterGrpc as LnGRPC+import qualified Proto.RouterGrpc_Fields as LnGRPC++data HtlcEvent+ = HtlcEvent+ { incomingChannelId :: Word64,+ outgoingChannelId :: Word64,+ incomingHtlcId :: Word64,+ outgoingHtlcId :: Word64,+ timestampNs :: Word64,+ eventType :: EventType+ }+ deriving (Eq)++data EventType+ = UNKNOWN+ | SEND+ | RECEIVE+ | FORWARD+ deriving (Eq)++instance FromGrpc HtlcEvent LnGRPC.HtlcEvent where+ fromGrpc x =+ HtlcEvent+ <$> fromGrpc (x ^. LnGRPC.incomingChannelId)+ <*> fromGrpc (x ^. LnGRPC.outgoingChannelId)+ <*> fromGrpc (x ^. LnGRPC.incomingHtlcId)+ <*> fromGrpc (x ^. LnGRPC.outgoingHtlcId)+ <*> fromGrpc (x ^. LnGRPC.timestampNs)+ <*> fromGrpc (x ^. LnGRPC.eventType)++instance FromGrpc EventType LnGRPC.HtlcEvent'EventType where+ fromGrpc x =+ case x of+ LnGRPC.HtlcEvent'UNKNOWN -> Right UNKNOWN+ LnGRPC.HtlcEvent'SEND -> Right SEND+ LnGRPC.HtlcEvent'RECEIVE -> Right RECEIVE+ LnGRPC.HtlcEvent'FORWARD -> Right FORWARD+ LnGRPC.HtlcEvent'EventType'Unrecognized v -> Left $ FromGrpcError ("Cannot parse EventType, value:" <> show v)
+ src/LndClient/Data/InitWallet.hs view
@@ -0,0 +1,37 @@+{-# LANGUAGE FlexibleContexts #-}++module LndClient.Data.InitWallet+ ( InitWalletRequest (..),+ )+where++import Data.ProtoLens.Message+import LndClient.Import+import qualified Proto.WalletUnlockerGrpc as LnGRPC+import qualified Proto.WalletUnlockerGrpc_Fields as LnGRPC+import Prelude (Show (..))++data InitWalletRequest+ = InitWalletRequest+ { walletPassword :: LndWalletPassword,+ cipherSeedMnemonic :: CipherSeedMnemonic,+ aezeedPassphrase :: Maybe AezeedPassphrase+ }+ deriving (Eq)++instance Show InitWalletRequest where+ show = const "SECRET"++instance ToGrpc InitWalletRequest LnGRPC.InitWalletRequest where+ toGrpc x =+ msg+ <$> toGrpc (walletPassword x)+ <*> toGrpc (cipherSeedMnemonic x)+ <*> toGrpc (aezeedPassphrase x)+ where+ msg :: ByteString -> [Text] -> ByteString -> LnGRPC.InitWalletRequest+ msg gWalletPassword gCipherSeedMnemonic gAezeedPassphrase =+ defMessage+ & LnGRPC.walletPassword .~ gWalletPassword+ & LnGRPC.cipherSeedMnemonic .~ gCipherSeedMnemonic+ & LnGRPC.aezeedPassphrase .~ gAezeedPassphrase
+ src/LndClient/Data/Invoice.hs view
@@ -0,0 +1,54 @@+module LndClient.Data.Invoice+ ( Invoice (..),+ InvoiceState (..),+ )+where++import LndClient.Import+import qualified Proto.LndGrpc as LnGRPC+import qualified Proto.LndGrpc_Fields as LnGRPC++data Invoice+ = Invoice+ { rHash :: RHash,+ amtPaidMsat :: MSat,+ valueMsat :: MSat,+ settled :: Bool,+ settleIndex :: Maybe SettleIndex,+ memo :: Text,+ paymentRequest :: PaymentRequest,+ private :: Bool,+ addIndex :: AddIndex,+ state :: InvoiceState+ }+ deriving (Eq, Show)++data InvoiceState+ = OPEN+ | SETTLED+ | CANCELED+ | ACCEPTED+ deriving (Eq, Show)++instance FromGrpc Invoice LnGRPC.Invoice where+ fromGrpc x =+ Invoice+ <$> fromGrpc (x ^. LnGRPC.rHash)+ <*> fromGrpc (x ^. LnGRPC.amtPaidMsat)+ <*> fromGrpc (x ^. LnGRPC.valueMsat)+ <*> fromGrpc (x ^. LnGRPC.settled)+ <*> fromGrpc (x ^. LnGRPC.settleIndex)+ <*> fromGrpc (x ^. LnGRPC.memo)+ <*> fromGrpc (x ^. LnGRPC.paymentRequest)+ <*> fromGrpc (x ^. LnGRPC.private)+ <*> fromGrpc (x ^. LnGRPC.addIndex)+ <*> fromGrpc (x ^. LnGRPC.state)++instance FromGrpc InvoiceState LnGRPC.Invoice'InvoiceState where+ fromGrpc x =+ case x of+ LnGRPC.Invoice'OPEN -> Right OPEN+ LnGRPC.Invoice'SETTLED -> Right SETTLED+ LnGRPC.Invoice'CANCELED -> Right CANCELED+ LnGRPC.Invoice'ACCEPTED -> Right ACCEPTED+ LnGRPC.Invoice'InvoiceState'Unrecognized v -> Left $ FromGrpcError ("Cannot parse InvoiceState, value:" <> show v)
+ src/LndClient/Data/Kind.hs view
@@ -0,0 +1,11 @@+module LndClient.Data.Kind+ ( TxKind (..),+ )+where++import LndClient.Import.External++data TxKind+ = Funding+ | Closing+ deriving (Eq, Show)
+ src/LndClient/Data/ListChannels.hs view
@@ -0,0 +1,40 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}++module LndClient.Data.ListChannels+ ( ListChannelsRequest (..),+ )+where++import Data.ProtoLens.Message+import LndClient.Import+import qualified Proto.LndGrpc as LnGRPC+import qualified Proto.LndGrpc_Fields as LnGRPC++data ListChannelsRequest+ = ListChannelsRequest+ { activeOnly :: Bool,+ inactiveOnly :: Bool,+ publicOnly :: Bool,+ privateOnly :: Bool,+ peer :: Maybe NodePubKey+ }+ deriving (Generic, Show)++instance ToGrpc ListChannelsRequest LnGRPC.ListChannelsRequest where+ toGrpc x =+ msg+ <$> toGrpc (activeOnly x)+ <*> toGrpc (inactiveOnly x)+ <*> toGrpc (privateOnly x)+ <*> toGrpc (publicOnly x)+ <*> toGrpc (peer x)+ where+ msg gActiveOnly gInactiveOnly gPrivateOnly gPublicOnly gPeer =+ defMessage+ & LnGRPC.activeOnly .~ gActiveOnly+ & LnGRPC.inactiveOnly .~ gInactiveOnly+ & LnGRPC.privateOnly .~ gPrivateOnly+ & LnGRPC.publicOnly .~ gPublicOnly+ & LnGRPC.peer .~ gPeer
+ src/LndClient/Data/ListInvoices.hs view
@@ -0,0 +1,54 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}++module LndClient.Data.ListInvoices+ ( ListInvoiceRequest (..),+ ListInvoiceResponse (..),+ )+where++import Data.ProtoLens.Message+import LndClient.Data.Invoice (Invoice)+import LndClient.Import+import qualified Proto.LndGrpc as LnGRPC+import qualified Proto.LndGrpc_Fields as LnGRPC++data ListInvoiceRequest+ = ListInvoiceRequest+ { pendingOnly :: Bool,+ indexOffset :: AddIndex,+ numMaxInvoices :: Word64,+ reversed :: Bool+ }+ deriving (Generic, Show)++data ListInvoiceResponse+ = ListInvoiceResponse+ { invoices :: [Invoice],+ lastIndexOffset :: AddIndex,+ firstIndexOffset :: AddIndex+ }+ deriving (Generic, Show)++instance ToGrpc ListInvoiceRequest LnGRPC.ListInvoiceRequest where+ toGrpc x =+ msg+ <$> toGrpc (pendingOnly x)+ <*> toGrpc (indexOffset x)+ <*> toGrpc (numMaxInvoices x)+ <*> toGrpc (reversed x)+ where+ msg gPendingOnly gIndexOffset gNumMaxInvoices gReversed =+ defMessage+ & LnGRPC.pendingOnly .~ gPendingOnly+ & LnGRPC.indexOffset .~ gIndexOffset+ & LnGRPC.numMaxInvoices .~ gNumMaxInvoices+ & LnGRPC.reversed .~ gReversed++instance FromGrpc ListInvoiceResponse LnGRPC.ListInvoiceResponse where+ fromGrpc x =+ ListInvoiceResponse+ <$> fromGrpc (x ^. LnGRPC.invoices)+ <*> fromGrpc (x ^. LnGRPC.lastIndexOffset)+ <*> fromGrpc (x ^. LnGRPC.firstIndexOffset)
+ src/LndClient/Data/LndEnv.hs view
@@ -0,0 +1,225 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE OverloadedStrings #-}++module LndClient.Data.LndEnv+ ( LndEnv (..),+ RawConfig,+ LndWalletPassword (..),+ LndTlsCert,+ LndHexMacaroon (..),+ LndHost (..),+ LndPort,+ LndConfig (..),+ newLndEnv,+ readLndEnv,+ createLndTlsCert,+ unLndTlsCert,+ createLndPort,+ katipAddLndContext,+ newSeverity,+ newSev,+ )+where++import Data.Aeson as A+ ( (.:?),+ Result (..),+ Value (..),+ camelTo2,+ defaultOptions,+ eitherDecodeStrict,+ fieldLabelModifier,+ genericParseJSON,+ withObject,+ )+import qualified Data.ByteString.Char8 as C8+import qualified Data.PEM as Pem+import Data.Scientific+import Data.X509+import Env+import LndClient.Class+import LndClient.Data.Newtype+import LndClient.Data.Type+import LndClient.Import.External as Ex+import LndClient.Util as U+import Network.GRPC.Client.Helpers (GrpcClientConfig (..), grpcClientConfigSimple)+import Network.GRPC.HTTP2.Encoding (uncompressed)+import Network.HTTP2.Client++newtype LndWalletPassword = LndWalletPassword Text+ deriving (PersistField, PersistFieldSql, Eq, FromJSON, IsString)++newtype LndTlsCert = LndTlsCert ByteString+ deriving (PersistField, PersistFieldSql, Eq)++newtype LndHexMacaroon = LndHexMacaroon Text+ deriving (PersistField, PersistFieldSql, Eq, FromJSON, IsString)++newtype LndHost = LndHost Text+ deriving (PersistField, PersistFieldSql, Eq, FromJSON, IsString)++newtype LndPort = LndPort Int+ deriving (PersistField, PersistFieldSql, Eq)++data LndConfig+ = LndConfig+ { lndConfigHost :: HostName,+ lndConfigPort :: PortNumber,+ lndConfigTlsEnabled :: Bool,+ lndConfigCompression :: Bool+ }+ deriving (Show)++data RawConfig+ = RawConfig+ { rawConfigLndWalletPassword :: LndWalletPassword,+ rawConfigLndTlsCert :: LndTlsCert,+ rawConfigLndHexMacaroon :: LndHexMacaroon,+ rawConfigLndHost :: LndHost,+ rawConfigLndPort :: LndPort,+ rawConfigLndCipherSeedMnemonic :: Maybe CipherSeedMnemonic,+ rawConfigLndAezeedPassphrase :: Maybe AezeedPassphrase+ }+ deriving (Eq, Generic)++data LndEnv+ = LndEnv+ { envLndWalletPassword :: LndWalletPassword,+ envLndHexMacaroon :: LndHexMacaroon,+ envLndLogStrategy :: LoggingStrategy,+ envLndCipherSeedMnemonic :: Maybe CipherSeedMnemonic,+ envLndAezeedPassphrase :: Maybe AezeedPassphrase,+ envLndSyncGrpcTimeout :: Maybe GrpcTimeoutSeconds,+ envLndAsyncGrpcTimeout :: Maybe GrpcTimeoutSeconds,+ envLndConfig :: GrpcClientConfig+ }++instance ToGrpc LndWalletPassword ByteString where+ toGrpc x = Right $ encodeUtf8 (coerce x :: Text)++instance FromJSON LndTlsCert where+ parseJSON x =+ case x of+ A.String s ->+ case createLndTlsCert $ encodeUtf8 s of+ Right cert -> return cert+ Left e -> failure e+ e -> failure e+ where+ failure err = fail $ "Json certificate parsing error: " <> " " <> show err++instance FromJSON LndPort where+ parseJSON x =+ case x of+ A.Number s -> do+ let ePort =+ maybeToRight+ (LndEnvError "Port should be Int")+ $ toBoundedInteger s+ case ePort >>= createLndPort of+ Right lndPort -> return lndPort+ Left err -> failure err+ err -> failure err+ where+ failure err = fail $ "Json port loading error: " <> " " <> show err++instance FromJSON RawConfig where+ parseJSON =+ genericParseJSON+ defaultOptions+ { fieldLabelModifier = camelTo2 '_' . Ex.drop 9+ }++instance FromJSON LndEnv where+ parseJSON arg =+ case fromJSON arg :: Result RawConfig of+ Error e -> fail e+ Success rc -> do+ let res =+ newLndEnv+ (rawConfigLndWalletPassword rc)+ (rawConfigLndTlsCert rc)+ (rawConfigLndHexMacaroon rc)+ (rawConfigLndHost rc)+ (rawConfigLndPort rc)+ (rawConfigLndCipherSeedMnemonic rc)+ (rawConfigLndAezeedPassphrase rc)+ withObject+ "LndEnv"+ ( \obj ->+ (\x y -> res {envLndSyncGrpcTimeout = x, envLndAsyncGrpcTimeout = y})+ <$> obj .:? "lnd_sync_grpc_timeout_seconds"+ <*> obj .:? "lnd_async_grpc_timeout_seconds"+ )+ arg++createLndTlsCert :: ByteString -> Either LndError LndTlsCert+createLndTlsCert bs = do+ pemsM <- first (LndEnvError . pack) $ Pem.pemParseBS bs+ pem <-+ note (LndEnvError $ pack "No pem found") $ safeHead pemsM+ bimap+ (LndEnvError . pack . ("Certificate is not valid: " <>))+ (const $ LndTlsCert bs)+ (decodeSignedCertificate $ Pem.pemContent pem)++unLndTlsCert :: LndTlsCert -> ByteString+unLndTlsCert = coerce++createLndPort :: Word32 -> Either LndError LndPort+createLndPort p = do+ let maybePort :: Maybe Int = U.safeFromIntegral p+ maybeToRight (LndEnvError "Wrong port") $ LndPort <$> maybePort++readLndEnv :: IO LndEnv+readLndEnv =+ parse+ (header "LndEnv")+ $ var+ (parser <=< nonempty)+ "LND_CLIENT_ENV_DATA"+ (keep <> help "")+ where+ parser :: String -> Either Error LndEnv+ parser x =+ first UnreadError $ eitherDecodeStrict $ C8.pack x++newLndEnv ::+ LndWalletPassword ->+ LndTlsCert ->+ LndHexMacaroon ->+ LndHost ->+ LndPort ->+ Maybe CipherSeedMnemonic ->+ Maybe AezeedPassphrase ->+ LndEnv+newLndEnv pwd _cert mac host port seed aezeed =+ LndEnv+ { envLndWalletPassword = pwd,+ envLndHexMacaroon = mac,+ envLndLogStrategy = logDefault,+ envLndCipherSeedMnemonic = seed,+ envLndAezeedPassphrase = aezeed,+ envLndSyncGrpcTimeout = Nothing,+ envLndAsyncGrpcTimeout = Nothing,+ envLndConfig =+ (grpcClientConfigSimple (unpack $ coerce host) (fromInteger (toInteger (coerce port :: Int))) True)+ { _grpcClientConfigCompression = uncompressed,+ _grpcClientConfigHeaders = [("macaroon", encodeUtf8 (coerce mac :: Text))]+ }+ }++katipAddLndContext :: (KatipContext m) => LndEnv -> m a -> m a+katipAddLndContext env =+ katipAddContext (sl "LndHost:" h)+ . katipAddContext (sl "LndPort" p)+ where+ h = _grpcClientConfigHost $ envLndConfig env+ p = toInteger $ _grpcClientConfigPort $ envLndConfig env++newSeverity :: LndEnv -> Severity -> Maybe Timespan -> Maybe LndError -> Severity+newSeverity = coerce . envLndLogStrategy++newSev :: LndEnv -> Severity -> Severity+newSev env sev = newSeverity env sev Nothing Nothing
+ src/LndClient/Data/NewAddress.hs view
@@ -0,0 +1,57 @@+{-# LANGUAGE FlexibleContexts #-}++module LndClient.Data.NewAddress+ ( NewAddressResponse (..),+ NewAddressRequest (..),+ AddressType (..),+ )+where++import Data.ProtoLens.Message+import Data.Text (pack)+import LndClient.Import+import qualified Proto.LndGrpc as LnGRPC+import qualified Proto.LndGrpc_Fields as LnGRPC++data NewAddressRequest+ = NewAddressRequest+ { addrType :: AddressType,+ account :: Maybe String+ }+ deriving (Show, Eq)++data AddressType+ = WITNESS_PUBKEY_HASH+ | NESTED_PUBKEY_HASH+ | UNUSED_WITNESS_PUBKEY_HASH+ | UNUSED_NESTED_PUBKEY_HASH+ deriving (Show, Eq)++newtype NewAddressResponse+ = NewAddressResponse+ { address :: Text+ }+ deriving (Show, Eq)++instance ToGrpc NewAddressRequest LnGRPC.NewAddressRequest where+ toGrpc x =+ msg+ <$> toGrpc (addrType x)+ <*> toGrpc (pack <$> account x)+ where+ msg gAddrType gAccount =+ defMessage+ & LnGRPC.type' .~ gAddrType+ & LnGRPC.account .~ gAccount++instance ToGrpc AddressType LnGRPC.AddressType where+ toGrpc x =+ Right $ case x of+ WITNESS_PUBKEY_HASH -> LnGRPC.WITNESS_PUBKEY_HASH+ NESTED_PUBKEY_HASH -> LnGRPC.NESTED_PUBKEY_HASH+ UNUSED_WITNESS_PUBKEY_HASH -> LnGRPC.UNUSED_WITNESS_PUBKEY_HASH+ UNUSED_NESTED_PUBKEY_HASH -> LnGRPC.UNUSED_NESTED_PUBKEY_HASH++instance FromGrpc NewAddressResponse LnGRPC.NewAddressResponse where+ fromGrpc x =+ NewAddressResponse <$> Right (x ^. LnGRPC.address)
+ src/LndClient/Data/Newtype.hs view
@@ -0,0 +1,289 @@+{-# LANGUAGE DerivingStrategies #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}++module LndClient.Data.Newtype+ ( AddIndex (..),+ SettleIndex (..),+ PaymentRequest (..),+ RHash (..),+ RPreimage (..),+ MSat (..),+ Sat (..),+ toSat,+ toMSat,+ CipherSeedMnemonic (..),+ AezeedPassphrase (..),+ Seconds (..),+ NodePubKey (..),+ NodeLocation (..),+ GrpcTimeoutSeconds,+ newRHash,+ newRPreimage,+ newGrpcTimeout,+ unGrpcTimeout,+ defaultSyncGrpcTimeout,+ defaultAsyncGrpcTimeout,+ TxId (..),+ Vout (..),+ )+where++import Codec.QRCode as QR (ToText)+import qualified Crypto.Hash.SHA256 as SHA256 (hash)+import Crypto.Random (getRandomBytes)+import Data.Aeson (FromJSON (..))+import Data.ByteString.Base16 as B16 (decode, encode)+import Data.ByteString.Char8 as C8+import Data.ProtoLens.Message+import LndClient.Class+import LndClient.Data.Kind+import LndClient.Data.Type+import LndClient.Import.External+import LndClient.Util+import qualified Proto.InvoiceGrpc as IGrpc+import qualified Proto.InvoiceGrpc_Fields as IGrpc+import qualified Proto.LndGrpc as LnGrpc+import qualified Proto.LndGrpc_Fields as LnGrpc+import Prelude (Show)++newtype Vout (a :: TxKind) = Vout Word32+ deriving newtype (PersistField, PersistFieldSql, Eq, Ord, Show, Read)++newtype TxId (a :: TxKind) = TxId ByteString+ deriving (PersistField, PersistFieldSql, Eq, Ord, Show)++newtype NodePubKey = NodePubKey ByteString+ deriving (PersistField, PersistFieldSql, Eq, Ord, Show, Read)++newtype NodeLocation = NodeLocation Text+ deriving (PersistField, PersistFieldSql, Eq, Ord, Show, Read)++newtype AddIndex = AddIndex Word64+ deriving (PersistField, PersistFieldSql, Eq, Ord, Show)++newtype SettleIndex = SettleIndex Word64+ deriving (PersistField, PersistFieldSql, Eq, Ord, Show)++newtype PaymentRequest = PaymentRequest Text+ deriving (PersistField, PersistFieldSql, Eq, QR.ToText, Show)++newtype RHash = RHash ByteString+ deriving (PersistField, PersistFieldSql, Eq, Ord, Show)++newtype RPreimage = RPreimage ByteString+ deriving (PersistField, PersistFieldSql, Eq, Ord, Show)++newtype MSat = MSat Word64+ deriving+ ( PersistField,+ PersistFieldSql,+ Eq,+ Num,+ Ord,+ FromJSON,+ Show+ )++newtype Sat = Sat Word64+ deriving+ (Eq, Num, Ord, FromJSON, Show)++newtype CipherSeedMnemonic = CipherSeedMnemonic [Text]+ deriving (PersistField, PersistFieldSql, Eq, FromJSON, Show)++newtype AezeedPassphrase = AezeedPassphrase Text+ deriving (PersistField, PersistFieldSql, Eq, FromJSON, Show)++newtype Seconds = Seconds Word64+ deriving (PersistField, PersistFieldSql, Eq, FromJSON, Show)++newtype GrpcTimeoutSeconds = GrpcTimeoutSeconds Int+ deriving (Eq, Ord, FromJSON, Show)++instance ToGrpc NodePubKey ByteString where+ toGrpc = Right . coerce++instance ToGrpc NodePubKey Text where+ toGrpc =+ first (const $ ToGrpcError "UTF8_DECODE_ERROR")+ . decodeUtf8'+ . B16.encode+ . coerce++instance ToGrpc NodeLocation Text where+ toGrpc = Right . coerce++--+-- TODO : smart constructors for NodePubKey and NodeLocation ???+--++instance FromGrpc (TxId a) ByteString where+ fromGrpc = Right . TxId++instance FromGrpc (TxId a) Text where+ fromGrpc = (TxId <$>) . txIdParser++instance FromGrpc (Vout a) Word32 where+ fromGrpc = Right . Vout++instance FromGrpc NodePubKey ByteString where+ fromGrpc = Right . NodePubKey++instance FromGrpc NodePubKey Text where+ fromGrpc =+ bimap (const $ FromGrpcError "NodePubKey hex decoding error") NodePubKey . B16.decode . encodeUtf8++instance FromGrpc NodeLocation Text where+ fromGrpc = Right . NodeLocation++instance ToGrpc (TxId a) ByteString where+ toGrpc = Right . coerce++instance ToGrpc (Vout a) Word32 where+ toGrpc = Right . coerce++instance ToGrpc AddIndex Word64 where+ toGrpc = Right . coerce++instance ToGrpc SettleIndex Word64 where+ toGrpc = Right . coerce++instance ToGrpc MSat Int64 where+ toGrpc x =+ maybeToRight+ (ToGrpcError "MSat overflow")+ $ safeFromIntegral (coerce x :: Word64)++instance FromGrpc MSat Int64 where+ fromGrpc x =+ maybeToRight+ (ToGrpcError "MSat overflow")+ $ MSat <$> safeFromIntegral x++instance FromGrpc MSat Word64 where+ fromGrpc x =+ maybeToRight+ (ToGrpcError "MSat overflow")+ $ MSat <$> safeFromIntegral x++instance ToGrpc Sat Int64 where+ toGrpc x =+ maybeToRight+ (ToGrpcError "Sat overflow")+ $ safeFromIntegral (coerce x :: Word64)++instance FromGrpc Sat Int64 where+ fromGrpc x =+ maybeToRight+ (ToGrpcError "Sat overflow")+ $ Sat <$> safeFromIntegral x++instance FromGrpc RHash ByteString where+ fromGrpc = Right . RHash++instance FromGrpc RPreimage ByteString where+ fromGrpc = Right . RPreimage++instance FromGrpc AddIndex Word64 where+ fromGrpc = Right . AddIndex++instance FromGrpc SettleIndex Word64 where+ fromGrpc = Right . SettleIndex++instance FromGrpc PaymentRequest Text where+ fromGrpc = Right . PaymentRequest++instance FromGrpc PaymentRequest IGrpc.AddHoldInvoiceResp where+ fromGrpc x = fromGrpc (x ^. IGrpc.paymentRequest)++instance FromGrpc Seconds Int64 where+ fromGrpc =+ (Seconds <$>)+ . maybeToRight (FromGrpcError "Seconds overflow")+ . safeFromIntegral++instance FromGrpc RHash Text where+ fromGrpc x0 =+ case B16.decode $ encodeUtf8 x0 of+ Right x1 -> Right $ RHash x1+ Left {} -> Left $ FromGrpcError "NON_HEX_RHASH"++instance FromGrpc RPreimage Text where+ fromGrpc x0 =+ case B16.decode $ encodeUtf8 x0 of+ Right x1 -> Right $ RPreimage x1+ Left {} -> Left $ FromGrpcError "NON_HEX_RPREIMAGE"++instance ToGrpc PaymentRequest Text where+ toGrpc x = Right (coerce x :: Text)++instance ToGrpc Seconds Int64 where+ toGrpc x =+ maybeToRight+ (ToGrpcError "Seconds overflow")+ $ safeFromIntegral (coerce x :: Word64)++instance ToGrpc CipherSeedMnemonic [Text] where+ toGrpc = Right . coerce++instance ToGrpc AezeedPassphrase ByteString where+ toGrpc x = Right $ encodeUtf8 (coerce x :: Text)++instance ToGrpc RHash ByteString where+ toGrpc = Right . coerce++instance ToGrpc RHash IGrpc.CancelInvoiceMsg where+ toGrpc x = do+ ph <- toGrpc x+ Right $ defMessage & IGrpc.paymentHash .~ ph++instance ToGrpc RPreimage ByteString where+ toGrpc = Right . coerce++instance ToGrpc RPreimage IGrpc.SettleInvoiceMsg where+ toGrpc x = do+ p <- toGrpc x+ Right $ defMessage & IGrpc.preimage .~ p++instance ToGrpc PaymentRequest LnGrpc.PayReqString where+ toGrpc x = Right $ defMessage & LnGrpc.payReq .~ coerce x++instance ToGrpc RHash LnGrpc.PaymentHash where+ toGrpc x = Right $ defMessage & LnGrpc.rHash .~ coerce x++instance ToGrpc RHash IGrpc.SubscribeSingleInvoiceRequest where+ toGrpc x = do+ rh <- toGrpc x+ Right $ defMessage & IGrpc.rHash .~ rh++newRHash :: RPreimage -> RHash+newRHash = RHash . SHA256.hash . coerce++newRPreimage :: MonadIO m => m RPreimage+newRPreimage = RPreimage <$> liftIO (getRandomBytes 32)++newGrpcTimeout :: Int -> Maybe GrpcTimeoutSeconds+newGrpcTimeout x =+ if x > 0+ then Just $ GrpcTimeoutSeconds x+ else Nothing++unGrpcTimeout :: GrpcTimeoutSeconds -> Int+unGrpcTimeout = coerce++defaultSyncGrpcTimeout :: GrpcTimeoutSeconds+defaultSyncGrpcTimeout = GrpcTimeoutSeconds 60++defaultAsyncGrpcTimeout :: GrpcTimeoutSeconds+defaultAsyncGrpcTimeout = GrpcTimeoutSeconds 3600++toSat :: MSat -> Either LndError Sat+toSat mSat = do+ let mVal :: Word64 = coerce mSat+ case divMod mVal 1000 of+ (val, 0) -> Right $ Sat val+ _ -> Left $ ToGrpcError ("Cannot convert " <> show mVal <> " to Sat")++toMSat :: Sat -> MSat+toMSat sat = MSat $ 1000 * coerce sat
+ src/LndClient/Data/OpenChannel.hs view
@@ -0,0 +1,108 @@+{-# LANGUAGE FlexibleContexts #-}++module LndClient.Data.OpenChannel+ ( OpenChannelRequest (..),+ OpenStatusUpdate (..),+ )+where++import Data.ProtoLens.Message+import LndClient.Data.Channel+import LndClient.Data.ChannelPoint+import LndClient.Import+import qualified Proto.LndGrpc as LnGRPC+import qualified Proto.LndGrpc_Fields as LnGRPC++data OpenChannelRequest+ = OpenChannelRequest+ { nodePubkey :: NodePubKey,+ localFundingAmount :: MSat,+ pushSat :: Maybe MSat,+ targetConf :: Maybe Int32,+ satPerByte :: Maybe MSat,+ private :: Maybe Bool,+ minHtlcMsat :: Maybe MSat,+ remoteCsvDelay :: Maybe Word32,+ minConfs :: Maybe Int32,+ spendUnconfirmed :: Maybe Bool,+ closeAddress :: Maybe Text+ }+ deriving (Eq, Show)++data OpenStatusUpdate+ = OpenStatusUpdate+ { pendingChanId :: ByteString,+ update :: Maybe OpenStatusUpdate'+ }+ deriving (Eq, Show)++data OpenStatusUpdate'+ = OpenStatusUpdateChanPending (PendingUpdate 'Funding)+ | OpenStatusUpdateChanOpen ChannelOpenUpdate+ | OpenStatusUpdatePsbtFund ReadyForPsbtFunding+ deriving (Eq, Show)++newtype ChannelOpenUpdate = ChannelOpenUpdate ChannelPoint+ deriving (Eq, Show)++data ReadyForPsbtFunding+ = ReadyForPsbtFunding+ { fundingAddress :: Text,+ fundingAmount :: MSat,+ psbt :: ByteString+ }+ deriving (Eq, Show)++instance FromGrpc OpenStatusUpdate LnGRPC.OpenStatusUpdate where+ fromGrpc x =+ OpenStatusUpdate+ <$> fromGrpc (x ^. LnGRPC.pendingChanId)+ <*> case x ^. LnGRPC.maybe'update of+ Just upd -> Just <$> fromGrpc upd+ Nothing -> Right Nothing++instance FromGrpc OpenStatusUpdate' LnGRPC.OpenStatusUpdate'Update where+ fromGrpc x =+ case x of+ LnGRPC.OpenStatusUpdate'ChanPending pu -> OpenStatusUpdateChanPending <$> fromGrpc pu+ LnGRPC.OpenStatusUpdate'ChanOpen cou -> OpenStatusUpdateChanOpen <$> fromGrpc cou+ LnGRPC.OpenStatusUpdate'PsbtFund pf -> OpenStatusUpdatePsbtFund <$> fromGrpc pf++instance FromGrpc ChannelOpenUpdate LnGRPC.ChannelOpenUpdate where+ fromGrpc x = ChannelOpenUpdate <$> fromGrpc (x ^. LnGRPC.channelPoint)++instance FromGrpc ReadyForPsbtFunding LnGRPC.ReadyForPsbtFunding where+ fromGrpc x =+ ReadyForPsbtFunding+ <$> fromGrpc (x ^. LnGRPC.fundingAddress)+ <*> fromGrpc (x ^. LnGRPC.fundingAmount)+ <*> fromGrpc (x ^. LnGRPC.psbt)++instance ToGrpc OpenChannelRequest LnGRPC.OpenChannelRequest where+ toGrpc x =+ msg+ <$> toGrpc (nodePubkey x)+ <*> (toGrpc =<< toSat (localFundingAmount x))+ <*> maybe (Right fieldDefault) (toGrpc <=< toSat) (pushSat x)+ <*> toGrpc (targetConf x)+ <*> maybe (Right fieldDefault) (toGrpc <=< toSat) (satPerByte x)+ <*> toGrpc (private x)+ <*> toGrpc (minHtlcMsat x)+ <*> toGrpc (remoteCsvDelay x)+ <*> toGrpc (minConfs x)+ <*> toGrpc (spendUnconfirmed x)+ <*> toGrpc (closeAddress x)+ where+ msg gNodePubKey gLocalFindingAmount gPushSat gTargetConf gSatPerByte gPrivate gMinHtlcMsat gRemoteCsvDelay gMinConfs gSpendUnconfirmed gCloseAddress =+ defMessage+ & LnGRPC.nodePubkey .~ gNodePubKey+ & LnGRPC.localFundingAmount .~ gLocalFindingAmount+ & LnGRPC.pushSat .~ gPushSat+ & LnGRPC.targetConf .~ gTargetConf+ & LnGRPC.satPerByte .~ gSatPerByte+ & LnGRPC.private .~ gPrivate+ & LnGRPC.minHtlcMsat .~ gMinHtlcMsat+ & LnGRPC.remoteCsvDelay .~ gRemoteCsvDelay+ & LnGRPC.minConfs .~ gMinConfs+ & LnGRPC.spendUnconfirmed .~ gSpendUnconfirmed+ & LnGRPC.closeAddress .~ gCloseAddress
+ src/LndClient/Data/PayReq.hs view
@@ -0,0 +1,23 @@+module LndClient.Data.PayReq+ ( PayReq (..),+ )+where++import LndClient.Import+import qualified Proto.LndGrpc as LnGRPC+import qualified Proto.LndGrpc_Fields as LnGRPC++data PayReq+ = PayReq+ { paymentHash :: RHash,+ numMsat :: MSat,+ expiry :: Seconds+ }+ deriving (Eq, Show)++instance FromGrpc PayReq LnGRPC.PayReq where+ fromGrpc x =+ PayReq+ <$> fromGrpc (x ^. LnGRPC.paymentHash)+ <*> fromGrpc (x ^. LnGRPC.numMsat)+ <*> fromGrpc (x ^. LnGRPC.expiry)
+ src/LndClient/Data/Payment.hs view
@@ -0,0 +1,41 @@+module LndClient.Data.Payment+ ( Payment (..),+ )+where++import LndClient.Import+import qualified Proto.LndGrpc as LnGRPC+import qualified Proto.LndGrpc_Fields as LnGRPC++data Payment+ = Payment+ { paymentHash :: RHash,+ paymentPreimage :: RPreimage,+ valueMsat :: MSat,+ state :: PaymentStatus+ }+ deriving (Eq, Show)++data PaymentStatus+ = UNKNOWN+ | IN_FLIGHT+ | SUCCEEDED+ | FAILED+ deriving (Eq, Show)++instance FromGrpc Payment LnGRPC.Payment where+ fromGrpc x =+ Payment+ <$> fromGrpc (x ^. LnGRPC.paymentHash)+ <*> fromGrpc (x ^. LnGRPC.paymentPreimage)+ <*> fromGrpc (x ^. LnGRPC.valueMsat)+ <*> fromGrpc (x ^. LnGRPC.status)++instance FromGrpc PaymentStatus LnGRPC.Payment'PaymentStatus where+ fromGrpc x =+ case x of+ LnGRPC.Payment'UNKNOWN -> Right UNKNOWN+ LnGRPC.Payment'IN_FLIGHT -> Right IN_FLIGHT+ LnGRPC.Payment'SUCCEEDED -> Right SUCCEEDED+ LnGRPC.Payment'FAILED -> Right FAILED+ LnGRPC.Payment'PaymentStatus'Unrecognized v -> Left $ FromGrpcError ("Cannot parse PaymentStatus, value:" <> show v)
+ src/LndClient/Data/Peer.hs view
@@ -0,0 +1,66 @@+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}++module LndClient.Data.Peer+ ( Peer (..),+ LightningAddress (..),+ ConnectPeerRequest (..),+ )+where++import Data.ProtoLens.Message+import LndClient.Import+import qualified Proto.LndGrpc as LnGRPC+import qualified Proto.LndGrpc_Fields as LnGRPC++data Peer+ = Peer+ { pubKey :: NodePubKey,+ address :: NodeLocation+ }+ deriving (Eq, Show)++instance FromGrpc Peer LnGRPC.Peer where+ fromGrpc x =+ Peer+ <$> fromGrpc (x ^. LnGRPC.pubKey)+ <*> fromGrpc (x ^. LnGRPC.address)++data LightningAddress+ = LightningAddress+ { pubkey :: NodePubKey,+ host :: NodeLocation+ }+ deriving (Eq, Show, Read)++instance ToGrpc LightningAddress LnGRPC.LightningAddress where+ toGrpc x =+ msg+ <$> toGrpc (pubkey x)+ <*> toGrpc (host x)+ where+ msg gPubkey gHost =+ defMessage+ & LnGRPC.pubkey .~ gPubkey+ & LnGRPC.host .~ gHost++data ConnectPeerRequest+ = ConnectPeerRequest+ { addr :: LightningAddress,+ perm :: Bool+ }+ deriving (Eq, Show)++instance ToGrpc ConnectPeerRequest LnGRPC.ConnectPeerRequest where+ toGrpc x =+ msg+ <$> toGrpc (addr x)+ <*> toGrpc (perm x)+ where+ msg gAddr gPerm =+ defMessage+ & LnGRPC.addr .~ gAddr+ & LnGRPC.perm .~ gPerm++instance FromGrpc [Peer] LnGRPC.ListPeersResponse where+ fromGrpc x = sequence $ fromGrpc <$> (x ^. LnGRPC.peers)
+ src/LndClient/Data/PendingChannel.hs view
@@ -0,0 +1,50 @@+module LndClient.Data.PendingChannel+ ( PendingChannel (..),+ )+where++import LndClient.Data.ChannelPoint+import LndClient.Import+import qualified Proto.LndGrpc as LnGRPC+import qualified Proto.LndGrpc_Fields as LnGRPC++data PendingChannel+ = PendingChannel+ { remoteNodePub :: NodePubKey,+ channelPoint :: ChannelPoint,+ capacity :: MSat,+ localBalance :: MSat,+ remoteBalance :: MSat,+ localChanReserveSat :: MSat,+ remoteChanReserveSat :: MSat+ }+ deriving (Eq, Show)++instance+ FromGrpc+ PendingChannel+ LnGRPC.PendingChannelsResponse'PendingChannel+ where+ fromGrpc x =+ PendingChannel+ <$> fromGrpc+ (x ^. LnGRPC.remoteNodePub)+ <*> channelPointParser+ (x ^. LnGRPC.channelPoint)+ <*> (toMSat <$> fromGrpc (x ^. LnGRPC.capacity))+ <*> ( toMSat+ <$> fromGrpc+ (x ^. LnGRPC.localBalance)+ )+ <*> ( toMSat+ <$> fromGrpc+ (x ^. LnGRPC.remoteBalance)+ )+ <*> ( toMSat+ <$> fromGrpc+ (x ^. LnGRPC.localChanReserveSat)+ )+ <*> ( toMSat+ <$> fromGrpc+ (x ^. LnGRPC.remoteChanReserveSat)+ )
+ src/LndClient/Data/PendingChannels.hs view
@@ -0,0 +1,40 @@+{-# LANGUAGE FlexibleInstances #-}++module LndClient.Data.PendingChannels+ ( PendingChannelsResponse (..),+ )+where++import LndClient.Data.ClosedChannel+import LndClient.Data.ForceClosedChannel+import LndClient.Data.PendingOpenChannel+import LndClient.Data.WaitingCloseChannel+import LndClient.Import+import qualified Proto.LndGrpc as LnGRPC+import qualified Proto.LndGrpc_Fields as LnGRPC++data PendingChannelsResponse+ = PendingChannelsResponse+ { totalLimboBalance :: MSat,+ pendingOpenChannels :: [PendingOpenChannel],+ pendingClosingChannels :: [ClosedChannel],+ pendingForceClosingChannels :: [ForceClosedChannel],+ waitingCloseChannels :: [WaitingCloseChannel]+ }+ deriving (Eq, Show)++instance FromGrpc PendingChannelsResponse LnGRPC.PendingChannelsResponse where+ fromGrpc x =+ PendingChannelsResponse+ <$> ( toMSat+ <$> fromGrpc+ (x ^. LnGRPC.totalLimboBalance)+ )+ <*> fromGrpc+ (x ^. LnGRPC.pendingOpenChannels)+ <*> fromGrpc+ (x ^. LnGRPC.pendingClosingChannels)+ <*> fromGrpc+ (x ^. LnGRPC.pendingForceClosingChannels)+ <*> fromGrpc+ (x ^. LnGRPC.waitingCloseChannels)
+ src/LndClient/Data/PendingOpenChannel.hs view
@@ -0,0 +1,41 @@+module LndClient.Data.PendingOpenChannel+ ( PendingOpenChannel (..),+ )+where++import LndClient.Data.PendingChannel+import LndClient.Import+import qualified Proto.LndGrpc as LnGRPC+import qualified Proto.LndGrpc_Fields as LnGRPC++data PendingOpenChannel+ = PendingOpenChannel+ { channel :: PendingChannel,+ confirmationHeight :: Word32,+ commitFee :: MSat,+ commitWeight :: Int64,+ feePerKw :: MSat+ }+ deriving (Eq, Show)++instance+ FromGrpc+ PendingOpenChannel+ LnGRPC.PendingChannelsResponse'PendingOpenChannel+ where+ fromGrpc x =+ PendingOpenChannel+ <$> fromGrpc+ (x ^. LnGRPC.channel)+ <*> fromGrpc+ (x ^. LnGRPC.confirmationHeight)+ <*> ( toMSat+ <$> fromGrpc+ (x ^. LnGRPC.commitFee)+ )+ <*> fromGrpc+ (x ^. LnGRPC.commitWeight)+ <*> ( toMSat+ <$> fromGrpc+ (x ^. LnGRPC.feePerKw)+ )
+ src/LndClient/Data/SendPayment.hs view
@@ -0,0 +1,52 @@+{-# LANGUAGE FlexibleContexts #-}++module LndClient.Data.SendPayment+ ( SendPaymentRequest (..),+ SendPaymentResponse (..),+ )+where++import Data.ProtoLens.Message+import LndClient.Import+import qualified Proto.LndGrpc as LnGRPC+import qualified Proto.LndGrpc_Fields as LnGRPC++data SendPaymentRequest+ = SendPaymentRequest+ { paymentRequest :: PaymentRequest,+ amt :: MSat+ }+ deriving (Eq, Show)++data SendPaymentResponse+ = SendPaymentResponse+ { paymentError :: Text,+ paymentPreimage :: RPreimage,+ paymentHash :: RHash+ }+ deriving (Eq, Show)++instance ToGrpc SendPaymentRequest LnGRPC.SendRequest where+ toGrpc x =+ msg+ <$> toGrpc (amt x)+ <*> toGrpc (paymentRequest x)+ where+ msg gAmt gPaymentRequest =+ defMessage+ & LnGRPC.amtMsat .~ gAmt+ & LnGRPC.paymentRequest .~ gPaymentRequest++instance FromGrpc SendPaymentResponse LnGRPC.SendResponse where+ fromGrpc x = do+ res <-+ SendPaymentResponse+ <$> fromGrpc (x ^. LnGRPC.paymentError)+ <*> fromGrpc (x ^. LnGRPC.paymentPreimage)+ <*> fromGrpc (x ^. LnGRPC.paymentHash)+ if newRHash (paymentPreimage res) == paymentHash res+ then Right res+ else+ Left . LndError $+ "paymentPreimage doesn't match paymentHash, error: "+ <> paymentError res
+ src/LndClient/Data/SubscribeChannelEvents.hs view
@@ -0,0 +1,66 @@+{-# LANGUAGE FlexibleInstances #-}++module LndClient.Data.SubscribeChannelEvents+ ( ChannelEventUpdate (..),+ UpdateChannel (..),+ )+where++import Data.Either.Extra (maybeToEither)+import LndClient.Data.Channel+import LndClient.Data.ChannelPoint+import LndClient.Data.CloseChannel+import LndClient.Import+import qualified Proto.LndGrpc as LnGRPC+import qualified Proto.LndGrpc_Fields as LnGRPC++data ChannelEventUpdate+ = ChannelEventUpdate+ { channelEvent :: UpdateChannel,+ eventType :: UpdateType+ }+ deriving (Eq, Ord, Show)++data UpdateChannel+ = ChannelEventUpdateChannelOpenChannel Channel+ | ChannelEventUpdateChannelClosedChannel ChannelCloseSummary+ | ChannelEventUpdateChannelActiveChannel ChannelPoint+ | ChannelEventUpdateChannelInactiveChannel ChannelPoint+ | ChannelEventUpdateChannelPendingOpenChannel (PendingUpdate 'Funding)+ deriving (Eq, Ord, Show)++data UpdateType+ = OPEN_CHANNEL+ | CLOSED_CHANNEL+ | ACTIVE_CHANNEL+ | INACTIVE_CHANNEL+ | PENDING_OPEN_CHANNEL+ deriving (Eq, Ord, Show)++instance FromGrpc UpdateType LnGRPC.ChannelEventUpdate'UpdateType where+ fromGrpc x = case x of+ LnGRPC.ChannelEventUpdate'OPEN_CHANNEL -> Right OPEN_CHANNEL+ LnGRPC.ChannelEventUpdate'ACTIVE_CHANNEL -> Right ACTIVE_CHANNEL+ LnGRPC.ChannelEventUpdate'INACTIVE_CHANNEL -> Right INACTIVE_CHANNEL+ LnGRPC.ChannelEventUpdate'PENDING_OPEN_CHANNEL -> Right PENDING_OPEN_CHANNEL+ LnGRPC.ChannelEventUpdate'CLOSED_CHANNEL -> Right CLOSED_CHANNEL+ LnGRPC.ChannelEventUpdate'UpdateType'Unrecognized v -> Left $ FromGrpcError ("Cannot parse ChannelUpdateType, value:" <> show v)++instance FromGrpc UpdateChannel LnGRPC.ChannelEventUpdate'Channel where+ fromGrpc x = case x of+ LnGRPC.ChannelEventUpdate'OpenChannel c -> ChannelEventUpdateChannelOpenChannel <$> fromGrpc c+ LnGRPC.ChannelEventUpdate'ActiveChannel cp -> ChannelEventUpdateChannelActiveChannel <$> fromGrpc cp+ LnGRPC.ChannelEventUpdate'InactiveChannel cp -> ChannelEventUpdateChannelActiveChannel <$> fromGrpc cp+ LnGRPC.ChannelEventUpdate'PendingOpenChannel pa -> ChannelEventUpdateChannelPendingOpenChannel <$> fromGrpc pa+ LnGRPC.ChannelEventUpdate'ClosedChannel cc -> ChannelEventUpdateChannelClosedChannel <$> fromGrpc cc++instance FromGrpc ChannelEventUpdate LnGRPC.ChannelEventUpdate where+ fromGrpc x =+ ChannelEventUpdate+ <$> join+ ( fromGrpc+ <$> maybeToEither+ (FromGrpcError "Empty channelUpdate")+ (x ^. LnGRPC.maybe'channel)+ )+ <*> fromGrpc (x ^. LnGRPC.type')
+ src/LndClient/Data/SubscribeInvoices.hs view
@@ -0,0 +1,29 @@+{-# LANGUAGE FlexibleContexts #-}++module LndClient.Data.SubscribeInvoices+ ( SubscribeInvoicesRequest (..),+ )+where++import Data.ProtoLens.Message+import LndClient.Import+import qualified Proto.LndGrpc as LnGRPC+import qualified Proto.LndGrpc_Fields as LnGRPC++data SubscribeInvoicesRequest+ = SubscribeInvoicesRequest+ { addIndex :: Maybe AddIndex,+ settleIndex :: Maybe SettleIndex+ }+ deriving (Eq, Ord, Show)++instance ToGrpc SubscribeInvoicesRequest LnGRPC.InvoiceSubscription where+ toGrpc x =+ msg+ <$> toGrpc (addIndex x)+ <*> toGrpc (settleIndex x)+ where+ msg gAddIndex gSettleIndex =+ defMessage+ & LnGRPC.addIndex .~ gAddIndex+ & LnGRPC.settleIndex .~ gSettleIndex
+ src/LndClient/Data/TrackPayment.hs view
@@ -0,0 +1,29 @@+{-# LANGUAGE FlexibleContexts #-}++module LndClient.Data.TrackPayment+ ( TrackPaymentRequest (..),+ )+where++import Data.ProtoLens.Message+import LndClient.Import+import qualified Proto.RouterGrpc as LnGRPC+import qualified Proto.RouterGrpc_Fields as LnGRPC++data TrackPaymentRequest+ = TrackPaymentRequest+ { paymentHash :: RHash,+ noInflightUpdates :: Bool+ }+ deriving (Eq, Ord, Show)++instance ToGrpc TrackPaymentRequest LnGRPC.TrackPaymentRequest where+ toGrpc x =+ msg+ <$> toGrpc (paymentHash x)+ <*> toGrpc (noInflightUpdates x)+ where+ msg x0 x1 =+ defMessage+ & LnGRPC.paymentHash .~ x0+ & LnGRPC.noInflightUpdates .~ x1
+ src/LndClient/Data/Type.hs view
@@ -0,0 +1,40 @@+{-# LANGUAGE DeriveLift #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}++module LndClient.Data.Type+ ( LndError (..),+ LoggingStrategy (..),+ logDefault,+ logDebug,+ )+where++import Chronos (Timespan)+import Control.Exception (Exception)+import LndClient.Import.External+import Network.HTTP2.Client.Exceptions as E++data LndError+ = ToGrpcError Text+ | FromGrpcError Text+ | LndGrpcError E.ClientError+ | GrpcUnexpectedResult Text+ | GrpcEmptyResult+ | LndError Text+ | LndEnvError Text+ | TChanTimeout Text+ deriving (Eq, Show)++newtype LoggingStrategy+ = LoggingStrategy+ (Severity -> Maybe Timespan -> Maybe LndError -> Severity)++logDefault :: LoggingStrategy+logDefault =+ LoggingStrategy $ \x _ _ -> x++logDebug :: LoggingStrategy+logDebug =+ LoggingStrategy $ \_ _ _ -> DebugS++instance Exception LndError
+ src/LndClient/Data/UnlockWallet.hs view
@@ -0,0 +1,35 @@+module LndClient.Data.UnlockWallet+ ( UnlockWalletRequest (..),+ )+where++import Data.ProtoLens.Message+import LndClient.Import+import qualified Proto.WalletUnlockerGrpc as LnGRPC+import qualified Proto.WalletUnlockerGrpc_Fields as LnGRPC+import Prelude (Show (..))++data UnlockWalletRequest+ = UnlockWalletRequest+ { walletPassword :: LndWalletPassword,+ recoveryWindow :: Int32+ --+ -- TODO : channel_backups+ --+ }+ deriving (Eq)++instance Show UnlockWalletRequest where+ show = const "SECRET"++instance ToGrpc UnlockWalletRequest LnGRPC.UnlockWalletRequest where+ toGrpc x =+ msg+ <$> toGrpc (walletPassword x)+ <*> toGrpc (recoveryWindow x)+ where+ msg :: ByteString -> Int32 -> LnGRPC.UnlockWalletRequest+ msg gWalletPassword gRecoveryWindow =+ defMessage+ & LnGRPC.walletPassword .~ gWalletPassword+ & LnGRPC.recoveryWindow .~ gRecoveryWindow
+ src/LndClient/Data/WaitingCloseChannel.hs view
@@ -0,0 +1,37 @@+module LndClient.Data.WaitingCloseChannel+ ( WaitingCloseChannel (..),+ )+where++import LndClient.Data.PendingChannel+import LndClient.Import+import qualified Proto.LndGrpc as LnGRPC+import qualified Proto.LndGrpc_Fields as LnGRPC++data WaitingCloseChannel+ = WaitingCloseChannel+ { channel :: PendingChannel,+ limboBalance :: MSat+ }+ deriving (Eq, Show)++instance+ FromGrpc+ WaitingCloseChannel+ LnGRPC.PendingChannelsResponse'WaitingCloseChannel+ where+ fromGrpc x =+ WaitingCloseChannel+ <$> ( case pendingChannel of+ Nothing ->+ Left $ FromGrpcError "PendingChannel is required"+ Just this ->+ fromGrpc this+ )+ <*> ( toMSat+ <$> fromGrpc+ (x ^. LnGRPC.limboBalance)+ )+ where+ pendingChannel =+ x ^. LnGRPC.maybe'channel
+ src/LndClient/Import.hs view
@@ -0,0 +1,9 @@+module LndClient.Import (module Import) where++import LndClient.Class as Import+import LndClient.Data.Kind as Import+import LndClient.Data.LndEnv as Import+import LndClient.Data.Newtype as Import+import LndClient.Data.Type as Import+import LndClient.Import.External as Import+import LndClient.Util as Import
+ src/LndClient/Import/External.hs view
@@ -0,0 +1,65 @@+module LndClient.Import.External (module Import) where++import Chronos as Import+ ( SubsecondPrecision (SubsecondPrecisionAuto),+ Timespan (..),+ encodeTimespan,+ stopwatch,+ )+import Control.Concurrent.Async as Import+ ( Async,+ async,+ asyncThreadId,+ cancel,+ link,+ wait,+ waitAnySTM,+ withAsync,+ )+import Control.Concurrent.STM as Import (check)+import Control.Concurrent.STM.TChan as Import+ ( TChan,+ dupTChan,+ newBroadcastTChan,+ readTChan,+ writeTChan,+ )+import Control.Concurrent.STM.TVar as Import (registerDelay)+import Control.Concurrent.Thread.Delay as Import (delay)+import Control.Monad.Extra as Import (fromMaybeM)+import Data.Aeson as Import (FromJSON (..), ToJSON, fromJSON)+import Data.ByteString as Import (ByteString)+import Data.Coerce as Import (coerce)+import Data.List.Extra as Import (enumerate)+import Data.Text as Import (Text, pack, unpack)+import Data.Text.Lazy as Import (fromStrict, toStrict)+import Data.Word as Import (Word64)+import Database.Persist.Class as Import (PersistField)+import Database.Persist.Sql as Import (PersistFieldSql)+import GHC.Generics as Import (Generic, Rep (..))+import Katip as Import+ ( ColorStrategy (..),+ Katip (..),+ KatipContext (..),+ KatipContextT,+ LogContexts,+ LogEnv (..),+ Namespace,+ Severity (..),+ Verbosity (..),+ bracketFormat,+ closeScribes,+ defaultScribeSettings,+ initLogEnv,+ jsonFormat,+ katipAddContext,+ logStr,+ logTM,+ mkHandleScribeWithFormatter,+ permitItem,+ registerScribe,+ runKatipContextT,+ sl,+ )+import Universum as Import hiding (Text)+import UnliftIO as Import (MonadUnliftIO (..), UnliftIO (..))
+ src/LndClient/LndTest.hs view
@@ -0,0 +1,603 @@+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE TemplateHaskell #-}++module LndClient.LndTest+ ( -- * BTC+ BtcUrl (..),+ BtcLogin (..),+ BtcPassword (..),+ BtcEnv (..),+ newBtcClient,++ -- * TestEnv+ TestEnv,+ newTestEnv,+ spawnLinkChannelWatcher,+ spawnLinkInvoiceWatcher,+ spawnLinkSingleInvoiceWatcher,++ -- * Class+ LndTest (..),++ -- * TestUtils+ mine,+ mine1,+ syncWallets,+ syncPendingChannels,+ syncPendingChannelsFor,+ sendTestPayment,+ receiveClosedChannels,+ receiveActiveChannel,+ receiveInvoice,++ -- * LowLevel setup+ lazyMineInitialCoins,+ lazyConnectNodes,+ watchDefaults,+ cancelAllInvoices,+ closeAllChannels,++ -- * HighLevel setip+ setupZeroChannels,+ setupOneChannel,++ -- * Misc+ liftLndResult,+ liftMaybe,+ purgeChan,+ ignore2,+ ignore3,+ )+where++import LndClient.Data.AddInvoice as AddInvoice+ ( AddInvoiceRequest (..),+ AddInvoiceResponse (..),+ )+import LndClient.Data.Channel as Channel (Channel (..))+import LndClient.Data.ChannelPoint as ChannelPoint (ChannelPoint (..))+import LndClient.Data.CloseChannel+ ( ChannelCloseSummary (..),+ CloseChannelRequest (..),+ )+import LndClient.Data.ClosedChannels as ClosedChannels+import LndClient.Data.GetInfo (GetInfoResponse (..))+import qualified LndClient.Data.GetInfo as Lnd (GetInfoResponse (..))+import LndClient.Data.Invoice as Invoice (Invoice (..), InvoiceState (..))+import LndClient.Data.ListChannels as LC (ListChannelsRequest (..))+import qualified LndClient.Data.ListInvoices as ListInvoices+import qualified LndClient.Data.NewAddress as Lnd+ ( AddressType (..),+ NewAddressRequest (..),+ NewAddressResponse (..),+ )+import LndClient.Data.OpenChannel as OpenChannel+ ( OpenChannelRequest (..),+ )+import LndClient.Data.Peer+ ( ConnectPeerRequest (..),+ LightningAddress (..),+ )+import LndClient.Data.PendingChannels (PendingChannelsResponse (..))+import LndClient.Data.SendPayment as SendPayment+ ( SendPaymentRequest (..),+ )+import LndClient.Data.SubscribeChannelEvents+import LndClient.Data.SubscribeInvoices+ ( SubscribeInvoicesRequest (..),+ )+import LndClient.Import+import qualified LndClient.RPC.Katip as Lnd+import LndClient.Watcher as Watcher+import qualified Network.Bitcoin as BTC (Client, getClient)+import qualified Network.Bitcoin.BlockChain as BTC (getBlockCount)+import qualified Network.Bitcoin.Mining as BTC (generateToAddress)++newtype BtcUrl = BtcUrl String++newtype BtcLogin = BtcLogin ByteString++newtype BtcPassword = BtcPassword ByteString++data BtcEnv+ = BtcEnv+ { btcUrl :: BtcUrl,+ btcLogin :: BtcLogin,+ btcPassword :: BtcPassword+ }++data TestEnv+ = TestEnv+ { testLndEnv :: LndEnv,+ testNodeLocation :: NodeLocation,+ testChannelWatcher :: Watcher () ChannelEventUpdate,+ testInvoiceWatcher :: Watcher SubscribeInvoicesRequest Invoice,+ testSingleInvoiceWatcher :: Watcher RHash Invoice+ }++uniquePairs :: (Ord a, Enum a, Bounded a) => [(a, a)]+uniquePairs = [(x0, x1) | x0 <- enumerate, x1 <- enumerate, x0 < x1]++newBtcClient :: MonadIO m => BtcEnv -> m BTC.Client+newBtcClient x =+ liftIO $+ BTC.getClient+ (coerce $ btcUrl x)+ (coerce $ btcLogin x)+ (coerce $ btcPassword x)++newTestEnv ::+ ( KatipContext m,+ MonadUnliftIO m+ ) =>+ LndEnv ->+ NodeLocation ->+ m TestEnv+newTestEnv lnd loc = do+ cw <- spawnLinkChannelWatcher lnd+ iw <- spawnLinkInvoiceWatcher lnd+ siw <- spawnLinkSingleInvoiceWatcher lnd+ pure $+ TestEnv+ { testLndEnv = lnd,+ testNodeLocation = loc,+ testChannelWatcher = cw,+ testInvoiceWatcher = iw,+ testSingleInvoiceWatcher = siw+ }++class+ ( KatipContext m,+ MonadUnliftIO m,+ Ord owner,+ Enum owner,+ Bounded owner,+ Show owner+ ) =>+ LndTest m owner where+ getBtcClient :: owner -> m BTC.Client+ getTestEnv :: owner -> m TestEnv+ getLndEnv :: owner -> m LndEnv+ getLndEnv = (testLndEnv <$>) . getTestEnv+ getSev :: owner -> Severity -> m Severity+ getSev owner sev = do+ env <- testLndEnv <$> getTestEnv owner+ pure $ newSev env sev+ getNodeLocation :: owner -> m NodeLocation+ getNodeLocation = (testNodeLocation <$>) . getTestEnv+ getChannelTChan :: owner -> m (TChan ((), ChannelEventUpdate))+ getChannelTChan =+ (Watcher.dupLndTChan =<<)+ . (testChannelWatcher <$>)+ . getTestEnv+ getInvoiceTChan :: owner -> m (TChan (SubscribeInvoicesRequest, Invoice))+ getInvoiceTChan =+ (Watcher.dupLndTChan =<<)+ . (testInvoiceWatcher <$>)+ . getTestEnv+ getSingleInvoiceTChan :: owner -> m (TChan (RHash, Invoice))+ getSingleInvoiceTChan =+ (Watcher.dupLndTChan =<<)+ . (testSingleInvoiceWatcher <$>)+ . getTestEnv++ --+ -- TODO : embed getSingleInvoiceTChan here+ -- because it's really not used separately+ --+ watchSingleInvoice :: owner -> RHash -> m ()+ watchSingleInvoice owner rh = do+ env <- getTestEnv owner+ Watcher.watch (testSingleInvoiceWatcher env) rh++walletAddress :: LndTest m owner => owner -> m Text+walletAddress owner = do+ lnd <- getLndEnv owner+ Lnd.NewAddressResponse x <-+ liftLndResult+ =<< Lnd.newAddress+ lnd+ (Lnd.NewAddressRequest Lnd.WITNESS_PUBKEY_HASH Nothing)+ pure x++lazyMineInitialCoins :: forall m owner. LndTest m owner => Proxy owner -> m ()+lazyMineInitialCoins = const $ do+ mapM_ (liftLndResult <=< Lnd.lazyInitWallet <=< getLndEnv) xs+ bc <- getBtcClient someone+ h <- liftIO $ BTC.getBlockCount bc+ -- reward coins are spendable only after 100 blocks+ when (h < 101 + numOwners) $ do+ mapM_ (mine 1) xs+ mine 101 someone+ where+ xs = enumerate :: [owner]+ someone = minBound :: owner+ numOwners = fromIntegral $ length xs++lazyConnectNodes :: forall m owner. LndTest m owner => Proxy owner -> m ()+lazyConnectNodes = const $ mapM_ this uniquePairs+ where+ this :: (owner, owner) -> m ()+ this (owner0, owner1) = do+ testEnvOwner0 <- getTestEnv owner0+ Lnd.GetInfoResponse pubKeyOwner0 _ _ <-+ liftLndResult =<< Lnd.getInfo (testLndEnv testEnvOwner0)+ let req =+ ConnectPeerRequest+ { addr =+ LightningAddress+ { pubkey = pubKeyOwner0,+ host = testNodeLocation testEnvOwner0+ },+ perm = False+ }+ lndEnvOwner1 <- getLndEnv owner1+ liftLndResult =<< Lnd.lazyConnectPeer lndEnvOwner1 req++watchDefaults :: forall m owner. LndTest m owner => Proxy owner -> m ()+watchDefaults = const $ mapM_ this (enumerate :: [owner])+ where+ this owner = do+ testEnv <- getTestEnv owner+ Watcher.watchUnit $ testChannelWatcher testEnv+ Watcher.watch (testInvoiceWatcher testEnv) iReq+ iReq =+ --+ -- TODO : this is related to LND bug+ -- https://github.com/lightningnetwork/lnd/issues/2469+ --+ SubscribeInvoicesRequest (Just $ AddIndex 1) Nothing++mine :: forall m owner. LndTest m owner => Int -> owner -> m ()+mine blocks owner = do+ btcAddr <- walletAddress owner+ bc <- getBtcClient owner+ sev <- getSev owner InfoS+ $(logTM) sev $ logStr $+ ("Mining " :: Text)+ <> show blocks+ <> " blocks to "+ <> show owner+ <> " wallet"+ void . liftIO $+ BTC.generateToAddress+ bc+ blocks+ btcAddr+ Nothing+ liftLndResult =<< syncWallets (Proxy :: Proxy owner)++mine1 :: forall m owner. LndTest m owner => Proxy owner -> m ()+mine1 = const $ mine 1 (minBound :: owner)++liftLndResult :: MonadIO m => Either LndError a -> m a+liftLndResult (Right x) =+ pure x+liftLndResult (Left x) =+ liftIO $ fail $ "LiftLndResult failed " <> show x++syncWallets ::+ forall m owner.+ LndTest m owner =>+ Proxy owner ->+ m (Either LndError ())+syncWallets = const $ this 0+ where+ this 30 = do+ let msg = "SyncWallets attempt limit exceeded"+ sev <- getSev (minBound :: owner) ErrorS+ $(logTM) sev $ logStr msg+ pure . Left $ LndError msg+ this (attempt :: Int) = do+ sev <- getSev (minBound :: owner) InfoS+ $(logTM) sev "SyncWallets is running"+ rs <- mapM (Lnd.getInfo <=< getLndEnv) (enumerate :: [owner])+ if all isInSync rs+ then pure $ Right ()+ else liftIO (delay 1000000) >> this (attempt + 1)+ isInSync = \case+ Left {} -> False+ Right x -> Lnd.syncedToChain x++syncPendingChannels :: forall m owner. LndTest m owner => Proxy owner -> m ()+syncPendingChannels =+ const $ mapM_ (liftLndResult <=< syncPendingChannelsFor) (enumerate :: [owner])++syncPendingChannelsFor ::+ forall m owner.+ LndTest m owner =>+ owner ->+ m (Either LndError ())+syncPendingChannelsFor owner = this 0+ where+ this 30 = do+ let msg =+ "SyncPendingChannelsFor "+ <> show owner+ <> " attempt limit exceeded"+ sev <- getSev owner ErrorS+ $(logTM) sev $ logStr msg+ pure . Left $ LndError msg+ this (attempt :: Int) = do+ sev <- getSev owner InfoS+ $(logTM) sev $ logStr $+ "SyncPendingChannelsFor "+ <> (show owner :: Text)+ <> " is running"+ res <- Lnd.pendingChannels =<< getLndEnv owner+ case res of+ Left {} -> this (attempt + 1)+ Right (PendingChannelsResponse _ x0 x1 x2 x3) ->+ if null x0+ && null x1+ && null x2+ && null x3+ then pure $ Right ()+ else mine1 (Proxy :: Proxy owner) >> this (attempt + 1)++receiveClosedChannels ::+ forall m owner.+ LndTest m owner =>+ Proxy owner ->+ [ChannelPoint] ->+ m (Either LndError ())+receiveClosedChannels po = this 0+ where+ this _ [] =+ pure $ Right ()+ this 30 _ =+ pure+ $ Left+ $ LndError "receiveClosedChannels - exceeded"+ this (attempt :: Integer) cps = do+ let owners = enumerate :: [owner]+ xs <- rights <$> mapM getOwnersCloseCPs owners+ let filteredCps = filter (checkTwiceCP $ concat xs) cps+ if null filteredCps+ then pure $ Right ()+ else mine1 po >> liftIO (delay 1000000) >> this (attempt + 1) filteredCps+ checkTwiceCP :: [ChannelPoint] -> ChannelPoint -> Bool+ checkTwiceCP cps cp = length (filter (cp ==) cps) < 2+ getOwnersCloseCPs :: owner -> m (Either LndError [ChannelPoint])+ getOwnersCloseCPs o = do+ lnd <- getLndEnv o+ ccs <- liftLndResult =<< Lnd.closedChannels lnd ClosedChannels.defReq+ pure $ Right $ chPoint <$> ccs++cancelAllInvoices ::+ forall m owner.+ LndTest m owner =>+ Proxy owner ->+ m ()+cancelAllInvoices =+ const $ mapM_ (this 0) (enumerate :: [owner])+ where+ listReq =+ ListInvoices.ListInvoiceRequest+ { ListInvoices.pendingOnly = False,+ ListInvoices.indexOffset = AddIndex 0,+ ListInvoices.numMaxInvoices = 0,+ ListInvoices.reversed = False+ }+ this :: Int -> owner -> m ()+ this 30 owner =+ error $ "CancelAllInvoices attempt limit exceeded for " <> show owner+ this attempt owner = do+ lnd <- getLndEnv owner+ let getInvoices =+ filter+ ( \x ->+ Invoice.state x+ `elem` [ Invoice.OPEN,+ Invoice.ACCEPTED+ ]+ )+ . ListInvoices.invoices+ <$> (liftLndResult =<< Lnd.listInvoices lnd listReq)+ is0 <- getInvoices+ res <- mapM (Lnd.cancelInvoice lnd) (Invoice.rHash <$> is0)+ is1 <- getInvoices+ if all isRight res && null is1+ then pure ()+ else liftIO (delay 1000000) >> this (attempt + 1) owner++closeAllChannels :: forall m owner. LndTest m owner => Proxy owner -> m ()+closeAllChannels po = do+ cancelAllInvoices po+ mapM_ (this 0) uniquePairs+ where+ this :: Int -> (owner, owner) -> m ()+ this 30 owners =+ error $ "CloseAllChannels - limit exceeded for " <> show owners+ this attempt (owner0, owner1) = do+ sev <- getSev owner0 InfoS+ $(logTM) sev "CloseAllChannels - closing channels"+ lnd0 <- getLndEnv owner0+ peerLocation <- getNodeLocation owner1+ GetInfoResponse peerPubKey _ _ <-+ liftLndResult =<< Lnd.getInfo =<< getLndEnv owner1+ let getChannels =+ liftLndResult+ =<< Lnd.listChannels+ lnd0+ (ListChannelsRequest False False False False (Just peerPubKey))+ cs0 <- getChannels+ let cps = Channel.channelPoint <$> cs0+ res <-+ mapM+ ( \cp ->+ Lnd.closeChannelSync+ lnd0+ (ConnectPeerRequest (LightningAddress peerPubKey peerLocation) False)+ (CloseChannelRequest cp False Nothing Nothing Nothing)+ )+ cps+ cs1 <- getChannels+ if all isRight res && null cs1+ then liftLndResult =<< receiveClosedChannels po cps+ else liftIO (delay 1000000) >> this (attempt + 1) (owner0, owner1)++receiveActiveChannel ::+ LndTest m owner =>+ Proxy owner ->+ ChannelPoint ->+ TChan ((), ChannelEventUpdate) ->+ m (Either LndError ())+receiveActiveChannel po = this 0+ where+ this (attempt :: Integer) cp cq =+ if attempt > 30+ then pure $ Left $ LndError "receiveActiveChannel - exceeded"+ else do+ x <- readTChanTimeout (MicroSecondsDelay 1000000) cq+ case channelEvent . snd <$> x of+ Just (ChannelEventUpdateChannelActiveChannel gcp) ->+ if cp == gcp+ then pure $ Right ()+ else mine1 po >> this (attempt + 1) cp cq+ _ ->+ mine1 po >> this (attempt + 1) cp cq++setupZeroChannels :: LndTest m owner => Proxy owner -> m ()+setupZeroChannels x = do+ lazyMineInitialCoins x+ lazyConnectNodes x+ watchDefaults x+ closeAllChannels x+ syncPendingChannels x++setupOneChannel ::+ forall m owner.+ LndTest m owner =>+ owner ->+ owner ->+ m ChannelPoint+setupOneChannel ownerFrom ownerTo = do+ lndFrom <- getLndEnv ownerFrom+ lndTo <- getLndEnv ownerTo+ mq <- getChannelTChan ownerTo+ cq <- getChannelTChan ownerFrom+ --+ -- Open channel from Customer to Merchant+ --+ sev <- getSev ownerFrom InfoS+ $(logTM) sev "SetupOneChannel - opening channel"+ GetInfoResponse merchantPubKey _ _ <-+ liftLndResult =<< Lnd.getInfo lndTo+ let openChannelRequest =+ OpenChannel.OpenChannelRequest+ { OpenChannel.nodePubkey = merchantPubKey,+ OpenChannel.localFundingAmount = MSat 200000000,+ OpenChannel.pushSat = Just $ MSat 10000000,+ OpenChannel.targetConf = Nothing,+ OpenChannel.satPerByte = Nothing,+ OpenChannel.private = Nothing,+ OpenChannel.minHtlcMsat = Nothing,+ OpenChannel.remoteCsvDelay = Nothing,+ OpenChannel.minConfs = Nothing,+ OpenChannel.spendUnconfirmed = Nothing,+ OpenChannel.closeAddress = Nothing+ }+ cp <-+ liftLndResult+ =<< Lnd.openChannelSync lndFrom openChannelRequest+ let po = Proxy :: Proxy owner+ liftLndResult =<< receiveActiveChannel po cp mq+ liftLndResult =<< receiveActiveChannel po cp cq+ --+ -- TODO : these invoices are added and settled to+ -- raise invoice index to 1 to be able to receive+ -- notifications about all next invoices+ -- remove when LND bug will be fixed+ -- https://github.com/lightningnetwork/lnd/issues/2469+ --+ () <- sendTestPayment (MSat 1000000) ownerFrom ownerTo+ () <- sendTestPayment (MSat 1000000) ownerTo ownerFrom+ $(logTM) sev "SetupOneChannel - finished"+ pure cp++sendTestPayment :: LndTest m owner => MSat -> owner -> owner -> m ()+sendTestPayment amt0 sender0 recepient0 = do+ sender <- getLndEnv sender0+ recepient <- getLndEnv recepient0+ let addInvoiceRequest =+ AddInvoice.AddInvoiceRequest+ { AddInvoice.memo = Just "HELLO",+ AddInvoice.valueMsat = amt0,+ AddInvoice.expiry = Just $ Seconds 1000+ }+ invoice <-+ liftLndResult =<< Lnd.addInvoice recepient addInvoiceRequest+ let payReq =+ SendPayment.SendPaymentRequest+ { SendPayment.paymentRequest =+ AddInvoice.paymentRequest invoice,+ SendPayment.amt = amt0+ }+ void . liftLndResult =<< Lnd.sendPayment sender payReq++receiveInvoice ::+ ( MonadUnliftIO m,+ KatipContext m+ ) =>+ RHash ->+ Invoice.InvoiceState ->+ TChan (a, Invoice) ->+ m (Either LndError ())+receiveInvoice rh s q = do+ mx0 <- readTChanTimeout (MicroSecondsDelay 30000000) q+ let mx = snd <$> mx0+ $(logTM) DebugS $ logStr $+ "receiveInvoice - " <> (show mx :: Text)+ case (\x -> Invoice.rHash x == rh && Invoice.state x == s) <$> mx of+ Just True -> return $ Right ()+ Just False -> receiveInvoice rh s q+ Nothing -> return . Left $ TChanTimeout "receiveInvoice"++liftMaybe :: MonadIO m => String -> Maybe a -> m a+liftMaybe msg mx =+ case mx of+ Just x -> pure x+ Nothing -> liftIO $ fail msg++purgeChan :: MonadUnliftIO m => TChan a -> m ()+purgeChan chan = do+ x <- readTChanTimeout (MicroSecondsDelay 500000) chan+ when (isJust x) $ purgeChan chan++ignore2 :: Monad m => a -> b -> m ()+ignore2 _ _ = pure ()++ignore3 :: Monad m => a -> b -> c -> m ()+ignore3 _ _ _ = pure ()++spawnLinkChannelWatcher ::+ (KatipContext m, MonadUnliftIO m) =>+ LndEnv ->+ m (Watcher () ChannelEventUpdate)+spawnLinkChannelWatcher lnd =+ Watcher.spawnLinkUnit+ lnd+ Lnd.subscribeChannelEventsChan+ ignore2++spawnLinkInvoiceWatcher ::+ (KatipContext m, MonadUnliftIO m) =>+ LndEnv ->+ m (Watcher SubscribeInvoicesRequest Invoice)+spawnLinkInvoiceWatcher lnd =+ Watcher.spawnLink+ lnd+ Lnd.subscribeInvoicesChan+ ignore3++spawnLinkSingleInvoiceWatcher ::+ (KatipContext m, MonadUnliftIO m) =>+ LndEnv ->+ m (Watcher RHash Invoice)+spawnLinkSingleInvoiceWatcher lnd =+ Watcher.spawnLink+ lnd+ Lnd.subscribeSingleInvoiceChan+ ignore3
+ src/LndClient/QRCode.hs view
@@ -0,0 +1,53 @@+{-# LANGUAGE GeneralizedNewtypeDeriving #-}++module LndClient.QRCode+ ( qrGeneric,+ qrPixels,+ qrPngDataUrl,+ qrDefOpts,+ QROpts (..),+ QRPixels (..),+ QRPngDataUrl (..),+ )+where++import Codec.Picture (Image (..), Pixel8)+import Codec.QRCode as QR+ ( ErrorLevel (L),+ QRImage,+ TextEncoding (Iso8859_1OrUtf8WithoutECI),+ ToText,+ defaultQRCodeOptions,+ encodeAutomatic,+ )+import Codec.QRCode.JuicyPixels (toImage, toPngDataUrlT)+import LndClient.Import.External++newtype QRPixels = QRPixels (Image Pixel8)++newtype QRPngDataUrl = QRPngDataUrl Text+ deriving (PersistField, PersistFieldSql, Show, Eq)++data QROpts+ = QROpts+ { qrBorder :: Int,+ qrScale :: Int+ }++qrDefOpts :: QROpts+qrDefOpts =+ QROpts+ { qrBorder = 4,+ qrScale = 5+ }++qrGeneric :: QR.ToText a => a -> Maybe QRImage+qrGeneric = encodeAutomatic (defaultQRCodeOptions L) Iso8859_1OrUtf8WithoutECI++qrPixels :: QR.ToText a => QROpts -> a -> Maybe QRPixels+qrPixels opts x = QRPixels . toImage (qrBorder opts) (qrScale opts) <$> qrGeneric x++qrPngDataUrl :: QR.ToText a => QROpts -> a -> Maybe QRPngDataUrl+qrPngDataUrl opts x =+ QRPngDataUrl . toStrict . toPngDataUrlT (qrBorder opts) (qrScale opts)+ <$> qrGeneric x
+ src/LndClient/RPC/Generic.hs view
@@ -0,0 +1,170 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE OverloadedLists #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeFamilies #-}++module LndClient.RPC.Generic+ ( grpcSyncSilent,+ grpcSyncKatip,+ grpcSubscribeSilent,+ grpcSubscribeKatip,+ RpcName (..),+ )+where++import Data.ProtoLens.Service.Types (HasMethod, HasMethodImpl (..))+import qualified Data.Text.Lazy as T+import GHC.TypeLits+import LndClient.Import+import LndGrpc.Client+import qualified Network.GRPC.HTTP2.ProtoLens as PL++data RpcName+ = UnlockWallet+ | InitWallet+ | LazyUnlockWallet+ | LazyInitWallet+ | NewAddress+ | AddInvoice+ | AddHodlInvoice+ | CancelInvoice+ | SettleInvoice+ | SubscribeInvoices+ | SubscribeChannelEvents+ | SubscribeHtlcEvents+ | OpenChannelSync+ | OpenChannel+ | ListChannels+ | CloseChannel+ | ListPeers+ | ConnectPeer+ | GetInfo+ | SendPayment+ | WaitForGrpc+ | DecodePayReq+ | LookupInvoice+ | EnsureHodlInvoice+ | TrackPaymentV2+ | PendingChannels+ | ClosedChannels+ | ListInvoices+ | SubscribeSingleInvoice+ deriving (Generic)++instance ToJSON RpcName++showElapsedSeconds :: Timespan -> Text+showElapsedSeconds = encodeTimespan SubsecondPrecisionAuto++grpcSyncSilent ::+ ( MonadIO m,+ ToGrpc a gA,+ FromGrpc b gB,+ HasMethod s rm,+ gA ~ MethodInput s rm,+ gB ~ MethodOutput s rm+ ) =>+ PL.RPC s (rm :: Symbol) ->+ LndEnv ->+ a ->+ m (Either LndError b)+grpcSyncSilent rpc env req =+ case toGrpc req of+ Right gReq -> join . second fromGrpc <$> runUnary rpc env gReq+ Left err -> return $ Left err++grpcSyncKatip ::+ ( MonadIO m,+ KatipContext m,+ ToGrpc a gA,+ FromGrpc b gB,+ HasMethod s rm,+ gA ~ MethodInput s rm,+ gB ~ MethodOutput s rm,+ Show a,+ Show b+ ) =>+ PL.RPC s (rm :: Symbol) ->+ LndEnv ->+ a ->+ m (Either LndError b)+grpcSyncKatip rpc env req =+ katipAddContext (sl "RpcName" (T.pack $ symbolVal rpc))+ $ katipAddContext (sl "RpcRequest" (show req :: Text))+ $ katipAddLndContext env+ $ do+ $(logTM) (newSev env InfoS) "RPC is running"+ (ts, res) <-+ liftIO $ stopwatch $+ grpcSyncSilent rpc env req+ katipAddContext (sl "ElapsedSeconds" (showElapsedSeconds ts)) $+ case res of+ Left e ->+ katipAddContext (sl "RpcResponse" (show e :: Text)) $+ $(logTM) (newSeverity env ErrorS (Just ts) (Just e)) "RPC failed"+ Right x ->+ katipAddContext (sl "RpcResponse" (show x :: Text)) $+ $(logTM) (newSeverity env InfoS (Just ts) Nothing) "RPC succeded"+ pure res++grpcSubscribeSilent ::+ ( MonadIO m,+ ToGrpc a gA,+ FromGrpc b gB,+ HasMethod s rm,+ gA ~ MethodInput s rm,+ gB ~ MethodOutput s rm+ ) =>+ PL.RPC s (rm :: Symbol) ->+ (b -> IO ()) ->+ LndEnv ->+ a ->+ m (Either LndError ())+grpcSubscribeSilent rpc handler env req =+ case toGrpc req of+ Right grpcReq -> second (const ()) <$> runStreamServer rpc env grpcReq gHandler+ Left err -> return $ Left err+ where+ gHandler _ x =+ case fromGrpc x of+ Right b -> liftIO $ handler b+ Left _ -> return ()++grpcSubscribeKatip ::+ ( MonadIO m,+ KatipContext m,+ ToGrpc a gA,+ FromGrpc b gB,+ HasMethod s rm,+ Show a,+ gA ~ MethodInput s rm,+ gB ~ MethodOutput s rm+ ) =>+ PL.RPC s (rm :: Symbol) ->+ (b -> IO ()) ->+ LndEnv ->+ a ->+ m (Either LndError ())+grpcSubscribeKatip rpc handler env req =+ katipAddContext (sl "RpcName" (T.pack $ symbolVal rpc))+ $ katipAddContext (sl "RpcRequest" (show req :: Text))+ $ katipAddLndContext env+ $ do+ $(logTM) (newSev env InfoS) "RPC is running"+ (ts, res) <-+ liftIO $ stopwatch $ grpcSubscribeSilent rpc handler env req+ katipAddContext (sl "ElapsedSeconds" (showElapsedSeconds ts))+ $ uncurry katipAddContext+ $ case res of+ Left e ->+ ( sl "RpcResponse" (show e :: Text),+ $(logTM) (newSeverity env ErrorS (Just ts) (Just e)) "RPC failed"+ )+ Right x ->+ ( sl "RpcResponse" (show x :: Text),+ $(logTM) (newSeverity env InfoS (Just ts) Nothing) "RPC succeded"+ )+ pure res
+ src/LndClient/RPC/Katip.hs view
@@ -0,0 +1,164 @@+{-# LANGUAGE TemplateHaskell #-}++-- | List of functions, used to communicate with LND via gRPC.+-- Method names are corresponding to gRPC method names, see LND gRPC api docs <https://api.lightning.community>.+-- Katip is used for function calls logging.+module LndClient.RPC.Katip+ ( waitForGrpc,+ unlockWallet,+ lazyUnlockWallet,+ lazyInitWallet,+ newAddress,+ addInvoice,+ addHodlInvoice,+ cancelInvoice,+ settleInvoice,+ initWallet,+ openChannelSync,+ openChannel,+ listChannels,+ closeChannel,+ listPeers,+ connectPeer,+ lazyConnectPeer,+ sendPayment,+ getInfo,+ subscribeInvoices,+ subscribeInvoicesChan,+ subscribeChannelEvents,+ subscribeChannelEventsChan,+ subscribeHtlcEvents,+ decodePayReq,+ lookupInvoice,+ ensureHodlInvoice,+ trackPaymentV2,+ trackPaymentV2Chan,+ pendingChannels,+ closedChannels,+ closeChannelSync,+ listInvoices,+ subscribeSingleInvoice,+ subscribeSingleInvoiceChan,+ )+where++import Data.ProtoLens.Message+import LndClient.Data.AddHodlInvoice as AddHodlInvoice (AddHodlInvoiceRequest (..))+import LndClient.Data.AddInvoice as AddInvoice (AddInvoiceResponse (..))+import qualified LndClient.Data.Channel as Channel+import LndClient.Data.CloseChannel as CloseChannel (CloseChannelRequest (..))+import LndClient.Data.Invoice as Invoice (Invoice (..))+import LndClient.Data.ListChannels as ListChannels (ListChannelsRequest (..))+import LndClient.Data.Peer (ConnectPeerRequest (..))+import LndClient.Import+import LndClient.RPC.Generic+import LndClient.RPC.TH+import LndClient.Util as Util++$(mkRpc RpcKatip)++waitForGrpc ::+ (KatipContext m) =>+ LndEnv ->+ m (Either LndError ())+waitForGrpc env =+ katipAddContext (sl "RpcName" WaitForGrpc) $ this 30+ where+ this (x :: Int) =+ if x > 0+ then do+ $(logTM) (newSev env InfoS) "Waiting for GRPC..."+ res <- getInfo $ env {envLndLogStrategy = logDebug}+ if isRight res+ then return $ Right ()+ else liftIO (delay 1000000) >> this (x - 1)+ else do+ let msg = "waitForGrpc attempt limit exceeded"+ $(logTM) (newSev env ErrorS) $ logStr msg+ return . Left $ LndError msg++lazyUnlockWallet ::+ (KatipContext m) =>+ LndEnv ->+ m (Either LndError ())+lazyUnlockWallet env =+ katipAddContext (sl "RpcName" LazyUnlockWallet) $ do+ $(logTM) (newSev env InfoS) "RPC is running..."+ unlocked <- isRight <$> getInfo (env {envLndLogStrategy = logDebug})+ if unlocked+ then do+ $(logTM) (newSev env InfoS) "Wallet is already unlocked, doing nothing"+ return $ Right ()+ else unlockWallet env++lazyInitWallet ::+ (KatipContext m) =>+ LndEnv ->+ m (Either LndError ())+lazyInitWallet env =+ katipAddContext (sl "RpcName" LazyInitWallet) $ do+ $(logTM) (newSev env InfoS) "RPC is running..."+ unlockRes <-+ lazyUnlockWallet $+ env {envLndLogStrategy = logDebug}+ if isRight unlockRes+ then do+ $(logTM) (newSev env InfoS) "Wallet is already initialized, doing nothing"+ return unlockRes+ else initWallet env++ensureHodlInvoice ::+ (KatipContext m) =>+ LndEnv ->+ AddHodlInvoiceRequest ->+ m (Either LndError AddInvoiceResponse)+ensureHodlInvoice env req =+ katipAddContext (sl "RpcName" EnsureHodlInvoice) $ do+ $(logTM) (newSev env InfoS) "RPC is running..."+ let rh = AddHodlInvoice.hash req+ _ <- addHodlInvoice (env {envLndLogStrategy = logDebug}) req+ res <- lookupInvoice env rh+ return $ case res of+ Left x -> Left x+ Right x ->+ Right $+ AddInvoice.AddInvoiceResponse+ { AddInvoice.rHash = rh,+ AddInvoice.paymentRequest = Invoice.paymentRequest x,+ AddInvoice.addIndex = Invoice.addIndex x+ }++closeChannelSync ::+ (KatipContext m, MonadUnliftIO m) =>+ LndEnv ->+ ConnectPeerRequest ->+ CloseChannelRequest ->+ m (Either LndError ())+closeChannelSync env conn req = do+ cs0 <- listChannels env (ListChannels.ListChannelsRequest False False False False Nothing)+ case cs0 of+ Left err -> pure $ Left err+ Right x ->+ case filter (\ch -> channelPoint req == Channel.channelPoint ch) x of+ [] -> do+ $(logTM) (newSev env WarningS) "Cannot close channel that is not active"+ return $ Right ()+ _ -> do+ mVar <- newEmptyMVar+ closeChannelRecursive mVar 10+ where+ closeChannelRecursive _ (0 :: Int) = do+ $(logTM) (newSev env ErrorS) "Channel couldn't be closed."+ return $ Left $ LndError "Cannot close channel"+ closeChannelRecursive mVar0 n = do+ void $ lazyConnectPeer env conn+ void $ Util.spawnLink $+ closeChannel+ (void . tryPutMVar mVar0)+ env+ req+ liftIO $ delay 1000000+ upd <- tryTakeMVar mVar0+ case upd of+ Just _ -> return $ Right ()+ Nothing -> closeChannelRecursive mVar0 (n -1)
+ src/LndClient/RPC/Silent.hs view
@@ -0,0 +1,143 @@+{-# LANGUAGE TemplateHaskell #-}++-- | List of functions, used to communicate with LND via gRPC.+-- Method names are corresponding to gRPC method names, see LND gRPC api docs <https://api.lightning.community>.+module LndClient.RPC.Silent+ ( waitForGrpc,+ unlockWallet,+ lazyUnlockWallet,+ lazyInitWallet,+ newAddress,+ addInvoice,+ addHodlInvoice,+ cancelInvoice,+ settleInvoice,+ initWallet,+ openChannelSync,+ openChannel,+ listChannels,+ closeChannel,+ listPeers,+ connectPeer,+ lazyConnectPeer,+ sendPayment,+ getInfo,+ subscribeInvoices,+ subscribeInvoicesChan,+ subscribeChannelEvents,+ subscribeChannelEventsChan,+ subscribeHtlcEvents,+ decodePayReq,+ lookupInvoice,+ ensureHodlInvoice,+ trackPaymentV2,+ trackPaymentV2Chan,+ pendingChannels,+ closedChannels,+ closeChannelSync,+ listInvoices,+ subscribeSingleInvoice,+ subscribeSingleInvoiceChan,+ )+where++import Data.ProtoLens.Message+import LndClient.Data.AddHodlInvoice as AddHodlInvoice (AddHodlInvoiceRequest (..))+import LndClient.Data.AddInvoice as AddInvoice (AddInvoiceResponse (..))+import qualified LndClient.Data.Channel as Channel+import LndClient.Data.CloseChannel as CloseChannel (CloseChannelRequest (..))+import LndClient.Data.Invoice as Invoice (Invoice (..))+import LndClient.Data.ListChannels as ListChannels (ListChannelsRequest (..))+import LndClient.Data.Peer (ConnectPeerRequest (..))+import LndClient.Import+import LndClient.RPC.TH+import LndClient.Util as Util++$(mkRpc RpcSilent)++waitForGrpc ::+ (MonadIO m) =>+ LndEnv ->+ m (Either LndError ())+waitForGrpc env = this 30+ where+ this (x :: Int) =+ if x > 0+ then do+ res <- getInfo $ env {envLndLogStrategy = logDebug}+ if isRight res+ then return $ Right ()+ else liftIO (delay 1000000) >> this (x - 1)+ else do+ let msg = "waitForGrpc attempt limit exceeded"+ return . Left $ LndError msg++lazyUnlockWallet ::+ (MonadIO m) =>+ LndEnv ->+ m (Either LndError ())+lazyUnlockWallet env = do+ unlocked <- isRight <$> getInfo (env {envLndLogStrategy = logDebug})+ if unlocked+ then return $ Right ()+ else unlockWallet env++lazyInitWallet ::+ (MonadIO m) =>+ LndEnv ->+ m (Either LndError ())+lazyInitWallet env = do+ unlockRes <- lazyUnlockWallet $ env {envLndLogStrategy = logDebug}+ if isRight unlockRes+ then return unlockRes+ else initWallet env++ensureHodlInvoice ::+ (MonadIO m) =>+ LndEnv ->+ AddHodlInvoiceRequest ->+ m (Either LndError AddInvoiceResponse)+ensureHodlInvoice env req = do+ let rh = AddHodlInvoice.hash req+ _ <- addHodlInvoice env req+ res <- lookupInvoice env rh+ return $ case res of+ Left x -> Left x+ Right x ->+ Right $+ AddInvoice.AddInvoiceResponse+ { AddInvoice.rHash = rh,+ AddInvoice.paymentRequest = Invoice.paymentRequest x,+ AddInvoice.addIndex = Invoice.addIndex x+ }++closeChannelSync ::+ (MonadUnliftIO m) =>+ LndEnv ->+ ConnectPeerRequest ->+ CloseChannelRequest ->+ m (Either LndError ())+closeChannelSync env conn req = do+ cs0 <- listChannels env (ListChannels.ListChannelsRequest False False False False Nothing)+ case cs0 of+ Left err -> pure $ Left err+ Right x ->+ case filter (\ch -> channelPoint req == Channel.channelPoint ch) x of+ [] -> return $ Right ()+ _ -> do+ mVar <- newEmptyMVar+ closeChannelRecursive mVar 10+ where+ closeChannelRecursive _ (0 :: Int) = return $ Left $ LndError "Cannot close channel"+ closeChannelRecursive mVar0 n = do+ void $ lazyConnectPeer env conn+ void $ Util.spawnLink $+ closeChannel+ (void . tryPutMVar mVar0)+ env+ req+ liftIO $ delay 1000000+ upd <- tryTakeMVar mVar0+ case upd of+ Just _ -> return $ Right ()+ Nothing -> closeChannelRecursive mVar0 (n -1)
+ src/LndClient/RPC/TH.hs view
@@ -0,0 +1,429 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE TemplateHaskell #-}++module LndClient.RPC.TH+ ( mkRpc,+ RpcKind (..),+ )+where++import Language.Haskell.TH.Syntax+import LndClient.Data.AddHodlInvoice (AddHodlInvoiceRequest (..))+import LndClient.Data.AddInvoice (AddInvoiceRequest (..), AddInvoiceResponse (..))+import LndClient.Data.Channel (Channel (..))+import LndClient.Data.ChannelPoint (ChannelPoint (..))+import LndClient.Data.CloseChannel+ ( ChannelCloseSummary (..),+ CloseChannelRequest (..),+ CloseStatusUpdate (..),+ )+import LndClient.Data.ClosedChannels (ClosedChannelsRequest (..))+import qualified LndClient.Data.GetInfo as GI+import LndClient.Data.HtlcEvent (HtlcEvent (..))+import qualified LndClient.Data.InitWallet as IW+import LndClient.Data.Invoice (Invoice (..))+import LndClient.Data.ListChannels (ListChannelsRequest (..))+import LndClient.Data.ListInvoices (ListInvoiceRequest (..), ListInvoiceResponse (..))+import LndClient.Data.NewAddress (NewAddressRequest (..), NewAddressResponse (..))+import LndClient.Data.OpenChannel+import LndClient.Data.OpenChannel (OpenChannelRequest (..))+import LndClient.Data.PayReq (PayReq (..))+import LndClient.Data.Payment (Payment (..))+import LndClient.Data.Peer+ ( ConnectPeerRequest (..),+ LightningAddress (..),+ Peer (..),+ )+import LndClient.Data.PendingChannels (PendingChannelsResponse (..))+import LndClient.Data.SendPayment (SendPaymentRequest (..), SendPaymentResponse (..))+import LndClient.Data.SubscribeChannelEvents (ChannelEventUpdate (..))+import LndClient.Data.SubscribeInvoices+ ( SubscribeInvoicesRequest (..),+ )+import LndClient.Data.TrackPayment (TrackPaymentRequest (..))+import qualified LndClient.Data.UnlockWallet as UW+import LndClient.Import+import LndClient.RPC.Generic+import Network.GRPC.HTTP2.ProtoLens (RPC (..))+import qualified Proto.InvoiceGrpc as LnGRPC+import qualified Proto.LndGrpc as LnGRPC+import qualified Proto.RouterGrpc as LnGRPC+import qualified Proto.WalletUnlockerGrpc as LnGRPC++data RpcKind = RpcSilent | RpcKatip++mkRpc :: RpcKind -> Q [Dec]+mkRpc k = do+ [d|+ getInfo ::+ ($(tcc) m) =>+ LndEnv ->+ m (Either LndError GI.GetInfoResponse)+ getInfo env =+ $(grpcRetry) $+ $(grpcSync)+ (RPC :: RPC LnGRPC.Lightning "getInfo")+ env+ (defMessage :: LnGRPC.GetInfoRequest)++ initWallet ::+ ($(tcc) m) =>+ LndEnv ->+ m (Either LndError ())+ initWallet env = do+ case envLndCipherSeedMnemonic env of+ Nothing -> pure . Left $ LndEnvError "CipherSeed is required for initWallet"+ Just seed -> do+ res <-+ $(grpcRetry) $+ $(grpcSync)+ (RPC :: RPC LnGRPC.WalletUnlocker "initWallet")+ env+ IW.InitWalletRequest+ { IW.walletPassword =+ coerce $ envLndWalletPassword env,+ IW.cipherSeedMnemonic =+ coerce seed,+ IW.aezeedPassphrase =+ coerce $ envLndAezeedPassphrase env+ }+ if isRight res+ then waitForGrpc env+ else return res++ unlockWallet ::+ ($(tcc) m) =>+ LndEnv ->+ m (Either LndError ())+ unlockWallet env = do+ res <-+ $(grpcRetry) $+ $(grpcSync)+ (RPC :: RPC LnGRPC.WalletUnlocker "unlockWallet")+ env+ UW.UnlockWalletRequest+ { UW.walletPassword = coerce $ envLndWalletPassword env,+ UW.recoveryWindow = 100+ }+ if isRight res+ then waitForGrpc env+ else return res++ newAddress ::+ ($(tcc) m) =>+ LndEnv ->+ NewAddressRequest ->+ m (Either LndError NewAddressResponse)+ newAddress env =+ $(grpcRetry)+ . $(grpcSync)+ (RPC :: RPC LnGRPC.Lightning "newAddress")+ env++ addInvoice ::+ ($(tcc) m) =>+ LndEnv ->+ AddInvoiceRequest ->+ m (Either LndError AddInvoiceResponse)+ addInvoice env =+ $(grpcRetry)+ . $(grpcSync)+ (RPC :: RPC LnGRPC.Lightning "addInvoice")+ env++ addHodlInvoice ::+ ($(tcc) m) =>+ LndEnv ->+ AddHodlInvoiceRequest ->+ m (Either LndError PaymentRequest)+ addHodlInvoice env =+ $(grpcRetry)+ . $(grpcSync)+ (RPC :: RPC LnGRPC.Invoices "addHoldInvoice")+ env++ cancelInvoice ::+ ($(tcc) m) =>+ LndEnv ->+ RHash ->+ m (Either LndError ())+ cancelInvoice env =+ $(grpcRetry)+ . $(grpcSync)+ (RPC :: RPC LnGRPC.Invoices "cancelInvoice")+ env++ settleInvoice ::+ ($(tcc) m) =>+ LndEnv ->+ RPreimage ->+ m (Either LndError ())+ settleInvoice env =+ $(grpcRetry)+ . $(grpcSync)+ (RPC :: RPC LnGRPC.Invoices "settleInvoice")+ env++ subscribeSingleInvoice ::+ ($(tcc) m) =>+ (Invoice -> IO ()) ->+ LndEnv ->+ RHash ->+ m (Either LndError ())+ subscribeSingleInvoice =+ $(grpcSubscribe)+ (RPC :: RPC LnGRPC.Invoices "subscribeSingleInvoice")++ subscribeSingleInvoiceChan ::+ ($(tcc) m) =>+ Maybe (TChan (RHash, Invoice)) ->+ LndEnv ->+ RHash ->+ m (Either LndError ())+ subscribeSingleInvoiceChan mq env req = do+ q <- fromMaybeM (atomically newBroadcastTChan) $ pure mq+ subscribeSingleInvoice+ (\x -> atomically $ writeTChan q (req, x))+ env+ req++ subscribeInvoices ::+ ($(tcc) m) =>+ (Invoice -> IO ()) ->+ LndEnv ->+ SubscribeInvoicesRequest ->+ m (Either LndError ())+ subscribeInvoices =+ $(grpcSubscribe)+ (RPC :: RPC LnGRPC.Lightning "subscribeInvoices")++ subscribeInvoicesChan ::+ ($(tcc) m) =>+ Maybe (TChan (SubscribeInvoicesRequest, Invoice)) ->+ LndEnv ->+ SubscribeInvoicesRequest ->+ m (Either LndError ())+ subscribeInvoicesChan mq env req = do+ q <- fromMaybeM (atomically newBroadcastTChan) $ pure mq+ subscribeInvoices+ (\x -> atomically $ writeTChan q (req, x))+ env+ req++ subscribeChannelEvents ::+ ($(tcc) m) =>+ (ChannelEventUpdate -> IO ()) ->+ LndEnv ->+ m (Either LndError ())+ subscribeChannelEvents handler env =+ $(grpcSubscribe)+ (RPC :: RPC LnGRPC.Lightning "subscribeChannelEvents")+ handler+ env+ (defMessage :: LnGRPC.ChannelEventSubscription)++ subscribeChannelEventsChan ::+ ($(tcc) m) =>+ Maybe (TChan ((), ChannelEventUpdate)) ->+ LndEnv ->+ m (Either LndError ())+ subscribeChannelEventsChan mq env = do+ q <- fromMaybeM (atomically newBroadcastTChan) $ pure mq+ subscribeChannelEvents+ (\x -> atomically $ writeTChan q ((), x))+ env++ openChannel ::+ ($(tcc) m) =>+ (OpenStatusUpdate -> IO ()) ->+ LndEnv ->+ OpenChannelRequest ->+ m (Either LndError ())+ openChannel =+ $(grpcSubscribe)+ (RPC :: RPC LnGRPC.Lightning "openChannel")++ openChannelSync ::+ ($(tcc) m) =>+ LndEnv ->+ OpenChannelRequest ->+ m (Either LndError ChannelPoint)+ openChannelSync env =+ $(grpcSync)+ (RPC :: RPC LnGRPC.Lightning "openChannelSync")+ env++ listChannels ::+ ($(tcc) m) =>+ LndEnv ->+ ListChannelsRequest ->+ m (Either LndError [Channel])+ listChannels env =+ $(grpcRetry)+ . $(grpcSync)+ (RPC :: RPC LnGRPC.Lightning "listChannels")+ env++ listInvoices ::+ ($(tcc) m) =>+ LndEnv ->+ ListInvoiceRequest ->+ m (Either LndError ListInvoiceResponse)+ listInvoices env =+ $(grpcRetry)+ . $(grpcSync)+ (RPC :: RPC LnGRPC.Lightning "listInvoices")+ env++ closedChannels ::+ ($(tcc) m) =>+ LndEnv ->+ ClosedChannelsRequest ->+ m (Either LndError [ChannelCloseSummary])+ closedChannels env =+ $(grpcRetry)+ . $(grpcSync)+ (RPC :: RPC LnGRPC.Lightning "closedChannels")+ env++ closeChannel ::+ ($(tcc) m) =>+ (CloseStatusUpdate -> IO ()) ->+ LndEnv ->+ CloseChannelRequest ->+ m (Either LndError ())+ closeChannel =+ $(grpcSubscribe)+ (RPC :: RPC LnGRPC.Lightning "closeChannel")++ listPeers ::+ ($(tcc) m) =>+ LndEnv ->+ m (Either LndError [Peer])+ listPeers env =+ $(grpcRetry) $+ $(grpcSync)+ (RPC :: RPC LnGRPC.Lightning "listPeers")+ env+ (defMessage :: LnGRPC.ListPeersRequest)++ connectPeer ::+ ($(tcc) m) =>+ LndEnv ->+ ConnectPeerRequest ->+ m (Either LndError ())+ connectPeer env =+ $(grpcRetry)+ . $(grpcSync)+ (RPC :: RPC LnGRPC.Lightning "connectPeer")+ env++ lazyConnectPeer ::+ ($(tcc) m) =>+ LndEnv ->+ ConnectPeerRequest ->+ m (Either LndError ())+ lazyConnectPeer env cpr = do+ eps <- listPeers env+ case eps of+ Left e ->+ return $ Left e+ Right ps ->+ if any ((== pk) . pubKey) ps+ then return $ Right ()+ else connectPeer env cpr+ where+ pk = pubkey $ addr cpr++ sendPayment ::+ ($(tcc) m) =>+ LndEnv ->+ SendPaymentRequest ->+ m (Either LndError SendPaymentResponse)+ sendPayment env =+ $(grpcRetry)+ . $(grpcSync)+ (RPC :: RPC LnGRPC.Lightning "sendPaymentSync")+ env++ subscribeHtlcEvents ::+ ($(tcc) m) =>+ (HtlcEvent -> IO ()) ->+ LndEnv ->+ m (Either LndError ())+ subscribeHtlcEvents handler env =+ $(grpcSubscribe)+ (RPC :: RPC LnGRPC.Router "subscribeHtlcEvents")+ handler+ env+ (defMessage :: LnGRPC.SubscribeHtlcEventsRequest)++ decodePayReq ::+ ($(tcc) m) =>+ LndEnv ->+ PaymentRequest ->+ m (Either LndError PayReq)+ decodePayReq env =+ $(grpcRetry)+ . $(grpcSync)+ (RPC :: RPC LnGRPC.Lightning "decodePayReq")+ env++ lookupInvoice ::+ ($(tcc) m) =>+ LndEnv ->+ RHash ->+ m (Either LndError Invoice)+ lookupInvoice env =+ $(grpcRetry)+ . $(grpcSync)+ (RPC :: RPC LnGRPC.Lightning "lookupInvoice")+ env++ trackPaymentV2 ::+ ($(tcc) m) =>+ (Payment -> IO ()) ->+ LndEnv ->+ TrackPaymentRequest ->+ m (Either LndError ())+ trackPaymentV2 =+ $(grpcSubscribe)+ (RPC :: RPC LnGRPC.Router "trackPaymentV2")++ trackPaymentV2Chan ::+ ($(tcc) m) =>+ Maybe (TChan (TrackPaymentRequest, Payment)) ->+ LndEnv ->+ TrackPaymentRequest ->+ m (Either LndError ())+ trackPaymentV2Chan mc env req = do+ q <- fromMaybeM (atomically newBroadcastTChan) $ pure mc+ trackPaymentV2+ (\x -> atomically $ writeTChan q (req, x))+ env+ req++ pendingChannels ::+ ($(tcc) m) =>+ LndEnv ->+ m (Either LndError PendingChannelsResponse)+ pendingChannels env =+ $(grpcRetry) $+ $(grpcSync)+ (RPC :: RPC LnGRPC.Lightning "pendingChannels")+ env+ (defMessage :: LnGRPC.PendingChannelsRequest)+ |]+ where+ tcc = case k of+ RpcSilent -> [t|MonadIO|]+ RpcKatip -> [t|KatipContext|]+ grpcRetry = case k of+ RpcSilent -> [e|retrySilent|]+ RpcKatip -> [e|retryKatip|]+ grpcSync = case k of+ RpcSilent -> [e|grpcSyncSilent|]+ RpcKatip -> [e|grpcSyncKatip|]+ grpcSubscribe = case k of+ RpcSilent -> [e|grpcSubscribeSilent|]+ RpcKatip -> [e|grpcSubscribeKatip|]
+ src/LndClient/Util.hs view
@@ -0,0 +1,109 @@+{-# LANGUAGE FlexibleContexts #-}++module LndClient.Util+ ( retrySilent,+ retryKatip,+ safeFromIntegral,+ spawnLink,+ withSpawnLink,+ readTChanTimeout,+ maybeDeadlock,+ txIdParser,+ MicroSecondsDelay (..),+ )+where++import Control.Exception+import qualified Data.ByteString as BS (reverse)+import qualified Data.ByteString.Base16 as B16 (decode)+import LndClient.Data.Type+import LndClient.Import.External++newtype MicroSecondsDelay = MicroSecondsDelay Int++txIdParser :: Text -> Either LndError ByteString+txIdParser xr =+ case B16.decode $ encodeUtf8 xr of+ Right x -> Right $ BS.reverse x+ Left {} -> Left $ FromGrpcError "TX_ID_NON_HEX_BYTES"++retrySilent ::+ MonadIO m => m (Either LndError a) -> m (Either LndError a)+retrySilent = this 0+ where+ this (attempt0 :: Integer) f = do+ let attempt = attempt0 + 1+ res <- f+ case res of+ Left (LndError _) ->+ if attempt > 5+ then pure res+ else do+ liftIO $ delay 300000+ this attempt f+ _ ->+ pure res++retryKatip ::+ KatipContext m => m (Either LndError a) -> m (Either LndError a)+retryKatip = this 0+ where+ this (attempt0 :: Integer) f = do+ let attempt = attempt0 + 1+ res <- f+ case res of+ Left (LndError _) ->+ if attempt > 5+ then pure res+ else do+ liftIO $ delay 300000+ this attempt f+ _ ->+ pure res++safeFromIntegral ::+ forall a b. (Integral a, Integral b, Bounded b) => a -> Maybe b+safeFromIntegral x =+ if (intX >= intMin) && (intX <= intMax)+ then Just $ fromIntegral x+ else Nothing+ where+ intX = fromIntegral x :: Integer+ intMin = fromIntegral (minBound :: b) :: Integer+ intMax = fromIntegral (maxBound :: b) :: Integer++spawnLink :: (MonadUnliftIO m) => m a -> m (Async a)+spawnLink x =+ withRunInIO $ \run -> do+ pid <- async $ run x+ link pid+ pure pid++withSpawnLink :: (MonadUnliftIO m) => m a -> (Async a -> m b) -> m b+withSpawnLink action inner =+ withRunInIO $ \run ->+ withAsync+ (run action)+ ( \pid -> do+ link pid+ run $ inner pid+ )++readTChanTimeout ::+ MonadUnliftIO m => MicroSecondsDelay -> TChan a -> m (Maybe a)+readTChanTimeout t x = do+ t0 <- liftIO . registerDelay $ coerce t+ (join <$>) . maybeDeadlock . atomically $+ Just <$> readTChan x+ <|> Nothing <$ fini t0++maybeDeadlock :: MonadUnliftIO m => m a -> m (Maybe a)+maybeDeadlock x =+ withRunInIO $ \run ->+ (Just <$> run x)+ `catches` [ Handler $+ \BlockedIndefinitelyOnSTM -> pure Nothing+ ]++fini :: TVar Bool -> STM ()+fini = check <=< readTVar
+ src/LndClient/Watcher.hs view
@@ -0,0 +1,231 @@+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TupleSections #-}++-- | Generic async worker to automate LND gRPC subscriptions.+-- It watches any amount of subscriptions of the same type,+-- and re-subscribes if subscription was not terminated properly.+-- The only way to terminate subscription is to apply `unWatch` or+-- `unWatchUnit` function.+module LndClient.Watcher+ ( Watcher,+ spawnLink,+ spawnLinkUnit,+ watch,+ watchUnit,+ unWatch,+ unWatchUnit,+ dupLndTChan,+ delete,+ )+where++import qualified Data.Map as Map+import LndClient.Import hiding (newSev, spawnLink)++--+-- TODO : maybe pass OnSub | OnExit callbacks?+--++data Watcher a b+ = Watcher+ { watcherCmdChan :: TChan (Cmd a),+ watcherLndChan :: TChan (a, b),+ watcherProc :: Async ()+ }++--+-- TODO : introduce UnWatchAll+-- and use it in withEnv etc+--+data Cmd a+ = Watch a+ | UnWatch a++data Event a b+ = EventCmd (Cmd a)+ | EventLnd b+ | EventTask (a, Either LndError ())++data WatcherState a b m+ = WatcherState+ { watcherStateCmdChan :: TChan (Cmd a),+ watcherStateLndChan :: TChan (a, b),+ watcherStateSub :: a -> m (Either LndError ()),+ watcherStateHandler :: a -> Either LndError b -> m (),+ watcherStateTasks :: Map a (Async (a, Either LndError ())),+ watcherStateLndEnv :: LndEnv+ }++newSev :: WatcherState a b m -> Severity -> Severity+newSev w s = newSeverity (watcherStateLndEnv w) s Nothing Nothing++-- Spawn watcher where subscription accepts argument+-- for example `subscribeInvoicesChan`+spawnLink ::+ (Ord a, MonadUnliftIO m, KatipContext m) =>+ LndEnv ->+ (Maybe (TChan (a, b)) -> LndEnv -> a -> m (Either LndError ())) ->+ (Watcher a b -> a -> Either LndError b -> m ()) ->+ m (Watcher a b)+spawnLink env sub handler = do+ w <- withRunInIO $ \run -> do+ ( writeCmdChan,+ writeLndChan,+ readCmdChan,+ readLndChan+ ) <- atomically $ do+ writeCmdChan <- newBroadcastTChan+ writeLndChan <- newBroadcastTChan+ readCmdChan <- dupTChan writeCmdChan+ readLndChan <- dupTChan writeLndChan+ pure (writeCmdChan, writeLndChan, readCmdChan, readLndChan)+ let w =+ Watcher+ { watcherCmdChan = writeCmdChan,+ watcherLndChan = writeLndChan,+ watcherProc = error "PARTIAL_WATCHER"+ }+ varProc <- newEmptyMVar+ proc <-+ async . run $ do+ proc <- takeMVar varProc+ loop $+ WatcherState+ { watcherStateCmdChan = readCmdChan,+ watcherStateLndChan = readLndChan,+ watcherStateSub = sub (Just writeLndChan) env,+ watcherStateHandler = handler $ w {watcherProc = proc},+ watcherStateTasks = mempty,+ watcherStateLndEnv = env+ }+ liftIO $ putMVar varProc proc+ pure $ w {watcherProc = proc}+ let proc = watcherProc w+ liftIO $ link proc+ $(logTM) (newSeverity env InfoS Nothing Nothing)+ $ logStr+ $ ("Watcher spawned as " :: Text)+ <> show (asyncThreadId proc)+ pure w++-- Spawn watcher where subscription don't accept argument+-- for example `subscribeChannelEventsChan`+spawnLinkUnit ::+ (MonadUnliftIO m, KatipContext m) =>+ LndEnv ->+ (Maybe (TChan ((), b)) -> LndEnv -> m (Either LndError ())) ->+ (Watcher () b -> Either LndError b -> m ()) ->+ m (Watcher () b)+spawnLinkUnit env0 sub handler =+ spawnLink+ env0+ (\mChan env1 _ -> sub mChan env1)+ (\chan _ x -> handler chan x)++watch :: (MonadUnliftIO m) => Watcher a b -> a -> m ()+watch w = atomically . writeTChan (watcherCmdChan w) . Watch++watchUnit :: (MonadUnliftIO m) => Watcher () b -> m ()+watchUnit w = watch w ()++unWatch :: (MonadUnliftIO m) => Watcher a b -> a -> m ()+unWatch w = atomically . writeTChan (watcherCmdChan w) . UnWatch++unWatchUnit :: (MonadUnliftIO m) => Watcher () b -> m ()+unWatchUnit w = unWatch w ()++dupLndTChan :: (MonadIO m) => Watcher a b -> m (TChan (a, b))+dupLndTChan = atomically . dupTChan . watcherLndChan++--+-- TODO : atomically cancel all linked processes+--+delete :: (MonadUnliftIO m) => Watcher a b -> m ()+delete (Watcher _ _ proc) = liftIO $ cancel proc++loop ::+ (Ord a, MonadUnliftIO m, KatipContext m) =>+ WatcherState a b m ->+ m ()+loop w = do+ -- Here is the trick. Async watcher task can be already+ -- terminated, and runtime detects that there are no any references+ -- to watcherStateLndChan anymore.+ -- This may cause `BlockedIndefinitelyOnSTM`+ -- async exception, because all alternative <|> expressions are+ -- evaluated independently. In this case we need to retry+ -- alternative computation but without reading from+ -- watcherStateLndChan.+ $(logTM) (newSev w InfoS) "Watcher - cmd <|> lnd <|> task"+ me <- maybeDeadlock . atomically $ cmd <|> lnd <|> task+ event <- case me of+ Nothing -> do+ $(logTM) (newSev w InfoS) "Watcher - cmd <|> task"+ atomically $ cmd <|> task+ Just x -> return x+ $(logTM) (newSev w InfoS) "Watcher - applying event"+ case event of+ EventCmd x -> applyCmd w x+ EventLnd x -> applyLnd w (second Right x)+ EventTask x -> applyTask w x+ where+ cmd = EventCmd <$> readTChan (watcherStateCmdChan w)+ lnd = EventLnd <$> readTChan (watcherStateLndChan w)+ task =+ EventTask . snd+ <$> waitAnySTM (Map.elems $ watcherStateTasks w)++applyCmd ::+ (Ord a, MonadUnliftIO m, KatipContext m) =>+ WatcherState a b m ->+ Cmd a ->+ m ()+applyCmd w = \case+ Watch x -> do+ $(logTM) (newSev w InfoS) "Watcher - applying Cmd Watch"+ if isJust $ Map.lookup x ts+ then loop w+ else do+ t <-+ withRunInIO $ \run -> do+ t <- async . run $ (x,) <$> watcherStateSub w x+ link t+ return t+ loop w {watcherStateTasks = Map.insert x t ts}+ UnWatch x -> do+ $(logTM) (newSev w InfoS) "Watcher - applying Cmd UnWatch"+ case Map.lookup x ts of+ Nothing -> loop w+ Just t -> do+ liftIO $ cancel t+ loop w {watcherStateTasks = Map.delete x ts}+ where+ ts = watcherStateTasks w++applyLnd ::+ (Ord a, MonadUnliftIO m, KatipContext m) =>+ WatcherState a b m ->+ (a, Either LndError b) ->+ m ()+applyLnd w (x0, x1) = do+ $(logTM) (newSev w InfoS) "Watcher - applying Lnd"+ watcherStateHandler w x0 x1+ loop w++applyTask ::+ (Ord a, MonadUnliftIO m, KatipContext m) =>+ WatcherState a b m ->+ (a, Either LndError ()) ->+ m ()+applyTask w0 (x, res) = do+ $(logTM) (newSev w0 InfoS) "Watcher - applying Task"+ case Map.lookup x ts of+ Nothing -> loop w0+ Just t -> do+ case res of+ Left (e :: LndError) -> watcherStateHandler w0 x $ Left e+ Right () -> liftIO $ cancel t+ loop w1+ where+ ts = watcherStateTasks w0+ w1 = w0 {watcherStateTasks = Map.delete x ts}
+ src/LndGrpc/Client.hs view
@@ -0,0 +1,60 @@+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeFamilies #-}++module LndGrpc.Client+ ( runUnary,+ runStreamServer,+ )+where++import Data.ProtoLens.Message+import Data.ProtoLens.Service.Types (HasMethod, HasMethodImpl (..))+import GHC.TypeLits (Symbol)+import LndClient.Data.LndEnv+import LndClient.Import+import Network.GRPC.Client.Helpers+import qualified Network.GRPC.HTTP2.ProtoLens as ProtoLens+import Network.HPACK (HeaderList)+import Network.HTTP2.Client++runUnary ::+ ( MonadIO p,+ HasMethod s m,+ req ~ MethodInput s m,+ res ~ MethodOutput s m+ ) =>+ ProtoLens.RPC s (m :: Symbol) ->+ LndEnv ->+ req ->+ p (Either LndError res)+runUnary rpc env req = do+ res <- liftIO $ runClientIO $ do+ grpc <- setupGrpcClient $ envLndConfig env+ rawUnary rpc grpc req+ return $ case res of+ Right (Right (Right (_, _, (Right x)))) -> Right x+ Right (Right (Right (_, _, (Left e)))) -> Left $ LndError $ pack e+ Right (Right (Left e)) -> Left $ LndError ("LndGrpc response error, code: " <> show e)+ Right (Left e) -> Left $ LndError ("LndGrpc, TooMuchConcurrency error: " <> show e)+ Left e -> Left $ LndGrpcError e++runStreamServer ::+ ( MonadIO p,+ HasMethod s m,+ req ~ MethodInput s m,+ res ~ MethodOutput s m+ ) =>+ ProtoLens.RPC s (m :: Symbol) ->+ LndEnv ->+ req ->+ (HeaderList -> res -> ClientIO ()) ->+ p (Either LndError res)+runStreamServer rpc env req handler = do+ r <- liftIO $ runClientIO $ do+ grpc <- setupGrpcClient $ envLndConfig env+ rawStreamServer rpc grpc () req $ const handler+ return $ case r of+ Right (Right ((), _, _)) -> Right defMessage+ Right (Left e) -> Left $ LndError ("LndGrpc response error: " <> show e)+ Left e -> Left $ LndGrpcError e
+ src/Proto/InvoiceGrpc.hs view
@@ -0,0 +1,1568 @@+{- This file was auto-generated from invoice_grpc.proto by the proto-lens-protoc program. -}+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies, UndecidableInstances, GeneralizedNewtypeDeriving, MultiParamTypeClasses, FlexibleContexts, FlexibleInstances, PatternSynonyms, MagicHash, NoImplicitPrelude, DataKinds, BangPatterns, TypeApplications, OverloadedStrings, DerivingStrategies#-}+{-# OPTIONS_GHC -Wno-unused-imports#-}+{-# OPTIONS_GHC -Wno-duplicate-exports#-}+{-# OPTIONS_GHC -Wno-dodgy-exports#-}+module Proto.InvoiceGrpc (+ Invoices(..), AddHoldInvoiceRequest(), AddHoldInvoiceResp(),+ CancelInvoiceMsg(), CancelInvoiceResp(), SettleInvoiceMsg(),+ SettleInvoiceResp(), SubscribeSingleInvoiceRequest()+ ) where+import qualified Data.ProtoLens.Runtime.Control.DeepSeq as Control.DeepSeq+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Prism as Data.ProtoLens.Prism+import qualified Data.ProtoLens.Runtime.Prelude as Prelude+import qualified Data.ProtoLens.Runtime.Data.Int as Data.Int+import qualified Data.ProtoLens.Runtime.Data.Monoid as Data.Monoid+import qualified Data.ProtoLens.Runtime.Data.Word as Data.Word+import qualified Data.ProtoLens.Runtime.Data.ProtoLens as Data.ProtoLens+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Bytes as Data.ProtoLens.Encoding.Bytes+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Growing as Data.ProtoLens.Encoding.Growing+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Parser.Unsafe as Data.ProtoLens.Encoding.Parser.Unsafe+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Wire as Data.ProtoLens.Encoding.Wire+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Field as Data.ProtoLens.Field+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Message.Enum as Data.ProtoLens.Message.Enum+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Service.Types as Data.ProtoLens.Service.Types+import qualified Data.ProtoLens.Runtime.Lens.Family2 as Lens.Family2+import qualified Data.ProtoLens.Runtime.Lens.Family2.Unchecked as Lens.Family2.Unchecked+import qualified Data.ProtoLens.Runtime.Data.Text as Data.Text+import qualified Data.ProtoLens.Runtime.Data.Map as Data.Map+import qualified Data.ProtoLens.Runtime.Data.ByteString as Data.ByteString+import qualified Data.ProtoLens.Runtime.Data.ByteString.Char8 as Data.ByteString.Char8+import qualified Data.ProtoLens.Runtime.Data.Text.Encoding as Data.Text.Encoding+import qualified Data.ProtoLens.Runtime.Data.Vector as Data.Vector+import qualified Data.ProtoLens.Runtime.Data.Vector.Generic as Data.Vector.Generic+import qualified Data.ProtoLens.Runtime.Data.Vector.Unboxed as Data.Vector.Unboxed+import qualified Data.ProtoLens.Runtime.Text.Read as Text.Read+import qualified Proto.LndGrpc+{- | Fields :+ + * 'Proto.InvoiceGrpc_Fields.memo' @:: Lens' AddHoldInvoiceRequest Data.Text.Text@+ * 'Proto.InvoiceGrpc_Fields.hash' @:: Lens' AddHoldInvoiceRequest Data.ByteString.ByteString@+ * 'Proto.InvoiceGrpc_Fields.value' @:: Lens' AddHoldInvoiceRequest Data.Int.Int64@+ * 'Proto.InvoiceGrpc_Fields.valueMsat' @:: Lens' AddHoldInvoiceRequest Data.Int.Int64@+ * 'Proto.InvoiceGrpc_Fields.descriptionHash' @:: Lens' AddHoldInvoiceRequest Data.ByteString.ByteString@+ * 'Proto.InvoiceGrpc_Fields.expiry' @:: Lens' AddHoldInvoiceRequest Data.Int.Int64@+ * 'Proto.InvoiceGrpc_Fields.fallbackAddr' @:: Lens' AddHoldInvoiceRequest Data.Text.Text@+ * 'Proto.InvoiceGrpc_Fields.cltvExpiry' @:: Lens' AddHoldInvoiceRequest Data.Word.Word64@+ * 'Proto.InvoiceGrpc_Fields.routeHints' @:: Lens' AddHoldInvoiceRequest [Proto.LndGrpc.RouteHint]@+ * 'Proto.InvoiceGrpc_Fields.vec'routeHints' @:: Lens' AddHoldInvoiceRequest (Data.Vector.Vector Proto.LndGrpc.RouteHint)@+ * 'Proto.InvoiceGrpc_Fields.private' @:: Lens' AddHoldInvoiceRequest Prelude.Bool@ -}+data AddHoldInvoiceRequest+ = AddHoldInvoiceRequest'_constructor {_AddHoldInvoiceRequest'memo :: !Data.Text.Text,+ _AddHoldInvoiceRequest'hash :: !Data.ByteString.ByteString,+ _AddHoldInvoiceRequest'value :: !Data.Int.Int64,+ _AddHoldInvoiceRequest'valueMsat :: !Data.Int.Int64,+ _AddHoldInvoiceRequest'descriptionHash :: !Data.ByteString.ByteString,+ _AddHoldInvoiceRequest'expiry :: !Data.Int.Int64,+ _AddHoldInvoiceRequest'fallbackAddr :: !Data.Text.Text,+ _AddHoldInvoiceRequest'cltvExpiry :: !Data.Word.Word64,+ _AddHoldInvoiceRequest'routeHints :: !(Data.Vector.Vector Proto.LndGrpc.RouteHint),+ _AddHoldInvoiceRequest'private :: !Prelude.Bool,+ _AddHoldInvoiceRequest'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show AddHoldInvoiceRequest where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField AddHoldInvoiceRequest "memo" Data.Text.Text where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _AddHoldInvoiceRequest'memo+ (\ x__ y__ -> x__ {_AddHoldInvoiceRequest'memo = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField AddHoldInvoiceRequest "hash" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _AddHoldInvoiceRequest'hash+ (\ x__ y__ -> x__ {_AddHoldInvoiceRequest'hash = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField AddHoldInvoiceRequest "value" Data.Int.Int64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _AddHoldInvoiceRequest'value+ (\ x__ y__ -> x__ {_AddHoldInvoiceRequest'value = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField AddHoldInvoiceRequest "valueMsat" Data.Int.Int64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _AddHoldInvoiceRequest'valueMsat+ (\ x__ y__ -> x__ {_AddHoldInvoiceRequest'valueMsat = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField AddHoldInvoiceRequest "descriptionHash" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _AddHoldInvoiceRequest'descriptionHash+ (\ x__ y__ -> x__ {_AddHoldInvoiceRequest'descriptionHash = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField AddHoldInvoiceRequest "expiry" Data.Int.Int64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _AddHoldInvoiceRequest'expiry+ (\ x__ y__ -> x__ {_AddHoldInvoiceRequest'expiry = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField AddHoldInvoiceRequest "fallbackAddr" Data.Text.Text where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _AddHoldInvoiceRequest'fallbackAddr+ (\ x__ y__ -> x__ {_AddHoldInvoiceRequest'fallbackAddr = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField AddHoldInvoiceRequest "cltvExpiry" Data.Word.Word64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _AddHoldInvoiceRequest'cltvExpiry+ (\ x__ y__ -> x__ {_AddHoldInvoiceRequest'cltvExpiry = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField AddHoldInvoiceRequest "routeHints" [Proto.LndGrpc.RouteHint] where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _AddHoldInvoiceRequest'routeHints+ (\ x__ y__ -> x__ {_AddHoldInvoiceRequest'routeHints = y__}))+ (Lens.Family2.Unchecked.lens+ Data.Vector.Generic.toList+ (\ _ y__ -> Data.Vector.Generic.fromList y__))+instance Data.ProtoLens.Field.HasField AddHoldInvoiceRequest "vec'routeHints" (Data.Vector.Vector Proto.LndGrpc.RouteHint) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _AddHoldInvoiceRequest'routeHints+ (\ x__ y__ -> x__ {_AddHoldInvoiceRequest'routeHints = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField AddHoldInvoiceRequest "private" Prelude.Bool where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _AddHoldInvoiceRequest'private+ (\ x__ y__ -> x__ {_AddHoldInvoiceRequest'private = y__}))+ Prelude.id+instance Data.ProtoLens.Message AddHoldInvoiceRequest where+ messageName _ = Data.Text.pack "invoicesrpc.AddHoldInvoiceRequest"+ packedMessageDescriptor _+ = "\n\+ \\NAKAddHoldInvoiceRequest\DC2\DC2\n\+ \\EOTmemo\CAN\SOH \SOH(\tR\EOTmemo\DC2\DC2\n\+ \\EOThash\CAN\STX \SOH(\fR\EOThash\DC2\DC4\n\+ \\ENQvalue\CAN\ETX \SOH(\ETXR\ENQvalue\DC2\GS\n\+ \\n\+ \value_msat\CAN\n\+ \ \SOH(\ETXR\tvalueMsat\DC2)\n\+ \\DLEdescription_hash\CAN\EOT \SOH(\fR\SIdescriptionHash\DC2\SYN\n\+ \\ACKexpiry\CAN\ENQ \SOH(\ETXR\ACKexpiry\DC2#\n\+ \\rfallback_addr\CAN\ACK \SOH(\tR\ffallbackAddr\DC2\US\n\+ \\vcltv_expiry\CAN\a \SOH(\EOTR\n\+ \cltvExpiry\DC21\n\+ \\vroute_hints\CAN\b \ETX(\v2\DLE.lnrpc.RouteHintR\n\+ \routeHints\DC2\CAN\n\+ \\aprivate\CAN\t \SOH(\bR\aprivate"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ memo__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "memo"+ (Data.ProtoLens.ScalarField Data.ProtoLens.StringField ::+ Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"memo")) ::+ Data.ProtoLens.FieldDescriptor AddHoldInvoiceRequest+ hash__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "hash"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"hash")) ::+ Data.ProtoLens.FieldDescriptor AddHoldInvoiceRequest+ value__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "value"+ (Data.ProtoLens.ScalarField Data.ProtoLens.Int64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"value")) ::+ Data.ProtoLens.FieldDescriptor AddHoldInvoiceRequest+ valueMsat__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "value_msat"+ (Data.ProtoLens.ScalarField Data.ProtoLens.Int64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"valueMsat")) ::+ Data.ProtoLens.FieldDescriptor AddHoldInvoiceRequest+ descriptionHash__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "description_hash"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"descriptionHash")) ::+ Data.ProtoLens.FieldDescriptor AddHoldInvoiceRequest+ expiry__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "expiry"+ (Data.ProtoLens.ScalarField Data.ProtoLens.Int64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"expiry")) ::+ Data.ProtoLens.FieldDescriptor AddHoldInvoiceRequest+ fallbackAddr__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "fallback_addr"+ (Data.ProtoLens.ScalarField Data.ProtoLens.StringField ::+ Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"fallbackAddr")) ::+ Data.ProtoLens.FieldDescriptor AddHoldInvoiceRequest+ cltvExpiry__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "cltv_expiry"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"cltvExpiry")) ::+ Data.ProtoLens.FieldDescriptor AddHoldInvoiceRequest+ routeHints__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "route_hints"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor Proto.LndGrpc.RouteHint)+ (Data.ProtoLens.RepeatedField+ Data.ProtoLens.Unpacked+ (Data.ProtoLens.Field.field @"routeHints")) ::+ Data.ProtoLens.FieldDescriptor AddHoldInvoiceRequest+ private__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "private"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BoolField ::+ Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"private")) ::+ Data.ProtoLens.FieldDescriptor AddHoldInvoiceRequest+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, memo__field_descriptor),+ (Data.ProtoLens.Tag 2, hash__field_descriptor),+ (Data.ProtoLens.Tag 3, value__field_descriptor),+ (Data.ProtoLens.Tag 10, valueMsat__field_descriptor),+ (Data.ProtoLens.Tag 4, descriptionHash__field_descriptor),+ (Data.ProtoLens.Tag 5, expiry__field_descriptor),+ (Data.ProtoLens.Tag 6, fallbackAddr__field_descriptor),+ (Data.ProtoLens.Tag 7, cltvExpiry__field_descriptor),+ (Data.ProtoLens.Tag 8, routeHints__field_descriptor),+ (Data.ProtoLens.Tag 9, private__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _AddHoldInvoiceRequest'_unknownFields+ (\ x__ y__ -> x__ {_AddHoldInvoiceRequest'_unknownFields = y__})+ defMessage+ = AddHoldInvoiceRequest'_constructor+ {_AddHoldInvoiceRequest'memo = Data.ProtoLens.fieldDefault,+ _AddHoldInvoiceRequest'hash = Data.ProtoLens.fieldDefault,+ _AddHoldInvoiceRequest'value = Data.ProtoLens.fieldDefault,+ _AddHoldInvoiceRequest'valueMsat = Data.ProtoLens.fieldDefault,+ _AddHoldInvoiceRequest'descriptionHash = Data.ProtoLens.fieldDefault,+ _AddHoldInvoiceRequest'expiry = Data.ProtoLens.fieldDefault,+ _AddHoldInvoiceRequest'fallbackAddr = Data.ProtoLens.fieldDefault,+ _AddHoldInvoiceRequest'cltvExpiry = Data.ProtoLens.fieldDefault,+ _AddHoldInvoiceRequest'routeHints = Data.Vector.Generic.empty,+ _AddHoldInvoiceRequest'private = Data.ProtoLens.fieldDefault,+ _AddHoldInvoiceRequest'_unknownFields = []}+ parseMessage+ = let+ loop ::+ AddHoldInvoiceRequest+ -> Data.ProtoLens.Encoding.Growing.Growing Data.Vector.Vector Data.ProtoLens.Encoding.Growing.RealWorld Proto.LndGrpc.RouteHint+ -> Data.ProtoLens.Encoding.Bytes.Parser AddHoldInvoiceRequest+ loop x mutable'routeHints+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do frozen'routeHints <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ (Data.ProtoLens.Encoding.Growing.unsafeFreeze+ mutable'routeHints)+ (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields+ (\ !t -> Prelude.reverse t)+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"vec'routeHints")+ frozen'routeHints+ x))+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do value <- do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len)+ Data.ProtoLens.Encoding.Bytes.runEither+ (case Data.Text.Encoding.decodeUtf8' value of+ (Prelude.Left err)+ -> Prelude.Left (Prelude.show err)+ (Prelude.Right r) -> Prelude.Right r))+ "memo"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"memo") y x)+ mutable'routeHints+ 18+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "hash"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"hash") y x)+ mutable'routeHints+ 24+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "value"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"value") y x)+ mutable'routeHints+ 80+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "value_msat"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"valueMsat") y x)+ mutable'routeHints+ 34+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "description_hash"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"descriptionHash") y x)+ mutable'routeHints+ 40+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "expiry"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"expiry") y x)+ mutable'routeHints+ 50+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do value <- do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len)+ Data.ProtoLens.Encoding.Bytes.runEither+ (case Data.Text.Encoding.decodeUtf8' value of+ (Prelude.Left err)+ -> Prelude.Left (Prelude.show err)+ (Prelude.Right r) -> Prelude.Right r))+ "fallback_addr"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"fallbackAddr") y x)+ mutable'routeHints+ 56+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ Data.ProtoLens.Encoding.Bytes.getVarInt "cltv_expiry"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"cltvExpiry") y x)+ mutable'routeHints+ 66+ -> do !y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len)+ Data.ProtoLens.parseMessage)+ "route_hints"+ v <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ (Data.ProtoLens.Encoding.Growing.append mutable'routeHints y)+ loop x v+ 72+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ ((Prelude./=) 0) Data.ProtoLens.Encoding.Bytes.getVarInt)+ "private"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"private") y x)+ mutable'routeHints+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ mutable'routeHints+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do mutable'routeHints <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ Data.ProtoLens.Encoding.Growing.new+ loop Data.ProtoLens.defMessage mutable'routeHints)+ "AddHoldInvoiceRequest"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let _v = Lens.Family2.view (Data.ProtoLens.Field.field @"memo") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.Text.Encoding.encodeUtf8+ _v))+ ((Data.Monoid.<>)+ (let _v = Lens.Family2.view (Data.ProtoLens.Field.field @"hash") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 18)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ ((Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"value") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 24)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v))+ ((Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"valueMsat") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 80)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"descriptionHash") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 34)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ ((Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"expiry") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 40)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt+ Prelude.fromIntegral+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"fallbackAddr") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 50)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral+ (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.Text.Encoding.encodeUtf8+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"cltvExpiry") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 56)+ (Data.ProtoLens.Encoding.Bytes.putVarInt _v))+ ((Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.foldMapBuilder+ (\ _v+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 66)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral+ (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes+ bs))+ Data.ProtoLens.encodeMessage+ _v))+ (Lens.Family2.view+ (Data.ProtoLens.Field.field @"vec'routeHints") _x))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"private") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 72)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt+ (\ b -> if b then 1 else 0)+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view+ Data.ProtoLens.unknownFields _x)))))))))))+instance Control.DeepSeq.NFData AddHoldInvoiceRequest where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_AddHoldInvoiceRequest'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_AddHoldInvoiceRequest'memo x__)+ (Control.DeepSeq.deepseq+ (_AddHoldInvoiceRequest'hash x__)+ (Control.DeepSeq.deepseq+ (_AddHoldInvoiceRequest'value x__)+ (Control.DeepSeq.deepseq+ (_AddHoldInvoiceRequest'valueMsat x__)+ (Control.DeepSeq.deepseq+ (_AddHoldInvoiceRequest'descriptionHash x__)+ (Control.DeepSeq.deepseq+ (_AddHoldInvoiceRequest'expiry x__)+ (Control.DeepSeq.deepseq+ (_AddHoldInvoiceRequest'fallbackAddr x__)+ (Control.DeepSeq.deepseq+ (_AddHoldInvoiceRequest'cltvExpiry x__)+ (Control.DeepSeq.deepseq+ (_AddHoldInvoiceRequest'routeHints x__)+ (Control.DeepSeq.deepseq+ (_AddHoldInvoiceRequest'private x__) ()))))))))))+{- | Fields :+ + * 'Proto.InvoiceGrpc_Fields.paymentRequest' @:: Lens' AddHoldInvoiceResp Data.Text.Text@ -}+data AddHoldInvoiceResp+ = AddHoldInvoiceResp'_constructor {_AddHoldInvoiceResp'paymentRequest :: !Data.Text.Text,+ _AddHoldInvoiceResp'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show AddHoldInvoiceResp where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField AddHoldInvoiceResp "paymentRequest" Data.Text.Text where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _AddHoldInvoiceResp'paymentRequest+ (\ x__ y__ -> x__ {_AddHoldInvoiceResp'paymentRequest = y__}))+ Prelude.id+instance Data.ProtoLens.Message AddHoldInvoiceResp where+ messageName _ = Data.Text.pack "invoicesrpc.AddHoldInvoiceResp"+ packedMessageDescriptor _+ = "\n\+ \\DC2AddHoldInvoiceResp\DC2'\n\+ \\SIpayment_request\CAN\SOH \SOH(\tR\SOpaymentRequest"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ paymentRequest__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "payment_request"+ (Data.ProtoLens.ScalarField Data.ProtoLens.StringField ::+ Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"paymentRequest")) ::+ Data.ProtoLens.FieldDescriptor AddHoldInvoiceResp+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, paymentRequest__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _AddHoldInvoiceResp'_unknownFields+ (\ x__ y__ -> x__ {_AddHoldInvoiceResp'_unknownFields = y__})+ defMessage+ = AddHoldInvoiceResp'_constructor+ {_AddHoldInvoiceResp'paymentRequest = Data.ProtoLens.fieldDefault,+ _AddHoldInvoiceResp'_unknownFields = []}+ parseMessage+ = let+ loop ::+ AddHoldInvoiceResp+ -> Data.ProtoLens.Encoding.Bytes.Parser AddHoldInvoiceResp+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do value <- do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len)+ Data.ProtoLens.Encoding.Bytes.runEither+ (case Data.Text.Encoding.decodeUtf8' value of+ (Prelude.Left err)+ -> Prelude.Left (Prelude.show err)+ (Prelude.Right r) -> Prelude.Right r))+ "payment_request"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"paymentRequest") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "AddHoldInvoiceResp"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"paymentRequest") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.Text.Encoding.encodeUtf8+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x))+instance Control.DeepSeq.NFData AddHoldInvoiceResp where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_AddHoldInvoiceResp'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_AddHoldInvoiceResp'paymentRequest x__) ())+{- | Fields :+ + * 'Proto.InvoiceGrpc_Fields.paymentHash' @:: Lens' CancelInvoiceMsg Data.ByteString.ByteString@ -}+data CancelInvoiceMsg+ = CancelInvoiceMsg'_constructor {_CancelInvoiceMsg'paymentHash :: !Data.ByteString.ByteString,+ _CancelInvoiceMsg'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show CancelInvoiceMsg where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField CancelInvoiceMsg "paymentHash" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _CancelInvoiceMsg'paymentHash+ (\ x__ y__ -> x__ {_CancelInvoiceMsg'paymentHash = y__}))+ Prelude.id+instance Data.ProtoLens.Message CancelInvoiceMsg where+ messageName _ = Data.Text.pack "invoicesrpc.CancelInvoiceMsg"+ packedMessageDescriptor _+ = "\n\+ \\DLECancelInvoiceMsg\DC2!\n\+ \\fpayment_hash\CAN\SOH \SOH(\fR\vpaymentHash"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ paymentHash__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "payment_hash"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"paymentHash")) ::+ Data.ProtoLens.FieldDescriptor CancelInvoiceMsg+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, paymentHash__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _CancelInvoiceMsg'_unknownFields+ (\ x__ y__ -> x__ {_CancelInvoiceMsg'_unknownFields = y__})+ defMessage+ = CancelInvoiceMsg'_constructor+ {_CancelInvoiceMsg'paymentHash = Data.ProtoLens.fieldDefault,+ _CancelInvoiceMsg'_unknownFields = []}+ parseMessage+ = let+ loop ::+ CancelInvoiceMsg+ -> Data.ProtoLens.Encoding.Bytes.Parser CancelInvoiceMsg+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "payment_hash"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"paymentHash") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "CancelInvoiceMsg"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view (Data.ProtoLens.Field.field @"paymentHash") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x))+instance Control.DeepSeq.NFData CancelInvoiceMsg where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_CancelInvoiceMsg'_unknownFields x__)+ (Control.DeepSeq.deepseq (_CancelInvoiceMsg'paymentHash x__) ())+{- | Fields :+ -}+data CancelInvoiceResp+ = CancelInvoiceResp'_constructor {_CancelInvoiceResp'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show CancelInvoiceResp where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Message CancelInvoiceResp where+ messageName _ = Data.Text.pack "invoicesrpc.CancelInvoiceResp"+ packedMessageDescriptor _+ = "\n\+ \\DC1CancelInvoiceResp"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag = let in Data.Map.fromList []+ unknownFields+ = Lens.Family2.Unchecked.lens+ _CancelInvoiceResp'_unknownFields+ (\ x__ y__ -> x__ {_CancelInvoiceResp'_unknownFields = y__})+ defMessage+ = CancelInvoiceResp'_constructor+ {_CancelInvoiceResp'_unknownFields = []}+ parseMessage+ = let+ loop ::+ CancelInvoiceResp+ -> Data.ProtoLens.Encoding.Bytes.Parser CancelInvoiceResp+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of {+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x) }+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "CancelInvoiceResp"+ buildMessage+ = \ _x+ -> Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)+instance Control.DeepSeq.NFData CancelInvoiceResp where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_CancelInvoiceResp'_unknownFields x__) ()+{- | Fields :+ + * 'Proto.InvoiceGrpc_Fields.preimage' @:: Lens' SettleInvoiceMsg Data.ByteString.ByteString@ -}+data SettleInvoiceMsg+ = SettleInvoiceMsg'_constructor {_SettleInvoiceMsg'preimage :: !Data.ByteString.ByteString,+ _SettleInvoiceMsg'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show SettleInvoiceMsg where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField SettleInvoiceMsg "preimage" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SettleInvoiceMsg'preimage+ (\ x__ y__ -> x__ {_SettleInvoiceMsg'preimage = y__}))+ Prelude.id+instance Data.ProtoLens.Message SettleInvoiceMsg where+ messageName _ = Data.Text.pack "invoicesrpc.SettleInvoiceMsg"+ packedMessageDescriptor _+ = "\n\+ \\DLESettleInvoiceMsg\DC2\SUB\n\+ \\bpreimage\CAN\SOH \SOH(\fR\bpreimage"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ preimage__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "preimage"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"preimage")) ::+ Data.ProtoLens.FieldDescriptor SettleInvoiceMsg+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, preimage__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _SettleInvoiceMsg'_unknownFields+ (\ x__ y__ -> x__ {_SettleInvoiceMsg'_unknownFields = y__})+ defMessage+ = SettleInvoiceMsg'_constructor+ {_SettleInvoiceMsg'preimage = Data.ProtoLens.fieldDefault,+ _SettleInvoiceMsg'_unknownFields = []}+ parseMessage+ = let+ loop ::+ SettleInvoiceMsg+ -> Data.ProtoLens.Encoding.Bytes.Parser SettleInvoiceMsg+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "preimage"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"preimage") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "SettleInvoiceMsg"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"preimage") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x))+instance Control.DeepSeq.NFData SettleInvoiceMsg where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_SettleInvoiceMsg'_unknownFields x__)+ (Control.DeepSeq.deepseq (_SettleInvoiceMsg'preimage x__) ())+{- | Fields :+ -}+data SettleInvoiceResp+ = SettleInvoiceResp'_constructor {_SettleInvoiceResp'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show SettleInvoiceResp where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Message SettleInvoiceResp where+ messageName _ = Data.Text.pack "invoicesrpc.SettleInvoiceResp"+ packedMessageDescriptor _+ = "\n\+ \\DC1SettleInvoiceResp"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag = let in Data.Map.fromList []+ unknownFields+ = Lens.Family2.Unchecked.lens+ _SettleInvoiceResp'_unknownFields+ (\ x__ y__ -> x__ {_SettleInvoiceResp'_unknownFields = y__})+ defMessage+ = SettleInvoiceResp'_constructor+ {_SettleInvoiceResp'_unknownFields = []}+ parseMessage+ = let+ loop ::+ SettleInvoiceResp+ -> Data.ProtoLens.Encoding.Bytes.Parser SettleInvoiceResp+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of {+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x) }+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "SettleInvoiceResp"+ buildMessage+ = \ _x+ -> Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)+instance Control.DeepSeq.NFData SettleInvoiceResp where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_SettleInvoiceResp'_unknownFields x__) ()+{- | Fields :+ + * 'Proto.InvoiceGrpc_Fields.rHash' @:: Lens' SubscribeSingleInvoiceRequest Data.ByteString.ByteString@ -}+data SubscribeSingleInvoiceRequest+ = SubscribeSingleInvoiceRequest'_constructor {_SubscribeSingleInvoiceRequest'rHash :: !Data.ByteString.ByteString,+ _SubscribeSingleInvoiceRequest'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show SubscribeSingleInvoiceRequest where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField SubscribeSingleInvoiceRequest "rHash" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SubscribeSingleInvoiceRequest'rHash+ (\ x__ y__ -> x__ {_SubscribeSingleInvoiceRequest'rHash = y__}))+ Prelude.id+instance Data.ProtoLens.Message SubscribeSingleInvoiceRequest where+ messageName _+ = Data.Text.pack "invoicesrpc.SubscribeSingleInvoiceRequest"+ packedMessageDescriptor _+ = "\n\+ \\GSSubscribeSingleInvoiceRequest\DC2\NAK\n\+ \\ACKr_hash\CAN\STX \SOH(\fR\ENQrHashJ\EOT\b\SOH\DLE\STX"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ rHash__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "r_hash"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"rHash")) ::+ Data.ProtoLens.FieldDescriptor SubscribeSingleInvoiceRequest+ in+ Data.Map.fromList [(Data.ProtoLens.Tag 2, rHash__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _SubscribeSingleInvoiceRequest'_unknownFields+ (\ x__ y__+ -> x__ {_SubscribeSingleInvoiceRequest'_unknownFields = y__})+ defMessage+ = SubscribeSingleInvoiceRequest'_constructor+ {_SubscribeSingleInvoiceRequest'rHash = Data.ProtoLens.fieldDefault,+ _SubscribeSingleInvoiceRequest'_unknownFields = []}+ parseMessage+ = let+ loop ::+ SubscribeSingleInvoiceRequest+ -> Data.ProtoLens.Encoding.Bytes.Parser SubscribeSingleInvoiceRequest+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 18+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "r_hash"+ loop (Lens.Family2.set (Data.ProtoLens.Field.field @"rHash") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "SubscribeSingleInvoiceRequest"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"rHash") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 18)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x))+instance Control.DeepSeq.NFData SubscribeSingleInvoiceRequest where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_SubscribeSingleInvoiceRequest'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_SubscribeSingleInvoiceRequest'rHash x__) ())+data Invoices = Invoices {}+instance Data.ProtoLens.Service.Types.Service Invoices where+ type ServiceName Invoices = "Invoices"+ type ServicePackage Invoices = "invoicesrpc"+ type ServiceMethods Invoices = '["addHoldInvoice",+ "cancelInvoice",+ "settleInvoice",+ "subscribeSingleInvoice"]+instance Data.ProtoLens.Service.Types.HasMethodImpl Invoices "subscribeSingleInvoice" where+ type MethodName Invoices "subscribeSingleInvoice" = "SubscribeSingleInvoice"+ type MethodInput Invoices "subscribeSingleInvoice" = SubscribeSingleInvoiceRequest+ type MethodOutput Invoices "subscribeSingleInvoice" = Proto.LndGrpc.Invoice+ type MethodStreamingType Invoices "subscribeSingleInvoice" = 'Data.ProtoLens.Service.Types.ServerStreaming+instance Data.ProtoLens.Service.Types.HasMethodImpl Invoices "cancelInvoice" where+ type MethodName Invoices "cancelInvoice" = "CancelInvoice"+ type MethodInput Invoices "cancelInvoice" = CancelInvoiceMsg+ type MethodOutput Invoices "cancelInvoice" = CancelInvoiceResp+ type MethodStreamingType Invoices "cancelInvoice" = 'Data.ProtoLens.Service.Types.NonStreaming+instance Data.ProtoLens.Service.Types.HasMethodImpl Invoices "addHoldInvoice" where+ type MethodName Invoices "addHoldInvoice" = "AddHoldInvoice"+ type MethodInput Invoices "addHoldInvoice" = AddHoldInvoiceRequest+ type MethodOutput Invoices "addHoldInvoice" = AddHoldInvoiceResp+ type MethodStreamingType Invoices "addHoldInvoice" = 'Data.ProtoLens.Service.Types.NonStreaming+instance Data.ProtoLens.Service.Types.HasMethodImpl Invoices "settleInvoice" where+ type MethodName Invoices "settleInvoice" = "SettleInvoice"+ type MethodInput Invoices "settleInvoice" = SettleInvoiceMsg+ type MethodOutput Invoices "settleInvoice" = SettleInvoiceResp+ type MethodStreamingType Invoices "settleInvoice" = 'Data.ProtoLens.Service.Types.NonStreaming+packedFileDescriptor :: Data.ByteString.ByteString+packedFileDescriptor+ = "\n\+ \\DC2invoice_grpc.proto\DC2\vinvoicesrpc\SUB\SOlnd_grpc.proto\"5\n\+ \\DLECancelInvoiceMsg\DC2!\n\+ \\fpayment_hash\CAN\SOH \SOH(\fR\vpaymentHash\"\DC3\n\+ \\DC1CancelInvoiceResp\"\202\STX\n\+ \\NAKAddHoldInvoiceRequest\DC2\DC2\n\+ \\EOTmemo\CAN\SOH \SOH(\tR\EOTmemo\DC2\DC2\n\+ \\EOThash\CAN\STX \SOH(\fR\EOThash\DC2\DC4\n\+ \\ENQvalue\CAN\ETX \SOH(\ETXR\ENQvalue\DC2\GS\n\+ \\n\+ \value_msat\CAN\n\+ \ \SOH(\ETXR\tvalueMsat\DC2)\n\+ \\DLEdescription_hash\CAN\EOT \SOH(\fR\SIdescriptionHash\DC2\SYN\n\+ \\ACKexpiry\CAN\ENQ \SOH(\ETXR\ACKexpiry\DC2#\n\+ \\rfallback_addr\CAN\ACK \SOH(\tR\ffallbackAddr\DC2\US\n\+ \\vcltv_expiry\CAN\a \SOH(\EOTR\n\+ \cltvExpiry\DC21\n\+ \\vroute_hints\CAN\b \ETX(\v2\DLE.lnrpc.RouteHintR\n\+ \routeHints\DC2\CAN\n\+ \\aprivate\CAN\t \SOH(\bR\aprivate\"=\n\+ \\DC2AddHoldInvoiceResp\DC2'\n\+ \\SIpayment_request\CAN\SOH \SOH(\tR\SOpaymentRequest\".\n\+ \\DLESettleInvoiceMsg\DC2\SUB\n\+ \\bpreimage\CAN\SOH \SOH(\fR\bpreimage\"\DC3\n\+ \\DC1SettleInvoiceResp\"<\n\+ \\GSSubscribeSingleInvoiceRequest\DC2\NAK\n\+ \\ACKr_hash\CAN\STX \SOH(\fR\ENQrHashJ\EOT\b\SOH\DLE\STX2\217\STX\n\+ \\bInvoices\DC2V\n\+ \\SYNSubscribeSingleInvoice\DC2*.invoicesrpc.SubscribeSingleInvoiceRequest\SUB\SO.lnrpc.Invoice0\SOH\DC2N\n\+ \\rCancelInvoice\DC2\GS.invoicesrpc.CancelInvoiceMsg\SUB\RS.invoicesrpc.CancelInvoiceResp\DC2U\n\+ \\SOAddHoldInvoice\DC2\".invoicesrpc.AddHoldInvoiceRequest\SUB\US.invoicesrpc.AddHoldInvoiceResp\DC2N\n\+ \\rSettleInvoice\DC2\GS.invoicesrpc.SettleInvoiceMsg\SUB\RS.invoicesrpc.SettleInvoiceRespB3Z1github.com/lightningnetwork/lnd/lnrpc/invoicesrpcJ\242\FS\n\+ \\ACK\DC2\EOT\STX\NUL{\SOH\n\+ \\147\SOH\n\+ \\SOH\f\DC2\ETX\STX\NUL\DC22\136\SOHsource https://raw.githubusercontent.com/lightningnetwork/lnd/c733c139e95a6ef4e5f9ac88b43328ac96c333ef/lnrpc/invoicesrpc/invoices.proto\n\+ \\n\+ \\t\n\+ \\STX\ETX\NUL\DC2\ETX\EOT\NUL\CAN\n\+ \\b\n\+ \\SOH\STX\DC2\ETX\ACK\NUL\DC4\n\+ \\b\n\+ \\SOH\b\DC2\ETX\b\NULH\n\+ \\t\n\+ \\STX\b\v\DC2\ETX\b\NULH\n\+ \d\n\+ \\STX\ACK\NUL\DC2\EOT\f\NUL'\SOH\SUBX Invoices is a service that can be used to create, accept, settle and cancel\n\+ \ invoices.\n\+ \\n\+ \\n\+ \\n\+ \\ETX\ACK\NUL\SOH\DC2\ETX\f\b\DLE\n\+ \\215\SOH\n\+ \\EOT\ACK\NUL\STX\NUL\DC2\EOT\DC2\EOT\DC3'\SUB\200\SOH\n\+ \SubscribeSingleInvoice returns a uni-directional stream (server -> client)\n\+ \to notify the client of state transitions of the specified invoice.\n\+ \Initially the current invoice state is always sent out.\n\+ \\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\NUL\SOH\DC2\ETX\DC2\b\RS\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\NUL\STX\DC2\ETX\DC2 =\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\NUL\ACK\DC2\ETX\DC3\DC1\ETB\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\NUL\ETX\DC2\ETX\DC3\CAN%\n\+ \\172\SOH\n\+ \\EOT\ACK\NUL\STX\SOH\DC2\ETX\SUB\EOTE\SUB\158\SOH\n\+ \CancelInvoice cancels a currently open invoice. If the invoice is already\n\+ \canceled, this call will succeed. If the invoice is already settled, it will\n\+ \fail.\n\+ \\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\SOH\SOH\DC2\ETX\SUB\b\NAK\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\SOH\STX\DC2\ETX\SUB\ETB'\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\SOH\ETX\DC2\ETX\SUB2C\n\+ \n\n\+ \\EOT\ACK\NUL\STX\STX\DC2\ETX \EOTL\SUBa\n\+ \AddHoldInvoice creates a hold invoice. It ties the invoice to the hash\n\+ \supplied in the request.\n\+ \\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\STX\SOH\DC2\ETX \b\SYN\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\STX\STX\DC2\ETX \CAN-\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\STX\ETX\DC2\ETX 8J\n\+ \t\n\+ \\EOT\ACK\NUL\STX\ETX\DC2\ETX&\EOTE\SUBg\n\+ \SettleInvoice settles an accepted invoice. If the invoice is already\n\+ \settled, this call will succeed.\n\+ \\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\ETX\SOH\DC2\ETX&\b\NAK\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\ETX\STX\DC2\ETX&\ETB'\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\ETX\ETX\DC2\ETX&2C\n\+ \\n\+ \\n\+ \\STX\EOT\NUL\DC2\EOT)\NUL,\SOH\n\+ \\n\+ \\n\+ \\ETX\EOT\NUL\SOH\DC2\ETX)\b\CAN\n\+ \B\n\+ \\EOT\EOT\NUL\STX\NUL\DC2\ETX+\EOT\ESC\SUB5 Hash corresponding to the (hold) invoice to cancel.\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\NUL\EOT\DC2\EOT+\EOT)\SUB\n\+ \\f\n\+ \\ENQ\EOT\NUL\STX\NUL\ENQ\DC2\ETX+\EOT\t\n\+ \\f\n\+ \\ENQ\EOT\NUL\STX\NUL\SOH\DC2\ETX+\n\+ \\SYN\n\+ \\f\n\+ \\ENQ\EOT\NUL\STX\NUL\ETX\DC2\ETX+\EM\SUB\n\+ \\n\+ \\n\+ \\STX\EOT\SOH\DC2\EOT-\NUL.\SOH\n\+ \\n\+ \\n\+ \\ETX\EOT\SOH\SOH\DC2\ETX-\b\EM\n\+ \\n\+ \\n\+ \\STX\EOT\STX\DC2\EOT0\NULb\SOH\n\+ \\n\+ \\n\+ \\ETX\EOT\STX\SOH\DC2\ETX0\b\GS\n\+ \\252\SOH\n\+ \\EOT\EOT\STX\STX\NUL\DC2\ETX7\EOT\DC4\SUB\238\SOH\n\+ \An optional memo to attach along with the invoice. Used for record keeping\n\+ \purposes for the invoice's creator, and will also be set in the description\n\+ \field of the encoded payment request if the description_hash field is not\n\+ \being used.\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\NUL\EOT\DC2\EOT7\EOT0\US\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\NUL\ENQ\DC2\ETX7\EOT\n\+ \\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\NUL\SOH\DC2\ETX7\v\SI\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\NUL\ETX\DC2\ETX7\DC2\DC3\n\+ \'\n\+ \\EOT\EOT\STX\STX\SOH\DC2\ETX:\EOT\DC3\SUB\SUB The hash of the preimage\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\SOH\EOT\DC2\EOT:\EOT7\DC4\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\SOH\ENQ\DC2\ETX:\EOT\t\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\SOH\SOH\DC2\ETX:\n\+ \\SO\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\SOH\ETX\DC2\ETX:\DC1\DC2\n\+ \m\n\+ \\EOT\EOT\STX\STX\STX\DC2\ETXA\EOT\DC4\SUB`\n\+ \The value of this invoice in satoshis\n\+ \\n\+ \The fields value and value_msat are mutually exclusive.\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\STX\EOT\DC2\EOTA\EOT:\DC3\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\STX\ENQ\DC2\ETXA\EOT\t\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\STX\SOH\DC2\ETXA\n\+ \\SI\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\STX\ETX\DC2\ETXA\DC2\DC3\n\+ \r\n\+ \\EOT\EOT\STX\STX\ETX\DC2\ETXH\EOT\SUB\SUBe\n\+ \The value of this invoice in millisatoshis\n\+ \\n\+ \The fields value and value_msat are mutually exclusive.\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\ETX\EOT\DC2\EOTH\EOTA\DC4\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\ETX\ENQ\DC2\ETXH\EOT\t\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\ETX\SOH\DC2\ETXH\n\+ \\DC4\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\ETX\ETX\DC2\ETXH\ETB\EM\n\+ \\194\SOH\n\+ \\EOT\EOT\STX\STX\EOT\DC2\ETXO\EOT\US\SUB\180\SOH\n\+ \Hash (SHA-256) of a description of the payment. Used if the description of\n\+ \payment (memo) is too long to naturally fit within the description field\n\+ \of an encoded payment request.\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\EOT\EOT\DC2\EOTO\EOTH\SUB\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\EOT\ENQ\DC2\ETXO\EOT\t\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\EOT\SOH\DC2\ETXO\n\+ \\SUB\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\EOT\ETX\DC2\ETXO\GS\RS\n\+ \P\n\+ \\EOT\EOT\STX\STX\ENQ\DC2\ETXR\EOT\NAK\SUBC Payment request expiry time in seconds. Default is 3600 (1 hour).\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\ENQ\EOT\DC2\EOTR\EOTO\US\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\ENQ\ENQ\DC2\ETXR\EOT\t\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\ENQ\SOH\DC2\ETXR\n\+ \\DLE\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\ENQ\ETX\DC2\ETXR\DC3\DC4\n\+ \)\n\+ \\EOT\EOT\STX\STX\ACK\DC2\ETXU\EOT\GS\SUB\FS Fallback on-chain address.\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\ACK\EOT\DC2\EOTU\EOTR\NAK\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\ACK\ENQ\DC2\ETXU\EOT\n\+ \\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\ACK\SOH\DC2\ETXU\v\CAN\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\ACK\ETX\DC2\ETXU\ESC\FS\n\+ \T\n\+ \\EOT\EOT\STX\STX\a\DC2\ETXX\EOT\ESC\SUBG Delta to use for the time-lock of the CLTV extended to the final hop.\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\a\EOT\DC2\EOTX\EOTU\GS\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\a\ENQ\DC2\ETXX\EOT\n\+ \\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\a\SOH\DC2\ETXX\v\SYN\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\a\ETX\DC2\ETXX\EM\SUB\n\+ \n\n\+ \\EOT\EOT\STX\STX\b\DC2\ETX^\EOT-\SUBa\n\+ \Route hints that can each be individually used to assist in reaching the\n\+ \invoice's destination.\n\+ \\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\b\EOT\DC2\ETX^\EOT\f\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\b\ACK\DC2\ETX^\r\FS\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\b\SOH\DC2\ETX^\GS(\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\b\ETX\DC2\ETX^+,\n\+ \V\n\+ \\EOT\EOT\STX\STX\t\DC2\ETXa\EOT\NAK\SUBI Whether this invoice should include routing hints for private channels.\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\t\EOT\DC2\EOTa\EOT^-\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\t\ENQ\DC2\ETXa\EOT\b\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\t\SOH\DC2\ETXa\t\DLE\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\t\ETX\DC2\ETXa\DC3\DC4\n\+ \\n\+ \\n\+ \\STX\EOT\ETX\DC2\EOTd\NULk\SOH\n\+ \\n\+ \\n\+ \\ETX\EOT\ETX\SOH\DC2\ETXd\b\SUB\n\+ \\188\SOH\n\+ \\EOT\EOT\ETX\STX\NUL\DC2\ETXj\EOT\US\SUB\174\SOH\n\+ \A bare-bones invoice for a payment within the Lightning Network. With the\n\+ \details of the invoice, the sender has all the data necessary to send a\n\+ \payment to the recipient.\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\ETX\STX\NUL\EOT\DC2\EOTj\EOTd\FS\n\+ \\f\n\+ \\ENQ\EOT\ETX\STX\NUL\ENQ\DC2\ETXj\EOT\n\+ \\n\+ \\f\n\+ \\ENQ\EOT\ETX\STX\NUL\SOH\DC2\ETXj\v\SUB\n\+ \\f\n\+ \\ENQ\EOT\ETX\STX\NUL\ETX\DC2\ETXj\GS\RS\n\+ \\n\+ \\n\+ \\STX\EOT\EOT\DC2\EOTm\NULq\SOH\n\+ \\n\+ \\n\+ \\ETX\EOT\EOT\SOH\DC2\ETXm\b\CAN\n\+ \_\n\+ \\EOT\EOT\EOT\STX\NUL\DC2\ETXp\EOT\ETB\SUBR Externally discovered pre-image that should be used to settle the hold\n\+ \ invoice.\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\EOT\STX\NUL\EOT\DC2\EOTp\EOTm\SUB\n\+ \\f\n\+ \\ENQ\EOT\EOT\STX\NUL\ENQ\DC2\ETXp\EOT\t\n\+ \\f\n\+ \\ENQ\EOT\EOT\STX\NUL\SOH\DC2\ETXp\n\+ \\DC2\n\+ \\f\n\+ \\ENQ\EOT\EOT\STX\NUL\ETX\DC2\ETXp\NAK\SYN\n\+ \\n\+ \\n\+ \\STX\EOT\ENQ\DC2\EOTs\NULt\SOH\n\+ \\n\+ \\n\+ \\ETX\EOT\ENQ\SOH\DC2\ETXs\b\EM\n\+ \\n\+ \\n\+ \\STX\EOT\ACK\DC2\EOTv\NUL{\SOH\n\+ \\n\+ \\n\+ \\ETX\EOT\ACK\SOH\DC2\ETXv\b%\n\+ \\n\+ \\n\+ \\ETX\EOT\ACK\t\DC2\ETXw\EOT\SI\n\+ \\v\n\+ \\EOT\EOT\ACK\t\NUL\DC2\ETXw\r\SO\n\+ \\f\n\+ \\ENQ\EOT\ACK\t\NUL\SOH\DC2\ETXw\r\SO\n\+ \\f\n\+ \\ENQ\EOT\ACK\t\NUL\STX\DC2\ETXw\r\SO\n\+ \H\n\+ \\EOT\EOT\ACK\STX\NUL\DC2\ETXz\EOT\NAK\SUB; Hash corresponding to the (hold) invoice to subscribe to.\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\ACK\STX\NUL\EOT\DC2\EOTz\EOTw\SI\n\+ \\f\n\+ \\ENQ\EOT\ACK\STX\NUL\ENQ\DC2\ETXz\EOT\t\n\+ \\f\n\+ \\ENQ\EOT\ACK\STX\NUL\SOH\DC2\ETXz\n\+ \\DLE\n\+ \\f\n\+ \\ENQ\EOT\ACK\STX\NUL\ETX\DC2\ETXz\DC3\DC4b\ACKproto3"
+ src/Proto/InvoiceGrpc_Fields.hs view
@@ -0,0 +1,114 @@+{- This file was auto-generated from invoice_grpc.proto by the proto-lens-protoc program. -}+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies, UndecidableInstances, GeneralizedNewtypeDeriving, MultiParamTypeClasses, FlexibleContexts, FlexibleInstances, PatternSynonyms, MagicHash, NoImplicitPrelude, DataKinds, BangPatterns, TypeApplications, OverloadedStrings, DerivingStrategies#-}+{-# OPTIONS_GHC -Wno-unused-imports#-}+{-# OPTIONS_GHC -Wno-duplicate-exports#-}+{-# OPTIONS_GHC -Wno-dodgy-exports#-}+module Proto.InvoiceGrpc_Fields where+import qualified Data.ProtoLens.Runtime.Prelude as Prelude+import qualified Data.ProtoLens.Runtime.Data.Int as Data.Int+import qualified Data.ProtoLens.Runtime.Data.Monoid as Data.Monoid+import qualified Data.ProtoLens.Runtime.Data.Word as Data.Word+import qualified Data.ProtoLens.Runtime.Data.ProtoLens as Data.ProtoLens+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Bytes as Data.ProtoLens.Encoding.Bytes+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Growing as Data.ProtoLens.Encoding.Growing+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Parser.Unsafe as Data.ProtoLens.Encoding.Parser.Unsafe+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Wire as Data.ProtoLens.Encoding.Wire+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Field as Data.ProtoLens.Field+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Message.Enum as Data.ProtoLens.Message.Enum+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Service.Types as Data.ProtoLens.Service.Types+import qualified Data.ProtoLens.Runtime.Lens.Family2 as Lens.Family2+import qualified Data.ProtoLens.Runtime.Lens.Family2.Unchecked as Lens.Family2.Unchecked+import qualified Data.ProtoLens.Runtime.Data.Text as Data.Text+import qualified Data.ProtoLens.Runtime.Data.Map as Data.Map+import qualified Data.ProtoLens.Runtime.Data.ByteString as Data.ByteString+import qualified Data.ProtoLens.Runtime.Data.ByteString.Char8 as Data.ByteString.Char8+import qualified Data.ProtoLens.Runtime.Data.Text.Encoding as Data.Text.Encoding+import qualified Data.ProtoLens.Runtime.Data.Vector as Data.Vector+import qualified Data.ProtoLens.Runtime.Data.Vector.Generic as Data.Vector.Generic+import qualified Data.ProtoLens.Runtime.Data.Vector.Unboxed as Data.Vector.Unboxed+import qualified Data.ProtoLens.Runtime.Text.Read as Text.Read+import qualified Proto.LndGrpc+cltvExpiry ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "cltvExpiry" a) =>+ Lens.Family2.LensLike' f s a+cltvExpiry = Data.ProtoLens.Field.field @"cltvExpiry"+descriptionHash ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "descriptionHash" a) =>+ Lens.Family2.LensLike' f s a+descriptionHash = Data.ProtoLens.Field.field @"descriptionHash"+expiry ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "expiry" a) =>+ Lens.Family2.LensLike' f s a+expiry = Data.ProtoLens.Field.field @"expiry"+fallbackAddr ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "fallbackAddr" a) =>+ Lens.Family2.LensLike' f s a+fallbackAddr = Data.ProtoLens.Field.field @"fallbackAddr"+hash ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "hash" a) =>+ Lens.Family2.LensLike' f s a+hash = Data.ProtoLens.Field.field @"hash"+memo ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "memo" a) =>+ Lens.Family2.LensLike' f s a+memo = Data.ProtoLens.Field.field @"memo"+paymentHash ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "paymentHash" a) =>+ Lens.Family2.LensLike' f s a+paymentHash = Data.ProtoLens.Field.field @"paymentHash"+paymentRequest ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "paymentRequest" a) =>+ Lens.Family2.LensLike' f s a+paymentRequest = Data.ProtoLens.Field.field @"paymentRequest"+preimage ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "preimage" a) =>+ Lens.Family2.LensLike' f s a+preimage = Data.ProtoLens.Field.field @"preimage"+private ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "private" a) =>+ Lens.Family2.LensLike' f s a+private = Data.ProtoLens.Field.field @"private"+rHash ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "rHash" a) =>+ Lens.Family2.LensLike' f s a+rHash = Data.ProtoLens.Field.field @"rHash"+routeHints ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "routeHints" a) =>+ Lens.Family2.LensLike' f s a+routeHints = Data.ProtoLens.Field.field @"routeHints"+value ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "value" a) =>+ Lens.Family2.LensLike' f s a+value = Data.ProtoLens.Field.field @"value"+valueMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "valueMsat" a) =>+ Lens.Family2.LensLike' f s a+valueMsat = Data.ProtoLens.Field.field @"valueMsat"+vec'routeHints ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'routeHints" a) =>+ Lens.Family2.LensLike' f s a+vec'routeHints = Data.ProtoLens.Field.field @"vec'routeHints"
+ src/Proto/LndGrpc.hs view
file too large to diff
+ src/Proto/LndGrpc_Fields.hs view
@@ -0,0 +1,3320 @@+{- This file was auto-generated from lnd_grpc.proto by the proto-lens-protoc program. -}+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies, UndecidableInstances, GeneralizedNewtypeDeriving, MultiParamTypeClasses, FlexibleContexts, FlexibleInstances, PatternSynonyms, MagicHash, NoImplicitPrelude, DataKinds, BangPatterns, TypeApplications, OverloadedStrings, DerivingStrategies#-}+{-# OPTIONS_GHC -Wno-unused-imports#-}+{-# OPTIONS_GHC -Wno-duplicate-exports#-}+{-# OPTIONS_GHC -Wno-dodgy-exports#-}+module Proto.LndGrpc_Fields where+import qualified Data.ProtoLens.Runtime.Prelude as Prelude+import qualified Data.ProtoLens.Runtime.Data.Int as Data.Int+import qualified Data.ProtoLens.Runtime.Data.Monoid as Data.Monoid+import qualified Data.ProtoLens.Runtime.Data.Word as Data.Word+import qualified Data.ProtoLens.Runtime.Data.ProtoLens as Data.ProtoLens+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Bytes as Data.ProtoLens.Encoding.Bytes+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Growing as Data.ProtoLens.Encoding.Growing+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Parser.Unsafe as Data.ProtoLens.Encoding.Parser.Unsafe+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Wire as Data.ProtoLens.Encoding.Wire+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Field as Data.ProtoLens.Field+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Message.Enum as Data.ProtoLens.Message.Enum+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Service.Types as Data.ProtoLens.Service.Types+import qualified Data.ProtoLens.Runtime.Lens.Family2 as Lens.Family2+import qualified Data.ProtoLens.Runtime.Lens.Family2.Unchecked as Lens.Family2.Unchecked+import qualified Data.ProtoLens.Runtime.Data.Text as Data.Text+import qualified Data.ProtoLens.Runtime.Data.Map as Data.Map+import qualified Data.ProtoLens.Runtime.Data.ByteString as Data.ByteString+import qualified Data.ProtoLens.Runtime.Data.ByteString.Char8 as Data.ByteString.Char8+import qualified Data.ProtoLens.Runtime.Data.Text.Encoding as Data.Text.Encoding+import qualified Data.ProtoLens.Runtime.Data.Vector as Data.Vector+import qualified Data.ProtoLens.Runtime.Data.Vector.Generic as Data.Vector.Generic+import qualified Data.ProtoLens.Runtime.Data.Vector.Unboxed as Data.Vector.Unboxed+import qualified Data.ProtoLens.Runtime.Text.Read as Text.Read+abandoned ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "abandoned" a) =>+ Lens.Family2.LensLike' f s a+abandoned = Data.ProtoLens.Field.field @"abandoned"+accept ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "accept" a) =>+ Lens.Family2.LensLike' f s a+accept = Data.ProtoLens.Field.field @"accept"+acceptHeight ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "acceptHeight" a) =>+ Lens.Family2.LensLike' f s a+acceptHeight = Data.ProtoLens.Field.field @"acceptHeight"+acceptTime ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "acceptTime" a) =>+ Lens.Family2.LensLike' f s a+acceptTime = Data.ProtoLens.Field.field @"acceptTime"+account ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "account" a) =>+ Lens.Family2.LensLike' f s a+account = Data.ProtoLens.Field.field @"account"+accountBalance ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "accountBalance" a) =>+ Lens.Family2.LensLike' f s a+accountBalance = Data.ProtoLens.Field.field @"accountBalance"+action ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "action" a) =>+ Lens.Family2.LensLike' f s a+action = Data.ProtoLens.Field.field @"action"+actions ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "actions" a) =>+ Lens.Family2.LensLike' f s a+actions = Data.ProtoLens.Field.field @"actions"+active ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "active" a) =>+ Lens.Family2.LensLike' f s a+active = Data.ProtoLens.Field.field @"active"+activeChannel ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "activeChannel" a) =>+ Lens.Family2.LensLike' f s a+activeChannel = Data.ProtoLens.Field.field @"activeChannel"+activeOnly ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "activeOnly" a) =>+ Lens.Family2.LensLike' f s a+activeOnly = Data.ProtoLens.Field.field @"activeOnly"+addIndex ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "addIndex" a) =>+ Lens.Family2.LensLike' f s a+addIndex = Data.ProtoLens.Field.field @"addIndex"+addr ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "addr" a) =>+ Lens.Family2.LensLike' f s a+addr = Data.ProtoLens.Field.field @"addr"+addrToAmount ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "addrToAmount" a) =>+ Lens.Family2.LensLike' f s a+addrToAmount = Data.ProtoLens.Field.field @"addrToAmount"+address ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "address" a) =>+ Lens.Family2.LensLike' f s a+address = Data.ProtoLens.Field.field @"address"+addressType ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "addressType" a) =>+ Lens.Family2.LensLike' f s a+addressType = Data.ProtoLens.Field.field @"addressType"+addresses ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "addresses" a) =>+ Lens.Family2.LensLike' f s a+addresses = Data.ProtoLens.Field.field @"addresses"+advertisingNode ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "advertisingNode" a) =>+ Lens.Family2.LensLike' f s a+advertisingNode = Data.ProtoLens.Field.field @"advertisingNode"+alias ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "alias" a) =>+ Lens.Family2.LensLike' f s a+alias = Data.ProtoLens.Field.field @"alias"+allowSelfPayment ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "allowSelfPayment" a) =>+ Lens.Family2.LensLike' f s a+allowSelfPayment = Data.ProtoLens.Field.field @"allowSelfPayment"+amount ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "amount" a) =>+ Lens.Family2.LensLike' f s a+amount = Data.ProtoLens.Field.field @"amount"+amountSat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "amountSat" a) =>+ Lens.Family2.LensLike' f s a+amountSat = Data.ProtoLens.Field.field @"amountSat"+amp ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "amp" a) =>+ Lens.Family2.LensLike' f s a+amp = Data.ProtoLens.Field.field @"amp"+ampRecord ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "ampRecord" a) =>+ Lens.Family2.LensLike' f s a+ampRecord = Data.ProtoLens.Field.field @"ampRecord"+amt ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "amt" a) =>+ Lens.Family2.LensLike' f s a+amt = Data.ProtoLens.Field.field @"amt"+amtIn ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "amtIn" a) =>+ Lens.Family2.LensLike' f s a+amtIn = Data.ProtoLens.Field.field @"amtIn"+amtInMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "amtInMsat" a) =>+ Lens.Family2.LensLike' f s a+amtInMsat = Data.ProtoLens.Field.field @"amtInMsat"+amtMsat ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "amtMsat" a) =>+ Lens.Family2.LensLike' f s a+amtMsat = Data.ProtoLens.Field.field @"amtMsat"+amtOut ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "amtOut" a) =>+ Lens.Family2.LensLike' f s a+amtOut = Data.ProtoLens.Field.field @"amtOut"+amtOutMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "amtOutMsat" a) =>+ Lens.Family2.LensLike' f s a+amtOutMsat = Data.ProtoLens.Field.field @"amtOutMsat"+amtPaid ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "amtPaid" a) =>+ Lens.Family2.LensLike' f s a+amtPaid = Data.ProtoLens.Field.field @"amtPaid"+amtPaidMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "amtPaidMsat" a) =>+ Lens.Family2.LensLike' f s a+amtPaidMsat = Data.ProtoLens.Field.field @"amtPaidMsat"+amtPaidSat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "amtPaidSat" a) =>+ Lens.Family2.LensLike' f s a+amtPaidSat = Data.ProtoLens.Field.field @"amtPaidSat"+amtToForward ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "amtToForward" a) =>+ Lens.Family2.LensLike' f s a+amtToForward = Data.ProtoLens.Field.field @"amtToForward"+amtToForwardMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "amtToForwardMsat" a) =>+ Lens.Family2.LensLike' f s a+amtToForwardMsat = Data.ProtoLens.Field.field @"amtToForwardMsat"+anchor ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "anchor" a) =>+ Lens.Family2.LensLike' f s a+anchor = Data.ProtoLens.Field.field @"anchor"+attemptId ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "attemptId" a) =>+ Lens.Family2.LensLike' f s a+attemptId = Data.ProtoLens.Field.field @"attemptId"+attemptTimeNs ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "attemptTimeNs" a) =>+ Lens.Family2.LensLike' f s a+attemptTimeNs = Data.ProtoLens.Field.field @"attemptTimeNs"+avgChannelSize ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "avgChannelSize" a) =>+ Lens.Family2.LensLike' f s a+avgChannelSize = Data.ProtoLens.Field.field @"avgChannelSize"+avgOutDegree ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "avgOutDegree" a) =>+ Lens.Family2.LensLike' f s a+avgOutDegree = Data.ProtoLens.Field.field @"avgOutDegree"+balance ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "balance" a) =>+ Lens.Family2.LensLike' f s a+balance = Data.ProtoLens.Field.field @"balance"+baseFee ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "baseFee" a) =>+ Lens.Family2.LensLike' f s a+baseFee = Data.ProtoLens.Field.field @"baseFee"+baseFeeMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "baseFeeMsat" a) =>+ Lens.Family2.LensLike' f s a+baseFeeMsat = Data.ProtoLens.Field.field @"baseFeeMsat"+basePsbt ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "basePsbt" a) =>+ Lens.Family2.LensLike' f s a+basePsbt = Data.ProtoLens.Field.field @"basePsbt"+bestHeaderTimestamp ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "bestHeaderTimestamp" a) =>+ Lens.Family2.LensLike' f s a+bestHeaderTimestamp+ = Data.ProtoLens.Field.field @"bestHeaderTimestamp"+betweennessCentrality ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "betweennessCentrality" a) =>+ Lens.Family2.LensLike' f s a+betweennessCentrality+ = Data.ProtoLens.Field.field @"betweennessCentrality"+blockHash ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "blockHash" a) =>+ Lens.Family2.LensLike' f s a+blockHash = Data.ProtoLens.Field.field @"blockHash"+blockHeight ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "blockHeight" a) =>+ Lens.Family2.LensLike' f s a+blockHeight = Data.ProtoLens.Field.field @"blockHeight"+blockSha ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "blockSha" a) =>+ Lens.Family2.LensLike' f s a+blockSha = Data.ProtoLens.Field.field @"blockSha"+blocksTilMaturity ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "blocksTilMaturity" a) =>+ Lens.Family2.LensLike' f s a+blocksTilMaturity = Data.ProtoLens.Field.field @"blocksTilMaturity"+breach ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "breach" a) =>+ Lens.Family2.LensLike' f s a+breach = Data.ProtoLens.Field.field @"breach"+bytesRecv ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "bytesRecv" a) =>+ Lens.Family2.LensLike' f s a+bytesRecv = Data.ProtoLens.Field.field @"bytesRecv"+bytesSent ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "bytesSent" a) =>+ Lens.Family2.LensLike' f s a+bytesSent = Data.ProtoLens.Field.field @"bytesSent"+capacity ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "capacity" a) =>+ Lens.Family2.LensLike' f s a+capacity = Data.ProtoLens.Field.field @"capacity"+chain ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "chain" a) =>+ Lens.Family2.LensLike' f s a+chain = Data.ProtoLens.Field.field @"chain"+chainHash ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "chainHash" a) =>+ Lens.Family2.LensLike' f s a+chainHash = Data.ProtoLens.Field.field @"chainHash"+chains ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "chains" a) =>+ Lens.Family2.LensLike' f s a+chains = Data.ProtoLens.Field.field @"chains"+chanBackup ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "chanBackup" a) =>+ Lens.Family2.LensLike' f s a+chanBackup = Data.ProtoLens.Field.field @"chanBackup"+chanBackups ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "chanBackups" a) =>+ Lens.Family2.LensLike' f s a+chanBackups = Data.ProtoLens.Field.field @"chanBackups"+chanCapacity ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "chanCapacity" a) =>+ Lens.Family2.LensLike' f s a+chanCapacity = Data.ProtoLens.Field.field @"chanCapacity"+chanClose ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "chanClose" a) =>+ Lens.Family2.LensLike' f s a+chanClose = Data.ProtoLens.Field.field @"chanClose"+chanId ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "chanId" a) =>+ Lens.Family2.LensLike' f s a+chanId = Data.ProtoLens.Field.field @"chanId"+chanIdIn ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "chanIdIn" a) =>+ Lens.Family2.LensLike' f s a+chanIdIn = Data.ProtoLens.Field.field @"chanIdIn"+chanIdOut ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "chanIdOut" a) =>+ Lens.Family2.LensLike' f s a+chanIdOut = Data.ProtoLens.Field.field @"chanIdOut"+chanOpen ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "chanOpen" a) =>+ Lens.Family2.LensLike' f s a+chanOpen = Data.ProtoLens.Field.field @"chanOpen"+chanPending ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "chanPending" a) =>+ Lens.Family2.LensLike' f s a+chanPending = Data.ProtoLens.Field.field @"chanPending"+chanPoint ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "chanPoint" a) =>+ Lens.Family2.LensLike' f s a+chanPoint = Data.ProtoLens.Field.field @"chanPoint"+chanPointShim ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "chanPointShim" a) =>+ Lens.Family2.LensLike' f s a+chanPointShim = Data.ProtoLens.Field.field @"chanPointShim"+chanPoints ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "chanPoints" a) =>+ Lens.Family2.LensLike' f s a+chanPoints = Data.ProtoLens.Field.field @"chanPoints"+chanReserveSat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "chanReserveSat" a) =>+ Lens.Family2.LensLike' f s a+chanReserveSat = Data.ProtoLens.Field.field @"chanReserveSat"+chanStatusFlags ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "chanStatusFlags" a) =>+ Lens.Family2.LensLike' f s a+chanStatusFlags = Data.ProtoLens.Field.field @"chanStatusFlags"+channel ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "channel" a) =>+ Lens.Family2.LensLike' f s a+channel = Data.ProtoLens.Field.field @"channel"+channelFees ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "channelFees" a) =>+ Lens.Family2.LensLike' f s a+channelFees = Data.ProtoLens.Field.field @"channelFees"+channelFlags ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "channelFlags" a) =>+ Lens.Family2.LensLike' f s a+channelFlags = Data.ProtoLens.Field.field @"channelFlags"+channelId ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "channelId" a) =>+ Lens.Family2.LensLike' f s a+channelId = Data.ProtoLens.Field.field @"channelId"+channelPoint ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "channelPoint" a) =>+ Lens.Family2.LensLike' f s a+channelPoint = Data.ProtoLens.Field.field @"channelPoint"+channelReserve ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "channelReserve" a) =>+ Lens.Family2.LensLike' f s a+channelReserve = Data.ProtoLens.Field.field @"channelReserve"+channelUpdate ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "channelUpdate" a) =>+ Lens.Family2.LensLike' f s a+channelUpdate = Data.ProtoLens.Field.field @"channelUpdate"+channelUpdates ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "channelUpdates" a) =>+ Lens.Family2.LensLike' f s a+channelUpdates = Data.ProtoLens.Field.field @"channelUpdates"+channels ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "channels" a) =>+ Lens.Family2.LensLike' f s a+channels = Data.ProtoLens.Field.field @"channels"+childIndex ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "childIndex" a) =>+ Lens.Family2.LensLike' f s a+childIndex = Data.ProtoLens.Field.field @"childIndex"+closeAddress ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "closeAddress" a) =>+ Lens.Family2.LensLike' f s a+closeAddress = Data.ProtoLens.Field.field @"closeAddress"+closeHeight ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "closeHeight" a) =>+ Lens.Family2.LensLike' f s a+closeHeight = Data.ProtoLens.Field.field @"closeHeight"+closeInitiator ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "closeInitiator" a) =>+ Lens.Family2.LensLike' f s a+closeInitiator = Data.ProtoLens.Field.field @"closeInitiator"+closePending ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "closePending" a) =>+ Lens.Family2.LensLike' f s a+closePending = Data.ProtoLens.Field.field @"closePending"+closeType ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "closeType" a) =>+ Lens.Family2.LensLike' f s a+closeType = Data.ProtoLens.Field.field @"closeType"+closedChannel ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "closedChannel" a) =>+ Lens.Family2.LensLike' f s a+closedChannel = Data.ProtoLens.Field.field @"closedChannel"+closedChans ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "closedChans" a) =>+ Lens.Family2.LensLike' f s a+closedChans = Data.ProtoLens.Field.field @"closedChans"+closedHeight ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "closedHeight" a) =>+ Lens.Family2.LensLike' f s a+closedHeight = Data.ProtoLens.Field.field @"closedHeight"+closingTxHash ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "closingTxHash" a) =>+ Lens.Family2.LensLike' f s a+closingTxHash = Data.ProtoLens.Field.field @"closingTxHash"+closingTxid ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "closingTxid" a) =>+ Lens.Family2.LensLike' f s a+closingTxid = Data.ProtoLens.Field.field @"closingTxid"+cltvExpiry ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "cltvExpiry" a) =>+ Lens.Family2.LensLike' f s a+cltvExpiry = Data.ProtoLens.Field.field @"cltvExpiry"+cltvExpiryDelta ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "cltvExpiryDelta" a) =>+ Lens.Family2.LensLike' f s a+cltvExpiryDelta = Data.ProtoLens.Field.field @"cltvExpiryDelta"+cltvLimit ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "cltvLimit" a) =>+ Lens.Family2.LensLike' f s a+cltvLimit = Data.ProtoLens.Field.field @"cltvLimit"+code ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "code" a) =>+ Lens.Family2.LensLike' f s a+code = Data.ProtoLens.Field.field @"code"+color ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "color" a) =>+ Lens.Family2.LensLike' f s a+color = Data.ProtoLens.Field.field @"color"+commitFee ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "commitFee" a) =>+ Lens.Family2.LensLike' f s a+commitFee = Data.ProtoLens.Field.field @"commitFee"+commitHash ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "commitHash" a) =>+ Lens.Family2.LensLike' f s a+commitHash = Data.ProtoLens.Field.field @"commitHash"+commitWeight ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "commitWeight" a) =>+ Lens.Family2.LensLike' f s a+commitWeight = Data.ProtoLens.Field.field @"commitWeight"+commitmentType ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "commitmentType" a) =>+ Lens.Family2.LensLike' f s a+commitmentType = Data.ProtoLens.Field.field @"commitmentType"+commitments ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "commitments" a) =>+ Lens.Family2.LensLike' f s a+commitments = Data.ProtoLens.Field.field @"commitments"+confirmationHeight ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "confirmationHeight" a) =>+ Lens.Family2.LensLike' f s a+confirmationHeight+ = Data.ProtoLens.Field.field @"confirmationHeight"+confirmations ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "confirmations" a) =>+ Lens.Family2.LensLike' f s a+confirmations = Data.ProtoLens.Field.field @"confirmations"+confirmedBalance ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "confirmedBalance" a) =>+ Lens.Family2.LensLike' f s a+confirmedBalance = Data.ProtoLens.Field.field @"confirmedBalance"+connectingNode ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "connectingNode" a) =>+ Lens.Family2.LensLike' f s a+connectingNode = Data.ProtoLens.Field.field @"connectingNode"+cooperative ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "cooperative" a) =>+ Lens.Family2.LensLike' f s a+cooperative = Data.ProtoLens.Field.field @"cooperative"+creationDate ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "creationDate" a) =>+ Lens.Family2.LensLike' f s a+creationDate = Data.ProtoLens.Field.field @"creationDate"+creationTimeNs ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "creationTimeNs" a) =>+ Lens.Family2.LensLike' f s a+creationTimeNs = Data.ProtoLens.Field.field @"creationTimeNs"+csvDelay ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "csvDelay" a) =>+ Lens.Family2.LensLike' f s a+csvDelay = Data.ProtoLens.Field.field @"csvDelay"+customRecords ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "customRecords" a) =>+ Lens.Family2.LensLike' f s a+customRecords = Data.ProtoLens.Field.field @"customRecords"+dayFeeSum ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "dayFeeSum" a) =>+ Lens.Family2.LensLike' f s a+dayFeeSum = Data.ProtoLens.Field.field @"dayFeeSum"+deleted ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "deleted" a) =>+ Lens.Family2.LensLike' f s a+deleted = Data.ProtoLens.Field.field @"deleted"+deliveryAddress ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "deliveryAddress" a) =>+ Lens.Family2.LensLike' f s a+deliveryAddress = Data.ProtoLens.Field.field @"deliveryAddress"+description ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "description" a) =>+ Lens.Family2.LensLike' f s a+description = Data.ProtoLens.Field.field @"description"+descriptionHash ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "descriptionHash" a) =>+ Lens.Family2.LensLike' f s a+descriptionHash = Data.ProtoLens.Field.field @"descriptionHash"+dest ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "dest" a) =>+ Lens.Family2.LensLike' f s a+dest = Data.ProtoLens.Field.field @"dest"+destAddresses ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "destAddresses" a) =>+ Lens.Family2.LensLike' f s a+destAddresses = Data.ProtoLens.Field.field @"destAddresses"+destCustomRecords ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "destCustomRecords" a) =>+ Lens.Family2.LensLike' f s a+destCustomRecords = Data.ProtoLens.Field.field @"destCustomRecords"+destFeatures ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "destFeatures" a) =>+ Lens.Family2.LensLike' f s a+destFeatures = Data.ProtoLens.Field.field @"destFeatures"+destString ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "destString" a) =>+ Lens.Family2.LensLike' f s a+destString = Data.ProtoLens.Field.field @"destString"+destination ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "destination" a) =>+ Lens.Family2.LensLike' f s a+destination = Data.ProtoLens.Field.field @"destination"+directionReverse ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "directionReverse" a) =>+ Lens.Family2.LensLike' f s a+directionReverse = Data.ProtoLens.Field.field @"directionReverse"+disabled ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "disabled" a) =>+ Lens.Family2.LensLike' f s a+disabled = Data.ProtoLens.Field.field @"disabled"+dustLimit ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "dustLimit" a) =>+ Lens.Family2.LensLike' f s a+dustLimit = Data.ProtoLens.Field.field @"dustLimit"+dustLimitSat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "dustLimitSat" a) =>+ Lens.Family2.LensLike' f s a+dustLimitSat = Data.ProtoLens.Field.field @"dustLimitSat"+edges ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "edges" a) =>+ Lens.Family2.LensLike' f s a+edges = Data.ProtoLens.Field.field @"edges"+endHeight ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "endHeight" a) =>+ Lens.Family2.LensLike' f s a+endHeight = Data.ProtoLens.Field.field @"endHeight"+endTime ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "endTime" a) =>+ Lens.Family2.LensLike' f s a+endTime = Data.ProtoLens.Field.field @"endTime"+entity ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "entity" a) =>+ Lens.Family2.LensLike' f s a+entity = Data.ProtoLens.Field.field @"entity"+error ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "error" a) =>+ Lens.Family2.LensLike' f s a+error = Data.ProtoLens.Field.field @"error"+errors ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "errors" a) =>+ Lens.Family2.LensLike' f s a+errors = Data.ProtoLens.Field.field @"errors"+expirationHeight ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "expirationHeight" a) =>+ Lens.Family2.LensLike' f s a+expirationHeight = Data.ProtoLens.Field.field @"expirationHeight"+expiry ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "expiry" a) =>+ Lens.Family2.LensLike' f s a+expiry = Data.ProtoLens.Field.field @"expiry"+expiryHeight ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "expiryHeight" a) =>+ Lens.Family2.LensLike' f s a+expiryHeight = Data.ProtoLens.Field.field @"expiryHeight"+extraOpaqueData ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "extraOpaqueData" a) =>+ Lens.Family2.LensLike' f s a+extraOpaqueData = Data.ProtoLens.Field.field @"extraOpaqueData"+failedHtlcsOnly ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "failedHtlcsOnly" a) =>+ Lens.Family2.LensLike' f s a+failedHtlcsOnly = Data.ProtoLens.Field.field @"failedHtlcsOnly"+failedPaymentsOnly ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "failedPaymentsOnly" a) =>+ Lens.Family2.LensLike' f s a+failedPaymentsOnly+ = Data.ProtoLens.Field.field @"failedPaymentsOnly"+failure ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "failure" a) =>+ Lens.Family2.LensLike' f s a+failure = Data.ProtoLens.Field.field @"failure"+failureReason ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "failureReason" a) =>+ Lens.Family2.LensLike' f s a+failureReason = Data.ProtoLens.Field.field @"failureReason"+failureSourceIndex ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "failureSourceIndex" a) =>+ Lens.Family2.LensLike' f s a+failureSourceIndex+ = Data.ProtoLens.Field.field @"failureSourceIndex"+fallbackAddr ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "fallbackAddr" a) =>+ Lens.Family2.LensLike' f s a+fallbackAddr = Data.ProtoLens.Field.field @"fallbackAddr"+features ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "features" a) =>+ Lens.Family2.LensLike' f s a+features = Data.ProtoLens.Field.field @"features"+fee ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "fee" a) =>+ Lens.Family2.LensLike' f s a+fee = Data.ProtoLens.Field.field @"fee"+feeBaseMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "feeBaseMsat" a) =>+ Lens.Family2.LensLike' f s a+feeBaseMsat = Data.ProtoLens.Field.field @"feeBaseMsat"+feeLimit ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "feeLimit" a) =>+ Lens.Family2.LensLike' f s a+feeLimit = Data.ProtoLens.Field.field @"feeLimit"+feeMsat ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "feeMsat" a) =>+ Lens.Family2.LensLike' f s a+feeMsat = Data.ProtoLens.Field.field @"feeMsat"+feePerKw ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "feePerKw" a) =>+ Lens.Family2.LensLike' f s a+feePerKw = Data.ProtoLens.Field.field @"feePerKw"+feePerMil ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "feePerMil" a) =>+ Lens.Family2.LensLike' f s a+feePerMil = Data.ProtoLens.Field.field @"feePerMil"+feeProportionalMillionths ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "feeProportionalMillionths" a) =>+ Lens.Family2.LensLike' f s a+feeProportionalMillionths+ = Data.ProtoLens.Field.field @"feeProportionalMillionths"+feeRate ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "feeRate" a) =>+ Lens.Family2.LensLike' f s a+feeRate = Data.ProtoLens.Field.field @"feeRate"+feeRateMilliMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "feeRateMilliMsat" a) =>+ Lens.Family2.LensLike' f s a+feeRateMilliMsat = Data.ProtoLens.Field.field @"feeRateMilliMsat"+feeSat ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "feeSat" a) =>+ Lens.Family2.LensLike' f s a+feeSat = Data.ProtoLens.Field.field @"feeSat"+feerateSatPerByte ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "feerateSatPerByte" a) =>+ Lens.Family2.LensLike' f s a+feerateSatPerByte = Data.ProtoLens.Field.field @"feerateSatPerByte"+finalCltvDelta ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "finalCltvDelta" a) =>+ Lens.Family2.LensLike' f s a+finalCltvDelta = Data.ProtoLens.Field.field @"finalCltvDelta"+finalRawTx ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "finalRawTx" a) =>+ Lens.Family2.LensLike' f s a+finalRawTx = Data.ProtoLens.Field.field @"finalRawTx"+firstIndexOffset ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "firstIndexOffset" a) =>+ Lens.Family2.LensLike' f s a+firstIndexOffset = Data.ProtoLens.Field.field @"firstIndexOffset"+fixed ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "fixed" a) =>+ Lens.Family2.LensLike' f s a+fixed = Data.ProtoLens.Field.field @"fixed"+fixedMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "fixedMsat" a) =>+ Lens.Family2.LensLike' f s a+fixedMsat = Data.ProtoLens.Field.field @"fixedMsat"+flags ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "flags" a) =>+ Lens.Family2.LensLike' f s a+flags = Data.ProtoLens.Field.field @"flags"+flapCount ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "flapCount" a) =>+ Lens.Family2.LensLike' f s a+flapCount = Data.ProtoLens.Field.field @"flapCount"+force ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "force" a) =>+ Lens.Family2.LensLike' f s a+force = Data.ProtoLens.Field.field @"force"+forwardingChannel ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "forwardingChannel" a) =>+ Lens.Family2.LensLike' f s a+forwardingChannel = Data.ProtoLens.Field.field @"forwardingChannel"+forwardingEvents ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "forwardingEvents" a) =>+ Lens.Family2.LensLike' f s a+forwardingEvents = Data.ProtoLens.Field.field @"forwardingEvents"+forwardingHtlcIndex ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "forwardingHtlcIndex" a) =>+ Lens.Family2.LensLike' f s a+forwardingHtlcIndex+ = Data.ProtoLens.Field.field @"forwardingHtlcIndex"+from ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "from" a) =>+ Lens.Family2.LensLike' f s a+from = Data.ProtoLens.Field.field @"from"+fundedPsbt ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "fundedPsbt" a) =>+ Lens.Family2.LensLike' f s a+fundedPsbt = Data.ProtoLens.Field.field @"fundedPsbt"+fundingAddress ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "fundingAddress" a) =>+ Lens.Family2.LensLike' f s a+fundingAddress = Data.ProtoLens.Field.field @"fundingAddress"+fundingAmount ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "fundingAmount" a) =>+ Lens.Family2.LensLike' f s a+fundingAmount = Data.ProtoLens.Field.field @"fundingAmount"+fundingAmt ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "fundingAmt" a) =>+ Lens.Family2.LensLike' f s a+fundingAmt = Data.ProtoLens.Field.field @"fundingAmt"+fundingCanceled ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "fundingCanceled" a) =>+ Lens.Family2.LensLike' f s a+fundingCanceled = Data.ProtoLens.Field.field @"fundingCanceled"+fundingShim ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "fundingShim" a) =>+ Lens.Family2.LensLike' f s a+fundingShim = Data.ProtoLens.Field.field @"fundingShim"+fundingTxidBytes ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "fundingTxidBytes" a) =>+ Lens.Family2.LensLike' f s a+fundingTxidBytes = Data.ProtoLens.Field.field @"fundingTxidBytes"+fundingTxidStr ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "fundingTxidStr" a) =>+ Lens.Family2.LensLike' f s a+fundingTxidStr = Data.ProtoLens.Field.field @"fundingTxidStr"+global ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "global" a) =>+ Lens.Family2.LensLike' f s a+global = Data.ProtoLens.Field.field @"global"+globalFeatures ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "globalFeatures" a) =>+ Lens.Family2.LensLike' f s a+globalFeatures = Data.ProtoLens.Field.field @"globalFeatures"+graphDiameter ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "graphDiameter" a) =>+ Lens.Family2.LensLike' f s a+graphDiameter = Data.ProtoLens.Field.field @"graphDiameter"+hash ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "hash" a) =>+ Lens.Family2.LensLike' f s a+hash = Data.ProtoLens.Field.field @"hash"+hashLock ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "hashLock" a) =>+ Lens.Family2.LensLike' f s a+hashLock = Data.ProtoLens.Field.field @"hashLock"+height ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "height" a) =>+ Lens.Family2.LensLike' f s a+height = Data.ProtoLens.Field.field @"height"+hopHints ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "hopHints" a) =>+ Lens.Family2.LensLike' f s a+hopHints = Data.ProtoLens.Field.field @"hopHints"+hops ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "hops" a) =>+ Lens.Family2.LensLike' f s a+hops = Data.ProtoLens.Field.field @"hops"+host ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "host" a) =>+ Lens.Family2.LensLike' f s a+host = Data.ProtoLens.Field.field @"host"+htlcIndex ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "htlcIndex" a) =>+ Lens.Family2.LensLike' f s a+htlcIndex = Data.ProtoLens.Field.field @"htlcIndex"+htlcMaximumMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "htlcMaximumMsat" a) =>+ Lens.Family2.LensLike' f s a+htlcMaximumMsat = Data.ProtoLens.Field.field @"htlcMaximumMsat"+htlcMinimumMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "htlcMinimumMsat" a) =>+ Lens.Family2.LensLike' f s a+htlcMinimumMsat = Data.ProtoLens.Field.field @"htlcMinimumMsat"+htlcMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "htlcMsat" a) =>+ Lens.Family2.LensLike' f s a+htlcMsat = Data.ProtoLens.Field.field @"htlcMsat"+htlcs ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "htlcs" a) =>+ Lens.Family2.LensLike' f s a+htlcs = Data.ProtoLens.Field.field @"htlcs"+iKnowWhatIAmDoing ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "iKnowWhatIAmDoing" a) =>+ Lens.Family2.LensLike' f s a+iKnowWhatIAmDoing = Data.ProtoLens.Field.field @"iKnowWhatIAmDoing"+identityKey ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "identityKey" a) =>+ Lens.Family2.LensLike' f s a+identityKey = Data.ProtoLens.Field.field @"identityKey"+identityPubkey ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "identityPubkey" a) =>+ Lens.Family2.LensLike' f s a+identityPubkey = Data.ProtoLens.Field.field @"identityPubkey"+ignoredEdges ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "ignoredEdges" a) =>+ Lens.Family2.LensLike' f s a+ignoredEdges = Data.ProtoLens.Field.field @"ignoredEdges"+ignoredNodes ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "ignoredNodes" a) =>+ Lens.Family2.LensLike' f s a+ignoredNodes = Data.ProtoLens.Field.field @"ignoredNodes"+ignoredPairs ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "ignoredPairs" a) =>+ Lens.Family2.LensLike' f s a+ignoredPairs = Data.ProtoLens.Field.field @"ignoredPairs"+inFlightMaxMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "inFlightMaxMsat" a) =>+ Lens.Family2.LensLike' f s a+inFlightMaxMsat = Data.ProtoLens.Field.field @"inFlightMaxMsat"+inactiveChannel ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "inactiveChannel" a) =>+ Lens.Family2.LensLike' f s a+inactiveChannel = Data.ProtoLens.Field.field @"inactiveChannel"+inactiveOnly ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "inactiveOnly" a) =>+ Lens.Family2.LensLike' f s a+inactiveOnly = Data.ProtoLens.Field.field @"inactiveOnly"+inbound ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "inbound" a) =>+ Lens.Family2.LensLike' f s a+inbound = Data.ProtoLens.Field.field @"inbound"+includeChannels ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "includeChannels" a) =>+ Lens.Family2.LensLike' f s a+includeChannels = Data.ProtoLens.Field.field @"includeChannels"+includeIncomplete ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "includeIncomplete" a) =>+ Lens.Family2.LensLike' f s a+includeIncomplete = Data.ProtoLens.Field.field @"includeIncomplete"+includeUnannounced ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "includeUnannounced" a) =>+ Lens.Family2.LensLike' f s a+includeUnannounced+ = Data.ProtoLens.Field.field @"includeUnannounced"+incoming ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "incoming" a) =>+ Lens.Family2.LensLike' f s a+incoming = Data.ProtoLens.Field.field @"incoming"+indexOffset ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "indexOffset" a) =>+ Lens.Family2.LensLike' f s a+indexOffset = Data.ProtoLens.Field.field @"indexOffset"+initiator ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "initiator" a) =>+ Lens.Family2.LensLike' f s a+initiator = Data.ProtoLens.Field.field @"initiator"+invoices ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "invoices" a) =>+ Lens.Family2.LensLike' f s a+invoices = Data.ProtoLens.Field.field @"invoices"+isAmp ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "isAmp" a) =>+ Lens.Family2.LensLike' f s a+isAmp = Data.ProtoLens.Field.field @"isAmp"+isKeysend ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "isKeysend" a) =>+ Lens.Family2.LensLike' f s a+isKeysend = Data.ProtoLens.Field.field @"isKeysend"+isKnown ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "isKnown" a) =>+ Lens.Family2.LensLike' f s a+isKnown = Data.ProtoLens.Field.field @"isKnown"+isRequired ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "isRequired" a) =>+ Lens.Family2.LensLike' f s a+isRequired = Data.ProtoLens.Field.field @"isRequired"+key ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "key" a) =>+ Lens.Family2.LensLike' f s a+key = Data.ProtoLens.Field.field @"key"+keyFamily ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "keyFamily" a) =>+ Lens.Family2.LensLike' f s a+keyFamily = Data.ProtoLens.Field.field @"keyFamily"+keyIndex ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "keyIndex" a) =>+ Lens.Family2.LensLike' f s a+keyIndex = Data.ProtoLens.Field.field @"keyIndex"+keyLoc ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "keyLoc" a) =>+ Lens.Family2.LensLike' f s a+keyLoc = Data.ProtoLens.Field.field @"keyLoc"+label ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "label" a) =>+ Lens.Family2.LensLike' f s a+label = Data.ProtoLens.Field.field @"label"+lastFlapNs ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "lastFlapNs" a) =>+ Lens.Family2.LensLike' f s a+lastFlapNs = Data.ProtoLens.Field.field @"lastFlapNs"+lastHopPubkey ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "lastHopPubkey" a) =>+ Lens.Family2.LensLike' f s a+lastHopPubkey = Data.ProtoLens.Field.field @"lastHopPubkey"+lastIndexOffset ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "lastIndexOffset" a) =>+ Lens.Family2.LensLike' f s a+lastIndexOffset = Data.ProtoLens.Field.field @"lastIndexOffset"+lastOffsetIndex ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "lastOffsetIndex" a) =>+ Lens.Family2.LensLike' f s a+lastOffsetIndex = Data.ProtoLens.Field.field @"lastOffsetIndex"+lastUpdate ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "lastUpdate" a) =>+ Lens.Family2.LensLike' f s a+lastUpdate = Data.ProtoLens.Field.field @"lastUpdate"+latestError ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "latestError" a) =>+ Lens.Family2.LensLike' f s a+latestError = Data.ProtoLens.Field.field @"latestError"+levelSpec ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "levelSpec" a) =>+ Lens.Family2.LensLike' f s a+levelSpec = Data.ProtoLens.Field.field @"levelSpec"+lifetime ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "lifetime" a) =>+ Lens.Family2.LensLike' f s a+lifetime = Data.ProtoLens.Field.field @"lifetime"+limboBalance ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "limboBalance" a) =>+ Lens.Family2.LensLike' f s a+limboBalance = Data.ProtoLens.Field.field @"limboBalance"+localBalance ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "localBalance" a) =>+ Lens.Family2.LensLike' f s a+localBalance = Data.ProtoLens.Field.field @"localBalance"+localChanReserveSat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "localChanReserveSat" a) =>+ Lens.Family2.LensLike' f s a+localChanReserveSat+ = Data.ProtoLens.Field.field @"localChanReserveSat"+localCommitFeeSat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "localCommitFeeSat" a) =>+ Lens.Family2.LensLike' f s a+localCommitFeeSat = Data.ProtoLens.Field.field @"localCommitFeeSat"+localConstraints ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "localConstraints" a) =>+ Lens.Family2.LensLike' f s a+localConstraints = Data.ProtoLens.Field.field @"localConstraints"+localForce ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "localForce" a) =>+ Lens.Family2.LensLike' f s a+localForce = Data.ProtoLens.Field.field @"localForce"+localFundingAmount ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "localFundingAmount" a) =>+ Lens.Family2.LensLike' f s a+localFundingAmount+ = Data.ProtoLens.Field.field @"localFundingAmount"+localKey ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "localKey" a) =>+ Lens.Family2.LensLike' f s a+localKey = Data.ProtoLens.Field.field @"localKey"+localTxid ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "localTxid" a) =>+ Lens.Family2.LensLike' f s a+localTxid = Data.ProtoLens.Field.field @"localTxid"+macaroon ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "macaroon" a) =>+ Lens.Family2.LensLike' f s a+macaroon = Data.ProtoLens.Field.field @"macaroon"+maturityHeight ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maturityHeight" a) =>+ Lens.Family2.LensLike' f s a+maturityHeight = Data.ProtoLens.Field.field @"maturityHeight"+maxAcceptedHtlcs ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maxAcceptedHtlcs" a) =>+ Lens.Family2.LensLike' f s a+maxAcceptedHtlcs = Data.ProtoLens.Field.field @"maxAcceptedHtlcs"+maxChannelSize ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maxChannelSize" a) =>+ Lens.Family2.LensLike' f s a+maxChannelSize = Data.ProtoLens.Field.field @"maxChannelSize"+maxConfs ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maxConfs" a) =>+ Lens.Family2.LensLike' f s a+maxConfs = Data.ProtoLens.Field.field @"maxConfs"+maxHtlcCount ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maxHtlcCount" a) =>+ Lens.Family2.LensLike' f s a+maxHtlcCount = Data.ProtoLens.Field.field @"maxHtlcCount"+maxHtlcMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maxHtlcMsat" a) =>+ Lens.Family2.LensLike' f s a+maxHtlcMsat = Data.ProtoLens.Field.field @"maxHtlcMsat"+maxLocalCsv ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maxLocalCsv" a) =>+ Lens.Family2.LensLike' f s a+maxLocalCsv = Data.ProtoLens.Field.field @"maxLocalCsv"+maxOutDegree ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maxOutDegree" a) =>+ Lens.Family2.LensLike' f s a+maxOutDegree = Data.ProtoLens.Field.field @"maxOutDegree"+maxPayments ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maxPayments" a) =>+ Lens.Family2.LensLike' f s a+maxPayments = Data.ProtoLens.Field.field @"maxPayments"+maxPendingAmtMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maxPendingAmtMsat" a) =>+ Lens.Family2.LensLike' f s a+maxPendingAmtMsat = Data.ProtoLens.Field.field @"maxPendingAmtMsat"+maxValueInFlight ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maxValueInFlight" a) =>+ Lens.Family2.LensLike' f s a+maxValueInFlight = Data.ProtoLens.Field.field @"maxValueInFlight"+maybe'activeChannel ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'activeChannel" a) =>+ Lens.Family2.LensLike' f s a+maybe'activeChannel+ = Data.ProtoLens.Field.field @"maybe'activeChannel"+maybe'addr ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'addr" a) =>+ Lens.Family2.LensLike' f s a+maybe'addr = Data.ProtoLens.Field.field @"maybe'addr"+maybe'amp ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'amp" a) =>+ Lens.Family2.LensLike' f s a+maybe'amp = Data.ProtoLens.Field.field @"maybe'amp"+maybe'ampRecord ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'ampRecord" a) =>+ Lens.Family2.LensLike' f s a+maybe'ampRecord = Data.ProtoLens.Field.field @"maybe'ampRecord"+maybe'backup ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'backup" a) =>+ Lens.Family2.LensLike' f s a+maybe'backup = Data.ProtoLens.Field.field @"maybe'backup"+maybe'chanBackups ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'chanBackups" a) =>+ Lens.Family2.LensLike' f s a+maybe'chanBackups = Data.ProtoLens.Field.field @"maybe'chanBackups"+maybe'chanClose ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'chanClose" a) =>+ Lens.Family2.LensLike' f s a+maybe'chanClose = Data.ProtoLens.Field.field @"maybe'chanClose"+maybe'chanOpen ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'chanOpen" a) =>+ Lens.Family2.LensLike' f s a+maybe'chanOpen = Data.ProtoLens.Field.field @"maybe'chanOpen"+maybe'chanPending ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'chanPending" a) =>+ Lens.Family2.LensLike' f s a+maybe'chanPending = Data.ProtoLens.Field.field @"maybe'chanPending"+maybe'chanPoint ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'chanPoint" a) =>+ Lens.Family2.LensLike' f s a+maybe'chanPoint = Data.ProtoLens.Field.field @"maybe'chanPoint"+maybe'chanPointShim ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'chanPointShim" a) =>+ Lens.Family2.LensLike' f s a+maybe'chanPointShim+ = Data.ProtoLens.Field.field @"maybe'chanPointShim"+maybe'channel ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'channel" a) =>+ Lens.Family2.LensLike' f s a+maybe'channel = Data.ProtoLens.Field.field @"maybe'channel"+maybe'channelPoint ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'channelPoint" a) =>+ Lens.Family2.LensLike' f s a+maybe'channelPoint+ = Data.ProtoLens.Field.field @"maybe'channelPoint"+maybe'channelUpdate ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'channelUpdate" a) =>+ Lens.Family2.LensLike' f s a+maybe'channelUpdate+ = Data.ProtoLens.Field.field @"maybe'channelUpdate"+maybe'closePending ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'closePending" a) =>+ Lens.Family2.LensLike' f s a+maybe'closePending+ = Data.ProtoLens.Field.field @"maybe'closePending"+maybe'closedChannel ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'closedChannel" a) =>+ Lens.Family2.LensLike' f s a+maybe'closedChannel+ = Data.ProtoLens.Field.field @"maybe'closedChannel"+maybe'commitments ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'commitments" a) =>+ Lens.Family2.LensLike' f s a+maybe'commitments = Data.ProtoLens.Field.field @"maybe'commitments"+maybe'failure ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'failure" a) =>+ Lens.Family2.LensLike' f s a+maybe'failure = Data.ProtoLens.Field.field @"maybe'failure"+maybe'feeLimit ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'feeLimit" a) =>+ Lens.Family2.LensLike' f s a+maybe'feeLimit = Data.ProtoLens.Field.field @"maybe'feeLimit"+maybe'fixed ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'fixed" a) =>+ Lens.Family2.LensLike' f s a+maybe'fixed = Data.ProtoLens.Field.field @"maybe'fixed"+maybe'fixedMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'fixedMsat" a) =>+ Lens.Family2.LensLike' f s a+maybe'fixedMsat = Data.ProtoLens.Field.field @"maybe'fixedMsat"+maybe'fundingShim ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'fundingShim" a) =>+ Lens.Family2.LensLike' f s a+maybe'fundingShim = Data.ProtoLens.Field.field @"maybe'fundingShim"+maybe'fundingTxid ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'fundingTxid" a) =>+ Lens.Family2.LensLike' f s a+maybe'fundingTxid = Data.ProtoLens.Field.field @"maybe'fundingTxid"+maybe'fundingTxidBytes ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'fundingTxidBytes" a) =>+ Lens.Family2.LensLike' f s a+maybe'fundingTxidBytes+ = Data.ProtoLens.Field.field @"maybe'fundingTxidBytes"+maybe'fundingTxidStr ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'fundingTxidStr" a) =>+ Lens.Family2.LensLike' f s a+maybe'fundingTxidStr+ = Data.ProtoLens.Field.field @"maybe'fundingTxidStr"+maybe'global ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'global" a) =>+ Lens.Family2.LensLike' f s a+maybe'global = Data.ProtoLens.Field.field @"maybe'global"+maybe'inactiveChannel ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'inactiveChannel" a) =>+ Lens.Family2.LensLike' f s a+maybe'inactiveChannel+ = Data.ProtoLens.Field.field @"maybe'inactiveChannel"+maybe'keyLoc ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'keyLoc" a) =>+ Lens.Family2.LensLike' f s a+maybe'keyLoc = Data.ProtoLens.Field.field @"maybe'keyLoc"+maybe'limit ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'limit" a) =>+ Lens.Family2.LensLike' f s a+maybe'limit = Data.ProtoLens.Field.field @"maybe'limit"+maybe'localBalance ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'localBalance" a) =>+ Lens.Family2.LensLike' f s a+maybe'localBalance+ = Data.ProtoLens.Field.field @"maybe'localBalance"+maybe'localConstraints ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'localConstraints" a) =>+ Lens.Family2.LensLike' f s a+maybe'localConstraints+ = Data.ProtoLens.Field.field @"maybe'localConstraints"+maybe'localKey ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'localKey" a) =>+ Lens.Family2.LensLike' f s a+maybe'localKey = Data.ProtoLens.Field.field @"maybe'localKey"+maybe'mppRecord ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'mppRecord" a) =>+ Lens.Family2.LensLike' f s a+maybe'mppRecord = Data.ProtoLens.Field.field @"maybe'mppRecord"+maybe'multiChanBackup ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'multiChanBackup" a) =>+ Lens.Family2.LensLike' f s a+maybe'multiChanBackup+ = Data.ProtoLens.Field.field @"maybe'multiChanBackup"+maybe'node ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'node" a) =>+ Lens.Family2.LensLike' f s a+maybe'node = Data.ProtoLens.Field.field @"maybe'node"+maybe'node1Policy ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'node1Policy" a) =>+ Lens.Family2.LensLike' f s a+maybe'node1Policy = Data.ProtoLens.Field.field @"maybe'node1Policy"+maybe'node2Policy ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'node2Policy" a) =>+ Lens.Family2.LensLike' f s a+maybe'node2Policy = Data.ProtoLens.Field.field @"maybe'node2Policy"+maybe'openChannel ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'openChannel" a) =>+ Lens.Family2.LensLike' f s a+maybe'openChannel = Data.ProtoLens.Field.field @"maybe'openChannel"+maybe'outpoint ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'outpoint" a) =>+ Lens.Family2.LensLike' f s a+maybe'outpoint = Data.ProtoLens.Field.field @"maybe'outpoint"+maybe'paymentRoute ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'paymentRoute" a) =>+ Lens.Family2.LensLike' f s a+maybe'paymentRoute+ = Data.ProtoLens.Field.field @"maybe'paymentRoute"+maybe'pendingOpenChannel ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'pendingOpenChannel" a) =>+ Lens.Family2.LensLike' f s a+maybe'pendingOpenChannel+ = Data.ProtoLens.Field.field @"maybe'pendingOpenChannel"+maybe'pendingOpenLocalBalance ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'pendingOpenLocalBalance" a) =>+ Lens.Family2.LensLike' f s a+maybe'pendingOpenLocalBalance+ = Data.ProtoLens.Field.field @"maybe'pendingOpenLocalBalance"+maybe'pendingOpenRemoteBalance ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'pendingOpenRemoteBalance" a) =>+ Lens.Family2.LensLike' f s a+maybe'pendingOpenRemoteBalance+ = Data.ProtoLens.Field.field @"maybe'pendingOpenRemoteBalance"+maybe'percent ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'percent" a) =>+ Lens.Family2.LensLike' f s a+maybe'percent = Data.ProtoLens.Field.field @"maybe'percent"+maybe'psbtFinalize ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'psbtFinalize" a) =>+ Lens.Family2.LensLike' f s a+maybe'psbtFinalize+ = Data.ProtoLens.Field.field @"maybe'psbtFinalize"+maybe'psbtFund ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'psbtFund" a) =>+ Lens.Family2.LensLike' f s a+maybe'psbtFund = Data.ProtoLens.Field.field @"maybe'psbtFund"+maybe'psbtShim ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'psbtShim" a) =>+ Lens.Family2.LensLike' f s a+maybe'psbtShim = Data.ProtoLens.Field.field @"maybe'psbtShim"+maybe'psbtVerify ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'psbtVerify" a) =>+ Lens.Family2.LensLike' f s a+maybe'psbtVerify = Data.ProtoLens.Field.field @"maybe'psbtVerify"+maybe'remoteBalance ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'remoteBalance" a) =>+ Lens.Family2.LensLike' f s a+maybe'remoteBalance+ = Data.ProtoLens.Field.field @"maybe'remoteBalance"+maybe'remoteConstraints ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'remoteConstraints" a) =>+ Lens.Family2.LensLike' f s a+maybe'remoteConstraints+ = Data.ProtoLens.Field.field @"maybe'remoteConstraints"+maybe'route ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'route" a) =>+ Lens.Family2.LensLike' f s a+maybe'route = Data.ProtoLens.Field.field @"maybe'route"+maybe'routingPolicy ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'routingPolicy" a) =>+ Lens.Family2.LensLike' f s a+maybe'routingPolicy+ = Data.ProtoLens.Field.field @"maybe'routingPolicy"+maybe'scope ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'scope" a) =>+ Lens.Family2.LensLike' f s a+maybe'scope = Data.ProtoLens.Field.field @"maybe'scope"+maybe'shim ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'shim" a) =>+ Lens.Family2.LensLike' f s a+maybe'shim = Data.ProtoLens.Field.field @"maybe'shim"+maybe'shimCancel ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'shimCancel" a) =>+ Lens.Family2.LensLike' f s a+maybe'shimCancel = Data.ProtoLens.Field.field @"maybe'shimCancel"+maybe'shimRegister ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'shimRegister" a) =>+ Lens.Family2.LensLike' f s a+maybe'shimRegister+ = Data.ProtoLens.Field.field @"maybe'shimRegister"+maybe'singleChanBackups ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'singleChanBackups" a) =>+ Lens.Family2.LensLike' f s a+maybe'singleChanBackups+ = Data.ProtoLens.Field.field @"maybe'singleChanBackups"+maybe'trigger ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'trigger" a) =>+ Lens.Family2.LensLike' f s a+maybe'trigger = Data.ProtoLens.Field.field @"maybe'trigger"+maybe'unsettledLocalBalance ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'unsettledLocalBalance" a) =>+ Lens.Family2.LensLike' f s a+maybe'unsettledLocalBalance+ = Data.ProtoLens.Field.field @"maybe'unsettledLocalBalance"+maybe'unsettledRemoteBalance ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'unsettledRemoteBalance" a) =>+ Lens.Family2.LensLike' f s a+maybe'unsettledRemoteBalance+ = Data.ProtoLens.Field.field @"maybe'unsettledRemoteBalance"+maybe'update ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'update" a) =>+ Lens.Family2.LensLike' f s a+maybe'update = Data.ProtoLens.Field.field @"maybe'update"+maybe'value ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'value" a) =>+ Lens.Family2.LensLike' f s a+maybe'value = Data.ProtoLens.Field.field @"maybe'value"+medianChannelSizeSat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "medianChannelSizeSat" a) =>+ Lens.Family2.LensLike' f s a+medianChannelSizeSat+ = Data.ProtoLens.Field.field @"medianChannelSizeSat"+memo ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "memo" a) =>+ Lens.Family2.LensLike' f s a+memo = Data.ProtoLens.Field.field @"memo"+messageFlags ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "messageFlags" a) =>+ Lens.Family2.LensLike' f s a+messageFlags = Data.ProtoLens.Field.field @"messageFlags"+methodPermissions ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "methodPermissions" a) =>+ Lens.Family2.LensLike' f s a+methodPermissions = Data.ProtoLens.Field.field @"methodPermissions"+minAcceptDepth ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "minAcceptDepth" a) =>+ Lens.Family2.LensLike' f s a+minAcceptDepth = Data.ProtoLens.Field.field @"minAcceptDepth"+minChannelSize ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "minChannelSize" a) =>+ Lens.Family2.LensLike' f s a+minChannelSize = Data.ProtoLens.Field.field @"minChannelSize"+minConfs ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "minConfs" a) =>+ Lens.Family2.LensLike' f s a+minConfs = Data.ProtoLens.Field.field @"minConfs"+minHtlc ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "minHtlc" a) =>+ Lens.Family2.LensLike' f s a+minHtlc = Data.ProtoLens.Field.field @"minHtlc"+minHtlcIn ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "minHtlcIn" a) =>+ Lens.Family2.LensLike' f s a+minHtlcIn = Data.ProtoLens.Field.field @"minHtlcIn"+minHtlcMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "minHtlcMsat" a) =>+ Lens.Family2.LensLike' f s a+minHtlcMsat = Data.ProtoLens.Field.field @"minHtlcMsat"+minHtlcMsatSpecified ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "minHtlcMsatSpecified" a) =>+ Lens.Family2.LensLike' f s a+minHtlcMsatSpecified+ = Data.ProtoLens.Field.field @"minHtlcMsatSpecified"+monthFeeSum ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "monthFeeSum" a) =>+ Lens.Family2.LensLike' f s a+monthFeeSum = Data.ProtoLens.Field.field @"monthFeeSum"+mppRecord ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "mppRecord" a) =>+ Lens.Family2.LensLike' f s a+mppRecord = Data.ProtoLens.Field.field @"mppRecord"+mppTotalAmtMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "mppTotalAmtMsat" a) =>+ Lens.Family2.LensLike' f s a+mppTotalAmtMsat = Data.ProtoLens.Field.field @"mppTotalAmtMsat"+msat ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "msat" a) =>+ Lens.Family2.LensLike' f s a+msat = Data.ProtoLens.Field.field @"msat"+msg ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "msg" a) =>+ Lens.Family2.LensLike' f s a+msg = Data.ProtoLens.Field.field @"msg"+multiChanBackup ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "multiChanBackup" a) =>+ Lens.Family2.LensLike' f s a+multiChanBackup = Data.ProtoLens.Field.field @"multiChanBackup"+name ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "name" a) =>+ Lens.Family2.LensLike' f s a+name = Data.ProtoLens.Field.field @"name"+network ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "network" a) =>+ Lens.Family2.LensLike' f s a+network = Data.ProtoLens.Field.field @"network"+noPublish ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "noPublish" a) =>+ Lens.Family2.LensLike' f s a+noPublish = Data.ProtoLens.Field.field @"noPublish"+node ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "node" a) =>+ Lens.Family2.LensLike' f s a+node = Data.ProtoLens.Field.field @"node"+node1Policy ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "node1Policy" a) =>+ Lens.Family2.LensLike' f s a+node1Policy = Data.ProtoLens.Field.field @"node1Policy"+node1Pub ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "node1Pub" a) =>+ Lens.Family2.LensLike' f s a+node1Pub = Data.ProtoLens.Field.field @"node1Pub"+node2Policy ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "node2Policy" a) =>+ Lens.Family2.LensLike' f s a+node2Policy = Data.ProtoLens.Field.field @"node2Policy"+node2Pub ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "node2Pub" a) =>+ Lens.Family2.LensLike' f s a+node2Pub = Data.ProtoLens.Field.field @"node2Pub"+nodeAddresses ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "nodeAddresses" a) =>+ Lens.Family2.LensLike' f s a+nodeAddresses = Data.ProtoLens.Field.field @"nodeAddresses"+nodeId ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "nodeId" a) =>+ Lens.Family2.LensLike' f s a+nodeId = Data.ProtoLens.Field.field @"nodeId"+nodePubkey ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "nodePubkey" a) =>+ Lens.Family2.LensLike' f s a+nodePubkey = Data.ProtoLens.Field.field @"nodePubkey"+nodePubkeyString ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "nodePubkeyString" a) =>+ Lens.Family2.LensLike' f s a+nodePubkeyString = Data.ProtoLens.Field.field @"nodePubkeyString"+nodeUpdates ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "nodeUpdates" a) =>+ Lens.Family2.LensLike' f s a+nodeUpdates = Data.ProtoLens.Field.field @"nodeUpdates"+nodes ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "nodes" a) =>+ Lens.Family2.LensLike' f s a+nodes = Data.ProtoLens.Field.field @"nodes"+nonce ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "nonce" a) =>+ Lens.Family2.LensLike' f s a+nonce = Data.ProtoLens.Field.field @"nonce"+normalizedValue ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "normalizedValue" a) =>+ Lens.Family2.LensLike' f s a+normalizedValue = Data.ProtoLens.Field.field @"normalizedValue"+numActiveChannels ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "numActiveChannels" a) =>+ Lens.Family2.LensLike' f s a+numActiveChannels = Data.ProtoLens.Field.field @"numActiveChannels"+numChannels ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "numChannels" a) =>+ Lens.Family2.LensLike' f s a+numChannels = Data.ProtoLens.Field.field @"numChannels"+numConfirmations ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "numConfirmations" a) =>+ Lens.Family2.LensLike' f s a+numConfirmations = Data.ProtoLens.Field.field @"numConfirmations"+numConfsLeft ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "numConfsLeft" a) =>+ Lens.Family2.LensLike' f s a+numConfsLeft = Data.ProtoLens.Field.field @"numConfsLeft"+numInactiveChannels ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "numInactiveChannels" a) =>+ Lens.Family2.LensLike' f s a+numInactiveChannels+ = Data.ProtoLens.Field.field @"numInactiveChannels"+numMaxEvents ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "numMaxEvents" a) =>+ Lens.Family2.LensLike' f s a+numMaxEvents = Data.ProtoLens.Field.field @"numMaxEvents"+numMaxInvoices ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "numMaxInvoices" a) =>+ Lens.Family2.LensLike' f s a+numMaxInvoices = Data.ProtoLens.Field.field @"numMaxInvoices"+numMsat ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "numMsat" a) =>+ Lens.Family2.LensLike' f s a+numMsat = Data.ProtoLens.Field.field @"numMsat"+numNodes ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "numNodes" a) =>+ Lens.Family2.LensLike' f s a+numNodes = Data.ProtoLens.Field.field @"numNodes"+numPeers ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "numPeers" a) =>+ Lens.Family2.LensLike' f s a+numPeers = Data.ProtoLens.Field.field @"numPeers"+numPendingChannels ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "numPendingChannels" a) =>+ Lens.Family2.LensLike' f s a+numPendingChannels+ = Data.ProtoLens.Field.field @"numPendingChannels"+numSatoshis ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "numSatoshis" a) =>+ Lens.Family2.LensLike' f s a+numSatoshis = Data.ProtoLens.Field.field @"numSatoshis"+numUpdates ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "numUpdates" a) =>+ Lens.Family2.LensLike' f s a+numUpdates = Data.ProtoLens.Field.field @"numUpdates"+numZombieChans ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "numZombieChans" a) =>+ Lens.Family2.LensLike' f s a+numZombieChans = Data.ProtoLens.Field.field @"numZombieChans"+onionSha256 ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "onionSha256" a) =>+ Lens.Family2.LensLike' f s a+onionSha256 = Data.ProtoLens.Field.field @"onionSha256"+openChannel ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "openChannel" a) =>+ Lens.Family2.LensLike' f s a+openChannel = Data.ProtoLens.Field.field @"openChannel"+openInitiator ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "openInitiator" a) =>+ Lens.Family2.LensLike' f s a+openInitiator = Data.ProtoLens.Field.field @"openInitiator"+ops ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "ops" a) =>+ Lens.Family2.LensLike' f s a+ops = Data.ProtoLens.Field.field @"ops"+outcome ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "outcome" a) =>+ Lens.Family2.LensLike' f s a+outcome = Data.ProtoLens.Field.field @"outcome"+outgoingChanId ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "outgoingChanId" a) =>+ Lens.Family2.LensLike' f s a+outgoingChanId = Data.ProtoLens.Field.field @"outgoingChanId"+outpoint ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "outpoint" a) =>+ Lens.Family2.LensLike' f s a+outpoint = Data.ProtoLens.Field.field @"outpoint"+outputIndex ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "outputIndex" a) =>+ Lens.Family2.LensLike' f s a+outputIndex = Data.ProtoLens.Field.field @"outputIndex"+payReq ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "payReq" a) =>+ Lens.Family2.LensLike' f s a+payReq = Data.ProtoLens.Field.field @"payReq"+paymentAddr ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "paymentAddr" a) =>+ Lens.Family2.LensLike' f s a+paymentAddr = Data.ProtoLens.Field.field @"paymentAddr"+paymentError ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "paymentError" a) =>+ Lens.Family2.LensLike' f s a+paymentError = Data.ProtoLens.Field.field @"paymentError"+paymentHash ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "paymentHash" a) =>+ Lens.Family2.LensLike' f s a+paymentHash = Data.ProtoLens.Field.field @"paymentHash"+paymentHashString ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "paymentHashString" a) =>+ Lens.Family2.LensLike' f s a+paymentHashString = Data.ProtoLens.Field.field @"paymentHashString"+paymentIndex ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "paymentIndex" a) =>+ Lens.Family2.LensLike' f s a+paymentIndex = Data.ProtoLens.Field.field @"paymentIndex"+paymentPreimage ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "paymentPreimage" a) =>+ Lens.Family2.LensLike' f s a+paymentPreimage = Data.ProtoLens.Field.field @"paymentPreimage"+paymentRequest ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "paymentRequest" a) =>+ Lens.Family2.LensLike' f s a+paymentRequest = Data.ProtoLens.Field.field @"paymentRequest"+paymentRoute ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "paymentRoute" a) =>+ Lens.Family2.LensLike' f s a+paymentRoute = Data.ProtoLens.Field.field @"paymentRoute"+payments ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "payments" a) =>+ Lens.Family2.LensLike' f s a+payments = Data.ProtoLens.Field.field @"payments"+peer ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "peer" a) =>+ Lens.Family2.LensLike' f s a+peer = Data.ProtoLens.Field.field @"peer"+peers ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "peers" a) =>+ Lens.Family2.LensLike' f s a+peers = Data.ProtoLens.Field.field @"peers"+pendingChanId ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "pendingChanId" a) =>+ Lens.Family2.LensLike' f s a+pendingChanId = Data.ProtoLens.Field.field @"pendingChanId"+pendingClosingChannels ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "pendingClosingChannels" a) =>+ Lens.Family2.LensLike' f s a+pendingClosingChannels+ = Data.ProtoLens.Field.field @"pendingClosingChannels"+pendingForceClosingChannels ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "pendingForceClosingChannels" a) =>+ Lens.Family2.LensLike' f s a+pendingForceClosingChannels+ = Data.ProtoLens.Field.field @"pendingForceClosingChannels"+pendingFundingShimOnly ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "pendingFundingShimOnly" a) =>+ Lens.Family2.LensLike' f s a+pendingFundingShimOnly+ = Data.ProtoLens.Field.field @"pendingFundingShimOnly"+pendingHtlcs ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "pendingHtlcs" a) =>+ Lens.Family2.LensLike' f s a+pendingHtlcs = Data.ProtoLens.Field.field @"pendingHtlcs"+pendingOnly ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "pendingOnly" a) =>+ Lens.Family2.LensLike' f s a+pendingOnly = Data.ProtoLens.Field.field @"pendingOnly"+pendingOpenBalance ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "pendingOpenBalance" a) =>+ Lens.Family2.LensLike' f s a+pendingOpenBalance+ = Data.ProtoLens.Field.field @"pendingOpenBalance"+pendingOpenChannel ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "pendingOpenChannel" a) =>+ Lens.Family2.LensLike' f s a+pendingOpenChannel+ = Data.ProtoLens.Field.field @"pendingOpenChannel"+pendingOpenChannels ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "pendingOpenChannels" a) =>+ Lens.Family2.LensLike' f s a+pendingOpenChannels+ = Data.ProtoLens.Field.field @"pendingOpenChannels"+pendingOpenLocalBalance ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "pendingOpenLocalBalance" a) =>+ Lens.Family2.LensLike' f s a+pendingOpenLocalBalance+ = Data.ProtoLens.Field.field @"pendingOpenLocalBalance"+pendingOpenRemoteBalance ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "pendingOpenRemoteBalance" a) =>+ Lens.Family2.LensLike' f s a+pendingOpenRemoteBalance+ = Data.ProtoLens.Field.field @"pendingOpenRemoteBalance"+percent ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "percent" a) =>+ Lens.Family2.LensLike' f s a+percent = Data.ProtoLens.Field.field @"percent"+perm ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "perm" a) =>+ Lens.Family2.LensLike' f s a+perm = Data.ProtoLens.Field.field @"perm"+permissions ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "permissions" a) =>+ Lens.Family2.LensLike' f s a+permissions = Data.ProtoLens.Field.field @"permissions"+pingTime ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "pingTime" a) =>+ Lens.Family2.LensLike' f s a+pingTime = Data.ProtoLens.Field.field @"pingTime"+pkScript ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "pkScript" a) =>+ Lens.Family2.LensLike' f s a+pkScript = Data.ProtoLens.Field.field @"pkScript"+preimage ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "preimage" a) =>+ Lens.Family2.LensLike' f s a+preimage = Data.ProtoLens.Field.field @"preimage"+private ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "private" a) =>+ Lens.Family2.LensLike' f s a+private = Data.ProtoLens.Field.field @"private"+privateOnly ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "privateOnly" a) =>+ Lens.Family2.LensLike' f s a+privateOnly = Data.ProtoLens.Field.field @"privateOnly"+progress ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "progress" a) =>+ Lens.Family2.LensLike' f s a+progress = Data.ProtoLens.Field.field @"progress"+psbt ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "psbt" a) =>+ Lens.Family2.LensLike' f s a+psbt = Data.ProtoLens.Field.field @"psbt"+psbtFinalize ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "psbtFinalize" a) =>+ Lens.Family2.LensLike' f s a+psbtFinalize = Data.ProtoLens.Field.field @"psbtFinalize"+psbtFund ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "psbtFund" a) =>+ Lens.Family2.LensLike' f s a+psbtFund = Data.ProtoLens.Field.field @"psbtFund"+psbtShim ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "psbtShim" a) =>+ Lens.Family2.LensLike' f s a+psbtShim = Data.ProtoLens.Field.field @"psbtShim"+psbtVerify ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "psbtVerify" a) =>+ Lens.Family2.LensLike' f s a+psbtVerify = Data.ProtoLens.Field.field @"psbtVerify"+pubKey ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "pubKey" a) =>+ Lens.Family2.LensLike' f s a+pubKey = Data.ProtoLens.Field.field @"pubKey"+pubkey ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "pubkey" a) =>+ Lens.Family2.LensLike' f s a+pubkey = Data.ProtoLens.Field.field @"pubkey"+publicOnly ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "publicOnly" a) =>+ Lens.Family2.LensLike' f s a+publicOnly = Data.ProtoLens.Field.field @"publicOnly"+pushAmountSat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "pushAmountSat" a) =>+ Lens.Family2.LensLike' f s a+pushAmountSat = Data.ProtoLens.Field.field @"pushAmountSat"+pushAmt ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "pushAmt" a) =>+ Lens.Family2.LensLike' f s a+pushAmt = Data.ProtoLens.Field.field @"pushAmt"+pushSat ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "pushSat" a) =>+ Lens.Family2.LensLike' f s a+pushSat = Data.ProtoLens.Field.field @"pushSat"+rHash ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "rHash" a) =>+ Lens.Family2.LensLike' f s a+rHash = Data.ProtoLens.Field.field @"rHash"+rHashStr ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "rHashStr" a) =>+ Lens.Family2.LensLike' f s a+rHashStr = Data.ProtoLens.Field.field @"rHashStr"+rPreimage ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "rPreimage" a) =>+ Lens.Family2.LensLike' f s a+rPreimage = Data.ProtoLens.Field.field @"rPreimage"+rawKeyBytes ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "rawKeyBytes" a) =>+ Lens.Family2.LensLike' f s a+rawKeyBytes = Data.ProtoLens.Field.field @"rawKeyBytes"+rawTxHex ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "rawTxHex" a) =>+ Lens.Family2.LensLike' f s a+rawTxHex = Data.ProtoLens.Field.field @"rawTxHex"+recoveredBalance ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "recoveredBalance" a) =>+ Lens.Family2.LensLike' f s a+recoveredBalance = Data.ProtoLens.Field.field @"recoveredBalance"+recoveryFinished ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "recoveryFinished" a) =>+ Lens.Family2.LensLike' f s a+recoveryFinished = Data.ProtoLens.Field.field @"recoveryFinished"+recoveryMode ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "recoveryMode" a) =>+ Lens.Family2.LensLike' f s a+recoveryMode = Data.ProtoLens.Field.field @"recoveryMode"+remoteBalance ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "remoteBalance" a) =>+ Lens.Family2.LensLike' f s a+remoteBalance = Data.ProtoLens.Field.field @"remoteBalance"+remoteChanReserveSat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "remoteChanReserveSat" a) =>+ Lens.Family2.LensLike' f s a+remoteChanReserveSat+ = Data.ProtoLens.Field.field @"remoteChanReserveSat"+remoteCommitFeeSat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "remoteCommitFeeSat" a) =>+ Lens.Family2.LensLike' f s a+remoteCommitFeeSat+ = Data.ProtoLens.Field.field @"remoteCommitFeeSat"+remoteConstraints ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "remoteConstraints" a) =>+ Lens.Family2.LensLike' f s a+remoteConstraints = Data.ProtoLens.Field.field @"remoteConstraints"+remoteCsvDelay ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "remoteCsvDelay" a) =>+ Lens.Family2.LensLike' f s a+remoteCsvDelay = Data.ProtoLens.Field.field @"remoteCsvDelay"+remoteForce ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "remoteForce" a) =>+ Lens.Family2.LensLike' f s a+remoteForce = Data.ProtoLens.Field.field @"remoteForce"+remoteKey ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "remoteKey" a) =>+ Lens.Family2.LensLike' f s a+remoteKey = Data.ProtoLens.Field.field @"remoteKey"+remoteMaxHtlcs ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "remoteMaxHtlcs" a) =>+ Lens.Family2.LensLike' f s a+remoteMaxHtlcs = Data.ProtoLens.Field.field @"remoteMaxHtlcs"+remoteMaxValueInFlightMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "remoteMaxValueInFlightMsat" a) =>+ Lens.Family2.LensLike' f s a+remoteMaxValueInFlightMsat+ = Data.ProtoLens.Field.field @"remoteMaxValueInFlightMsat"+remoteNodePub ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "remoteNodePub" a) =>+ Lens.Family2.LensLike' f s a+remoteNodePub = Data.ProtoLens.Field.field @"remoteNodePub"+remotePendingCommitFeeSat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "remotePendingCommitFeeSat" a) =>+ Lens.Family2.LensLike' f s a+remotePendingCommitFeeSat+ = Data.ProtoLens.Field.field @"remotePendingCommitFeeSat"+remotePendingTxid ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "remotePendingTxid" a) =>+ Lens.Family2.LensLike' f s a+remotePendingTxid = Data.ProtoLens.Field.field @"remotePendingTxid"+remotePubkey ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "remotePubkey" a) =>+ Lens.Family2.LensLike' f s a+remotePubkey = Data.ProtoLens.Field.field @"remotePubkey"+remoteTxid ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "remoteTxid" a) =>+ Lens.Family2.LensLike' f s a+remoteTxid = Data.ProtoLens.Field.field @"remoteTxid"+reserveSat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "reserveSat" a) =>+ Lens.Family2.LensLike' f s a+reserveSat = Data.ProtoLens.Field.field @"reserveSat"+resolutionType ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "resolutionType" a) =>+ Lens.Family2.LensLike' f s a+resolutionType = Data.ProtoLens.Field.field @"resolutionType"+resolutions ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "resolutions" a) =>+ Lens.Family2.LensLike' f s a+resolutions = Data.ProtoLens.Field.field @"resolutions"+resolveTime ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "resolveTime" a) =>+ Lens.Family2.LensLike' f s a+resolveTime = Data.ProtoLens.Field.field @"resolveTime"+resolveTimeNs ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "resolveTimeNs" a) =>+ Lens.Family2.LensLike' f s a+resolveTimeNs = Data.ProtoLens.Field.field @"resolveTimeNs"+reversed ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "reversed" a) =>+ Lens.Family2.LensLike' f s a+reversed = Data.ProtoLens.Field.field @"reversed"+rootKeyId ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "rootKeyId" a) =>+ Lens.Family2.LensLike' f s a+rootKeyId = Data.ProtoLens.Field.field @"rootKeyId"+rootKeyIds ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "rootKeyIds" a) =>+ Lens.Family2.LensLike' f s a+rootKeyIds = Data.ProtoLens.Field.field @"rootKeyIds"+rootShare ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "rootShare" a) =>+ Lens.Family2.LensLike' f s a+rootShare = Data.ProtoLens.Field.field @"rootShare"+route ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "route" a) =>+ Lens.Family2.LensLike' f s a+route = Data.ProtoLens.Field.field @"route"+routeHints ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "routeHints" a) =>+ Lens.Family2.LensLike' f s a+routeHints = Data.ProtoLens.Field.field @"routeHints"+routes ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "routes" a) =>+ Lens.Family2.LensLike' f s a+routes = Data.ProtoLens.Field.field @"routes"+routingPolicy ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "routingPolicy" a) =>+ Lens.Family2.LensLike' f s a+routingPolicy = Data.ProtoLens.Field.field @"routingPolicy"+sat ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "sat" a) =>+ Lens.Family2.LensLike' f s a+sat = Data.ProtoLens.Field.field @"sat"+satPerByte ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "satPerByte" a) =>+ Lens.Family2.LensLike' f s a+satPerByte = Data.ProtoLens.Field.field @"satPerByte"+satPerVbyte ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "satPerVbyte" a) =>+ Lens.Family2.LensLike' f s a+satPerVbyte = Data.ProtoLens.Field.field @"satPerVbyte"+satRecv ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "satRecv" a) =>+ Lens.Family2.LensLike' f s a+satRecv = Data.ProtoLens.Field.field @"satRecv"+satSent ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "satSent" a) =>+ Lens.Family2.LensLike' f s a+satSent = Data.ProtoLens.Field.field @"satSent"+sendAll ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "sendAll" a) =>+ Lens.Family2.LensLike' f s a+sendAll = Data.ProtoLens.Field.field @"sendAll"+setId ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "setId" a) =>+ Lens.Family2.LensLike' f s a+setId = Data.ProtoLens.Field.field @"setId"+settleDate ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "settleDate" a) =>+ Lens.Family2.LensLike' f s a+settleDate = Data.ProtoLens.Field.field @"settleDate"+settleIndex ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "settleIndex" a) =>+ Lens.Family2.LensLike' f s a+settleIndex = Data.ProtoLens.Field.field @"settleIndex"+settled ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "settled" a) =>+ Lens.Family2.LensLike' f s a+settled = Data.ProtoLens.Field.field @"settled"+settledBalance ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "settledBalance" a) =>+ Lens.Family2.LensLike' f s a+settledBalance = Data.ProtoLens.Field.field @"settledBalance"+shimCancel ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "shimCancel" a) =>+ Lens.Family2.LensLike' f s a+shimCancel = Data.ProtoLens.Field.field @"shimCancel"+shimRegister ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "shimRegister" a) =>+ Lens.Family2.LensLike' f s a+shimRegister = Data.ProtoLens.Field.field @"shimRegister"+show ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "show" a) =>+ Lens.Family2.LensLike' f s a+show = Data.ProtoLens.Field.field @"show"+signature ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "signature" a) =>+ Lens.Family2.LensLike' f s a+signature = Data.ProtoLens.Field.field @"signature"+signedPsbt ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "signedPsbt" a) =>+ Lens.Family2.LensLike' f s a+signedPsbt = Data.ProtoLens.Field.field @"signedPsbt"+singleChanBackups ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "singleChanBackups" a) =>+ Lens.Family2.LensLike' f s a+singleChanBackups = Data.ProtoLens.Field.field @"singleChanBackups"+sourcePubKey ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "sourcePubKey" a) =>+ Lens.Family2.LensLike' f s a+sourcePubKey = Data.ProtoLens.Field.field @"sourcePubKey"+spendUnconfirmed ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "spendUnconfirmed" a) =>+ Lens.Family2.LensLike' f s a+spendUnconfirmed = Data.ProtoLens.Field.field @"spendUnconfirmed"+stage ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "stage" a) =>+ Lens.Family2.LensLike' f s a+stage = Data.ProtoLens.Field.field @"stage"+startHeight ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "startHeight" a) =>+ Lens.Family2.LensLike' f s a+startHeight = Data.ProtoLens.Field.field @"startHeight"+startTime ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "startTime" a) =>+ Lens.Family2.LensLike' f s a+startTime = Data.ProtoLens.Field.field @"startTime"+state ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "state" a) =>+ Lens.Family2.LensLike' f s a+state = Data.ProtoLens.Field.field @"state"+staticRemoteKey ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "staticRemoteKey" a) =>+ Lens.Family2.LensLike' f s a+staticRemoteKey = Data.ProtoLens.Field.field @"staticRemoteKey"+status ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "status" a) =>+ Lens.Family2.LensLike' f s a+status = Data.ProtoLens.Field.field @"status"+storageId ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "storageId" a) =>+ Lens.Family2.LensLike' f s a+storageId = Data.ProtoLens.Field.field @"storageId"+subSystems ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "subSystems" a) =>+ Lens.Family2.LensLike' f s a+subSystems = Data.ProtoLens.Field.field @"subSystems"+success ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "success" a) =>+ Lens.Family2.LensLike' f s a+success = Data.ProtoLens.Field.field @"success"+successProb ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "successProb" a) =>+ Lens.Family2.LensLike' f s a+successProb = Data.ProtoLens.Field.field @"successProb"+sweepTxid ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "sweepTxid" a) =>+ Lens.Family2.LensLike' f s a+sweepTxid = Data.ProtoLens.Field.field @"sweepTxid"+syncType ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "syncType" a) =>+ Lens.Family2.LensLike' f s a+syncType = Data.ProtoLens.Field.field @"syncType"+syncedToChain ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "syncedToChain" a) =>+ Lens.Family2.LensLike' f s a+syncedToChain = Data.ProtoLens.Field.field @"syncedToChain"+syncedToGraph ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "syncedToGraph" a) =>+ Lens.Family2.LensLike' f s a+syncedToGraph = Data.ProtoLens.Field.field @"syncedToGraph"+targetConf ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "targetConf" a) =>+ Lens.Family2.LensLike' f s a+targetConf = Data.ProtoLens.Field.field @"targetConf"+testnet ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "testnet" a) =>+ Lens.Family2.LensLike' f s a+testnet = Data.ProtoLens.Field.field @"testnet"+thawHeight ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "thawHeight" a) =>+ Lens.Family2.LensLike' f s a+thawHeight = Data.ProtoLens.Field.field @"thawHeight"+timeLockDelta ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "timeLockDelta" a) =>+ Lens.Family2.LensLike' f s a+timeLockDelta = Data.ProtoLens.Field.field @"timeLockDelta"+timeLockedBalance ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "timeLockedBalance" a) =>+ Lens.Family2.LensLike' f s a+timeLockedBalance = Data.ProtoLens.Field.field @"timeLockedBalance"+timeStamp ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "timeStamp" a) =>+ Lens.Family2.LensLike' f s a+timeStamp = Data.ProtoLens.Field.field @"timeStamp"+timeout ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "timeout" a) =>+ Lens.Family2.LensLike' f s a+timeout = Data.ProtoLens.Field.field @"timeout"+timestamp ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "timestamp" a) =>+ Lens.Family2.LensLike' f s a+timestamp = Data.ProtoLens.Field.field @"timestamp"+timestampNs ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "timestampNs" a) =>+ Lens.Family2.LensLike' f s a+timestampNs = Data.ProtoLens.Field.field @"timestampNs"+tlvPayload ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "tlvPayload" a) =>+ Lens.Family2.LensLike' f s a+tlvPayload = Data.ProtoLens.Field.field @"tlvPayload"+to ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "to" a) =>+ Lens.Family2.LensLike' f s a+to = Data.ProtoLens.Field.field @"to"+totalAmt ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "totalAmt" a) =>+ Lens.Family2.LensLike' f s a+totalAmt = Data.ProtoLens.Field.field @"totalAmt"+totalAmtMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "totalAmtMsat" a) =>+ Lens.Family2.LensLike' f s a+totalAmtMsat = Data.ProtoLens.Field.field @"totalAmtMsat"+totalBalance ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "totalBalance" a) =>+ Lens.Family2.LensLike' f s a+totalBalance = Data.ProtoLens.Field.field @"totalBalance"+totalCapacity ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "totalCapacity" a) =>+ Lens.Family2.LensLike' f s a+totalCapacity = Data.ProtoLens.Field.field @"totalCapacity"+totalFees ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "totalFees" a) =>+ Lens.Family2.LensLike' f s a+totalFees = Data.ProtoLens.Field.field @"totalFees"+totalFeesMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "totalFeesMsat" a) =>+ Lens.Family2.LensLike' f s a+totalFeesMsat = Data.ProtoLens.Field.field @"totalFeesMsat"+totalLimboBalance ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "totalLimboBalance" a) =>+ Lens.Family2.LensLike' f s a+totalLimboBalance = Data.ProtoLens.Field.field @"totalLimboBalance"+totalNetworkCapacity ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "totalNetworkCapacity" a) =>+ Lens.Family2.LensLike' f s a+totalNetworkCapacity+ = Data.ProtoLens.Field.field @"totalNetworkCapacity"+totalSatoshisReceived ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "totalSatoshisReceived" a) =>+ Lens.Family2.LensLike' f s a+totalSatoshisReceived+ = Data.ProtoLens.Field.field @"totalSatoshisReceived"+totalSatoshisSent ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "totalSatoshisSent" a) =>+ Lens.Family2.LensLike' f s a+totalSatoshisSent = Data.ProtoLens.Field.field @"totalSatoshisSent"+totalTimeLock ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "totalTimeLock" a) =>+ Lens.Family2.LensLike' f s a+totalTimeLock = Data.ProtoLens.Field.field @"totalTimeLock"+transactions ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "transactions" a) =>+ Lens.Family2.LensLike' f s a+transactions = Data.ProtoLens.Field.field @"transactions"+txHash ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "txHash" a) =>+ Lens.Family2.LensLike' f s a+txHash = Data.ProtoLens.Field.field @"txHash"+txid ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "txid" a) =>+ Lens.Family2.LensLike' f s a+txid = Data.ProtoLens.Field.field @"txid"+txidBytes ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "txidBytes" a) =>+ Lens.Family2.LensLike' f s a+txidBytes = Data.ProtoLens.Field.field @"txidBytes"+txidStr ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "txidStr" a) =>+ Lens.Family2.LensLike' f s a+txidStr = Data.ProtoLens.Field.field @"txidStr"+type' ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "type'" a) =>+ Lens.Family2.LensLike' f s a+type' = Data.ProtoLens.Field.field @"type'"+types ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "types" a) =>+ Lens.Family2.LensLike' f s a+types = Data.ProtoLens.Field.field @"types"+unconfirmedBalance ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "unconfirmedBalance" a) =>+ Lens.Family2.LensLike' f s a+unconfirmedBalance+ = Data.ProtoLens.Field.field @"unconfirmedBalance"+unsettledBalance ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "unsettledBalance" a) =>+ Lens.Family2.LensLike' f s a+unsettledBalance = Data.ProtoLens.Field.field @"unsettledBalance"+unsettledLocalBalance ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "unsettledLocalBalance" a) =>+ Lens.Family2.LensLike' f s a+unsettledLocalBalance+ = Data.ProtoLens.Field.field @"unsettledLocalBalance"+unsettledRemoteBalance ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "unsettledRemoteBalance" a) =>+ Lens.Family2.LensLike' f s a+unsettledRemoteBalance+ = Data.ProtoLens.Field.field @"unsettledRemoteBalance"+upfrontShutdown ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "upfrontShutdown" a) =>+ Lens.Family2.LensLike' f s a+upfrontShutdown = Data.ProtoLens.Field.field @"upfrontShutdown"+uptime ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "uptime" a) =>+ Lens.Family2.LensLike' f s a+uptime = Data.ProtoLens.Field.field @"uptime"+uris ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "uris" a) =>+ Lens.Family2.LensLike' f s a+uris = Data.ProtoLens.Field.field @"uris"+useMissionControl ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "useMissionControl" a) =>+ Lens.Family2.LensLike' f s a+useMissionControl = Data.ProtoLens.Field.field @"useMissionControl"+utxos ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "utxos" a) =>+ Lens.Family2.LensLike' f s a+utxos = Data.ProtoLens.Field.field @"utxos"+valid ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "valid" a) =>+ Lens.Family2.LensLike' f s a+valid = Data.ProtoLens.Field.field @"valid"+value ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "value" a) =>+ Lens.Family2.LensLike' f s a+value = Data.ProtoLens.Field.field @"value"+valueMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "valueMsat" a) =>+ Lens.Family2.LensLike' f s a+valueMsat = Data.ProtoLens.Field.field @"valueMsat"+valueSat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "valueSat" a) =>+ Lens.Family2.LensLike' f s a+valueSat = Data.ProtoLens.Field.field @"valueSat"+vec'actions ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'actions" a) =>+ Lens.Family2.LensLike' f s a+vec'actions = Data.ProtoLens.Field.field @"vec'actions"+vec'addresses ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'addresses" a) =>+ Lens.Family2.LensLike' f s a+vec'addresses = Data.ProtoLens.Field.field @"vec'addresses"+vec'chains ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'chains" a) =>+ Lens.Family2.LensLike' f s a+vec'chains = Data.ProtoLens.Field.field @"vec'chains"+vec'chanBackups ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'chanBackups" a) =>+ Lens.Family2.LensLike' f s a+vec'chanBackups = Data.ProtoLens.Field.field @"vec'chanBackups"+vec'chanPoints ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'chanPoints" a) =>+ Lens.Family2.LensLike' f s a+vec'chanPoints = Data.ProtoLens.Field.field @"vec'chanPoints"+vec'channelFees ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'channelFees" a) =>+ Lens.Family2.LensLike' f s a+vec'channelFees = Data.ProtoLens.Field.field @"vec'channelFees"+vec'channelUpdates ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'channelUpdates" a) =>+ Lens.Family2.LensLike' f s a+vec'channelUpdates+ = Data.ProtoLens.Field.field @"vec'channelUpdates"+vec'channels ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'channels" a) =>+ Lens.Family2.LensLike' f s a+vec'channels = Data.ProtoLens.Field.field @"vec'channels"+vec'closedChans ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'closedChans" a) =>+ Lens.Family2.LensLike' f s a+vec'closedChans = Data.ProtoLens.Field.field @"vec'closedChans"+vec'destAddresses ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'destAddresses" a) =>+ Lens.Family2.LensLike' f s a+vec'destAddresses = Data.ProtoLens.Field.field @"vec'destAddresses"+vec'destFeatures ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'destFeatures" a) =>+ Lens.Family2.LensLike' f s a+vec'destFeatures = Data.ProtoLens.Field.field @"vec'destFeatures"+vec'edges ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'edges" a) =>+ Lens.Family2.LensLike' f s a+vec'edges = Data.ProtoLens.Field.field @"vec'edges"+vec'errors ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'errors" a) =>+ Lens.Family2.LensLike' f s a+vec'errors = Data.ProtoLens.Field.field @"vec'errors"+vec'forwardingEvents ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'forwardingEvents" a) =>+ Lens.Family2.LensLike' f s a+vec'forwardingEvents+ = Data.ProtoLens.Field.field @"vec'forwardingEvents"+vec'hopHints ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'hopHints" a) =>+ Lens.Family2.LensLike' f s a+vec'hopHints = Data.ProtoLens.Field.field @"vec'hopHints"+vec'hops ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'hops" a) =>+ Lens.Family2.LensLike' f s a+vec'hops = Data.ProtoLens.Field.field @"vec'hops"+vec'htlcs ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'htlcs" a) =>+ Lens.Family2.LensLike' f s a+vec'htlcs = Data.ProtoLens.Field.field @"vec'htlcs"+vec'ignoredEdges ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'ignoredEdges" a) =>+ Lens.Family2.LensLike' f s a+vec'ignoredEdges = Data.ProtoLens.Field.field @"vec'ignoredEdges"+vec'ignoredNodes ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'ignoredNodes" a) =>+ Lens.Family2.LensLike' f s a+vec'ignoredNodes = Data.ProtoLens.Field.field @"vec'ignoredNodes"+vec'ignoredPairs ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'ignoredPairs" a) =>+ Lens.Family2.LensLike' f s a+vec'ignoredPairs = Data.ProtoLens.Field.field @"vec'ignoredPairs"+vec'invoices ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'invoices" a) =>+ Lens.Family2.LensLike' f s a+vec'invoices = Data.ProtoLens.Field.field @"vec'invoices"+vec'nodeAddresses ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'nodeAddresses" a) =>+ Lens.Family2.LensLike' f s a+vec'nodeAddresses = Data.ProtoLens.Field.field @"vec'nodeAddresses"+vec'nodeUpdates ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'nodeUpdates" a) =>+ Lens.Family2.LensLike' f s a+vec'nodeUpdates = Data.ProtoLens.Field.field @"vec'nodeUpdates"+vec'nodes ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'nodes" a) =>+ Lens.Family2.LensLike' f s a+vec'nodes = Data.ProtoLens.Field.field @"vec'nodes"+vec'ops ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "vec'ops" a) =>+ Lens.Family2.LensLike' f s a+vec'ops = Data.ProtoLens.Field.field @"vec'ops"+vec'payments ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'payments" a) =>+ Lens.Family2.LensLike' f s a+vec'payments = Data.ProtoLens.Field.field @"vec'payments"+vec'peers ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'peers" a) =>+ Lens.Family2.LensLike' f s a+vec'peers = Data.ProtoLens.Field.field @"vec'peers"+vec'pendingClosingChannels ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'pendingClosingChannels" a) =>+ Lens.Family2.LensLike' f s a+vec'pendingClosingChannels+ = Data.ProtoLens.Field.field @"vec'pendingClosingChannels"+vec'pendingForceClosingChannels ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'pendingForceClosingChannels" a) =>+ Lens.Family2.LensLike' f s a+vec'pendingForceClosingChannels+ = Data.ProtoLens.Field.field @"vec'pendingForceClosingChannels"+vec'pendingHtlcs ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'pendingHtlcs" a) =>+ Lens.Family2.LensLike' f s a+vec'pendingHtlcs = Data.ProtoLens.Field.field @"vec'pendingHtlcs"+vec'pendingOpenChannels ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'pendingOpenChannels" a) =>+ Lens.Family2.LensLike' f s a+vec'pendingOpenChannels+ = Data.ProtoLens.Field.field @"vec'pendingOpenChannels"+vec'permissions ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'permissions" a) =>+ Lens.Family2.LensLike' f s a+vec'permissions = Data.ProtoLens.Field.field @"vec'permissions"+vec'resolutions ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'resolutions" a) =>+ Lens.Family2.LensLike' f s a+vec'resolutions = Data.ProtoLens.Field.field @"vec'resolutions"+vec'rootKeyIds ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'rootKeyIds" a) =>+ Lens.Family2.LensLike' f s a+vec'rootKeyIds = Data.ProtoLens.Field.field @"vec'rootKeyIds"+vec'routeHints ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'routeHints" a) =>+ Lens.Family2.LensLike' f s a+vec'routeHints = Data.ProtoLens.Field.field @"vec'routeHints"+vec'routes ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'routes" a) =>+ Lens.Family2.LensLike' f s a+vec'routes = Data.ProtoLens.Field.field @"vec'routes"+vec'transactions ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'transactions" a) =>+ Lens.Family2.LensLike' f s a+vec'transactions = Data.ProtoLens.Field.field @"vec'transactions"+vec'types ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'types" a) =>+ Lens.Family2.LensLike' f s a+vec'types = Data.ProtoLens.Field.field @"vec'types"+vec'uris ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'uris" a) =>+ Lens.Family2.LensLike' f s a+vec'uris = Data.ProtoLens.Field.field @"vec'uris"+vec'utxos ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'utxos" a) =>+ Lens.Family2.LensLike' f s a+vec'utxos = Data.ProtoLens.Field.field @"vec'utxos"+vec'waitingCloseChannels ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'waitingCloseChannels" a) =>+ Lens.Family2.LensLike' f s a+vec'waitingCloseChannels+ = Data.ProtoLens.Field.field @"vec'waitingCloseChannels"+version ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "version" a) =>+ Lens.Family2.LensLike' f s a+version = Data.ProtoLens.Field.field @"version"+waitingCloseChannels ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "waitingCloseChannels" a) =>+ Lens.Family2.LensLike' f s a+waitingCloseChannels+ = Data.ProtoLens.Field.field @"waitingCloseChannels"+weekFeeSum ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "weekFeeSum" a) =>+ Lens.Family2.LensLike' f s a+weekFeeSum = Data.ProtoLens.Field.field @"weekFeeSum"
+ src/Proto/RouterGrpc.hs view
@@ -0,0 +1,10865 @@+{- This file was auto-generated from router_grpc.proto by the proto-lens-protoc program. -}+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies, UndecidableInstances, GeneralizedNewtypeDeriving, MultiParamTypeClasses, FlexibleContexts, FlexibleInstances, PatternSynonyms, MagicHash, NoImplicitPrelude, DataKinds, BangPatterns, TypeApplications, OverloadedStrings, DerivingStrategies#-}+{-# OPTIONS_GHC -Wno-unused-imports#-}+{-# OPTIONS_GHC -Wno-duplicate-exports#-}+{-# OPTIONS_GHC -Wno-dodgy-exports#-}+module Proto.RouterGrpc (+ Router(..), BuildRouteRequest(), BuildRouteResponse(),+ ChanStatusAction(..), ChanStatusAction(),+ ChanStatusAction'UnrecognizedValue, CircuitKey(),+ FailureDetail(..), FailureDetail(),+ FailureDetail'UnrecognizedValue, ForwardEvent(),+ ForwardFailEvent(), ForwardHtlcInterceptRequest(),+ ForwardHtlcInterceptRequest'CustomRecordsEntry(),+ ForwardHtlcInterceptResponse(), GetMissionControlConfigRequest(),+ GetMissionControlConfigResponse(), HtlcEvent(),+ HtlcEvent'Event(..), _HtlcEvent'ForwardEvent,+ _HtlcEvent'ForwardFailEvent, _HtlcEvent'SettleEvent,+ _HtlcEvent'LinkFailEvent, HtlcEvent'EventType(..),+ HtlcEvent'EventType(), HtlcEvent'EventType'UnrecognizedValue,+ HtlcInfo(), LinkFailEvent(), MissionControlConfig(), PairData(),+ PairHistory(), PaymentState(..), PaymentState(),+ PaymentState'UnrecognizedValue, PaymentStatus(),+ QueryMissionControlRequest(), QueryMissionControlResponse(),+ QueryProbabilityRequest(), QueryProbabilityResponse(),+ ResetMissionControlRequest(), ResetMissionControlResponse(),+ ResolveHoldForwardAction(..), ResolveHoldForwardAction(),+ ResolveHoldForwardAction'UnrecognizedValue, RouteFeeRequest(),+ RouteFeeResponse(), SendPaymentRequest(),+ SendPaymentRequest'DestCustomRecordsEntry(), SendToRouteRequest(),+ SendToRouteResponse(), SetMissionControlConfigRequest(),+ SetMissionControlConfigResponse(), SettleEvent(),+ SubscribeHtlcEventsRequest(), TrackPaymentRequest(),+ UpdateChanStatusRequest(), UpdateChanStatusResponse(),+ XImportMissionControlRequest(), XImportMissionControlResponse()+ ) where+import qualified Data.ProtoLens.Runtime.Control.DeepSeq as Control.DeepSeq+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Prism as Data.ProtoLens.Prism+import qualified Data.ProtoLens.Runtime.Prelude as Prelude+import qualified Data.ProtoLens.Runtime.Data.Int as Data.Int+import qualified Data.ProtoLens.Runtime.Data.Monoid as Data.Monoid+import qualified Data.ProtoLens.Runtime.Data.Word as Data.Word+import qualified Data.ProtoLens.Runtime.Data.ProtoLens as Data.ProtoLens+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Bytes as Data.ProtoLens.Encoding.Bytes+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Growing as Data.ProtoLens.Encoding.Growing+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Parser.Unsafe as Data.ProtoLens.Encoding.Parser.Unsafe+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Wire as Data.ProtoLens.Encoding.Wire+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Field as Data.ProtoLens.Field+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Message.Enum as Data.ProtoLens.Message.Enum+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Service.Types as Data.ProtoLens.Service.Types+import qualified Data.ProtoLens.Runtime.Lens.Family2 as Lens.Family2+import qualified Data.ProtoLens.Runtime.Lens.Family2.Unchecked as Lens.Family2.Unchecked+import qualified Data.ProtoLens.Runtime.Data.Text as Data.Text+import qualified Data.ProtoLens.Runtime.Data.Map as Data.Map+import qualified Data.ProtoLens.Runtime.Data.ByteString as Data.ByteString+import qualified Data.ProtoLens.Runtime.Data.ByteString.Char8 as Data.ByteString.Char8+import qualified Data.ProtoLens.Runtime.Data.Text.Encoding as Data.Text.Encoding+import qualified Data.ProtoLens.Runtime.Data.Vector as Data.Vector+import qualified Data.ProtoLens.Runtime.Data.Vector.Generic as Data.Vector.Generic+import qualified Data.ProtoLens.Runtime.Data.Vector.Unboxed as Data.Vector.Unboxed+import qualified Data.ProtoLens.Runtime.Text.Read as Text.Read+import qualified Proto.LndGrpc+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.amtMsat' @:: Lens' BuildRouteRequest Data.Int.Int64@+ * 'Proto.RouterGrpc_Fields.finalCltvDelta' @:: Lens' BuildRouteRequest Data.Int.Int32@+ * 'Proto.RouterGrpc_Fields.outgoingChanId' @:: Lens' BuildRouteRequest Data.Word.Word64@+ * 'Proto.RouterGrpc_Fields.hopPubkeys' @:: Lens' BuildRouteRequest [Data.ByteString.ByteString]@+ * 'Proto.RouterGrpc_Fields.vec'hopPubkeys' @:: Lens' BuildRouteRequest (Data.Vector.Vector Data.ByteString.ByteString)@+ * 'Proto.RouterGrpc_Fields.paymentAddr' @:: Lens' BuildRouteRequest Data.ByteString.ByteString@ -}+data BuildRouteRequest+ = BuildRouteRequest'_constructor {_BuildRouteRequest'amtMsat :: !Data.Int.Int64,+ _BuildRouteRequest'finalCltvDelta :: !Data.Int.Int32,+ _BuildRouteRequest'outgoingChanId :: !Data.Word.Word64,+ _BuildRouteRequest'hopPubkeys :: !(Data.Vector.Vector Data.ByteString.ByteString),+ _BuildRouteRequest'paymentAddr :: !Data.ByteString.ByteString,+ _BuildRouteRequest'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show BuildRouteRequest where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField BuildRouteRequest "amtMsat" Data.Int.Int64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _BuildRouteRequest'amtMsat+ (\ x__ y__ -> x__ {_BuildRouteRequest'amtMsat = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField BuildRouteRequest "finalCltvDelta" Data.Int.Int32 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _BuildRouteRequest'finalCltvDelta+ (\ x__ y__ -> x__ {_BuildRouteRequest'finalCltvDelta = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField BuildRouteRequest "outgoingChanId" Data.Word.Word64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _BuildRouteRequest'outgoingChanId+ (\ x__ y__ -> x__ {_BuildRouteRequest'outgoingChanId = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField BuildRouteRequest "hopPubkeys" [Data.ByteString.ByteString] where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _BuildRouteRequest'hopPubkeys+ (\ x__ y__ -> x__ {_BuildRouteRequest'hopPubkeys = y__}))+ (Lens.Family2.Unchecked.lens+ Data.Vector.Generic.toList+ (\ _ y__ -> Data.Vector.Generic.fromList y__))+instance Data.ProtoLens.Field.HasField BuildRouteRequest "vec'hopPubkeys" (Data.Vector.Vector Data.ByteString.ByteString) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _BuildRouteRequest'hopPubkeys+ (\ x__ y__ -> x__ {_BuildRouteRequest'hopPubkeys = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField BuildRouteRequest "paymentAddr" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _BuildRouteRequest'paymentAddr+ (\ x__ y__ -> x__ {_BuildRouteRequest'paymentAddr = y__}))+ Prelude.id+instance Data.ProtoLens.Message BuildRouteRequest where+ messageName _ = Data.Text.pack "routerrpc.BuildRouteRequest"+ packedMessageDescriptor _+ = "\n\+ \\DC1BuildRouteRequest\DC2\EM\n\+ \\bamt_msat\CAN\SOH \SOH(\ETXR\aamtMsat\DC2(\n\+ \\DLEfinal_cltv_delta\CAN\STX \SOH(\ENQR\SOfinalCltvDelta\DC2,\n\+ \\DLEoutgoing_chan_id\CAN\ETX \SOH(\EOTR\SOoutgoingChanIdB\STX0\SOH\DC2\US\n\+ \\vhop_pubkeys\CAN\EOT \ETX(\fR\n\+ \hopPubkeys\DC2!\n\+ \\fpayment_addr\CAN\ENQ \SOH(\fR\vpaymentAddr"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ amtMsat__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "amt_msat"+ (Data.ProtoLens.ScalarField Data.ProtoLens.Int64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"amtMsat")) ::+ Data.ProtoLens.FieldDescriptor BuildRouteRequest+ finalCltvDelta__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "final_cltv_delta"+ (Data.ProtoLens.ScalarField Data.ProtoLens.Int32Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"finalCltvDelta")) ::+ Data.ProtoLens.FieldDescriptor BuildRouteRequest+ outgoingChanId__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "outgoing_chan_id"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"outgoingChanId")) ::+ Data.ProtoLens.FieldDescriptor BuildRouteRequest+ hopPubkeys__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "hop_pubkeys"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.RepeatedField+ Data.ProtoLens.Unpacked+ (Data.ProtoLens.Field.field @"hopPubkeys")) ::+ Data.ProtoLens.FieldDescriptor BuildRouteRequest+ paymentAddr__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "payment_addr"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"paymentAddr")) ::+ Data.ProtoLens.FieldDescriptor BuildRouteRequest+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, amtMsat__field_descriptor),+ (Data.ProtoLens.Tag 2, finalCltvDelta__field_descriptor),+ (Data.ProtoLens.Tag 3, outgoingChanId__field_descriptor),+ (Data.ProtoLens.Tag 4, hopPubkeys__field_descriptor),+ (Data.ProtoLens.Tag 5, paymentAddr__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _BuildRouteRequest'_unknownFields+ (\ x__ y__ -> x__ {_BuildRouteRequest'_unknownFields = y__})+ defMessage+ = BuildRouteRequest'_constructor+ {_BuildRouteRequest'amtMsat = Data.ProtoLens.fieldDefault,+ _BuildRouteRequest'finalCltvDelta = Data.ProtoLens.fieldDefault,+ _BuildRouteRequest'outgoingChanId = Data.ProtoLens.fieldDefault,+ _BuildRouteRequest'hopPubkeys = Data.Vector.Generic.empty,+ _BuildRouteRequest'paymentAddr = Data.ProtoLens.fieldDefault,+ _BuildRouteRequest'_unknownFields = []}+ parseMessage+ = let+ loop ::+ BuildRouteRequest+ -> Data.ProtoLens.Encoding.Growing.Growing Data.Vector.Vector Data.ProtoLens.Encoding.Growing.RealWorld Data.ByteString.ByteString+ -> Data.ProtoLens.Encoding.Bytes.Parser BuildRouteRequest+ loop x mutable'hopPubkeys+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do frozen'hopPubkeys <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ (Data.ProtoLens.Encoding.Growing.unsafeFreeze+ mutable'hopPubkeys)+ (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields+ (\ !t -> Prelude.reverse t)+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"vec'hopPubkeys")+ frozen'hopPubkeys+ x))+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 8 -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "amt_msat"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"amtMsat") y x)+ mutable'hopPubkeys+ 16+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "final_cltv_delta"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"finalCltvDelta") y x)+ mutable'hopPubkeys+ 24+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ Data.ProtoLens.Encoding.Bytes.getVarInt "outgoing_chan_id"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"outgoingChanId") y x)+ mutable'hopPubkeys+ 34+ -> do !y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "hop_pubkeys"+ v <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ (Data.ProtoLens.Encoding.Growing.append mutable'hopPubkeys y)+ loop x v+ 42+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "payment_addr"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"paymentAddr") y x)+ mutable'hopPubkeys+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ mutable'hopPubkeys+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do mutable'hopPubkeys <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ Data.ProtoLens.Encoding.Growing.new+ loop Data.ProtoLens.defMessage mutable'hopPubkeys)+ "BuildRouteRequest"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"amtMsat") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 8)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"finalCltvDelta") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 16)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"outgoingChanId") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 24)+ (Data.ProtoLens.Encoding.Bytes.putVarInt _v))+ ((Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.foldMapBuilder+ (\ _v+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 34)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ (Lens.Family2.view+ (Data.ProtoLens.Field.field @"vec'hopPubkeys") _x))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view (Data.ProtoLens.Field.field @"paymentAddr") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 42)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x))))))+instance Control.DeepSeq.NFData BuildRouteRequest where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_BuildRouteRequest'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_BuildRouteRequest'amtMsat x__)+ (Control.DeepSeq.deepseq+ (_BuildRouteRequest'finalCltvDelta x__)+ (Control.DeepSeq.deepseq+ (_BuildRouteRequest'outgoingChanId x__)+ (Control.DeepSeq.deepseq+ (_BuildRouteRequest'hopPubkeys x__)+ (Control.DeepSeq.deepseq+ (_BuildRouteRequest'paymentAddr x__) ())))))+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.route' @:: Lens' BuildRouteResponse Proto.LndGrpc.Route@+ * 'Proto.RouterGrpc_Fields.maybe'route' @:: Lens' BuildRouteResponse (Prelude.Maybe Proto.LndGrpc.Route)@ -}+data BuildRouteResponse+ = BuildRouteResponse'_constructor {_BuildRouteResponse'route :: !(Prelude.Maybe Proto.LndGrpc.Route),+ _BuildRouteResponse'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show BuildRouteResponse where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField BuildRouteResponse "route" Proto.LndGrpc.Route where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _BuildRouteResponse'route+ (\ x__ y__ -> x__ {_BuildRouteResponse'route = y__}))+ (Data.ProtoLens.maybeLens Data.ProtoLens.defMessage)+instance Data.ProtoLens.Field.HasField BuildRouteResponse "maybe'route" (Prelude.Maybe Proto.LndGrpc.Route) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _BuildRouteResponse'route+ (\ x__ y__ -> x__ {_BuildRouteResponse'route = y__}))+ Prelude.id+instance Data.ProtoLens.Message BuildRouteResponse where+ messageName _ = Data.Text.pack "routerrpc.BuildRouteResponse"+ packedMessageDescriptor _+ = "\n\+ \\DC2BuildRouteResponse\DC2\"\n\+ \\ENQroute\CAN\SOH \SOH(\v2\f.lnrpc.RouteR\ENQroute"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ route__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "route"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor Proto.LndGrpc.Route)+ (Data.ProtoLens.OptionalField+ (Data.ProtoLens.Field.field @"maybe'route")) ::+ Data.ProtoLens.FieldDescriptor BuildRouteResponse+ in+ Data.Map.fromList [(Data.ProtoLens.Tag 1, route__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _BuildRouteResponse'_unknownFields+ (\ x__ y__ -> x__ {_BuildRouteResponse'_unknownFields = y__})+ defMessage+ = BuildRouteResponse'_constructor+ {_BuildRouteResponse'route = Prelude.Nothing,+ _BuildRouteResponse'_unknownFields = []}+ parseMessage+ = let+ loop ::+ BuildRouteResponse+ -> Data.ProtoLens.Encoding.Bytes.Parser BuildRouteResponse+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len) Data.ProtoLens.parseMessage)+ "route"+ loop (Lens.Family2.set (Data.ProtoLens.Field.field @"route") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "BuildRouteResponse"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (case+ Lens.Family2.view (Data.ProtoLens.Field.field @"maybe'route") _x+ of+ Prelude.Nothing -> Data.Monoid.mempty+ (Prelude.Just _v)+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.ProtoLens.encodeMessage+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x))+instance Control.DeepSeq.NFData BuildRouteResponse where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_BuildRouteResponse'_unknownFields x__)+ (Control.DeepSeq.deepseq (_BuildRouteResponse'route x__) ())+newtype ChanStatusAction'UnrecognizedValue+ = ChanStatusAction'UnrecognizedValue Data.Int.Int32+ deriving stock (Prelude.Eq, Prelude.Ord, Prelude.Show)+data ChanStatusAction+ = ENABLE |+ DISABLE |+ AUTO |+ ChanStatusAction'Unrecognized !ChanStatusAction'UnrecognizedValue+ deriving stock (Prelude.Show, Prelude.Eq, Prelude.Ord)+instance Data.ProtoLens.MessageEnum ChanStatusAction where+ maybeToEnum 0 = Prelude.Just ENABLE+ maybeToEnum 1 = Prelude.Just DISABLE+ maybeToEnum 2 = Prelude.Just AUTO+ maybeToEnum k+ = Prelude.Just+ (ChanStatusAction'Unrecognized+ (ChanStatusAction'UnrecognizedValue (Prelude.fromIntegral k)))+ showEnum ENABLE = "ENABLE"+ showEnum DISABLE = "DISABLE"+ showEnum AUTO = "AUTO"+ showEnum+ (ChanStatusAction'Unrecognized (ChanStatusAction'UnrecognizedValue k))+ = Prelude.show k+ readEnum k+ | (Prelude.==) k "ENABLE" = Prelude.Just ENABLE+ | (Prelude.==) k "DISABLE" = Prelude.Just DISABLE+ | (Prelude.==) k "AUTO" = Prelude.Just AUTO+ | Prelude.otherwise+ = (Prelude.>>=) (Text.Read.readMaybe k) Data.ProtoLens.maybeToEnum+instance Prelude.Bounded ChanStatusAction where+ minBound = ENABLE+ maxBound = AUTO+instance Prelude.Enum ChanStatusAction where+ toEnum k__+ = Prelude.maybe+ (Prelude.error+ ((Prelude.++)+ "toEnum: unknown value for enum ChanStatusAction: "+ (Prelude.show k__)))+ Prelude.id+ (Data.ProtoLens.maybeToEnum k__)+ fromEnum ENABLE = 0+ fromEnum DISABLE = 1+ fromEnum AUTO = 2+ fromEnum+ (ChanStatusAction'Unrecognized (ChanStatusAction'UnrecognizedValue k))+ = Prelude.fromIntegral k+ succ AUTO+ = Prelude.error+ "ChanStatusAction.succ: bad argument AUTO. This value would be out of bounds."+ succ ENABLE = DISABLE+ succ DISABLE = AUTO+ succ (ChanStatusAction'Unrecognized _)+ = Prelude.error+ "ChanStatusAction.succ: bad argument: unrecognized value"+ pred ENABLE+ = Prelude.error+ "ChanStatusAction.pred: bad argument ENABLE. This value would be out of bounds."+ pred DISABLE = ENABLE+ pred AUTO = DISABLE+ pred (ChanStatusAction'Unrecognized _)+ = Prelude.error+ "ChanStatusAction.pred: bad argument: unrecognized value"+ enumFrom = Data.ProtoLens.Message.Enum.messageEnumFrom+ enumFromTo = Data.ProtoLens.Message.Enum.messageEnumFromTo+ enumFromThen = Data.ProtoLens.Message.Enum.messageEnumFromThen+ enumFromThenTo = Data.ProtoLens.Message.Enum.messageEnumFromThenTo+instance Data.ProtoLens.FieldDefault ChanStatusAction where+ fieldDefault = ENABLE+instance Control.DeepSeq.NFData ChanStatusAction where+ rnf x__ = Prelude.seq x__ ()+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.chanId' @:: Lens' CircuitKey Data.Word.Word64@+ * 'Proto.RouterGrpc_Fields.htlcId' @:: Lens' CircuitKey Data.Word.Word64@ -}+data CircuitKey+ = CircuitKey'_constructor {_CircuitKey'chanId :: !Data.Word.Word64,+ _CircuitKey'htlcId :: !Data.Word.Word64,+ _CircuitKey'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show CircuitKey where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField CircuitKey "chanId" Data.Word.Word64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _CircuitKey'chanId (\ x__ y__ -> x__ {_CircuitKey'chanId = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField CircuitKey "htlcId" Data.Word.Word64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _CircuitKey'htlcId (\ x__ y__ -> x__ {_CircuitKey'htlcId = y__}))+ Prelude.id+instance Data.ProtoLens.Message CircuitKey where+ messageName _ = Data.Text.pack "routerrpc.CircuitKey"+ packedMessageDescriptor _+ = "\n\+ \\n\+ \CircuitKey\DC2\ETB\n\+ \\achan_id\CAN\SOH \SOH(\EOTR\ACKchanId\DC2\ETB\n\+ \\ahtlc_id\CAN\STX \SOH(\EOTR\ACKhtlcId"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ chanId__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "chan_id"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"chanId")) ::+ Data.ProtoLens.FieldDescriptor CircuitKey+ htlcId__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "htlc_id"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"htlcId")) ::+ Data.ProtoLens.FieldDescriptor CircuitKey+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, chanId__field_descriptor),+ (Data.ProtoLens.Tag 2, htlcId__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _CircuitKey'_unknownFields+ (\ x__ y__ -> x__ {_CircuitKey'_unknownFields = y__})+ defMessage+ = CircuitKey'_constructor+ {_CircuitKey'chanId = Data.ProtoLens.fieldDefault,+ _CircuitKey'htlcId = Data.ProtoLens.fieldDefault,+ _CircuitKey'_unknownFields = []}+ parseMessage+ = let+ loop ::+ CircuitKey -> Data.ProtoLens.Encoding.Bytes.Parser CircuitKey+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 8 -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ Data.ProtoLens.Encoding.Bytes.getVarInt "chan_id"+ loop (Lens.Family2.set (Data.ProtoLens.Field.field @"chanId") y x)+ 16+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ Data.ProtoLens.Encoding.Bytes.getVarInt "htlc_id"+ loop (Lens.Family2.set (Data.ProtoLens.Field.field @"htlcId") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "CircuitKey"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"chanId") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 8)+ (Data.ProtoLens.Encoding.Bytes.putVarInt _v))+ ((Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"htlcId") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 16)+ (Data.ProtoLens.Encoding.Bytes.putVarInt _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)))+instance Control.DeepSeq.NFData CircuitKey where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_CircuitKey'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_CircuitKey'chanId x__)+ (Control.DeepSeq.deepseq (_CircuitKey'htlcId x__) ()))+newtype FailureDetail'UnrecognizedValue+ = FailureDetail'UnrecognizedValue Data.Int.Int32+ deriving stock (Prelude.Eq, Prelude.Ord, Prelude.Show)+data FailureDetail+ = UNKNOWN |+ NO_DETAIL |+ ONION_DECODE |+ LINK_NOT_ELIGIBLE |+ ON_CHAIN_TIMEOUT |+ HTLC_EXCEEDS_MAX |+ INSUFFICIENT_BALANCE |+ INCOMPLETE_FORWARD |+ HTLC_ADD_FAILED |+ FORWARDS_DISABLED |+ INVOICE_CANCELED |+ INVOICE_UNDERPAID |+ INVOICE_EXPIRY_TOO_SOON |+ INVOICE_NOT_OPEN |+ MPP_INVOICE_TIMEOUT |+ ADDRESS_MISMATCH |+ SET_TOTAL_MISMATCH |+ SET_TOTAL_TOO_LOW |+ SET_OVERPAID |+ UNKNOWN_INVOICE |+ INVALID_KEYSEND |+ MPP_IN_PROGRESS |+ CIRCULAR_ROUTE |+ FailureDetail'Unrecognized !FailureDetail'UnrecognizedValue+ deriving stock (Prelude.Show, Prelude.Eq, Prelude.Ord)+instance Data.ProtoLens.MessageEnum FailureDetail where+ maybeToEnum 0 = Prelude.Just UNKNOWN+ maybeToEnum 1 = Prelude.Just NO_DETAIL+ maybeToEnum 2 = Prelude.Just ONION_DECODE+ maybeToEnum 3 = Prelude.Just LINK_NOT_ELIGIBLE+ maybeToEnum 4 = Prelude.Just ON_CHAIN_TIMEOUT+ maybeToEnum 5 = Prelude.Just HTLC_EXCEEDS_MAX+ maybeToEnum 6 = Prelude.Just INSUFFICIENT_BALANCE+ maybeToEnum 7 = Prelude.Just INCOMPLETE_FORWARD+ maybeToEnum 8 = Prelude.Just HTLC_ADD_FAILED+ maybeToEnum 9 = Prelude.Just FORWARDS_DISABLED+ maybeToEnum 10 = Prelude.Just INVOICE_CANCELED+ maybeToEnum 11 = Prelude.Just INVOICE_UNDERPAID+ maybeToEnum 12 = Prelude.Just INVOICE_EXPIRY_TOO_SOON+ maybeToEnum 13 = Prelude.Just INVOICE_NOT_OPEN+ maybeToEnum 14 = Prelude.Just MPP_INVOICE_TIMEOUT+ maybeToEnum 15 = Prelude.Just ADDRESS_MISMATCH+ maybeToEnum 16 = Prelude.Just SET_TOTAL_MISMATCH+ maybeToEnum 17 = Prelude.Just SET_TOTAL_TOO_LOW+ maybeToEnum 18 = Prelude.Just SET_OVERPAID+ maybeToEnum 19 = Prelude.Just UNKNOWN_INVOICE+ maybeToEnum 20 = Prelude.Just INVALID_KEYSEND+ maybeToEnum 21 = Prelude.Just MPP_IN_PROGRESS+ maybeToEnum 22 = Prelude.Just CIRCULAR_ROUTE+ maybeToEnum k+ = Prelude.Just+ (FailureDetail'Unrecognized+ (FailureDetail'UnrecognizedValue (Prelude.fromIntegral k)))+ showEnum UNKNOWN = "UNKNOWN"+ showEnum NO_DETAIL = "NO_DETAIL"+ showEnum ONION_DECODE = "ONION_DECODE"+ showEnum LINK_NOT_ELIGIBLE = "LINK_NOT_ELIGIBLE"+ showEnum ON_CHAIN_TIMEOUT = "ON_CHAIN_TIMEOUT"+ showEnum HTLC_EXCEEDS_MAX = "HTLC_EXCEEDS_MAX"+ showEnum INSUFFICIENT_BALANCE = "INSUFFICIENT_BALANCE"+ showEnum INCOMPLETE_FORWARD = "INCOMPLETE_FORWARD"+ showEnum HTLC_ADD_FAILED = "HTLC_ADD_FAILED"+ showEnum FORWARDS_DISABLED = "FORWARDS_DISABLED"+ showEnum INVOICE_CANCELED = "INVOICE_CANCELED"+ showEnum INVOICE_UNDERPAID = "INVOICE_UNDERPAID"+ showEnum INVOICE_EXPIRY_TOO_SOON = "INVOICE_EXPIRY_TOO_SOON"+ showEnum INVOICE_NOT_OPEN = "INVOICE_NOT_OPEN"+ showEnum MPP_INVOICE_TIMEOUT = "MPP_INVOICE_TIMEOUT"+ showEnum ADDRESS_MISMATCH = "ADDRESS_MISMATCH"+ showEnum SET_TOTAL_MISMATCH = "SET_TOTAL_MISMATCH"+ showEnum SET_TOTAL_TOO_LOW = "SET_TOTAL_TOO_LOW"+ showEnum SET_OVERPAID = "SET_OVERPAID"+ showEnum UNKNOWN_INVOICE = "UNKNOWN_INVOICE"+ showEnum INVALID_KEYSEND = "INVALID_KEYSEND"+ showEnum MPP_IN_PROGRESS = "MPP_IN_PROGRESS"+ showEnum CIRCULAR_ROUTE = "CIRCULAR_ROUTE"+ showEnum+ (FailureDetail'Unrecognized (FailureDetail'UnrecognizedValue k))+ = Prelude.show k+ readEnum k+ | (Prelude.==) k "UNKNOWN" = Prelude.Just UNKNOWN+ | (Prelude.==) k "NO_DETAIL" = Prelude.Just NO_DETAIL+ | (Prelude.==) k "ONION_DECODE" = Prelude.Just ONION_DECODE+ | (Prelude.==) k "LINK_NOT_ELIGIBLE"+ = Prelude.Just LINK_NOT_ELIGIBLE+ | (Prelude.==) k "ON_CHAIN_TIMEOUT" = Prelude.Just ON_CHAIN_TIMEOUT+ | (Prelude.==) k "HTLC_EXCEEDS_MAX" = Prelude.Just HTLC_EXCEEDS_MAX+ | (Prelude.==) k "INSUFFICIENT_BALANCE"+ = Prelude.Just INSUFFICIENT_BALANCE+ | (Prelude.==) k "INCOMPLETE_FORWARD"+ = Prelude.Just INCOMPLETE_FORWARD+ | (Prelude.==) k "HTLC_ADD_FAILED" = Prelude.Just HTLC_ADD_FAILED+ | (Prelude.==) k "FORWARDS_DISABLED"+ = Prelude.Just FORWARDS_DISABLED+ | (Prelude.==) k "INVOICE_CANCELED" = Prelude.Just INVOICE_CANCELED+ | (Prelude.==) k "INVOICE_UNDERPAID"+ = Prelude.Just INVOICE_UNDERPAID+ | (Prelude.==) k "INVOICE_EXPIRY_TOO_SOON"+ = Prelude.Just INVOICE_EXPIRY_TOO_SOON+ | (Prelude.==) k "INVOICE_NOT_OPEN" = Prelude.Just INVOICE_NOT_OPEN+ | (Prelude.==) k "MPP_INVOICE_TIMEOUT"+ = Prelude.Just MPP_INVOICE_TIMEOUT+ | (Prelude.==) k "ADDRESS_MISMATCH" = Prelude.Just ADDRESS_MISMATCH+ | (Prelude.==) k "SET_TOTAL_MISMATCH"+ = Prelude.Just SET_TOTAL_MISMATCH+ | (Prelude.==) k "SET_TOTAL_TOO_LOW"+ = Prelude.Just SET_TOTAL_TOO_LOW+ | (Prelude.==) k "SET_OVERPAID" = Prelude.Just SET_OVERPAID+ | (Prelude.==) k "UNKNOWN_INVOICE" = Prelude.Just UNKNOWN_INVOICE+ | (Prelude.==) k "INVALID_KEYSEND" = Prelude.Just INVALID_KEYSEND+ | (Prelude.==) k "MPP_IN_PROGRESS" = Prelude.Just MPP_IN_PROGRESS+ | (Prelude.==) k "CIRCULAR_ROUTE" = Prelude.Just CIRCULAR_ROUTE+ | Prelude.otherwise+ = (Prelude.>>=) (Text.Read.readMaybe k) Data.ProtoLens.maybeToEnum+instance Prelude.Bounded FailureDetail where+ minBound = UNKNOWN+ maxBound = CIRCULAR_ROUTE+instance Prelude.Enum FailureDetail where+ toEnum k__+ = Prelude.maybe+ (Prelude.error+ ((Prelude.++)+ "toEnum: unknown value for enum FailureDetail: "+ (Prelude.show k__)))+ Prelude.id+ (Data.ProtoLens.maybeToEnum k__)+ fromEnum UNKNOWN = 0+ fromEnum NO_DETAIL = 1+ fromEnum ONION_DECODE = 2+ fromEnum LINK_NOT_ELIGIBLE = 3+ fromEnum ON_CHAIN_TIMEOUT = 4+ fromEnum HTLC_EXCEEDS_MAX = 5+ fromEnum INSUFFICIENT_BALANCE = 6+ fromEnum INCOMPLETE_FORWARD = 7+ fromEnum HTLC_ADD_FAILED = 8+ fromEnum FORWARDS_DISABLED = 9+ fromEnum INVOICE_CANCELED = 10+ fromEnum INVOICE_UNDERPAID = 11+ fromEnum INVOICE_EXPIRY_TOO_SOON = 12+ fromEnum INVOICE_NOT_OPEN = 13+ fromEnum MPP_INVOICE_TIMEOUT = 14+ fromEnum ADDRESS_MISMATCH = 15+ fromEnum SET_TOTAL_MISMATCH = 16+ fromEnum SET_TOTAL_TOO_LOW = 17+ fromEnum SET_OVERPAID = 18+ fromEnum UNKNOWN_INVOICE = 19+ fromEnum INVALID_KEYSEND = 20+ fromEnum MPP_IN_PROGRESS = 21+ fromEnum CIRCULAR_ROUTE = 22+ fromEnum+ (FailureDetail'Unrecognized (FailureDetail'UnrecognizedValue k))+ = Prelude.fromIntegral k+ succ CIRCULAR_ROUTE+ = Prelude.error+ "FailureDetail.succ: bad argument CIRCULAR_ROUTE. This value would be out of bounds."+ succ UNKNOWN = NO_DETAIL+ succ NO_DETAIL = ONION_DECODE+ succ ONION_DECODE = LINK_NOT_ELIGIBLE+ succ LINK_NOT_ELIGIBLE = ON_CHAIN_TIMEOUT+ succ ON_CHAIN_TIMEOUT = HTLC_EXCEEDS_MAX+ succ HTLC_EXCEEDS_MAX = INSUFFICIENT_BALANCE+ succ INSUFFICIENT_BALANCE = INCOMPLETE_FORWARD+ succ INCOMPLETE_FORWARD = HTLC_ADD_FAILED+ succ HTLC_ADD_FAILED = FORWARDS_DISABLED+ succ FORWARDS_DISABLED = INVOICE_CANCELED+ succ INVOICE_CANCELED = INVOICE_UNDERPAID+ succ INVOICE_UNDERPAID = INVOICE_EXPIRY_TOO_SOON+ succ INVOICE_EXPIRY_TOO_SOON = INVOICE_NOT_OPEN+ succ INVOICE_NOT_OPEN = MPP_INVOICE_TIMEOUT+ succ MPP_INVOICE_TIMEOUT = ADDRESS_MISMATCH+ succ ADDRESS_MISMATCH = SET_TOTAL_MISMATCH+ succ SET_TOTAL_MISMATCH = SET_TOTAL_TOO_LOW+ succ SET_TOTAL_TOO_LOW = SET_OVERPAID+ succ SET_OVERPAID = UNKNOWN_INVOICE+ succ UNKNOWN_INVOICE = INVALID_KEYSEND+ succ INVALID_KEYSEND = MPP_IN_PROGRESS+ succ MPP_IN_PROGRESS = CIRCULAR_ROUTE+ succ (FailureDetail'Unrecognized _)+ = Prelude.error+ "FailureDetail.succ: bad argument: unrecognized value"+ pred UNKNOWN+ = Prelude.error+ "FailureDetail.pred: bad argument UNKNOWN. This value would be out of bounds."+ pred NO_DETAIL = UNKNOWN+ pred ONION_DECODE = NO_DETAIL+ pred LINK_NOT_ELIGIBLE = ONION_DECODE+ pred ON_CHAIN_TIMEOUT = LINK_NOT_ELIGIBLE+ pred HTLC_EXCEEDS_MAX = ON_CHAIN_TIMEOUT+ pred INSUFFICIENT_BALANCE = HTLC_EXCEEDS_MAX+ pred INCOMPLETE_FORWARD = INSUFFICIENT_BALANCE+ pred HTLC_ADD_FAILED = INCOMPLETE_FORWARD+ pred FORWARDS_DISABLED = HTLC_ADD_FAILED+ pred INVOICE_CANCELED = FORWARDS_DISABLED+ pred INVOICE_UNDERPAID = INVOICE_CANCELED+ pred INVOICE_EXPIRY_TOO_SOON = INVOICE_UNDERPAID+ pred INVOICE_NOT_OPEN = INVOICE_EXPIRY_TOO_SOON+ pred MPP_INVOICE_TIMEOUT = INVOICE_NOT_OPEN+ pred ADDRESS_MISMATCH = MPP_INVOICE_TIMEOUT+ pred SET_TOTAL_MISMATCH = ADDRESS_MISMATCH+ pred SET_TOTAL_TOO_LOW = SET_TOTAL_MISMATCH+ pred SET_OVERPAID = SET_TOTAL_TOO_LOW+ pred UNKNOWN_INVOICE = SET_OVERPAID+ pred INVALID_KEYSEND = UNKNOWN_INVOICE+ pred MPP_IN_PROGRESS = INVALID_KEYSEND+ pred CIRCULAR_ROUTE = MPP_IN_PROGRESS+ pred (FailureDetail'Unrecognized _)+ = Prelude.error+ "FailureDetail.pred: bad argument: unrecognized value"+ enumFrom = Data.ProtoLens.Message.Enum.messageEnumFrom+ enumFromTo = Data.ProtoLens.Message.Enum.messageEnumFromTo+ enumFromThen = Data.ProtoLens.Message.Enum.messageEnumFromThen+ enumFromThenTo = Data.ProtoLens.Message.Enum.messageEnumFromThenTo+instance Data.ProtoLens.FieldDefault FailureDetail where+ fieldDefault = UNKNOWN+instance Control.DeepSeq.NFData FailureDetail where+ rnf x__ = Prelude.seq x__ ()+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.info' @:: Lens' ForwardEvent HtlcInfo@+ * 'Proto.RouterGrpc_Fields.maybe'info' @:: Lens' ForwardEvent (Prelude.Maybe HtlcInfo)@ -}+data ForwardEvent+ = ForwardEvent'_constructor {_ForwardEvent'info :: !(Prelude.Maybe HtlcInfo),+ _ForwardEvent'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show ForwardEvent where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField ForwardEvent "info" HtlcInfo where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _ForwardEvent'info (\ x__ y__ -> x__ {_ForwardEvent'info = y__}))+ (Data.ProtoLens.maybeLens Data.ProtoLens.defMessage)+instance Data.ProtoLens.Field.HasField ForwardEvent "maybe'info" (Prelude.Maybe HtlcInfo) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _ForwardEvent'info (\ x__ y__ -> x__ {_ForwardEvent'info = y__}))+ Prelude.id+instance Data.ProtoLens.Message ForwardEvent where+ messageName _ = Data.Text.pack "routerrpc.ForwardEvent"+ packedMessageDescriptor _+ = "\n\+ \\fForwardEvent\DC2'\n\+ \\EOTinfo\CAN\SOH \SOH(\v2\DC3.routerrpc.HtlcInfoR\EOTinfo"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ info__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "info"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor HtlcInfo)+ (Data.ProtoLens.OptionalField+ (Data.ProtoLens.Field.field @"maybe'info")) ::+ Data.ProtoLens.FieldDescriptor ForwardEvent+ in+ Data.Map.fromList [(Data.ProtoLens.Tag 1, info__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _ForwardEvent'_unknownFields+ (\ x__ y__ -> x__ {_ForwardEvent'_unknownFields = y__})+ defMessage+ = ForwardEvent'_constructor+ {_ForwardEvent'info = Prelude.Nothing,+ _ForwardEvent'_unknownFields = []}+ parseMessage+ = let+ loop ::+ ForwardEvent -> Data.ProtoLens.Encoding.Bytes.Parser ForwardEvent+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len) Data.ProtoLens.parseMessage)+ "info"+ loop (Lens.Family2.set (Data.ProtoLens.Field.field @"info") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "ForwardEvent"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (case+ Lens.Family2.view (Data.ProtoLens.Field.field @"maybe'info") _x+ of+ Prelude.Nothing -> Data.Monoid.mempty+ (Prelude.Just _v)+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.ProtoLens.encodeMessage+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x))+instance Control.DeepSeq.NFData ForwardEvent where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_ForwardEvent'_unknownFields x__)+ (Control.DeepSeq.deepseq (_ForwardEvent'info x__) ())+{- | Fields :+ -}+data ForwardFailEvent+ = ForwardFailEvent'_constructor {_ForwardFailEvent'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show ForwardFailEvent where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Message ForwardFailEvent where+ messageName _ = Data.Text.pack "routerrpc.ForwardFailEvent"+ packedMessageDescriptor _+ = "\n\+ \\DLEForwardFailEvent"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag = let in Data.Map.fromList []+ unknownFields+ = Lens.Family2.Unchecked.lens+ _ForwardFailEvent'_unknownFields+ (\ x__ y__ -> x__ {_ForwardFailEvent'_unknownFields = y__})+ defMessage+ = ForwardFailEvent'_constructor+ {_ForwardFailEvent'_unknownFields = []}+ parseMessage+ = let+ loop ::+ ForwardFailEvent+ -> Data.ProtoLens.Encoding.Bytes.Parser ForwardFailEvent+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of {+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x) }+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "ForwardFailEvent"+ buildMessage+ = \ _x+ -> Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)+instance Control.DeepSeq.NFData ForwardFailEvent where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_ForwardFailEvent'_unknownFields x__) ()+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.incomingCircuitKey' @:: Lens' ForwardHtlcInterceptRequest CircuitKey@+ * 'Proto.RouterGrpc_Fields.maybe'incomingCircuitKey' @:: Lens' ForwardHtlcInterceptRequest (Prelude.Maybe CircuitKey)@+ * 'Proto.RouterGrpc_Fields.incomingAmountMsat' @:: Lens' ForwardHtlcInterceptRequest Data.Word.Word64@+ * 'Proto.RouterGrpc_Fields.incomingExpiry' @:: Lens' ForwardHtlcInterceptRequest Data.Word.Word32@+ * 'Proto.RouterGrpc_Fields.paymentHash' @:: Lens' ForwardHtlcInterceptRequest Data.ByteString.ByteString@+ * 'Proto.RouterGrpc_Fields.outgoingRequestedChanId' @:: Lens' ForwardHtlcInterceptRequest Data.Word.Word64@+ * 'Proto.RouterGrpc_Fields.outgoingAmountMsat' @:: Lens' ForwardHtlcInterceptRequest Data.Word.Word64@+ * 'Proto.RouterGrpc_Fields.outgoingExpiry' @:: Lens' ForwardHtlcInterceptRequest Data.Word.Word32@+ * 'Proto.RouterGrpc_Fields.customRecords' @:: Lens' ForwardHtlcInterceptRequest (Data.Map.Map Data.Word.Word64 Data.ByteString.ByteString)@+ * 'Proto.RouterGrpc_Fields.onionBlob' @:: Lens' ForwardHtlcInterceptRequest Data.ByteString.ByteString@ -}+data ForwardHtlcInterceptRequest+ = ForwardHtlcInterceptRequest'_constructor {_ForwardHtlcInterceptRequest'incomingCircuitKey :: !(Prelude.Maybe CircuitKey),+ _ForwardHtlcInterceptRequest'incomingAmountMsat :: !Data.Word.Word64,+ _ForwardHtlcInterceptRequest'incomingExpiry :: !Data.Word.Word32,+ _ForwardHtlcInterceptRequest'paymentHash :: !Data.ByteString.ByteString,+ _ForwardHtlcInterceptRequest'outgoingRequestedChanId :: !Data.Word.Word64,+ _ForwardHtlcInterceptRequest'outgoingAmountMsat :: !Data.Word.Word64,+ _ForwardHtlcInterceptRequest'outgoingExpiry :: !Data.Word.Word32,+ _ForwardHtlcInterceptRequest'customRecords :: !(Data.Map.Map Data.Word.Word64 Data.ByteString.ByteString),+ _ForwardHtlcInterceptRequest'onionBlob :: !Data.ByteString.ByteString,+ _ForwardHtlcInterceptRequest'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show ForwardHtlcInterceptRequest where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField ForwardHtlcInterceptRequest "incomingCircuitKey" CircuitKey where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _ForwardHtlcInterceptRequest'incomingCircuitKey+ (\ x__ y__+ -> x__ {_ForwardHtlcInterceptRequest'incomingCircuitKey = y__}))+ (Data.ProtoLens.maybeLens Data.ProtoLens.defMessage)+instance Data.ProtoLens.Field.HasField ForwardHtlcInterceptRequest "maybe'incomingCircuitKey" (Prelude.Maybe CircuitKey) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _ForwardHtlcInterceptRequest'incomingCircuitKey+ (\ x__ y__+ -> x__ {_ForwardHtlcInterceptRequest'incomingCircuitKey = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField ForwardHtlcInterceptRequest "incomingAmountMsat" Data.Word.Word64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _ForwardHtlcInterceptRequest'incomingAmountMsat+ (\ x__ y__+ -> x__ {_ForwardHtlcInterceptRequest'incomingAmountMsat = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField ForwardHtlcInterceptRequest "incomingExpiry" Data.Word.Word32 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _ForwardHtlcInterceptRequest'incomingExpiry+ (\ x__ y__+ -> x__ {_ForwardHtlcInterceptRequest'incomingExpiry = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField ForwardHtlcInterceptRequest "paymentHash" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _ForwardHtlcInterceptRequest'paymentHash+ (\ x__ y__+ -> x__ {_ForwardHtlcInterceptRequest'paymentHash = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField ForwardHtlcInterceptRequest "outgoingRequestedChanId" Data.Word.Word64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _ForwardHtlcInterceptRequest'outgoingRequestedChanId+ (\ x__ y__+ -> x__+ {_ForwardHtlcInterceptRequest'outgoingRequestedChanId = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField ForwardHtlcInterceptRequest "outgoingAmountMsat" Data.Word.Word64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _ForwardHtlcInterceptRequest'outgoingAmountMsat+ (\ x__ y__+ -> x__ {_ForwardHtlcInterceptRequest'outgoingAmountMsat = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField ForwardHtlcInterceptRequest "outgoingExpiry" Data.Word.Word32 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _ForwardHtlcInterceptRequest'outgoingExpiry+ (\ x__ y__+ -> x__ {_ForwardHtlcInterceptRequest'outgoingExpiry = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField ForwardHtlcInterceptRequest "customRecords" (Data.Map.Map Data.Word.Word64 Data.ByteString.ByteString) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _ForwardHtlcInterceptRequest'customRecords+ (\ x__ y__+ -> x__ {_ForwardHtlcInterceptRequest'customRecords = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField ForwardHtlcInterceptRequest "onionBlob" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _ForwardHtlcInterceptRequest'onionBlob+ (\ x__ y__ -> x__ {_ForwardHtlcInterceptRequest'onionBlob = y__}))+ Prelude.id+instance Data.ProtoLens.Message ForwardHtlcInterceptRequest where+ messageName _+ = Data.Text.pack "routerrpc.ForwardHtlcInterceptRequest"+ packedMessageDescriptor _+ = "\n\+ \\ESCForwardHtlcInterceptRequest\DC2G\n\+ \\DC4incoming_circuit_key\CAN\SOH \SOH(\v2\NAK.routerrpc.CircuitKeyR\DC2incomingCircuitKey\DC20\n\+ \\DC4incoming_amount_msat\CAN\ENQ \SOH(\EOTR\DC2incomingAmountMsat\DC2'\n\+ \\SIincoming_expiry\CAN\ACK \SOH(\rR\SOincomingExpiry\DC2!\n\+ \\fpayment_hash\CAN\STX \SOH(\fR\vpaymentHash\DC2;\n\+ \\SUBoutgoing_requested_chan_id\CAN\a \SOH(\EOTR\ETBoutgoingRequestedChanId\DC20\n\+ \\DC4outgoing_amount_msat\CAN\ETX \SOH(\EOTR\DC2outgoingAmountMsat\DC2'\n\+ \\SIoutgoing_expiry\CAN\EOT \SOH(\rR\SOoutgoingExpiry\DC2`\n\+ \\SOcustom_records\CAN\b \ETX(\v29.routerrpc.ForwardHtlcInterceptRequest.CustomRecordsEntryR\rcustomRecords\DC2\GS\n\+ \\n\+ \onion_blob\CAN\t \SOH(\fR\tonionBlob\SUB@\n\+ \\DC2CustomRecordsEntry\DC2\DLE\n\+ \\ETXkey\CAN\SOH \SOH(\EOTR\ETXkey\DC2\DC4\n\+ \\ENQvalue\CAN\STX \SOH(\fR\ENQvalue:\STX8\SOH"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ incomingCircuitKey__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "incoming_circuit_key"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor CircuitKey)+ (Data.ProtoLens.OptionalField+ (Data.ProtoLens.Field.field @"maybe'incomingCircuitKey")) ::+ Data.ProtoLens.FieldDescriptor ForwardHtlcInterceptRequest+ incomingAmountMsat__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "incoming_amount_msat"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"incomingAmountMsat")) ::+ Data.ProtoLens.FieldDescriptor ForwardHtlcInterceptRequest+ incomingExpiry__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "incoming_expiry"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt32Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word32)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"incomingExpiry")) ::+ Data.ProtoLens.FieldDescriptor ForwardHtlcInterceptRequest+ paymentHash__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "payment_hash"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"paymentHash")) ::+ Data.ProtoLens.FieldDescriptor ForwardHtlcInterceptRequest+ outgoingRequestedChanId__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "outgoing_requested_chan_id"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"outgoingRequestedChanId")) ::+ Data.ProtoLens.FieldDescriptor ForwardHtlcInterceptRequest+ outgoingAmountMsat__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "outgoing_amount_msat"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"outgoingAmountMsat")) ::+ Data.ProtoLens.FieldDescriptor ForwardHtlcInterceptRequest+ outgoingExpiry__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "outgoing_expiry"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt32Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word32)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"outgoingExpiry")) ::+ Data.ProtoLens.FieldDescriptor ForwardHtlcInterceptRequest+ customRecords__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "custom_records"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor ForwardHtlcInterceptRequest'CustomRecordsEntry)+ (Data.ProtoLens.MapField+ (Data.ProtoLens.Field.field @"key")+ (Data.ProtoLens.Field.field @"value")+ (Data.ProtoLens.Field.field @"customRecords")) ::+ Data.ProtoLens.FieldDescriptor ForwardHtlcInterceptRequest+ onionBlob__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "onion_blob"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"onionBlob")) ::+ Data.ProtoLens.FieldDescriptor ForwardHtlcInterceptRequest+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, incomingCircuitKey__field_descriptor),+ (Data.ProtoLens.Tag 5, incomingAmountMsat__field_descriptor),+ (Data.ProtoLens.Tag 6, incomingExpiry__field_descriptor),+ (Data.ProtoLens.Tag 2, paymentHash__field_descriptor),+ (Data.ProtoLens.Tag 7, outgoingRequestedChanId__field_descriptor),+ (Data.ProtoLens.Tag 3, outgoingAmountMsat__field_descriptor),+ (Data.ProtoLens.Tag 4, outgoingExpiry__field_descriptor),+ (Data.ProtoLens.Tag 8, customRecords__field_descriptor),+ (Data.ProtoLens.Tag 9, onionBlob__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _ForwardHtlcInterceptRequest'_unknownFields+ (\ x__ y__+ -> x__ {_ForwardHtlcInterceptRequest'_unknownFields = y__})+ defMessage+ = ForwardHtlcInterceptRequest'_constructor+ {_ForwardHtlcInterceptRequest'incomingCircuitKey = Prelude.Nothing,+ _ForwardHtlcInterceptRequest'incomingAmountMsat = Data.ProtoLens.fieldDefault,+ _ForwardHtlcInterceptRequest'incomingExpiry = Data.ProtoLens.fieldDefault,+ _ForwardHtlcInterceptRequest'paymentHash = Data.ProtoLens.fieldDefault,+ _ForwardHtlcInterceptRequest'outgoingRequestedChanId = Data.ProtoLens.fieldDefault,+ _ForwardHtlcInterceptRequest'outgoingAmountMsat = Data.ProtoLens.fieldDefault,+ _ForwardHtlcInterceptRequest'outgoingExpiry = Data.ProtoLens.fieldDefault,+ _ForwardHtlcInterceptRequest'customRecords = Data.Map.empty,+ _ForwardHtlcInterceptRequest'onionBlob = Data.ProtoLens.fieldDefault,+ _ForwardHtlcInterceptRequest'_unknownFields = []}+ parseMessage+ = let+ loop ::+ ForwardHtlcInterceptRequest+ -> Data.ProtoLens.Encoding.Bytes.Parser ForwardHtlcInterceptRequest+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len) Data.ProtoLens.parseMessage)+ "incoming_circuit_key"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"incomingCircuitKey") y x)+ 40+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ Data.ProtoLens.Encoding.Bytes.getVarInt+ "incoming_amount_msat"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"incomingAmountMsat") y x)+ 48+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "incoming_expiry"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"incomingExpiry") y x)+ 18+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "payment_hash"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"paymentHash") y x)+ 56+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ Data.ProtoLens.Encoding.Bytes.getVarInt+ "outgoing_requested_chan_id"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"outgoingRequestedChanId") y x)+ 24+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ Data.ProtoLens.Encoding.Bytes.getVarInt+ "outgoing_amount_msat"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"outgoingAmountMsat") y x)+ 32+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "outgoing_expiry"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"outgoingExpiry") y x)+ 66+ -> do !(entry :: ForwardHtlcInterceptRequest'CustomRecordsEntry) <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral+ len)+ Data.ProtoLens.parseMessage)+ "custom_records"+ (let+ key = Lens.Family2.view (Data.ProtoLens.Field.field @"key") entry+ value+ = Lens.Family2.view (Data.ProtoLens.Field.field @"value") entry+ in+ loop+ (Lens.Family2.over+ (Data.ProtoLens.Field.field @"customRecords")+ (\ !t -> Data.Map.insert key value t)+ x))+ 74+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "onion_blob"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"onionBlob") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "ForwardHtlcInterceptRequest"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (case+ Lens.Family2.view+ (Data.ProtoLens.Field.field @"maybe'incomingCircuitKey") _x+ of+ Prelude.Nothing -> Data.Monoid.mempty+ (Prelude.Just _v)+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.ProtoLens.encodeMessage+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"incomingAmountMsat") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 40)+ (Data.ProtoLens.Encoding.Bytes.putVarInt _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"incomingExpiry") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 48)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view (Data.ProtoLens.Field.field @"paymentHash") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 18)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"outgoingRequestedChanId") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 56)+ (Data.ProtoLens.Encoding.Bytes.putVarInt _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"outgoingAmountMsat") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 24)+ (Data.ProtoLens.Encoding.Bytes.putVarInt _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"outgoingExpiry") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 32)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt+ Prelude.fromIntegral+ _v))+ ((Data.Monoid.<>)+ (Data.Monoid.mconcat+ (Prelude.map+ (\ _v+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 66)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral+ (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes+ bs))+ Data.ProtoLens.encodeMessage+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"key")+ (Prelude.fst _v)+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"value")+ (Prelude.snd _v)+ (Data.ProtoLens.defMessage ::+ ForwardHtlcInterceptRequest'CustomRecordsEntry)))))+ (Data.Map.toList+ (Lens.Family2.view+ (Data.ProtoLens.Field.field @"customRecords") _x))))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"onionBlob") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 74)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral+ (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x))))))))))+instance Control.DeepSeq.NFData ForwardHtlcInterceptRequest where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_ForwardHtlcInterceptRequest'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_ForwardHtlcInterceptRequest'incomingCircuitKey x__)+ (Control.DeepSeq.deepseq+ (_ForwardHtlcInterceptRequest'incomingAmountMsat x__)+ (Control.DeepSeq.deepseq+ (_ForwardHtlcInterceptRequest'incomingExpiry x__)+ (Control.DeepSeq.deepseq+ (_ForwardHtlcInterceptRequest'paymentHash x__)+ (Control.DeepSeq.deepseq+ (_ForwardHtlcInterceptRequest'outgoingRequestedChanId x__)+ (Control.DeepSeq.deepseq+ (_ForwardHtlcInterceptRequest'outgoingAmountMsat x__)+ (Control.DeepSeq.deepseq+ (_ForwardHtlcInterceptRequest'outgoingExpiry x__)+ (Control.DeepSeq.deepseq+ (_ForwardHtlcInterceptRequest'customRecords x__)+ (Control.DeepSeq.deepseq+ (_ForwardHtlcInterceptRequest'onionBlob x__) ())))))))))+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.key' @:: Lens' ForwardHtlcInterceptRequest'CustomRecordsEntry Data.Word.Word64@+ * 'Proto.RouterGrpc_Fields.value' @:: Lens' ForwardHtlcInterceptRequest'CustomRecordsEntry Data.ByteString.ByteString@ -}+data ForwardHtlcInterceptRequest'CustomRecordsEntry+ = ForwardHtlcInterceptRequest'CustomRecordsEntry'_constructor {_ForwardHtlcInterceptRequest'CustomRecordsEntry'key :: !Data.Word.Word64,+ _ForwardHtlcInterceptRequest'CustomRecordsEntry'value :: !Data.ByteString.ByteString,+ _ForwardHtlcInterceptRequest'CustomRecordsEntry'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show ForwardHtlcInterceptRequest'CustomRecordsEntry where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField ForwardHtlcInterceptRequest'CustomRecordsEntry "key" Data.Word.Word64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _ForwardHtlcInterceptRequest'CustomRecordsEntry'key+ (\ x__ y__+ -> x__+ {_ForwardHtlcInterceptRequest'CustomRecordsEntry'key = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField ForwardHtlcInterceptRequest'CustomRecordsEntry "value" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _ForwardHtlcInterceptRequest'CustomRecordsEntry'value+ (\ x__ y__+ -> x__+ {_ForwardHtlcInterceptRequest'CustomRecordsEntry'value = y__}))+ Prelude.id+instance Data.ProtoLens.Message ForwardHtlcInterceptRequest'CustomRecordsEntry where+ messageName _+ = Data.Text.pack+ "routerrpc.ForwardHtlcInterceptRequest.CustomRecordsEntry"+ packedMessageDescriptor _+ = "\n\+ \\DC2CustomRecordsEntry\DC2\DLE\n\+ \\ETXkey\CAN\SOH \SOH(\EOTR\ETXkey\DC2\DC4\n\+ \\ENQvalue\CAN\STX \SOH(\fR\ENQvalue:\STX8\SOH"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ key__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "key"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"key")) ::+ Data.ProtoLens.FieldDescriptor ForwardHtlcInterceptRequest'CustomRecordsEntry+ value__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "value"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"value")) ::+ Data.ProtoLens.FieldDescriptor ForwardHtlcInterceptRequest'CustomRecordsEntry+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, key__field_descriptor),+ (Data.ProtoLens.Tag 2, value__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _ForwardHtlcInterceptRequest'CustomRecordsEntry'_unknownFields+ (\ x__ y__+ -> x__+ {_ForwardHtlcInterceptRequest'CustomRecordsEntry'_unknownFields = y__})+ defMessage+ = ForwardHtlcInterceptRequest'CustomRecordsEntry'_constructor+ {_ForwardHtlcInterceptRequest'CustomRecordsEntry'key = Data.ProtoLens.fieldDefault,+ _ForwardHtlcInterceptRequest'CustomRecordsEntry'value = Data.ProtoLens.fieldDefault,+ _ForwardHtlcInterceptRequest'CustomRecordsEntry'_unknownFields = []}+ parseMessage+ = let+ loop ::+ ForwardHtlcInterceptRequest'CustomRecordsEntry+ -> Data.ProtoLens.Encoding.Bytes.Parser ForwardHtlcInterceptRequest'CustomRecordsEntry+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 8 -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ Data.ProtoLens.Encoding.Bytes.getVarInt "key"+ loop (Lens.Family2.set (Data.ProtoLens.Field.field @"key") y x)+ 18+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "value"+ loop (Lens.Family2.set (Data.ProtoLens.Field.field @"value") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "CustomRecordsEntry"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let _v = Lens.Family2.view (Data.ProtoLens.Field.field @"key") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 8)+ (Data.ProtoLens.Encoding.Bytes.putVarInt _v))+ ((Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"value") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 18)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)))+instance Control.DeepSeq.NFData ForwardHtlcInterceptRequest'CustomRecordsEntry where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_ForwardHtlcInterceptRequest'CustomRecordsEntry'_unknownFields+ x__)+ (Control.DeepSeq.deepseq+ (_ForwardHtlcInterceptRequest'CustomRecordsEntry'key x__)+ (Control.DeepSeq.deepseq+ (_ForwardHtlcInterceptRequest'CustomRecordsEntry'value x__) ()))+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.incomingCircuitKey' @:: Lens' ForwardHtlcInterceptResponse CircuitKey@+ * 'Proto.RouterGrpc_Fields.maybe'incomingCircuitKey' @:: Lens' ForwardHtlcInterceptResponse (Prelude.Maybe CircuitKey)@+ * 'Proto.RouterGrpc_Fields.action' @:: Lens' ForwardHtlcInterceptResponse ResolveHoldForwardAction@+ * 'Proto.RouterGrpc_Fields.preimage' @:: Lens' ForwardHtlcInterceptResponse Data.ByteString.ByteString@ -}+data ForwardHtlcInterceptResponse+ = ForwardHtlcInterceptResponse'_constructor {_ForwardHtlcInterceptResponse'incomingCircuitKey :: !(Prelude.Maybe CircuitKey),+ _ForwardHtlcInterceptResponse'action :: !ResolveHoldForwardAction,+ _ForwardHtlcInterceptResponse'preimage :: !Data.ByteString.ByteString,+ _ForwardHtlcInterceptResponse'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show ForwardHtlcInterceptResponse where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField ForwardHtlcInterceptResponse "incomingCircuitKey" CircuitKey where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _ForwardHtlcInterceptResponse'incomingCircuitKey+ (\ x__ y__+ -> x__ {_ForwardHtlcInterceptResponse'incomingCircuitKey = y__}))+ (Data.ProtoLens.maybeLens Data.ProtoLens.defMessage)+instance Data.ProtoLens.Field.HasField ForwardHtlcInterceptResponse "maybe'incomingCircuitKey" (Prelude.Maybe CircuitKey) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _ForwardHtlcInterceptResponse'incomingCircuitKey+ (\ x__ y__+ -> x__ {_ForwardHtlcInterceptResponse'incomingCircuitKey = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField ForwardHtlcInterceptResponse "action" ResolveHoldForwardAction where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _ForwardHtlcInterceptResponse'action+ (\ x__ y__ -> x__ {_ForwardHtlcInterceptResponse'action = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField ForwardHtlcInterceptResponse "preimage" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _ForwardHtlcInterceptResponse'preimage+ (\ x__ y__ -> x__ {_ForwardHtlcInterceptResponse'preimage = y__}))+ Prelude.id+instance Data.ProtoLens.Message ForwardHtlcInterceptResponse where+ messageName _+ = Data.Text.pack "routerrpc.ForwardHtlcInterceptResponse"+ packedMessageDescriptor _+ = "\n\+ \\FSForwardHtlcInterceptResponse\DC2G\n\+ \\DC4incoming_circuit_key\CAN\SOH \SOH(\v2\NAK.routerrpc.CircuitKeyR\DC2incomingCircuitKey\DC2;\n\+ \\ACKaction\CAN\STX \SOH(\SO2#.routerrpc.ResolveHoldForwardActionR\ACKaction\DC2\SUB\n\+ \\bpreimage\CAN\ETX \SOH(\fR\bpreimage"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ incomingCircuitKey__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "incoming_circuit_key"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor CircuitKey)+ (Data.ProtoLens.OptionalField+ (Data.ProtoLens.Field.field @"maybe'incomingCircuitKey")) ::+ Data.ProtoLens.FieldDescriptor ForwardHtlcInterceptResponse+ action__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "action"+ (Data.ProtoLens.ScalarField Data.ProtoLens.EnumField ::+ Data.ProtoLens.FieldTypeDescriptor ResolveHoldForwardAction)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"action")) ::+ Data.ProtoLens.FieldDescriptor ForwardHtlcInterceptResponse+ preimage__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "preimage"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"preimage")) ::+ Data.ProtoLens.FieldDescriptor ForwardHtlcInterceptResponse+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, incomingCircuitKey__field_descriptor),+ (Data.ProtoLens.Tag 2, action__field_descriptor),+ (Data.ProtoLens.Tag 3, preimage__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _ForwardHtlcInterceptResponse'_unknownFields+ (\ x__ y__+ -> x__ {_ForwardHtlcInterceptResponse'_unknownFields = y__})+ defMessage+ = ForwardHtlcInterceptResponse'_constructor+ {_ForwardHtlcInterceptResponse'incomingCircuitKey = Prelude.Nothing,+ _ForwardHtlcInterceptResponse'action = Data.ProtoLens.fieldDefault,+ _ForwardHtlcInterceptResponse'preimage = Data.ProtoLens.fieldDefault,+ _ForwardHtlcInterceptResponse'_unknownFields = []}+ parseMessage+ = let+ loop ::+ ForwardHtlcInterceptResponse+ -> Data.ProtoLens.Encoding.Bytes.Parser ForwardHtlcInterceptResponse+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len) Data.ProtoLens.parseMessage)+ "incoming_circuit_key"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"incomingCircuitKey") y x)+ 16+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.toEnum+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt))+ "action"+ loop (Lens.Family2.set (Data.ProtoLens.Field.field @"action") y x)+ 26+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "preimage"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"preimage") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "ForwardHtlcInterceptResponse"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (case+ Lens.Family2.view+ (Data.ProtoLens.Field.field @"maybe'incomingCircuitKey") _x+ of+ Prelude.Nothing -> Data.Monoid.mempty+ (Prelude.Just _v)+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.ProtoLens.encodeMessage+ _v))+ ((Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"action") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 16)+ ((Prelude..)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral)+ Prelude.fromEnum+ _v))+ ((Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"preimage") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 26)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x))))+instance Control.DeepSeq.NFData ForwardHtlcInterceptResponse where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_ForwardHtlcInterceptResponse'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_ForwardHtlcInterceptResponse'incomingCircuitKey x__)+ (Control.DeepSeq.deepseq+ (_ForwardHtlcInterceptResponse'action x__)+ (Control.DeepSeq.deepseq+ (_ForwardHtlcInterceptResponse'preimage x__) ())))+{- | Fields :+ -}+data GetMissionControlConfigRequest+ = GetMissionControlConfigRequest'_constructor {_GetMissionControlConfigRequest'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show GetMissionControlConfigRequest where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Message GetMissionControlConfigRequest where+ messageName _+ = Data.Text.pack "routerrpc.GetMissionControlConfigRequest"+ packedMessageDescriptor _+ = "\n\+ \\RSGetMissionControlConfigRequest"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag = let in Data.Map.fromList []+ unknownFields+ = Lens.Family2.Unchecked.lens+ _GetMissionControlConfigRequest'_unknownFields+ (\ x__ y__+ -> x__ {_GetMissionControlConfigRequest'_unknownFields = y__})+ defMessage+ = GetMissionControlConfigRequest'_constructor+ {_GetMissionControlConfigRequest'_unknownFields = []}+ parseMessage+ = let+ loop ::+ GetMissionControlConfigRequest+ -> Data.ProtoLens.Encoding.Bytes.Parser GetMissionControlConfigRequest+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of {+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x) }+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage)+ "GetMissionControlConfigRequest"+ buildMessage+ = \ _x+ -> Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)+instance Control.DeepSeq.NFData GetMissionControlConfigRequest where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_GetMissionControlConfigRequest'_unknownFields x__) ()+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.config' @:: Lens' GetMissionControlConfigResponse MissionControlConfig@+ * 'Proto.RouterGrpc_Fields.maybe'config' @:: Lens' GetMissionControlConfigResponse (Prelude.Maybe MissionControlConfig)@ -}+data GetMissionControlConfigResponse+ = GetMissionControlConfigResponse'_constructor {_GetMissionControlConfigResponse'config :: !(Prelude.Maybe MissionControlConfig),+ _GetMissionControlConfigResponse'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show GetMissionControlConfigResponse where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField GetMissionControlConfigResponse "config" MissionControlConfig where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _GetMissionControlConfigResponse'config+ (\ x__ y__ -> x__ {_GetMissionControlConfigResponse'config = y__}))+ (Data.ProtoLens.maybeLens Data.ProtoLens.defMessage)+instance Data.ProtoLens.Field.HasField GetMissionControlConfigResponse "maybe'config" (Prelude.Maybe MissionControlConfig) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _GetMissionControlConfigResponse'config+ (\ x__ y__ -> x__ {_GetMissionControlConfigResponse'config = y__}))+ Prelude.id+instance Data.ProtoLens.Message GetMissionControlConfigResponse where+ messageName _+ = Data.Text.pack "routerrpc.GetMissionControlConfigResponse"+ packedMessageDescriptor _+ = "\n\+ \\USGetMissionControlConfigResponse\DC27\n\+ \\ACKconfig\CAN\SOH \SOH(\v2\US.routerrpc.MissionControlConfigR\ACKconfig"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ config__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "config"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor MissionControlConfig)+ (Data.ProtoLens.OptionalField+ (Data.ProtoLens.Field.field @"maybe'config")) ::+ Data.ProtoLens.FieldDescriptor GetMissionControlConfigResponse+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, config__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _GetMissionControlConfigResponse'_unknownFields+ (\ x__ y__+ -> x__ {_GetMissionControlConfigResponse'_unknownFields = y__})+ defMessage+ = GetMissionControlConfigResponse'_constructor+ {_GetMissionControlConfigResponse'config = Prelude.Nothing,+ _GetMissionControlConfigResponse'_unknownFields = []}+ parseMessage+ = let+ loop ::+ GetMissionControlConfigResponse+ -> Data.ProtoLens.Encoding.Bytes.Parser GetMissionControlConfigResponse+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len) Data.ProtoLens.parseMessage)+ "config"+ loop (Lens.Family2.set (Data.ProtoLens.Field.field @"config") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage)+ "GetMissionControlConfigResponse"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (case+ Lens.Family2.view (Data.ProtoLens.Field.field @"maybe'config") _x+ of+ Prelude.Nothing -> Data.Monoid.mempty+ (Prelude.Just _v)+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.ProtoLens.encodeMessage+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x))+instance Control.DeepSeq.NFData GetMissionControlConfigResponse where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_GetMissionControlConfigResponse'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_GetMissionControlConfigResponse'config x__) ())+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.incomingChannelId' @:: Lens' HtlcEvent Data.Word.Word64@+ * 'Proto.RouterGrpc_Fields.outgoingChannelId' @:: Lens' HtlcEvent Data.Word.Word64@+ * 'Proto.RouterGrpc_Fields.incomingHtlcId' @:: Lens' HtlcEvent Data.Word.Word64@+ * 'Proto.RouterGrpc_Fields.outgoingHtlcId' @:: Lens' HtlcEvent Data.Word.Word64@+ * 'Proto.RouterGrpc_Fields.timestampNs' @:: Lens' HtlcEvent Data.Word.Word64@+ * 'Proto.RouterGrpc_Fields.eventType' @:: Lens' HtlcEvent HtlcEvent'EventType@+ * 'Proto.RouterGrpc_Fields.maybe'event' @:: Lens' HtlcEvent (Prelude.Maybe HtlcEvent'Event)@+ * 'Proto.RouterGrpc_Fields.maybe'forwardEvent' @:: Lens' HtlcEvent (Prelude.Maybe ForwardEvent)@+ * 'Proto.RouterGrpc_Fields.forwardEvent' @:: Lens' HtlcEvent ForwardEvent@+ * 'Proto.RouterGrpc_Fields.maybe'forwardFailEvent' @:: Lens' HtlcEvent (Prelude.Maybe ForwardFailEvent)@+ * 'Proto.RouterGrpc_Fields.forwardFailEvent' @:: Lens' HtlcEvent ForwardFailEvent@+ * 'Proto.RouterGrpc_Fields.maybe'settleEvent' @:: Lens' HtlcEvent (Prelude.Maybe SettleEvent)@+ * 'Proto.RouterGrpc_Fields.settleEvent' @:: Lens' HtlcEvent SettleEvent@+ * 'Proto.RouterGrpc_Fields.maybe'linkFailEvent' @:: Lens' HtlcEvent (Prelude.Maybe LinkFailEvent)@+ * 'Proto.RouterGrpc_Fields.linkFailEvent' @:: Lens' HtlcEvent LinkFailEvent@ -}+data HtlcEvent+ = HtlcEvent'_constructor {_HtlcEvent'incomingChannelId :: !Data.Word.Word64,+ _HtlcEvent'outgoingChannelId :: !Data.Word.Word64,+ _HtlcEvent'incomingHtlcId :: !Data.Word.Word64,+ _HtlcEvent'outgoingHtlcId :: !Data.Word.Word64,+ _HtlcEvent'timestampNs :: !Data.Word.Word64,+ _HtlcEvent'eventType :: !HtlcEvent'EventType,+ _HtlcEvent'event :: !(Prelude.Maybe HtlcEvent'Event),+ _HtlcEvent'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show HtlcEvent where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+data HtlcEvent'Event+ = HtlcEvent'ForwardEvent !ForwardEvent |+ HtlcEvent'ForwardFailEvent !ForwardFailEvent |+ HtlcEvent'SettleEvent !SettleEvent |+ HtlcEvent'LinkFailEvent !LinkFailEvent+ deriving stock (Prelude.Show, Prelude.Eq, Prelude.Ord)+instance Data.ProtoLens.Field.HasField HtlcEvent "incomingChannelId" Data.Word.Word64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _HtlcEvent'incomingChannelId+ (\ x__ y__ -> x__ {_HtlcEvent'incomingChannelId = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField HtlcEvent "outgoingChannelId" Data.Word.Word64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _HtlcEvent'outgoingChannelId+ (\ x__ y__ -> x__ {_HtlcEvent'outgoingChannelId = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField HtlcEvent "incomingHtlcId" Data.Word.Word64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _HtlcEvent'incomingHtlcId+ (\ x__ y__ -> x__ {_HtlcEvent'incomingHtlcId = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField HtlcEvent "outgoingHtlcId" Data.Word.Word64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _HtlcEvent'outgoingHtlcId+ (\ x__ y__ -> x__ {_HtlcEvent'outgoingHtlcId = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField HtlcEvent "timestampNs" Data.Word.Word64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _HtlcEvent'timestampNs+ (\ x__ y__ -> x__ {_HtlcEvent'timestampNs = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField HtlcEvent "eventType" HtlcEvent'EventType where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _HtlcEvent'eventType+ (\ x__ y__ -> x__ {_HtlcEvent'eventType = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField HtlcEvent "maybe'event" (Prelude.Maybe HtlcEvent'Event) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _HtlcEvent'event (\ x__ y__ -> x__ {_HtlcEvent'event = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField HtlcEvent "maybe'forwardEvent" (Prelude.Maybe ForwardEvent) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _HtlcEvent'event (\ x__ y__ -> x__ {_HtlcEvent'event = y__}))+ (Lens.Family2.Unchecked.lens+ (\ x__+ -> case x__ of+ (Prelude.Just (HtlcEvent'ForwardEvent x__val))+ -> Prelude.Just x__val+ _otherwise -> Prelude.Nothing)+ (\ _ y__ -> Prelude.fmap HtlcEvent'ForwardEvent y__))+instance Data.ProtoLens.Field.HasField HtlcEvent "forwardEvent" ForwardEvent where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _HtlcEvent'event (\ x__ y__ -> x__ {_HtlcEvent'event = y__}))+ ((Prelude..)+ (Lens.Family2.Unchecked.lens+ (\ x__+ -> case x__ of+ (Prelude.Just (HtlcEvent'ForwardEvent x__val))+ -> Prelude.Just x__val+ _otherwise -> Prelude.Nothing)+ (\ _ y__ -> Prelude.fmap HtlcEvent'ForwardEvent y__))+ (Data.ProtoLens.maybeLens Data.ProtoLens.defMessage))+instance Data.ProtoLens.Field.HasField HtlcEvent "maybe'forwardFailEvent" (Prelude.Maybe ForwardFailEvent) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _HtlcEvent'event (\ x__ y__ -> x__ {_HtlcEvent'event = y__}))+ (Lens.Family2.Unchecked.lens+ (\ x__+ -> case x__ of+ (Prelude.Just (HtlcEvent'ForwardFailEvent x__val))+ -> Prelude.Just x__val+ _otherwise -> Prelude.Nothing)+ (\ _ y__ -> Prelude.fmap HtlcEvent'ForwardFailEvent y__))+instance Data.ProtoLens.Field.HasField HtlcEvent "forwardFailEvent" ForwardFailEvent where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _HtlcEvent'event (\ x__ y__ -> x__ {_HtlcEvent'event = y__}))+ ((Prelude..)+ (Lens.Family2.Unchecked.lens+ (\ x__+ -> case x__ of+ (Prelude.Just (HtlcEvent'ForwardFailEvent x__val))+ -> Prelude.Just x__val+ _otherwise -> Prelude.Nothing)+ (\ _ y__ -> Prelude.fmap HtlcEvent'ForwardFailEvent y__))+ (Data.ProtoLens.maybeLens Data.ProtoLens.defMessage))+instance Data.ProtoLens.Field.HasField HtlcEvent "maybe'settleEvent" (Prelude.Maybe SettleEvent) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _HtlcEvent'event (\ x__ y__ -> x__ {_HtlcEvent'event = y__}))+ (Lens.Family2.Unchecked.lens+ (\ x__+ -> case x__ of+ (Prelude.Just (HtlcEvent'SettleEvent x__val))+ -> Prelude.Just x__val+ _otherwise -> Prelude.Nothing)+ (\ _ y__ -> Prelude.fmap HtlcEvent'SettleEvent y__))+instance Data.ProtoLens.Field.HasField HtlcEvent "settleEvent" SettleEvent where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _HtlcEvent'event (\ x__ y__ -> x__ {_HtlcEvent'event = y__}))+ ((Prelude..)+ (Lens.Family2.Unchecked.lens+ (\ x__+ -> case x__ of+ (Prelude.Just (HtlcEvent'SettleEvent x__val))+ -> Prelude.Just x__val+ _otherwise -> Prelude.Nothing)+ (\ _ y__ -> Prelude.fmap HtlcEvent'SettleEvent y__))+ (Data.ProtoLens.maybeLens Data.ProtoLens.defMessage))+instance Data.ProtoLens.Field.HasField HtlcEvent "maybe'linkFailEvent" (Prelude.Maybe LinkFailEvent) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _HtlcEvent'event (\ x__ y__ -> x__ {_HtlcEvent'event = y__}))+ (Lens.Family2.Unchecked.lens+ (\ x__+ -> case x__ of+ (Prelude.Just (HtlcEvent'LinkFailEvent x__val))+ -> Prelude.Just x__val+ _otherwise -> Prelude.Nothing)+ (\ _ y__ -> Prelude.fmap HtlcEvent'LinkFailEvent y__))+instance Data.ProtoLens.Field.HasField HtlcEvent "linkFailEvent" LinkFailEvent where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _HtlcEvent'event (\ x__ y__ -> x__ {_HtlcEvent'event = y__}))+ ((Prelude..)+ (Lens.Family2.Unchecked.lens+ (\ x__+ -> case x__ of+ (Prelude.Just (HtlcEvent'LinkFailEvent x__val))+ -> Prelude.Just x__val+ _otherwise -> Prelude.Nothing)+ (\ _ y__ -> Prelude.fmap HtlcEvent'LinkFailEvent y__))+ (Data.ProtoLens.maybeLens Data.ProtoLens.defMessage))+instance Data.ProtoLens.Message HtlcEvent where+ messageName _ = Data.Text.pack "routerrpc.HtlcEvent"+ packedMessageDescriptor _+ = "\n\+ \\tHtlcEvent\DC2.\n\+ \\DC3incoming_channel_id\CAN\SOH \SOH(\EOTR\DC1incomingChannelId\DC2.\n\+ \\DC3outgoing_channel_id\CAN\STX \SOH(\EOTR\DC1outgoingChannelId\DC2(\n\+ \\DLEincoming_htlc_id\CAN\ETX \SOH(\EOTR\SOincomingHtlcId\DC2(\n\+ \\DLEoutgoing_htlc_id\CAN\EOT \SOH(\EOTR\SOoutgoingHtlcId\DC2!\n\+ \\ftimestamp_ns\CAN\ENQ \SOH(\EOTR\vtimestampNs\DC2=\n\+ \\n\+ \event_type\CAN\ACK \SOH(\SO2\RS.routerrpc.HtlcEvent.EventTypeR\teventType\DC2>\n\+ \\rforward_event\CAN\a \SOH(\v2\ETB.routerrpc.ForwardEventH\NULR\fforwardEvent\DC2K\n\+ \\DC2forward_fail_event\CAN\b \SOH(\v2\ESC.routerrpc.ForwardFailEventH\NULR\DLEforwardFailEvent\DC2;\n\+ \\fsettle_event\CAN\t \SOH(\v2\SYN.routerrpc.SettleEventH\NULR\vsettleEvent\DC2B\n\+ \\SIlink_fail_event\CAN\n\+ \ \SOH(\v2\CAN.routerrpc.LinkFailEventH\NULR\rlinkFailEvent\"<\n\+ \\tEventType\DC2\v\n\+ \\aUNKNOWN\DLE\NUL\DC2\b\n\+ \\EOTSEND\DLE\SOH\DC2\v\n\+ \\aRECEIVE\DLE\STX\DC2\v\n\+ \\aFORWARD\DLE\ETXB\a\n\+ \\ENQevent"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ incomingChannelId__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "incoming_channel_id"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"incomingChannelId")) ::+ Data.ProtoLens.FieldDescriptor HtlcEvent+ outgoingChannelId__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "outgoing_channel_id"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"outgoingChannelId")) ::+ Data.ProtoLens.FieldDescriptor HtlcEvent+ incomingHtlcId__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "incoming_htlc_id"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"incomingHtlcId")) ::+ Data.ProtoLens.FieldDescriptor HtlcEvent+ outgoingHtlcId__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "outgoing_htlc_id"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"outgoingHtlcId")) ::+ Data.ProtoLens.FieldDescriptor HtlcEvent+ timestampNs__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "timestamp_ns"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"timestampNs")) ::+ Data.ProtoLens.FieldDescriptor HtlcEvent+ eventType__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "event_type"+ (Data.ProtoLens.ScalarField Data.ProtoLens.EnumField ::+ Data.ProtoLens.FieldTypeDescriptor HtlcEvent'EventType)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"eventType")) ::+ Data.ProtoLens.FieldDescriptor HtlcEvent+ forwardEvent__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "forward_event"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor ForwardEvent)+ (Data.ProtoLens.OptionalField+ (Data.ProtoLens.Field.field @"maybe'forwardEvent")) ::+ Data.ProtoLens.FieldDescriptor HtlcEvent+ forwardFailEvent__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "forward_fail_event"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor ForwardFailEvent)+ (Data.ProtoLens.OptionalField+ (Data.ProtoLens.Field.field @"maybe'forwardFailEvent")) ::+ Data.ProtoLens.FieldDescriptor HtlcEvent+ settleEvent__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "settle_event"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor SettleEvent)+ (Data.ProtoLens.OptionalField+ (Data.ProtoLens.Field.field @"maybe'settleEvent")) ::+ Data.ProtoLens.FieldDescriptor HtlcEvent+ linkFailEvent__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "link_fail_event"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor LinkFailEvent)+ (Data.ProtoLens.OptionalField+ (Data.ProtoLens.Field.field @"maybe'linkFailEvent")) ::+ Data.ProtoLens.FieldDescriptor HtlcEvent+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, incomingChannelId__field_descriptor),+ (Data.ProtoLens.Tag 2, outgoingChannelId__field_descriptor),+ (Data.ProtoLens.Tag 3, incomingHtlcId__field_descriptor),+ (Data.ProtoLens.Tag 4, outgoingHtlcId__field_descriptor),+ (Data.ProtoLens.Tag 5, timestampNs__field_descriptor),+ (Data.ProtoLens.Tag 6, eventType__field_descriptor),+ (Data.ProtoLens.Tag 7, forwardEvent__field_descriptor),+ (Data.ProtoLens.Tag 8, forwardFailEvent__field_descriptor),+ (Data.ProtoLens.Tag 9, settleEvent__field_descriptor),+ (Data.ProtoLens.Tag 10, linkFailEvent__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _HtlcEvent'_unknownFields+ (\ x__ y__ -> x__ {_HtlcEvent'_unknownFields = y__})+ defMessage+ = HtlcEvent'_constructor+ {_HtlcEvent'incomingChannelId = Data.ProtoLens.fieldDefault,+ _HtlcEvent'outgoingChannelId = Data.ProtoLens.fieldDefault,+ _HtlcEvent'incomingHtlcId = Data.ProtoLens.fieldDefault,+ _HtlcEvent'outgoingHtlcId = Data.ProtoLens.fieldDefault,+ _HtlcEvent'timestampNs = Data.ProtoLens.fieldDefault,+ _HtlcEvent'eventType = Data.ProtoLens.fieldDefault,+ _HtlcEvent'event = Prelude.Nothing, _HtlcEvent'_unknownFields = []}+ parseMessage+ = let+ loop :: HtlcEvent -> Data.ProtoLens.Encoding.Bytes.Parser HtlcEvent+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 8 -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ Data.ProtoLens.Encoding.Bytes.getVarInt "incoming_channel_id"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"incomingChannelId") y x)+ 16+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ Data.ProtoLens.Encoding.Bytes.getVarInt "outgoing_channel_id"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"outgoingChannelId") y x)+ 24+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ Data.ProtoLens.Encoding.Bytes.getVarInt "incoming_htlc_id"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"incomingHtlcId") y x)+ 32+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ Data.ProtoLens.Encoding.Bytes.getVarInt "outgoing_htlc_id"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"outgoingHtlcId") y x)+ 40+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ Data.ProtoLens.Encoding.Bytes.getVarInt "timestamp_ns"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"timestampNs") y x)+ 48+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.toEnum+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt))+ "event_type"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"eventType") y x)+ 58+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len) Data.ProtoLens.parseMessage)+ "forward_event"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"forwardEvent") y x)+ 66+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len) Data.ProtoLens.parseMessage)+ "forward_fail_event"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"forwardFailEvent") y x)+ 74+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len) Data.ProtoLens.parseMessage)+ "settle_event"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"settleEvent") y x)+ 82+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len) Data.ProtoLens.parseMessage)+ "link_fail_event"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"linkFailEvent") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "HtlcEvent"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"incomingChannelId") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 8)+ (Data.ProtoLens.Encoding.Bytes.putVarInt _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"outgoingChannelId") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 16)+ (Data.ProtoLens.Encoding.Bytes.putVarInt _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"incomingHtlcId") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 24)+ (Data.ProtoLens.Encoding.Bytes.putVarInt _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"outgoingHtlcId") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 32)+ (Data.ProtoLens.Encoding.Bytes.putVarInt _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view (Data.ProtoLens.Field.field @"timestampNs") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 40)+ (Data.ProtoLens.Encoding.Bytes.putVarInt _v))+ ((Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"eventType") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 48)+ ((Prelude..)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt+ Prelude.fromIntegral)+ Prelude.fromEnum+ _v))+ ((Data.Monoid.<>)+ (case+ Lens.Family2.view (Data.ProtoLens.Field.field @"maybe'event") _x+ of+ Prelude.Nothing -> Data.Monoid.mempty+ (Prelude.Just (HtlcEvent'ForwardEvent v))+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 58)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral+ (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.ProtoLens.encodeMessage+ v)+ (Prelude.Just (HtlcEvent'ForwardFailEvent v))+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 66)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral+ (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.ProtoLens.encodeMessage+ v)+ (Prelude.Just (HtlcEvent'SettleEvent v))+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 74)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral+ (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.ProtoLens.encodeMessage+ v)+ (Prelude.Just (HtlcEvent'LinkFailEvent v))+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 82)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral+ (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.ProtoLens.encodeMessage+ v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x))))))))+instance Control.DeepSeq.NFData HtlcEvent where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_HtlcEvent'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_HtlcEvent'incomingChannelId x__)+ (Control.DeepSeq.deepseq+ (_HtlcEvent'outgoingChannelId x__)+ (Control.DeepSeq.deepseq+ (_HtlcEvent'incomingHtlcId x__)+ (Control.DeepSeq.deepseq+ (_HtlcEvent'outgoingHtlcId x__)+ (Control.DeepSeq.deepseq+ (_HtlcEvent'timestampNs x__)+ (Control.DeepSeq.deepseq+ (_HtlcEvent'eventType x__)+ (Control.DeepSeq.deepseq (_HtlcEvent'event x__) ())))))))+instance Control.DeepSeq.NFData HtlcEvent'Event where+ rnf (HtlcEvent'ForwardEvent x__) = Control.DeepSeq.rnf x__+ rnf (HtlcEvent'ForwardFailEvent x__) = Control.DeepSeq.rnf x__+ rnf (HtlcEvent'SettleEvent x__) = Control.DeepSeq.rnf x__+ rnf (HtlcEvent'LinkFailEvent x__) = Control.DeepSeq.rnf x__+_HtlcEvent'ForwardEvent ::+ Data.ProtoLens.Prism.Prism' HtlcEvent'Event ForwardEvent+_HtlcEvent'ForwardEvent+ = Data.ProtoLens.Prism.prism'+ HtlcEvent'ForwardEvent+ (\ p__+ -> case p__ of+ (HtlcEvent'ForwardEvent p__val) -> Prelude.Just p__val+ _otherwise -> Prelude.Nothing)+_HtlcEvent'ForwardFailEvent ::+ Data.ProtoLens.Prism.Prism' HtlcEvent'Event ForwardFailEvent+_HtlcEvent'ForwardFailEvent+ = Data.ProtoLens.Prism.prism'+ HtlcEvent'ForwardFailEvent+ (\ p__+ -> case p__ of+ (HtlcEvent'ForwardFailEvent p__val) -> Prelude.Just p__val+ _otherwise -> Prelude.Nothing)+_HtlcEvent'SettleEvent ::+ Data.ProtoLens.Prism.Prism' HtlcEvent'Event SettleEvent+_HtlcEvent'SettleEvent+ = Data.ProtoLens.Prism.prism'+ HtlcEvent'SettleEvent+ (\ p__+ -> case p__ of+ (HtlcEvent'SettleEvent p__val) -> Prelude.Just p__val+ _otherwise -> Prelude.Nothing)+_HtlcEvent'LinkFailEvent ::+ Data.ProtoLens.Prism.Prism' HtlcEvent'Event LinkFailEvent+_HtlcEvent'LinkFailEvent+ = Data.ProtoLens.Prism.prism'+ HtlcEvent'LinkFailEvent+ (\ p__+ -> case p__ of+ (HtlcEvent'LinkFailEvent p__val) -> Prelude.Just p__val+ _otherwise -> Prelude.Nothing)+newtype HtlcEvent'EventType'UnrecognizedValue+ = HtlcEvent'EventType'UnrecognizedValue Data.Int.Int32+ deriving stock (Prelude.Eq, Prelude.Ord, Prelude.Show)+data HtlcEvent'EventType+ = HtlcEvent'UNKNOWN |+ HtlcEvent'SEND |+ HtlcEvent'RECEIVE |+ HtlcEvent'FORWARD |+ HtlcEvent'EventType'Unrecognized !HtlcEvent'EventType'UnrecognizedValue+ deriving stock (Prelude.Show, Prelude.Eq, Prelude.Ord)+instance Data.ProtoLens.MessageEnum HtlcEvent'EventType where+ maybeToEnum 0 = Prelude.Just HtlcEvent'UNKNOWN+ maybeToEnum 1 = Prelude.Just HtlcEvent'SEND+ maybeToEnum 2 = Prelude.Just HtlcEvent'RECEIVE+ maybeToEnum 3 = Prelude.Just HtlcEvent'FORWARD+ maybeToEnum k+ = Prelude.Just+ (HtlcEvent'EventType'Unrecognized+ (HtlcEvent'EventType'UnrecognizedValue (Prelude.fromIntegral k)))+ showEnum HtlcEvent'UNKNOWN = "UNKNOWN"+ showEnum HtlcEvent'SEND = "SEND"+ showEnum HtlcEvent'RECEIVE = "RECEIVE"+ showEnum HtlcEvent'FORWARD = "FORWARD"+ showEnum+ (HtlcEvent'EventType'Unrecognized (HtlcEvent'EventType'UnrecognizedValue k))+ = Prelude.show k+ readEnum k+ | (Prelude.==) k "UNKNOWN" = Prelude.Just HtlcEvent'UNKNOWN+ | (Prelude.==) k "SEND" = Prelude.Just HtlcEvent'SEND+ | (Prelude.==) k "RECEIVE" = Prelude.Just HtlcEvent'RECEIVE+ | (Prelude.==) k "FORWARD" = Prelude.Just HtlcEvent'FORWARD+ | Prelude.otherwise+ = (Prelude.>>=) (Text.Read.readMaybe k) Data.ProtoLens.maybeToEnum+instance Prelude.Bounded HtlcEvent'EventType where+ minBound = HtlcEvent'UNKNOWN+ maxBound = HtlcEvent'FORWARD+instance Prelude.Enum HtlcEvent'EventType where+ toEnum k__+ = Prelude.maybe+ (Prelude.error+ ((Prelude.++)+ "toEnum: unknown value for enum EventType: " (Prelude.show k__)))+ Prelude.id+ (Data.ProtoLens.maybeToEnum k__)+ fromEnum HtlcEvent'UNKNOWN = 0+ fromEnum HtlcEvent'SEND = 1+ fromEnum HtlcEvent'RECEIVE = 2+ fromEnum HtlcEvent'FORWARD = 3+ fromEnum+ (HtlcEvent'EventType'Unrecognized (HtlcEvent'EventType'UnrecognizedValue k))+ = Prelude.fromIntegral k+ succ HtlcEvent'FORWARD+ = Prelude.error+ "HtlcEvent'EventType.succ: bad argument HtlcEvent'FORWARD. This value would be out of bounds."+ succ HtlcEvent'UNKNOWN = HtlcEvent'SEND+ succ HtlcEvent'SEND = HtlcEvent'RECEIVE+ succ HtlcEvent'RECEIVE = HtlcEvent'FORWARD+ succ (HtlcEvent'EventType'Unrecognized _)+ = Prelude.error+ "HtlcEvent'EventType.succ: bad argument: unrecognized value"+ pred HtlcEvent'UNKNOWN+ = Prelude.error+ "HtlcEvent'EventType.pred: bad argument HtlcEvent'UNKNOWN. This value would be out of bounds."+ pred HtlcEvent'SEND = HtlcEvent'UNKNOWN+ pred HtlcEvent'RECEIVE = HtlcEvent'SEND+ pred HtlcEvent'FORWARD = HtlcEvent'RECEIVE+ pred (HtlcEvent'EventType'Unrecognized _)+ = Prelude.error+ "HtlcEvent'EventType.pred: bad argument: unrecognized value"+ enumFrom = Data.ProtoLens.Message.Enum.messageEnumFrom+ enumFromTo = Data.ProtoLens.Message.Enum.messageEnumFromTo+ enumFromThen = Data.ProtoLens.Message.Enum.messageEnumFromThen+ enumFromThenTo = Data.ProtoLens.Message.Enum.messageEnumFromThenTo+instance Data.ProtoLens.FieldDefault HtlcEvent'EventType where+ fieldDefault = HtlcEvent'UNKNOWN+instance Control.DeepSeq.NFData HtlcEvent'EventType where+ rnf x__ = Prelude.seq x__ ()+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.incomingTimelock' @:: Lens' HtlcInfo Data.Word.Word32@+ * 'Proto.RouterGrpc_Fields.outgoingTimelock' @:: Lens' HtlcInfo Data.Word.Word32@+ * 'Proto.RouterGrpc_Fields.incomingAmtMsat' @:: Lens' HtlcInfo Data.Word.Word64@+ * 'Proto.RouterGrpc_Fields.outgoingAmtMsat' @:: Lens' HtlcInfo Data.Word.Word64@ -}+data HtlcInfo+ = HtlcInfo'_constructor {_HtlcInfo'incomingTimelock :: !Data.Word.Word32,+ _HtlcInfo'outgoingTimelock :: !Data.Word.Word32,+ _HtlcInfo'incomingAmtMsat :: !Data.Word.Word64,+ _HtlcInfo'outgoingAmtMsat :: !Data.Word.Word64,+ _HtlcInfo'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show HtlcInfo where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField HtlcInfo "incomingTimelock" Data.Word.Word32 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _HtlcInfo'incomingTimelock+ (\ x__ y__ -> x__ {_HtlcInfo'incomingTimelock = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField HtlcInfo "outgoingTimelock" Data.Word.Word32 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _HtlcInfo'outgoingTimelock+ (\ x__ y__ -> x__ {_HtlcInfo'outgoingTimelock = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField HtlcInfo "incomingAmtMsat" Data.Word.Word64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _HtlcInfo'incomingAmtMsat+ (\ x__ y__ -> x__ {_HtlcInfo'incomingAmtMsat = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField HtlcInfo "outgoingAmtMsat" Data.Word.Word64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _HtlcInfo'outgoingAmtMsat+ (\ x__ y__ -> x__ {_HtlcInfo'outgoingAmtMsat = y__}))+ Prelude.id+instance Data.ProtoLens.Message HtlcInfo where+ messageName _ = Data.Text.pack "routerrpc.HtlcInfo"+ packedMessageDescriptor _+ = "\n\+ \\bHtlcInfo\DC2+\n\+ \\DC1incoming_timelock\CAN\SOH \SOH(\rR\DLEincomingTimelock\DC2+\n\+ \\DC1outgoing_timelock\CAN\STX \SOH(\rR\DLEoutgoingTimelock\DC2*\n\+ \\DC1incoming_amt_msat\CAN\ETX \SOH(\EOTR\SIincomingAmtMsat\DC2*\n\+ \\DC1outgoing_amt_msat\CAN\EOT \SOH(\EOTR\SIoutgoingAmtMsat"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ incomingTimelock__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "incoming_timelock"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt32Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word32)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"incomingTimelock")) ::+ Data.ProtoLens.FieldDescriptor HtlcInfo+ outgoingTimelock__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "outgoing_timelock"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt32Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word32)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"outgoingTimelock")) ::+ Data.ProtoLens.FieldDescriptor HtlcInfo+ incomingAmtMsat__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "incoming_amt_msat"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"incomingAmtMsat")) ::+ Data.ProtoLens.FieldDescriptor HtlcInfo+ outgoingAmtMsat__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "outgoing_amt_msat"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"outgoingAmtMsat")) ::+ Data.ProtoLens.FieldDescriptor HtlcInfo+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, incomingTimelock__field_descriptor),+ (Data.ProtoLens.Tag 2, outgoingTimelock__field_descriptor),+ (Data.ProtoLens.Tag 3, incomingAmtMsat__field_descriptor),+ (Data.ProtoLens.Tag 4, outgoingAmtMsat__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _HtlcInfo'_unknownFields+ (\ x__ y__ -> x__ {_HtlcInfo'_unknownFields = y__})+ defMessage+ = HtlcInfo'_constructor+ {_HtlcInfo'incomingTimelock = Data.ProtoLens.fieldDefault,+ _HtlcInfo'outgoingTimelock = Data.ProtoLens.fieldDefault,+ _HtlcInfo'incomingAmtMsat = Data.ProtoLens.fieldDefault,+ _HtlcInfo'outgoingAmtMsat = Data.ProtoLens.fieldDefault,+ _HtlcInfo'_unknownFields = []}+ parseMessage+ = let+ loop :: HtlcInfo -> Data.ProtoLens.Encoding.Bytes.Parser HtlcInfo+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 8 -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "incoming_timelock"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"incomingTimelock") y x)+ 16+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "outgoing_timelock"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"outgoingTimelock") y x)+ 24+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ Data.ProtoLens.Encoding.Bytes.getVarInt "incoming_amt_msat"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"incomingAmtMsat") y x)+ 32+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ Data.ProtoLens.Encoding.Bytes.getVarInt "outgoing_amt_msat"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"outgoingAmtMsat") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "HtlcInfo"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"incomingTimelock") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 8)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"outgoingTimelock") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 16)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"incomingAmtMsat") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 24)+ (Data.ProtoLens.Encoding.Bytes.putVarInt _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"outgoingAmtMsat") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 32)+ (Data.ProtoLens.Encoding.Bytes.putVarInt _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)))))+instance Control.DeepSeq.NFData HtlcInfo where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_HtlcInfo'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_HtlcInfo'incomingTimelock x__)+ (Control.DeepSeq.deepseq+ (_HtlcInfo'outgoingTimelock x__)+ (Control.DeepSeq.deepseq+ (_HtlcInfo'incomingAmtMsat x__)+ (Control.DeepSeq.deepseq (_HtlcInfo'outgoingAmtMsat x__) ()))))+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.info' @:: Lens' LinkFailEvent HtlcInfo@+ * 'Proto.RouterGrpc_Fields.maybe'info' @:: Lens' LinkFailEvent (Prelude.Maybe HtlcInfo)@+ * 'Proto.RouterGrpc_Fields.wireFailure' @:: Lens' LinkFailEvent Proto.LndGrpc.Failure'FailureCode@+ * 'Proto.RouterGrpc_Fields.failureDetail' @:: Lens' LinkFailEvent FailureDetail@+ * 'Proto.RouterGrpc_Fields.failureString' @:: Lens' LinkFailEvent Data.Text.Text@ -}+data LinkFailEvent+ = LinkFailEvent'_constructor {_LinkFailEvent'info :: !(Prelude.Maybe HtlcInfo),+ _LinkFailEvent'wireFailure :: !Proto.LndGrpc.Failure'FailureCode,+ _LinkFailEvent'failureDetail :: !FailureDetail,+ _LinkFailEvent'failureString :: !Data.Text.Text,+ _LinkFailEvent'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show LinkFailEvent where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField LinkFailEvent "info" HtlcInfo where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _LinkFailEvent'info (\ x__ y__ -> x__ {_LinkFailEvent'info = y__}))+ (Data.ProtoLens.maybeLens Data.ProtoLens.defMessage)+instance Data.ProtoLens.Field.HasField LinkFailEvent "maybe'info" (Prelude.Maybe HtlcInfo) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _LinkFailEvent'info (\ x__ y__ -> x__ {_LinkFailEvent'info = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField LinkFailEvent "wireFailure" Proto.LndGrpc.Failure'FailureCode where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _LinkFailEvent'wireFailure+ (\ x__ y__ -> x__ {_LinkFailEvent'wireFailure = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField LinkFailEvent "failureDetail" FailureDetail where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _LinkFailEvent'failureDetail+ (\ x__ y__ -> x__ {_LinkFailEvent'failureDetail = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField LinkFailEvent "failureString" Data.Text.Text where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _LinkFailEvent'failureString+ (\ x__ y__ -> x__ {_LinkFailEvent'failureString = y__}))+ Prelude.id+instance Data.ProtoLens.Message LinkFailEvent where+ messageName _ = Data.Text.pack "routerrpc.LinkFailEvent"+ packedMessageDescriptor _+ = "\n\+ \\rLinkFailEvent\DC2'\n\+ \\EOTinfo\CAN\SOH \SOH(\v2\DC3.routerrpc.HtlcInfoR\EOTinfo\DC2=\n\+ \\fwire_failure\CAN\STX \SOH(\SO2\SUB.lnrpc.Failure.FailureCodeR\vwireFailure\DC2?\n\+ \\SOfailure_detail\CAN\ETX \SOH(\SO2\CAN.routerrpc.FailureDetailR\rfailureDetail\DC2%\n\+ \\SOfailure_string\CAN\EOT \SOH(\tR\rfailureString"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ info__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "info"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor HtlcInfo)+ (Data.ProtoLens.OptionalField+ (Data.ProtoLens.Field.field @"maybe'info")) ::+ Data.ProtoLens.FieldDescriptor LinkFailEvent+ wireFailure__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "wire_failure"+ (Data.ProtoLens.ScalarField Data.ProtoLens.EnumField ::+ Data.ProtoLens.FieldTypeDescriptor Proto.LndGrpc.Failure'FailureCode)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"wireFailure")) ::+ Data.ProtoLens.FieldDescriptor LinkFailEvent+ failureDetail__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "failure_detail"+ (Data.ProtoLens.ScalarField Data.ProtoLens.EnumField ::+ Data.ProtoLens.FieldTypeDescriptor FailureDetail)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"failureDetail")) ::+ Data.ProtoLens.FieldDescriptor LinkFailEvent+ failureString__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "failure_string"+ (Data.ProtoLens.ScalarField Data.ProtoLens.StringField ::+ Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"failureString")) ::+ Data.ProtoLens.FieldDescriptor LinkFailEvent+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, info__field_descriptor),+ (Data.ProtoLens.Tag 2, wireFailure__field_descriptor),+ (Data.ProtoLens.Tag 3, failureDetail__field_descriptor),+ (Data.ProtoLens.Tag 4, failureString__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _LinkFailEvent'_unknownFields+ (\ x__ y__ -> x__ {_LinkFailEvent'_unknownFields = y__})+ defMessage+ = LinkFailEvent'_constructor+ {_LinkFailEvent'info = Prelude.Nothing,+ _LinkFailEvent'wireFailure = Data.ProtoLens.fieldDefault,+ _LinkFailEvent'failureDetail = Data.ProtoLens.fieldDefault,+ _LinkFailEvent'failureString = Data.ProtoLens.fieldDefault,+ _LinkFailEvent'_unknownFields = []}+ parseMessage+ = let+ loop ::+ LinkFailEvent -> Data.ProtoLens.Encoding.Bytes.Parser LinkFailEvent+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len) Data.ProtoLens.parseMessage)+ "info"+ loop (Lens.Family2.set (Data.ProtoLens.Field.field @"info") y x)+ 16+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.toEnum+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt))+ "wire_failure"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"wireFailure") y x)+ 24+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.toEnum+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt))+ "failure_detail"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"failureDetail") y x)+ 34+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do value <- do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len)+ Data.ProtoLens.Encoding.Bytes.runEither+ (case Data.Text.Encoding.decodeUtf8' value of+ (Prelude.Left err)+ -> Prelude.Left (Prelude.show err)+ (Prelude.Right r) -> Prelude.Right r))+ "failure_string"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"failureString") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "LinkFailEvent"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (case+ Lens.Family2.view (Data.ProtoLens.Field.field @"maybe'info") _x+ of+ Prelude.Nothing -> Data.Monoid.mempty+ (Prelude.Just _v)+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.ProtoLens.encodeMessage+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view (Data.ProtoLens.Field.field @"wireFailure") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 16)+ ((Prelude..)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral)+ Prelude.fromEnum+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"failureDetail") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 24)+ ((Prelude..)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral)+ Prelude.fromEnum+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"failureString") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 34)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.Text.Encoding.encodeUtf8+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)))))+instance Control.DeepSeq.NFData LinkFailEvent where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_LinkFailEvent'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_LinkFailEvent'info x__)+ (Control.DeepSeq.deepseq+ (_LinkFailEvent'wireFailure x__)+ (Control.DeepSeq.deepseq+ (_LinkFailEvent'failureDetail x__)+ (Control.DeepSeq.deepseq (_LinkFailEvent'failureString x__) ()))))+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.halfLifeSeconds' @:: Lens' MissionControlConfig Data.Word.Word64@+ * 'Proto.RouterGrpc_Fields.hopProbability' @:: Lens' MissionControlConfig Prelude.Float@+ * 'Proto.RouterGrpc_Fields.weight' @:: Lens' MissionControlConfig Prelude.Float@+ * 'Proto.RouterGrpc_Fields.maximumPaymentResults' @:: Lens' MissionControlConfig Data.Word.Word32@+ * 'Proto.RouterGrpc_Fields.minimumFailureRelaxInterval' @:: Lens' MissionControlConfig Data.Word.Word64@ -}+data MissionControlConfig+ = MissionControlConfig'_constructor {_MissionControlConfig'halfLifeSeconds :: !Data.Word.Word64,+ _MissionControlConfig'hopProbability :: !Prelude.Float,+ _MissionControlConfig'weight :: !Prelude.Float,+ _MissionControlConfig'maximumPaymentResults :: !Data.Word.Word32,+ _MissionControlConfig'minimumFailureRelaxInterval :: !Data.Word.Word64,+ _MissionControlConfig'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show MissionControlConfig where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField MissionControlConfig "halfLifeSeconds" Data.Word.Word64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _MissionControlConfig'halfLifeSeconds+ (\ x__ y__ -> x__ {_MissionControlConfig'halfLifeSeconds = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField MissionControlConfig "hopProbability" Prelude.Float where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _MissionControlConfig'hopProbability+ (\ x__ y__ -> x__ {_MissionControlConfig'hopProbability = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField MissionControlConfig "weight" Prelude.Float where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _MissionControlConfig'weight+ (\ x__ y__ -> x__ {_MissionControlConfig'weight = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField MissionControlConfig "maximumPaymentResults" Data.Word.Word32 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _MissionControlConfig'maximumPaymentResults+ (\ x__ y__+ -> x__ {_MissionControlConfig'maximumPaymentResults = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField MissionControlConfig "minimumFailureRelaxInterval" Data.Word.Word64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _MissionControlConfig'minimumFailureRelaxInterval+ (\ x__ y__+ -> x__ {_MissionControlConfig'minimumFailureRelaxInterval = y__}))+ Prelude.id+instance Data.ProtoLens.Message MissionControlConfig where+ messageName _ = Data.Text.pack "routerrpc.MissionControlConfig"+ packedMessageDescriptor _+ = "\n\+ \\DC4MissionControlConfig\DC2*\n\+ \\DC1half_life_seconds\CAN\SOH \SOH(\EOTR\SIhalfLifeSeconds\DC2'\n\+ \\SIhop_probability\CAN\STX \SOH(\STXR\SOhopProbability\DC2\SYN\n\+ \\ACKweight\CAN\ETX \SOH(\STXR\ACKweight\DC26\n\+ \\ETBmaximum_payment_results\CAN\EOT \SOH(\rR\NAKmaximumPaymentResults\DC2C\n\+ \\RSminimum_failure_relax_interval\CAN\ENQ \SOH(\EOTR\ESCminimumFailureRelaxInterval"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ halfLifeSeconds__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "half_life_seconds"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"halfLifeSeconds")) ::+ Data.ProtoLens.FieldDescriptor MissionControlConfig+ hopProbability__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "hop_probability"+ (Data.ProtoLens.ScalarField Data.ProtoLens.FloatField ::+ Data.ProtoLens.FieldTypeDescriptor Prelude.Float)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"hopProbability")) ::+ Data.ProtoLens.FieldDescriptor MissionControlConfig+ weight__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "weight"+ (Data.ProtoLens.ScalarField Data.ProtoLens.FloatField ::+ Data.ProtoLens.FieldTypeDescriptor Prelude.Float)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"weight")) ::+ Data.ProtoLens.FieldDescriptor MissionControlConfig+ maximumPaymentResults__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "maximum_payment_results"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt32Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word32)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"maximumPaymentResults")) ::+ Data.ProtoLens.FieldDescriptor MissionControlConfig+ minimumFailureRelaxInterval__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "minimum_failure_relax_interval"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"minimumFailureRelaxInterval")) ::+ Data.ProtoLens.FieldDescriptor MissionControlConfig+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, halfLifeSeconds__field_descriptor),+ (Data.ProtoLens.Tag 2, hopProbability__field_descriptor),+ (Data.ProtoLens.Tag 3, weight__field_descriptor),+ (Data.ProtoLens.Tag 4, maximumPaymentResults__field_descriptor),+ (Data.ProtoLens.Tag 5, + minimumFailureRelaxInterval__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _MissionControlConfig'_unknownFields+ (\ x__ y__ -> x__ {_MissionControlConfig'_unknownFields = y__})+ defMessage+ = MissionControlConfig'_constructor+ {_MissionControlConfig'halfLifeSeconds = Data.ProtoLens.fieldDefault,+ _MissionControlConfig'hopProbability = Data.ProtoLens.fieldDefault,+ _MissionControlConfig'weight = Data.ProtoLens.fieldDefault,+ _MissionControlConfig'maximumPaymentResults = Data.ProtoLens.fieldDefault,+ _MissionControlConfig'minimumFailureRelaxInterval = Data.ProtoLens.fieldDefault,+ _MissionControlConfig'_unknownFields = []}+ parseMessage+ = let+ loop ::+ MissionControlConfig+ -> Data.ProtoLens.Encoding.Bytes.Parser MissionControlConfig+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 8 -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ Data.ProtoLens.Encoding.Bytes.getVarInt "half_life_seconds"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"halfLifeSeconds") y x)+ 21+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Data.ProtoLens.Encoding.Bytes.wordToFloat+ Data.ProtoLens.Encoding.Bytes.getFixed32)+ "hop_probability"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"hopProbability") y x)+ 29+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Data.ProtoLens.Encoding.Bytes.wordToFloat+ Data.ProtoLens.Encoding.Bytes.getFixed32)+ "weight"+ loop (Lens.Family2.set (Data.ProtoLens.Field.field @"weight") y x)+ 32+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "maximum_payment_results"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"maximumPaymentResults") y x)+ 40+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ Data.ProtoLens.Encoding.Bytes.getVarInt+ "minimum_failure_relax_interval"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"minimumFailureRelaxInterval")+ y+ x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "MissionControlConfig"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"halfLifeSeconds") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 8)+ (Data.ProtoLens.Encoding.Bytes.putVarInt _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"hopProbability") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 21)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putFixed32+ Data.ProtoLens.Encoding.Bytes.floatToWord+ _v))+ ((Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"weight") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 29)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putFixed32+ Data.ProtoLens.Encoding.Bytes.floatToWord+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"maximumPaymentResults") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 32)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"minimumFailureRelaxInterval") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 40)+ (Data.ProtoLens.Encoding.Bytes.putVarInt _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x))))))+instance Control.DeepSeq.NFData MissionControlConfig where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_MissionControlConfig'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_MissionControlConfig'halfLifeSeconds x__)+ (Control.DeepSeq.deepseq+ (_MissionControlConfig'hopProbability x__)+ (Control.DeepSeq.deepseq+ (_MissionControlConfig'weight x__)+ (Control.DeepSeq.deepseq+ (_MissionControlConfig'maximumPaymentResults x__)+ (Control.DeepSeq.deepseq+ (_MissionControlConfig'minimumFailureRelaxInterval x__) ())))))+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.failTime' @:: Lens' PairData Data.Int.Int64@+ * 'Proto.RouterGrpc_Fields.failAmtSat' @:: Lens' PairData Data.Int.Int64@+ * 'Proto.RouterGrpc_Fields.failAmtMsat' @:: Lens' PairData Data.Int.Int64@+ * 'Proto.RouterGrpc_Fields.successTime' @:: Lens' PairData Data.Int.Int64@+ * 'Proto.RouterGrpc_Fields.successAmtSat' @:: Lens' PairData Data.Int.Int64@+ * 'Proto.RouterGrpc_Fields.successAmtMsat' @:: Lens' PairData Data.Int.Int64@ -}+data PairData+ = PairData'_constructor {_PairData'failTime :: !Data.Int.Int64,+ _PairData'failAmtSat :: !Data.Int.Int64,+ _PairData'failAmtMsat :: !Data.Int.Int64,+ _PairData'successTime :: !Data.Int.Int64,+ _PairData'successAmtSat :: !Data.Int.Int64,+ _PairData'successAmtMsat :: !Data.Int.Int64,+ _PairData'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show PairData where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField PairData "failTime" Data.Int.Int64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _PairData'failTime (\ x__ y__ -> x__ {_PairData'failTime = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField PairData "failAmtSat" Data.Int.Int64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _PairData'failAmtSat+ (\ x__ y__ -> x__ {_PairData'failAmtSat = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField PairData "failAmtMsat" Data.Int.Int64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _PairData'failAmtMsat+ (\ x__ y__ -> x__ {_PairData'failAmtMsat = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField PairData "successTime" Data.Int.Int64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _PairData'successTime+ (\ x__ y__ -> x__ {_PairData'successTime = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField PairData "successAmtSat" Data.Int.Int64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _PairData'successAmtSat+ (\ x__ y__ -> x__ {_PairData'successAmtSat = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField PairData "successAmtMsat" Data.Int.Int64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _PairData'successAmtMsat+ (\ x__ y__ -> x__ {_PairData'successAmtMsat = y__}))+ Prelude.id+instance Data.ProtoLens.Message PairData where+ messageName _ = Data.Text.pack "routerrpc.PairData"+ packedMessageDescriptor _+ = "\n\+ \\bPairData\DC2\ESC\n\+ \\tfail_time\CAN\SOH \SOH(\ETXR\bfailTime\DC2 \n\+ \\ffail_amt_sat\CAN\STX \SOH(\ETXR\n\+ \failAmtSat\DC2\"\n\+ \\rfail_amt_msat\CAN\EOT \SOH(\ETXR\vfailAmtMsat\DC2!\n\+ \\fsuccess_time\CAN\ENQ \SOH(\ETXR\vsuccessTime\DC2&\n\+ \\SIsuccess_amt_sat\CAN\ACK \SOH(\ETXR\rsuccessAmtSat\DC2(\n\+ \\DLEsuccess_amt_msat\CAN\a \SOH(\ETXR\SOsuccessAmtMsatJ\EOT\b\ETX\DLE\EOT"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ failTime__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "fail_time"+ (Data.ProtoLens.ScalarField Data.ProtoLens.Int64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"failTime")) ::+ Data.ProtoLens.FieldDescriptor PairData+ failAmtSat__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "fail_amt_sat"+ (Data.ProtoLens.ScalarField Data.ProtoLens.Int64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"failAmtSat")) ::+ Data.ProtoLens.FieldDescriptor PairData+ failAmtMsat__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "fail_amt_msat"+ (Data.ProtoLens.ScalarField Data.ProtoLens.Int64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"failAmtMsat")) ::+ Data.ProtoLens.FieldDescriptor PairData+ successTime__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "success_time"+ (Data.ProtoLens.ScalarField Data.ProtoLens.Int64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"successTime")) ::+ Data.ProtoLens.FieldDescriptor PairData+ successAmtSat__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "success_amt_sat"+ (Data.ProtoLens.ScalarField Data.ProtoLens.Int64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"successAmtSat")) ::+ Data.ProtoLens.FieldDescriptor PairData+ successAmtMsat__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "success_amt_msat"+ (Data.ProtoLens.ScalarField Data.ProtoLens.Int64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"successAmtMsat")) ::+ Data.ProtoLens.FieldDescriptor PairData+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, failTime__field_descriptor),+ (Data.ProtoLens.Tag 2, failAmtSat__field_descriptor),+ (Data.ProtoLens.Tag 4, failAmtMsat__field_descriptor),+ (Data.ProtoLens.Tag 5, successTime__field_descriptor),+ (Data.ProtoLens.Tag 6, successAmtSat__field_descriptor),+ (Data.ProtoLens.Tag 7, successAmtMsat__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _PairData'_unknownFields+ (\ x__ y__ -> x__ {_PairData'_unknownFields = y__})+ defMessage+ = PairData'_constructor+ {_PairData'failTime = Data.ProtoLens.fieldDefault,+ _PairData'failAmtSat = Data.ProtoLens.fieldDefault,+ _PairData'failAmtMsat = Data.ProtoLens.fieldDefault,+ _PairData'successTime = Data.ProtoLens.fieldDefault,+ _PairData'successAmtSat = Data.ProtoLens.fieldDefault,+ _PairData'successAmtMsat = Data.ProtoLens.fieldDefault,+ _PairData'_unknownFields = []}+ parseMessage+ = let+ loop :: PairData -> Data.ProtoLens.Encoding.Bytes.Parser PairData+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 8 -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "fail_time"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"failTime") y x)+ 16+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "fail_amt_sat"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"failAmtSat") y x)+ 32+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "fail_amt_msat"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"failAmtMsat") y x)+ 40+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "success_time"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"successTime") y x)+ 48+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "success_amt_sat"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"successAmtSat") y x)+ 56+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "success_amt_msat"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"successAmtMsat") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "PairData"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"failTime") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 8)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view (Data.ProtoLens.Field.field @"failAmtSat") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 16)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view (Data.ProtoLens.Field.field @"failAmtMsat") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 32)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view (Data.ProtoLens.Field.field @"successTime") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 40)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"successAmtSat") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 48)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt+ Prelude.fromIntegral+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"successAmtMsat") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 56)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt+ Prelude.fromIntegral+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)))))))+instance Control.DeepSeq.NFData PairData where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_PairData'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_PairData'failTime x__)+ (Control.DeepSeq.deepseq+ (_PairData'failAmtSat x__)+ (Control.DeepSeq.deepseq+ (_PairData'failAmtMsat x__)+ (Control.DeepSeq.deepseq+ (_PairData'successTime x__)+ (Control.DeepSeq.deepseq+ (_PairData'successAmtSat x__)+ (Control.DeepSeq.deepseq (_PairData'successAmtMsat x__) ()))))))+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.nodeFrom' @:: Lens' PairHistory Data.ByteString.ByteString@+ * 'Proto.RouterGrpc_Fields.nodeTo' @:: Lens' PairHistory Data.ByteString.ByteString@+ * 'Proto.RouterGrpc_Fields.history' @:: Lens' PairHistory PairData@+ * 'Proto.RouterGrpc_Fields.maybe'history' @:: Lens' PairHistory (Prelude.Maybe PairData)@ -}+data PairHistory+ = PairHistory'_constructor {_PairHistory'nodeFrom :: !Data.ByteString.ByteString,+ _PairHistory'nodeTo :: !Data.ByteString.ByteString,+ _PairHistory'history :: !(Prelude.Maybe PairData),+ _PairHistory'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show PairHistory where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField PairHistory "nodeFrom" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _PairHistory'nodeFrom+ (\ x__ y__ -> x__ {_PairHistory'nodeFrom = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField PairHistory "nodeTo" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _PairHistory'nodeTo (\ x__ y__ -> x__ {_PairHistory'nodeTo = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField PairHistory "history" PairData where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _PairHistory'history+ (\ x__ y__ -> x__ {_PairHistory'history = y__}))+ (Data.ProtoLens.maybeLens Data.ProtoLens.defMessage)+instance Data.ProtoLens.Field.HasField PairHistory "maybe'history" (Prelude.Maybe PairData) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _PairHistory'history+ (\ x__ y__ -> x__ {_PairHistory'history = y__}))+ Prelude.id+instance Data.ProtoLens.Message PairHistory where+ messageName _ = Data.Text.pack "routerrpc.PairHistory"+ packedMessageDescriptor _+ = "\n\+ \\vPairHistory\DC2\ESC\n\+ \\tnode_from\CAN\SOH \SOH(\fR\bnodeFrom\DC2\ETB\n\+ \\anode_to\CAN\STX \SOH(\fR\ACKnodeTo\DC2-\n\+ \\ahistory\CAN\a \SOH(\v2\DC3.routerrpc.PairDataR\ahistoryJ\EOT\b\ETX\DLE\EOTJ\EOT\b\EOT\DLE\ENQJ\EOT\b\ENQ\DLE\ACKJ\EOT\b\ACK\DLE\a"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ nodeFrom__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "node_from"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"nodeFrom")) ::+ Data.ProtoLens.FieldDescriptor PairHistory+ nodeTo__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "node_to"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"nodeTo")) ::+ Data.ProtoLens.FieldDescriptor PairHistory+ history__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "history"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor PairData)+ (Data.ProtoLens.OptionalField+ (Data.ProtoLens.Field.field @"maybe'history")) ::+ Data.ProtoLens.FieldDescriptor PairHistory+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, nodeFrom__field_descriptor),+ (Data.ProtoLens.Tag 2, nodeTo__field_descriptor),+ (Data.ProtoLens.Tag 7, history__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _PairHistory'_unknownFields+ (\ x__ y__ -> x__ {_PairHistory'_unknownFields = y__})+ defMessage+ = PairHistory'_constructor+ {_PairHistory'nodeFrom = Data.ProtoLens.fieldDefault,+ _PairHistory'nodeTo = Data.ProtoLens.fieldDefault,+ _PairHistory'history = Prelude.Nothing,+ _PairHistory'_unknownFields = []}+ parseMessage+ = let+ loop ::+ PairHistory -> Data.ProtoLens.Encoding.Bytes.Parser PairHistory+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "node_from"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"nodeFrom") y x)+ 18+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "node_to"+ loop (Lens.Family2.set (Data.ProtoLens.Field.field @"nodeTo") y x)+ 58+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len) Data.ProtoLens.parseMessage)+ "history"+ loop (Lens.Family2.set (Data.ProtoLens.Field.field @"history") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "PairHistory"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"nodeFrom") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ ((Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"nodeTo") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 18)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ ((Data.Monoid.<>)+ (case+ Lens.Family2.view (Data.ProtoLens.Field.field @"maybe'history") _x+ of+ Prelude.Nothing -> Data.Monoid.mempty+ (Prelude.Just _v)+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 58)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.ProtoLens.encodeMessage+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x))))+instance Control.DeepSeq.NFData PairHistory where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_PairHistory'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_PairHistory'nodeFrom x__)+ (Control.DeepSeq.deepseq+ (_PairHistory'nodeTo x__)+ (Control.DeepSeq.deepseq (_PairHistory'history x__) ())))+newtype PaymentState'UnrecognizedValue+ = PaymentState'UnrecognizedValue Data.Int.Int32+ deriving stock (Prelude.Eq, Prelude.Ord, Prelude.Show)+data PaymentState+ = IN_FLIGHT |+ SUCCEEDED |+ FAILED_TIMEOUT |+ FAILED_NO_ROUTE |+ FAILED_ERROR |+ FAILED_INCORRECT_PAYMENT_DETAILS |+ FAILED_INSUFFICIENT_BALANCE |+ PaymentState'Unrecognized !PaymentState'UnrecognizedValue+ deriving stock (Prelude.Show, Prelude.Eq, Prelude.Ord)+instance Data.ProtoLens.MessageEnum PaymentState where+ maybeToEnum 0 = Prelude.Just IN_FLIGHT+ maybeToEnum 1 = Prelude.Just SUCCEEDED+ maybeToEnum 2 = Prelude.Just FAILED_TIMEOUT+ maybeToEnum 3 = Prelude.Just FAILED_NO_ROUTE+ maybeToEnum 4 = Prelude.Just FAILED_ERROR+ maybeToEnum 5 = Prelude.Just FAILED_INCORRECT_PAYMENT_DETAILS+ maybeToEnum 6 = Prelude.Just FAILED_INSUFFICIENT_BALANCE+ maybeToEnum k+ = Prelude.Just+ (PaymentState'Unrecognized+ (PaymentState'UnrecognizedValue (Prelude.fromIntegral k)))+ showEnum IN_FLIGHT = "IN_FLIGHT"+ showEnum SUCCEEDED = "SUCCEEDED"+ showEnum FAILED_TIMEOUT = "FAILED_TIMEOUT"+ showEnum FAILED_NO_ROUTE = "FAILED_NO_ROUTE"+ showEnum FAILED_ERROR = "FAILED_ERROR"+ showEnum FAILED_INCORRECT_PAYMENT_DETAILS+ = "FAILED_INCORRECT_PAYMENT_DETAILS"+ showEnum FAILED_INSUFFICIENT_BALANCE+ = "FAILED_INSUFFICIENT_BALANCE"+ showEnum+ (PaymentState'Unrecognized (PaymentState'UnrecognizedValue k))+ = Prelude.show k+ readEnum k+ | (Prelude.==) k "IN_FLIGHT" = Prelude.Just IN_FLIGHT+ | (Prelude.==) k "SUCCEEDED" = Prelude.Just SUCCEEDED+ | (Prelude.==) k "FAILED_TIMEOUT" = Prelude.Just FAILED_TIMEOUT+ | (Prelude.==) k "FAILED_NO_ROUTE" = Prelude.Just FAILED_NO_ROUTE+ | (Prelude.==) k "FAILED_ERROR" = Prelude.Just FAILED_ERROR+ | (Prelude.==) k "FAILED_INCORRECT_PAYMENT_DETAILS"+ = Prelude.Just FAILED_INCORRECT_PAYMENT_DETAILS+ | (Prelude.==) k "FAILED_INSUFFICIENT_BALANCE"+ = Prelude.Just FAILED_INSUFFICIENT_BALANCE+ | Prelude.otherwise+ = (Prelude.>>=) (Text.Read.readMaybe k) Data.ProtoLens.maybeToEnum+instance Prelude.Bounded PaymentState where+ minBound = IN_FLIGHT+ maxBound = FAILED_INSUFFICIENT_BALANCE+instance Prelude.Enum PaymentState where+ toEnum k__+ = Prelude.maybe+ (Prelude.error+ ((Prelude.++)+ "toEnum: unknown value for enum PaymentState: "+ (Prelude.show k__)))+ Prelude.id+ (Data.ProtoLens.maybeToEnum k__)+ fromEnum IN_FLIGHT = 0+ fromEnum SUCCEEDED = 1+ fromEnum FAILED_TIMEOUT = 2+ fromEnum FAILED_NO_ROUTE = 3+ fromEnum FAILED_ERROR = 4+ fromEnum FAILED_INCORRECT_PAYMENT_DETAILS = 5+ fromEnum FAILED_INSUFFICIENT_BALANCE = 6+ fromEnum+ (PaymentState'Unrecognized (PaymentState'UnrecognizedValue k))+ = Prelude.fromIntegral k+ succ FAILED_INSUFFICIENT_BALANCE+ = Prelude.error+ "PaymentState.succ: bad argument FAILED_INSUFFICIENT_BALANCE. This value would be out of bounds."+ succ IN_FLIGHT = SUCCEEDED+ succ SUCCEEDED = FAILED_TIMEOUT+ succ FAILED_TIMEOUT = FAILED_NO_ROUTE+ succ FAILED_NO_ROUTE = FAILED_ERROR+ succ FAILED_ERROR = FAILED_INCORRECT_PAYMENT_DETAILS+ succ FAILED_INCORRECT_PAYMENT_DETAILS = FAILED_INSUFFICIENT_BALANCE+ succ (PaymentState'Unrecognized _)+ = Prelude.error+ "PaymentState.succ: bad argument: unrecognized value"+ pred IN_FLIGHT+ = Prelude.error+ "PaymentState.pred: bad argument IN_FLIGHT. This value would be out of bounds."+ pred SUCCEEDED = IN_FLIGHT+ pred FAILED_TIMEOUT = SUCCEEDED+ pred FAILED_NO_ROUTE = FAILED_TIMEOUT+ pred FAILED_ERROR = FAILED_NO_ROUTE+ pred FAILED_INCORRECT_PAYMENT_DETAILS = FAILED_ERROR+ pred FAILED_INSUFFICIENT_BALANCE = FAILED_INCORRECT_PAYMENT_DETAILS+ pred (PaymentState'Unrecognized _)+ = Prelude.error+ "PaymentState.pred: bad argument: unrecognized value"+ enumFrom = Data.ProtoLens.Message.Enum.messageEnumFrom+ enumFromTo = Data.ProtoLens.Message.Enum.messageEnumFromTo+ enumFromThen = Data.ProtoLens.Message.Enum.messageEnumFromThen+ enumFromThenTo = Data.ProtoLens.Message.Enum.messageEnumFromThenTo+instance Data.ProtoLens.FieldDefault PaymentState where+ fieldDefault = IN_FLIGHT+instance Control.DeepSeq.NFData PaymentState where+ rnf x__ = Prelude.seq x__ ()+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.state' @:: Lens' PaymentStatus PaymentState@+ * 'Proto.RouterGrpc_Fields.preimage' @:: Lens' PaymentStatus Data.ByteString.ByteString@+ * 'Proto.RouterGrpc_Fields.htlcs' @:: Lens' PaymentStatus [Proto.LndGrpc.HTLCAttempt]@+ * 'Proto.RouterGrpc_Fields.vec'htlcs' @:: Lens' PaymentStatus (Data.Vector.Vector Proto.LndGrpc.HTLCAttempt)@ -}+data PaymentStatus+ = PaymentStatus'_constructor {_PaymentStatus'state :: !PaymentState,+ _PaymentStatus'preimage :: !Data.ByteString.ByteString,+ _PaymentStatus'htlcs :: !(Data.Vector.Vector Proto.LndGrpc.HTLCAttempt),+ _PaymentStatus'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show PaymentStatus where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField PaymentStatus "state" PaymentState where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _PaymentStatus'state+ (\ x__ y__ -> x__ {_PaymentStatus'state = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField PaymentStatus "preimage" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _PaymentStatus'preimage+ (\ x__ y__ -> x__ {_PaymentStatus'preimage = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField PaymentStatus "htlcs" [Proto.LndGrpc.HTLCAttempt] where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _PaymentStatus'htlcs+ (\ x__ y__ -> x__ {_PaymentStatus'htlcs = y__}))+ (Lens.Family2.Unchecked.lens+ Data.Vector.Generic.toList+ (\ _ y__ -> Data.Vector.Generic.fromList y__))+instance Data.ProtoLens.Field.HasField PaymentStatus "vec'htlcs" (Data.Vector.Vector Proto.LndGrpc.HTLCAttempt) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _PaymentStatus'htlcs+ (\ x__ y__ -> x__ {_PaymentStatus'htlcs = y__}))+ Prelude.id+instance Data.ProtoLens.Message PaymentStatus where+ messageName _ = Data.Text.pack "routerrpc.PaymentStatus"+ packedMessageDescriptor _+ = "\n\+ \\rPaymentStatus\DC2-\n\+ \\ENQstate\CAN\SOH \SOH(\SO2\ETB.routerrpc.PaymentStateR\ENQstate\DC2\SUB\n\+ \\bpreimage\CAN\STX \SOH(\fR\bpreimage\DC2(\n\+ \\ENQhtlcs\CAN\EOT \ETX(\v2\DC2.lnrpc.HTLCAttemptR\ENQhtlcsJ\EOT\b\ETX\DLE\EOT"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ state__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "state"+ (Data.ProtoLens.ScalarField Data.ProtoLens.EnumField ::+ Data.ProtoLens.FieldTypeDescriptor PaymentState)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"state")) ::+ Data.ProtoLens.FieldDescriptor PaymentStatus+ preimage__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "preimage"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"preimage")) ::+ Data.ProtoLens.FieldDescriptor PaymentStatus+ htlcs__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "htlcs"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor Proto.LndGrpc.HTLCAttempt)+ (Data.ProtoLens.RepeatedField+ Data.ProtoLens.Unpacked (Data.ProtoLens.Field.field @"htlcs")) ::+ Data.ProtoLens.FieldDescriptor PaymentStatus+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, state__field_descriptor),+ (Data.ProtoLens.Tag 2, preimage__field_descriptor),+ (Data.ProtoLens.Tag 4, htlcs__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _PaymentStatus'_unknownFields+ (\ x__ y__ -> x__ {_PaymentStatus'_unknownFields = y__})+ defMessage+ = PaymentStatus'_constructor+ {_PaymentStatus'state = Data.ProtoLens.fieldDefault,+ _PaymentStatus'preimage = Data.ProtoLens.fieldDefault,+ _PaymentStatus'htlcs = Data.Vector.Generic.empty,+ _PaymentStatus'_unknownFields = []}+ parseMessage+ = let+ loop ::+ PaymentStatus+ -> Data.ProtoLens.Encoding.Growing.Growing Data.Vector.Vector Data.ProtoLens.Encoding.Growing.RealWorld Proto.LndGrpc.HTLCAttempt+ -> Data.ProtoLens.Encoding.Bytes.Parser PaymentStatus+ loop x mutable'htlcs+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do frozen'htlcs <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ (Data.ProtoLens.Encoding.Growing.unsafeFreeze mutable'htlcs)+ (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields+ (\ !t -> Prelude.reverse t)+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"vec'htlcs") frozen'htlcs x))+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 8 -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.toEnum+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt))+ "state"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"state") y x)+ mutable'htlcs+ 18+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "preimage"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"preimage") y x)+ mutable'htlcs+ 34+ -> do !y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len)+ Data.ProtoLens.parseMessage)+ "htlcs"+ v <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ (Data.ProtoLens.Encoding.Growing.append mutable'htlcs y)+ loop x v+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ mutable'htlcs+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do mutable'htlcs <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ Data.ProtoLens.Encoding.Growing.new+ loop Data.ProtoLens.defMessage mutable'htlcs)+ "PaymentStatus"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"state") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 8)+ ((Prelude..)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral)+ Prelude.fromEnum+ _v))+ ((Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"preimage") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 18)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ ((Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.foldMapBuilder+ (\ _v+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 34)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.ProtoLens.encodeMessage+ _v))+ (Lens.Family2.view (Data.ProtoLens.Field.field @"vec'htlcs") _x))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x))))+instance Control.DeepSeq.NFData PaymentStatus where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_PaymentStatus'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_PaymentStatus'state x__)+ (Control.DeepSeq.deepseq+ (_PaymentStatus'preimage x__)+ (Control.DeepSeq.deepseq (_PaymentStatus'htlcs x__) ())))+{- | Fields :+ -}+data QueryMissionControlRequest+ = QueryMissionControlRequest'_constructor {_QueryMissionControlRequest'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show QueryMissionControlRequest where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Message QueryMissionControlRequest where+ messageName _+ = Data.Text.pack "routerrpc.QueryMissionControlRequest"+ packedMessageDescriptor _+ = "\n\+ \\SUBQueryMissionControlRequest"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag = let in Data.Map.fromList []+ unknownFields+ = Lens.Family2.Unchecked.lens+ _QueryMissionControlRequest'_unknownFields+ (\ x__ y__+ -> x__ {_QueryMissionControlRequest'_unknownFields = y__})+ defMessage+ = QueryMissionControlRequest'_constructor+ {_QueryMissionControlRequest'_unknownFields = []}+ parseMessage+ = let+ loop ::+ QueryMissionControlRequest+ -> Data.ProtoLens.Encoding.Bytes.Parser QueryMissionControlRequest+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of {+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x) }+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "QueryMissionControlRequest"+ buildMessage+ = \ _x+ -> Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)+instance Control.DeepSeq.NFData QueryMissionControlRequest where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_QueryMissionControlRequest'_unknownFields x__) ()+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.pairs' @:: Lens' QueryMissionControlResponse [PairHistory]@+ * 'Proto.RouterGrpc_Fields.vec'pairs' @:: Lens' QueryMissionControlResponse (Data.Vector.Vector PairHistory)@ -}+data QueryMissionControlResponse+ = QueryMissionControlResponse'_constructor {_QueryMissionControlResponse'pairs :: !(Data.Vector.Vector PairHistory),+ _QueryMissionControlResponse'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show QueryMissionControlResponse where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField QueryMissionControlResponse "pairs" [PairHistory] where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _QueryMissionControlResponse'pairs+ (\ x__ y__ -> x__ {_QueryMissionControlResponse'pairs = y__}))+ (Lens.Family2.Unchecked.lens+ Data.Vector.Generic.toList+ (\ _ y__ -> Data.Vector.Generic.fromList y__))+instance Data.ProtoLens.Field.HasField QueryMissionControlResponse "vec'pairs" (Data.Vector.Vector PairHistory) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _QueryMissionControlResponse'pairs+ (\ x__ y__ -> x__ {_QueryMissionControlResponse'pairs = y__}))+ Prelude.id+instance Data.ProtoLens.Message QueryMissionControlResponse where+ messageName _+ = Data.Text.pack "routerrpc.QueryMissionControlResponse"+ packedMessageDescriptor _+ = "\n\+ \\ESCQueryMissionControlResponse\DC2,\n\+ \\ENQpairs\CAN\STX \ETX(\v2\SYN.routerrpc.PairHistoryR\ENQpairsJ\EOT\b\SOH\DLE\STX"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ pairs__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "pairs"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor PairHistory)+ (Data.ProtoLens.RepeatedField+ Data.ProtoLens.Unpacked (Data.ProtoLens.Field.field @"pairs")) ::+ Data.ProtoLens.FieldDescriptor QueryMissionControlResponse+ in+ Data.Map.fromList [(Data.ProtoLens.Tag 2, pairs__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _QueryMissionControlResponse'_unknownFields+ (\ x__ y__+ -> x__ {_QueryMissionControlResponse'_unknownFields = y__})+ defMessage+ = QueryMissionControlResponse'_constructor+ {_QueryMissionControlResponse'pairs = Data.Vector.Generic.empty,+ _QueryMissionControlResponse'_unknownFields = []}+ parseMessage+ = let+ loop ::+ QueryMissionControlResponse+ -> Data.ProtoLens.Encoding.Growing.Growing Data.Vector.Vector Data.ProtoLens.Encoding.Growing.RealWorld PairHistory+ -> Data.ProtoLens.Encoding.Bytes.Parser QueryMissionControlResponse+ loop x mutable'pairs+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do frozen'pairs <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ (Data.ProtoLens.Encoding.Growing.unsafeFreeze mutable'pairs)+ (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields+ (\ !t -> Prelude.reverse t)+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"vec'pairs") frozen'pairs x))+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 18+ -> do !y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len)+ Data.ProtoLens.parseMessage)+ "pairs"+ v <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ (Data.ProtoLens.Encoding.Growing.append mutable'pairs y)+ loop x v+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ mutable'pairs+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do mutable'pairs <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ Data.ProtoLens.Encoding.Growing.new+ loop Data.ProtoLens.defMessage mutable'pairs)+ "QueryMissionControlResponse"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.foldMapBuilder+ (\ _v+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 18)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.ProtoLens.encodeMessage+ _v))+ (Lens.Family2.view (Data.ProtoLens.Field.field @"vec'pairs") _x))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x))+instance Control.DeepSeq.NFData QueryMissionControlResponse where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_QueryMissionControlResponse'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_QueryMissionControlResponse'pairs x__) ())+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.fromNode' @:: Lens' QueryProbabilityRequest Data.ByteString.ByteString@+ * 'Proto.RouterGrpc_Fields.toNode' @:: Lens' QueryProbabilityRequest Data.ByteString.ByteString@+ * 'Proto.RouterGrpc_Fields.amtMsat' @:: Lens' QueryProbabilityRequest Data.Int.Int64@ -}+data QueryProbabilityRequest+ = QueryProbabilityRequest'_constructor {_QueryProbabilityRequest'fromNode :: !Data.ByteString.ByteString,+ _QueryProbabilityRequest'toNode :: !Data.ByteString.ByteString,+ _QueryProbabilityRequest'amtMsat :: !Data.Int.Int64,+ _QueryProbabilityRequest'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show QueryProbabilityRequest where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField QueryProbabilityRequest "fromNode" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _QueryProbabilityRequest'fromNode+ (\ x__ y__ -> x__ {_QueryProbabilityRequest'fromNode = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField QueryProbabilityRequest "toNode" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _QueryProbabilityRequest'toNode+ (\ x__ y__ -> x__ {_QueryProbabilityRequest'toNode = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField QueryProbabilityRequest "amtMsat" Data.Int.Int64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _QueryProbabilityRequest'amtMsat+ (\ x__ y__ -> x__ {_QueryProbabilityRequest'amtMsat = y__}))+ Prelude.id+instance Data.ProtoLens.Message QueryProbabilityRequest where+ messageName _ = Data.Text.pack "routerrpc.QueryProbabilityRequest"+ packedMessageDescriptor _+ = "\n\+ \\ETBQueryProbabilityRequest\DC2\ESC\n\+ \\tfrom_node\CAN\SOH \SOH(\fR\bfromNode\DC2\ETB\n\+ \\ato_node\CAN\STX \SOH(\fR\ACKtoNode\DC2\EM\n\+ \\bamt_msat\CAN\ETX \SOH(\ETXR\aamtMsat"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ fromNode__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "from_node"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"fromNode")) ::+ Data.ProtoLens.FieldDescriptor QueryProbabilityRequest+ toNode__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "to_node"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"toNode")) ::+ Data.ProtoLens.FieldDescriptor QueryProbabilityRequest+ amtMsat__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "amt_msat"+ (Data.ProtoLens.ScalarField Data.ProtoLens.Int64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"amtMsat")) ::+ Data.ProtoLens.FieldDescriptor QueryProbabilityRequest+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, fromNode__field_descriptor),+ (Data.ProtoLens.Tag 2, toNode__field_descriptor),+ (Data.ProtoLens.Tag 3, amtMsat__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _QueryProbabilityRequest'_unknownFields+ (\ x__ y__ -> x__ {_QueryProbabilityRequest'_unknownFields = y__})+ defMessage+ = QueryProbabilityRequest'_constructor+ {_QueryProbabilityRequest'fromNode = Data.ProtoLens.fieldDefault,+ _QueryProbabilityRequest'toNode = Data.ProtoLens.fieldDefault,+ _QueryProbabilityRequest'amtMsat = Data.ProtoLens.fieldDefault,+ _QueryProbabilityRequest'_unknownFields = []}+ parseMessage+ = let+ loop ::+ QueryProbabilityRequest+ -> Data.ProtoLens.Encoding.Bytes.Parser QueryProbabilityRequest+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "from_node"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"fromNode") y x)+ 18+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "to_node"+ loop (Lens.Family2.set (Data.ProtoLens.Field.field @"toNode") y x)+ 24+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "amt_msat"+ loop (Lens.Family2.set (Data.ProtoLens.Field.field @"amtMsat") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "QueryProbabilityRequest"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"fromNode") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ ((Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"toNode") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 18)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ ((Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"amtMsat") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 24)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x))))+instance Control.DeepSeq.NFData QueryProbabilityRequest where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_QueryProbabilityRequest'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_QueryProbabilityRequest'fromNode x__)+ (Control.DeepSeq.deepseq+ (_QueryProbabilityRequest'toNode x__)+ (Control.DeepSeq.deepseq+ (_QueryProbabilityRequest'amtMsat x__) ())))+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.probability' @:: Lens' QueryProbabilityResponse Prelude.Double@+ * 'Proto.RouterGrpc_Fields.history' @:: Lens' QueryProbabilityResponse PairData@+ * 'Proto.RouterGrpc_Fields.maybe'history' @:: Lens' QueryProbabilityResponse (Prelude.Maybe PairData)@ -}+data QueryProbabilityResponse+ = QueryProbabilityResponse'_constructor {_QueryProbabilityResponse'probability :: !Prelude.Double,+ _QueryProbabilityResponse'history :: !(Prelude.Maybe PairData),+ _QueryProbabilityResponse'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show QueryProbabilityResponse where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField QueryProbabilityResponse "probability" Prelude.Double where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _QueryProbabilityResponse'probability+ (\ x__ y__ -> x__ {_QueryProbabilityResponse'probability = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField QueryProbabilityResponse "history" PairData where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _QueryProbabilityResponse'history+ (\ x__ y__ -> x__ {_QueryProbabilityResponse'history = y__}))+ (Data.ProtoLens.maybeLens Data.ProtoLens.defMessage)+instance Data.ProtoLens.Field.HasField QueryProbabilityResponse "maybe'history" (Prelude.Maybe PairData) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _QueryProbabilityResponse'history+ (\ x__ y__ -> x__ {_QueryProbabilityResponse'history = y__}))+ Prelude.id+instance Data.ProtoLens.Message QueryProbabilityResponse where+ messageName _ = Data.Text.pack "routerrpc.QueryProbabilityResponse"+ packedMessageDescriptor _+ = "\n\+ \\CANQueryProbabilityResponse\DC2 \n\+ \\vprobability\CAN\SOH \SOH(\SOHR\vprobability\DC2-\n\+ \\ahistory\CAN\STX \SOH(\v2\DC3.routerrpc.PairDataR\ahistory"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ probability__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "probability"+ (Data.ProtoLens.ScalarField Data.ProtoLens.DoubleField ::+ Data.ProtoLens.FieldTypeDescriptor Prelude.Double)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"probability")) ::+ Data.ProtoLens.FieldDescriptor QueryProbabilityResponse+ history__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "history"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor PairData)+ (Data.ProtoLens.OptionalField+ (Data.ProtoLens.Field.field @"maybe'history")) ::+ Data.ProtoLens.FieldDescriptor QueryProbabilityResponse+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, probability__field_descriptor),+ (Data.ProtoLens.Tag 2, history__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _QueryProbabilityResponse'_unknownFields+ (\ x__ y__ -> x__ {_QueryProbabilityResponse'_unknownFields = y__})+ defMessage+ = QueryProbabilityResponse'_constructor+ {_QueryProbabilityResponse'probability = Data.ProtoLens.fieldDefault,+ _QueryProbabilityResponse'history = Prelude.Nothing,+ _QueryProbabilityResponse'_unknownFields = []}+ parseMessage+ = let+ loop ::+ QueryProbabilityResponse+ -> Data.ProtoLens.Encoding.Bytes.Parser QueryProbabilityResponse+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 9 -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Data.ProtoLens.Encoding.Bytes.wordToDouble+ Data.ProtoLens.Encoding.Bytes.getFixed64)+ "probability"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"probability") y x)+ 18+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len) Data.ProtoLens.parseMessage)+ "history"+ loop (Lens.Family2.set (Data.ProtoLens.Field.field @"history") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "QueryProbabilityResponse"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view (Data.ProtoLens.Field.field @"probability") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 9)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putFixed64+ Data.ProtoLens.Encoding.Bytes.doubleToWord+ _v))+ ((Data.Monoid.<>)+ (case+ Lens.Family2.view (Data.ProtoLens.Field.field @"maybe'history") _x+ of+ Prelude.Nothing -> Data.Monoid.mempty+ (Prelude.Just _v)+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 18)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.ProtoLens.encodeMessage+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)))+instance Control.DeepSeq.NFData QueryProbabilityResponse where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_QueryProbabilityResponse'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_QueryProbabilityResponse'probability x__)+ (Control.DeepSeq.deepseq+ (_QueryProbabilityResponse'history x__) ()))+{- | Fields :+ -}+data ResetMissionControlRequest+ = ResetMissionControlRequest'_constructor {_ResetMissionControlRequest'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show ResetMissionControlRequest where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Message ResetMissionControlRequest where+ messageName _+ = Data.Text.pack "routerrpc.ResetMissionControlRequest"+ packedMessageDescriptor _+ = "\n\+ \\SUBResetMissionControlRequest"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag = let in Data.Map.fromList []+ unknownFields+ = Lens.Family2.Unchecked.lens+ _ResetMissionControlRequest'_unknownFields+ (\ x__ y__+ -> x__ {_ResetMissionControlRequest'_unknownFields = y__})+ defMessage+ = ResetMissionControlRequest'_constructor+ {_ResetMissionControlRequest'_unknownFields = []}+ parseMessage+ = let+ loop ::+ ResetMissionControlRequest+ -> Data.ProtoLens.Encoding.Bytes.Parser ResetMissionControlRequest+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of {+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x) }+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "ResetMissionControlRequest"+ buildMessage+ = \ _x+ -> Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)+instance Control.DeepSeq.NFData ResetMissionControlRequest where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_ResetMissionControlRequest'_unknownFields x__) ()+{- | Fields :+ -}+data ResetMissionControlResponse+ = ResetMissionControlResponse'_constructor {_ResetMissionControlResponse'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show ResetMissionControlResponse where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Message ResetMissionControlResponse where+ messageName _+ = Data.Text.pack "routerrpc.ResetMissionControlResponse"+ packedMessageDescriptor _+ = "\n\+ \\ESCResetMissionControlResponse"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag = let in Data.Map.fromList []+ unknownFields+ = Lens.Family2.Unchecked.lens+ _ResetMissionControlResponse'_unknownFields+ (\ x__ y__+ -> x__ {_ResetMissionControlResponse'_unknownFields = y__})+ defMessage+ = ResetMissionControlResponse'_constructor+ {_ResetMissionControlResponse'_unknownFields = []}+ parseMessage+ = let+ loop ::+ ResetMissionControlResponse+ -> Data.ProtoLens.Encoding.Bytes.Parser ResetMissionControlResponse+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of {+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x) }+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "ResetMissionControlResponse"+ buildMessage+ = \ _x+ -> Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)+instance Control.DeepSeq.NFData ResetMissionControlResponse where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_ResetMissionControlResponse'_unknownFields x__) ()+newtype ResolveHoldForwardAction'UnrecognizedValue+ = ResolveHoldForwardAction'UnrecognizedValue Data.Int.Int32+ deriving stock (Prelude.Eq, Prelude.Ord, Prelude.Show)+data ResolveHoldForwardAction+ = SETTLE |+ FAIL |+ RESUME |+ ResolveHoldForwardAction'Unrecognized !ResolveHoldForwardAction'UnrecognizedValue+ deriving stock (Prelude.Show, Prelude.Eq, Prelude.Ord)+instance Data.ProtoLens.MessageEnum ResolveHoldForwardAction where+ maybeToEnum 0 = Prelude.Just SETTLE+ maybeToEnum 1 = Prelude.Just FAIL+ maybeToEnum 2 = Prelude.Just RESUME+ maybeToEnum k+ = Prelude.Just+ (ResolveHoldForwardAction'Unrecognized+ (ResolveHoldForwardAction'UnrecognizedValue+ (Prelude.fromIntegral k)))+ showEnum SETTLE = "SETTLE"+ showEnum FAIL = "FAIL"+ showEnum RESUME = "RESUME"+ showEnum+ (ResolveHoldForwardAction'Unrecognized (ResolveHoldForwardAction'UnrecognizedValue k))+ = Prelude.show k+ readEnum k+ | (Prelude.==) k "SETTLE" = Prelude.Just SETTLE+ | (Prelude.==) k "FAIL" = Prelude.Just FAIL+ | (Prelude.==) k "RESUME" = Prelude.Just RESUME+ | Prelude.otherwise+ = (Prelude.>>=) (Text.Read.readMaybe k) Data.ProtoLens.maybeToEnum+instance Prelude.Bounded ResolveHoldForwardAction where+ minBound = SETTLE+ maxBound = RESUME+instance Prelude.Enum ResolveHoldForwardAction where+ toEnum k__+ = Prelude.maybe+ (Prelude.error+ ((Prelude.++)+ "toEnum: unknown value for enum ResolveHoldForwardAction: "+ (Prelude.show k__)))+ Prelude.id+ (Data.ProtoLens.maybeToEnum k__)+ fromEnum SETTLE = 0+ fromEnum FAIL = 1+ fromEnum RESUME = 2+ fromEnum+ (ResolveHoldForwardAction'Unrecognized (ResolveHoldForwardAction'UnrecognizedValue k))+ = Prelude.fromIntegral k+ succ RESUME+ = Prelude.error+ "ResolveHoldForwardAction.succ: bad argument RESUME. This value would be out of bounds."+ succ SETTLE = FAIL+ succ FAIL = RESUME+ succ (ResolveHoldForwardAction'Unrecognized _)+ = Prelude.error+ "ResolveHoldForwardAction.succ: bad argument: unrecognized value"+ pred SETTLE+ = Prelude.error+ "ResolveHoldForwardAction.pred: bad argument SETTLE. This value would be out of bounds."+ pred FAIL = SETTLE+ pred RESUME = FAIL+ pred (ResolveHoldForwardAction'Unrecognized _)+ = Prelude.error+ "ResolveHoldForwardAction.pred: bad argument: unrecognized value"+ enumFrom = Data.ProtoLens.Message.Enum.messageEnumFrom+ enumFromTo = Data.ProtoLens.Message.Enum.messageEnumFromTo+ enumFromThen = Data.ProtoLens.Message.Enum.messageEnumFromThen+ enumFromThenTo = Data.ProtoLens.Message.Enum.messageEnumFromThenTo+instance Data.ProtoLens.FieldDefault ResolveHoldForwardAction where+ fieldDefault = SETTLE+instance Control.DeepSeq.NFData ResolveHoldForwardAction where+ rnf x__ = Prelude.seq x__ ()+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.dest' @:: Lens' RouteFeeRequest Data.ByteString.ByteString@+ * 'Proto.RouterGrpc_Fields.amtSat' @:: Lens' RouteFeeRequest Data.Int.Int64@ -}+data RouteFeeRequest+ = RouteFeeRequest'_constructor {_RouteFeeRequest'dest :: !Data.ByteString.ByteString,+ _RouteFeeRequest'amtSat :: !Data.Int.Int64,+ _RouteFeeRequest'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show RouteFeeRequest where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField RouteFeeRequest "dest" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _RouteFeeRequest'dest+ (\ x__ y__ -> x__ {_RouteFeeRequest'dest = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField RouteFeeRequest "amtSat" Data.Int.Int64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _RouteFeeRequest'amtSat+ (\ x__ y__ -> x__ {_RouteFeeRequest'amtSat = y__}))+ Prelude.id+instance Data.ProtoLens.Message RouteFeeRequest where+ messageName _ = Data.Text.pack "routerrpc.RouteFeeRequest"+ packedMessageDescriptor _+ = "\n\+ \\SIRouteFeeRequest\DC2\DC2\n\+ \\EOTdest\CAN\SOH \SOH(\fR\EOTdest\DC2\ETB\n\+ \\aamt_sat\CAN\STX \SOH(\ETXR\ACKamtSat"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ dest__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "dest"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"dest")) ::+ Data.ProtoLens.FieldDescriptor RouteFeeRequest+ amtSat__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "amt_sat"+ (Data.ProtoLens.ScalarField Data.ProtoLens.Int64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"amtSat")) ::+ Data.ProtoLens.FieldDescriptor RouteFeeRequest+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, dest__field_descriptor),+ (Data.ProtoLens.Tag 2, amtSat__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _RouteFeeRequest'_unknownFields+ (\ x__ y__ -> x__ {_RouteFeeRequest'_unknownFields = y__})+ defMessage+ = RouteFeeRequest'_constructor+ {_RouteFeeRequest'dest = Data.ProtoLens.fieldDefault,+ _RouteFeeRequest'amtSat = Data.ProtoLens.fieldDefault,+ _RouteFeeRequest'_unknownFields = []}+ parseMessage+ = let+ loop ::+ RouteFeeRequest+ -> Data.ProtoLens.Encoding.Bytes.Parser RouteFeeRequest+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "dest"+ loop (Lens.Family2.set (Data.ProtoLens.Field.field @"dest") y x)+ 16+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "amt_sat"+ loop (Lens.Family2.set (Data.ProtoLens.Field.field @"amtSat") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "RouteFeeRequest"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let _v = Lens.Family2.view (Data.ProtoLens.Field.field @"dest") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ ((Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"amtSat") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 16)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)))+instance Control.DeepSeq.NFData RouteFeeRequest where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_RouteFeeRequest'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_RouteFeeRequest'dest x__)+ (Control.DeepSeq.deepseq (_RouteFeeRequest'amtSat x__) ()))+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.routingFeeMsat' @:: Lens' RouteFeeResponse Data.Int.Int64@+ * 'Proto.RouterGrpc_Fields.timeLockDelay' @:: Lens' RouteFeeResponse Data.Int.Int64@ -}+data RouteFeeResponse+ = RouteFeeResponse'_constructor {_RouteFeeResponse'routingFeeMsat :: !Data.Int.Int64,+ _RouteFeeResponse'timeLockDelay :: !Data.Int.Int64,+ _RouteFeeResponse'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show RouteFeeResponse where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField RouteFeeResponse "routingFeeMsat" Data.Int.Int64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _RouteFeeResponse'routingFeeMsat+ (\ x__ y__ -> x__ {_RouteFeeResponse'routingFeeMsat = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField RouteFeeResponse "timeLockDelay" Data.Int.Int64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _RouteFeeResponse'timeLockDelay+ (\ x__ y__ -> x__ {_RouteFeeResponse'timeLockDelay = y__}))+ Prelude.id+instance Data.ProtoLens.Message RouteFeeResponse where+ messageName _ = Data.Text.pack "routerrpc.RouteFeeResponse"+ packedMessageDescriptor _+ = "\n\+ \\DLERouteFeeResponse\DC2(\n\+ \\DLErouting_fee_msat\CAN\SOH \SOH(\ETXR\SOroutingFeeMsat\DC2&\n\+ \\SItime_lock_delay\CAN\STX \SOH(\ETXR\rtimeLockDelay"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ routingFeeMsat__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "routing_fee_msat"+ (Data.ProtoLens.ScalarField Data.ProtoLens.Int64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"routingFeeMsat")) ::+ Data.ProtoLens.FieldDescriptor RouteFeeResponse+ timeLockDelay__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "time_lock_delay"+ (Data.ProtoLens.ScalarField Data.ProtoLens.Int64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"timeLockDelay")) ::+ Data.ProtoLens.FieldDescriptor RouteFeeResponse+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, routingFeeMsat__field_descriptor),+ (Data.ProtoLens.Tag 2, timeLockDelay__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _RouteFeeResponse'_unknownFields+ (\ x__ y__ -> x__ {_RouteFeeResponse'_unknownFields = y__})+ defMessage+ = RouteFeeResponse'_constructor+ {_RouteFeeResponse'routingFeeMsat = Data.ProtoLens.fieldDefault,+ _RouteFeeResponse'timeLockDelay = Data.ProtoLens.fieldDefault,+ _RouteFeeResponse'_unknownFields = []}+ parseMessage+ = let+ loop ::+ RouteFeeResponse+ -> Data.ProtoLens.Encoding.Bytes.Parser RouteFeeResponse+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 8 -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "routing_fee_msat"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"routingFeeMsat") y x)+ 16+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "time_lock_delay"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"timeLockDelay") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "RouteFeeResponse"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"routingFeeMsat") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 8)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"timeLockDelay") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 16)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)))+instance Control.DeepSeq.NFData RouteFeeResponse where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_RouteFeeResponse'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_RouteFeeResponse'routingFeeMsat x__)+ (Control.DeepSeq.deepseq (_RouteFeeResponse'timeLockDelay x__) ()))+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.dest' @:: Lens' SendPaymentRequest Data.ByteString.ByteString@+ * 'Proto.RouterGrpc_Fields.amt' @:: Lens' SendPaymentRequest Data.Int.Int64@+ * 'Proto.RouterGrpc_Fields.amtMsat' @:: Lens' SendPaymentRequest Data.Int.Int64@+ * 'Proto.RouterGrpc_Fields.paymentHash' @:: Lens' SendPaymentRequest Data.ByteString.ByteString@+ * 'Proto.RouterGrpc_Fields.finalCltvDelta' @:: Lens' SendPaymentRequest Data.Int.Int32@+ * 'Proto.RouterGrpc_Fields.paymentAddr' @:: Lens' SendPaymentRequest Data.ByteString.ByteString@+ * 'Proto.RouterGrpc_Fields.paymentRequest' @:: Lens' SendPaymentRequest Data.Text.Text@+ * 'Proto.RouterGrpc_Fields.timeoutSeconds' @:: Lens' SendPaymentRequest Data.Int.Int32@+ * 'Proto.RouterGrpc_Fields.feeLimitSat' @:: Lens' SendPaymentRequest Data.Int.Int64@+ * 'Proto.RouterGrpc_Fields.feeLimitMsat' @:: Lens' SendPaymentRequest Data.Int.Int64@+ * 'Proto.RouterGrpc_Fields.outgoingChanId' @:: Lens' SendPaymentRequest Data.Word.Word64@+ * 'Proto.RouterGrpc_Fields.outgoingChanIds' @:: Lens' SendPaymentRequest [Data.Word.Word64]@+ * 'Proto.RouterGrpc_Fields.vec'outgoingChanIds' @:: Lens' SendPaymentRequest (Data.Vector.Unboxed.Vector Data.Word.Word64)@+ * 'Proto.RouterGrpc_Fields.lastHopPubkey' @:: Lens' SendPaymentRequest Data.ByteString.ByteString@+ * 'Proto.RouterGrpc_Fields.cltvLimit' @:: Lens' SendPaymentRequest Data.Int.Int32@+ * 'Proto.RouterGrpc_Fields.routeHints' @:: Lens' SendPaymentRequest [Proto.LndGrpc.RouteHint]@+ * 'Proto.RouterGrpc_Fields.vec'routeHints' @:: Lens' SendPaymentRequest (Data.Vector.Vector Proto.LndGrpc.RouteHint)@+ * 'Proto.RouterGrpc_Fields.destCustomRecords' @:: Lens' SendPaymentRequest (Data.Map.Map Data.Word.Word64 Data.ByteString.ByteString)@+ * 'Proto.RouterGrpc_Fields.allowSelfPayment' @:: Lens' SendPaymentRequest Prelude.Bool@+ * 'Proto.RouterGrpc_Fields.destFeatures' @:: Lens' SendPaymentRequest [Proto.LndGrpc.FeatureBit]@+ * 'Proto.RouterGrpc_Fields.vec'destFeatures' @:: Lens' SendPaymentRequest (Data.Vector.Vector Proto.LndGrpc.FeatureBit)@+ * 'Proto.RouterGrpc_Fields.maxParts' @:: Lens' SendPaymentRequest Data.Word.Word32@+ * 'Proto.RouterGrpc_Fields.noInflightUpdates' @:: Lens' SendPaymentRequest Prelude.Bool@+ * 'Proto.RouterGrpc_Fields.maxShardSizeMsat' @:: Lens' SendPaymentRequest Data.Word.Word64@+ * 'Proto.RouterGrpc_Fields.amp' @:: Lens' SendPaymentRequest Prelude.Bool@ -}+data SendPaymentRequest+ = SendPaymentRequest'_constructor {_SendPaymentRequest'dest :: !Data.ByteString.ByteString,+ _SendPaymentRequest'amt :: !Data.Int.Int64,+ _SendPaymentRequest'amtMsat :: !Data.Int.Int64,+ _SendPaymentRequest'paymentHash :: !Data.ByteString.ByteString,+ _SendPaymentRequest'finalCltvDelta :: !Data.Int.Int32,+ _SendPaymentRequest'paymentAddr :: !Data.ByteString.ByteString,+ _SendPaymentRequest'paymentRequest :: !Data.Text.Text,+ _SendPaymentRequest'timeoutSeconds :: !Data.Int.Int32,+ _SendPaymentRequest'feeLimitSat :: !Data.Int.Int64,+ _SendPaymentRequest'feeLimitMsat :: !Data.Int.Int64,+ _SendPaymentRequest'outgoingChanId :: !Data.Word.Word64,+ _SendPaymentRequest'outgoingChanIds :: !(Data.Vector.Unboxed.Vector Data.Word.Word64),+ _SendPaymentRequest'lastHopPubkey :: !Data.ByteString.ByteString,+ _SendPaymentRequest'cltvLimit :: !Data.Int.Int32,+ _SendPaymentRequest'routeHints :: !(Data.Vector.Vector Proto.LndGrpc.RouteHint),+ _SendPaymentRequest'destCustomRecords :: !(Data.Map.Map Data.Word.Word64 Data.ByteString.ByteString),+ _SendPaymentRequest'allowSelfPayment :: !Prelude.Bool,+ _SendPaymentRequest'destFeatures :: !(Data.Vector.Vector Proto.LndGrpc.FeatureBit),+ _SendPaymentRequest'maxParts :: !Data.Word.Word32,+ _SendPaymentRequest'noInflightUpdates :: !Prelude.Bool,+ _SendPaymentRequest'maxShardSizeMsat :: !Data.Word.Word64,+ _SendPaymentRequest'amp :: !Prelude.Bool,+ _SendPaymentRequest'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show SendPaymentRequest where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField SendPaymentRequest "dest" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'dest+ (\ x__ y__ -> x__ {_SendPaymentRequest'dest = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField SendPaymentRequest "amt" Data.Int.Int64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'amt+ (\ x__ y__ -> x__ {_SendPaymentRequest'amt = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField SendPaymentRequest "amtMsat" Data.Int.Int64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'amtMsat+ (\ x__ y__ -> x__ {_SendPaymentRequest'amtMsat = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField SendPaymentRequest "paymentHash" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'paymentHash+ (\ x__ y__ -> x__ {_SendPaymentRequest'paymentHash = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField SendPaymentRequest "finalCltvDelta" Data.Int.Int32 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'finalCltvDelta+ (\ x__ y__ -> x__ {_SendPaymentRequest'finalCltvDelta = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField SendPaymentRequest "paymentAddr" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'paymentAddr+ (\ x__ y__ -> x__ {_SendPaymentRequest'paymentAddr = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField SendPaymentRequest "paymentRequest" Data.Text.Text where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'paymentRequest+ (\ x__ y__ -> x__ {_SendPaymentRequest'paymentRequest = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField SendPaymentRequest "timeoutSeconds" Data.Int.Int32 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'timeoutSeconds+ (\ x__ y__ -> x__ {_SendPaymentRequest'timeoutSeconds = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField SendPaymentRequest "feeLimitSat" Data.Int.Int64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'feeLimitSat+ (\ x__ y__ -> x__ {_SendPaymentRequest'feeLimitSat = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField SendPaymentRequest "feeLimitMsat" Data.Int.Int64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'feeLimitMsat+ (\ x__ y__ -> x__ {_SendPaymentRequest'feeLimitMsat = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField SendPaymentRequest "outgoingChanId" Data.Word.Word64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'outgoingChanId+ (\ x__ y__ -> x__ {_SendPaymentRequest'outgoingChanId = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField SendPaymentRequest "outgoingChanIds" [Data.Word.Word64] where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'outgoingChanIds+ (\ x__ y__ -> x__ {_SendPaymentRequest'outgoingChanIds = y__}))+ (Lens.Family2.Unchecked.lens+ Data.Vector.Generic.toList+ (\ _ y__ -> Data.Vector.Generic.fromList y__))+instance Data.ProtoLens.Field.HasField SendPaymentRequest "vec'outgoingChanIds" (Data.Vector.Unboxed.Vector Data.Word.Word64) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'outgoingChanIds+ (\ x__ y__ -> x__ {_SendPaymentRequest'outgoingChanIds = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField SendPaymentRequest "lastHopPubkey" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'lastHopPubkey+ (\ x__ y__ -> x__ {_SendPaymentRequest'lastHopPubkey = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField SendPaymentRequest "cltvLimit" Data.Int.Int32 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'cltvLimit+ (\ x__ y__ -> x__ {_SendPaymentRequest'cltvLimit = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField SendPaymentRequest "routeHints" [Proto.LndGrpc.RouteHint] where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'routeHints+ (\ x__ y__ -> x__ {_SendPaymentRequest'routeHints = y__}))+ (Lens.Family2.Unchecked.lens+ Data.Vector.Generic.toList+ (\ _ y__ -> Data.Vector.Generic.fromList y__))+instance Data.ProtoLens.Field.HasField SendPaymentRequest "vec'routeHints" (Data.Vector.Vector Proto.LndGrpc.RouteHint) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'routeHints+ (\ x__ y__ -> x__ {_SendPaymentRequest'routeHints = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField SendPaymentRequest "destCustomRecords" (Data.Map.Map Data.Word.Word64 Data.ByteString.ByteString) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'destCustomRecords+ (\ x__ y__ -> x__ {_SendPaymentRequest'destCustomRecords = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField SendPaymentRequest "allowSelfPayment" Prelude.Bool where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'allowSelfPayment+ (\ x__ y__ -> x__ {_SendPaymentRequest'allowSelfPayment = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField SendPaymentRequest "destFeatures" [Proto.LndGrpc.FeatureBit] where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'destFeatures+ (\ x__ y__ -> x__ {_SendPaymentRequest'destFeatures = y__}))+ (Lens.Family2.Unchecked.lens+ Data.Vector.Generic.toList+ (\ _ y__ -> Data.Vector.Generic.fromList y__))+instance Data.ProtoLens.Field.HasField SendPaymentRequest "vec'destFeatures" (Data.Vector.Vector Proto.LndGrpc.FeatureBit) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'destFeatures+ (\ x__ y__ -> x__ {_SendPaymentRequest'destFeatures = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField SendPaymentRequest "maxParts" Data.Word.Word32 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'maxParts+ (\ x__ y__ -> x__ {_SendPaymentRequest'maxParts = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField SendPaymentRequest "noInflightUpdates" Prelude.Bool where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'noInflightUpdates+ (\ x__ y__ -> x__ {_SendPaymentRequest'noInflightUpdates = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField SendPaymentRequest "maxShardSizeMsat" Data.Word.Word64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'maxShardSizeMsat+ (\ x__ y__ -> x__ {_SendPaymentRequest'maxShardSizeMsat = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField SendPaymentRequest "amp" Prelude.Bool where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'amp+ (\ x__ y__ -> x__ {_SendPaymentRequest'amp = y__}))+ Prelude.id+instance Data.ProtoLens.Message SendPaymentRequest where+ messageName _ = Data.Text.pack "routerrpc.SendPaymentRequest"+ packedMessageDescriptor _+ = "\n\+ \\DC2SendPaymentRequest\DC2\DC2\n\+ \\EOTdest\CAN\SOH \SOH(\fR\EOTdest\DC2\DLE\n\+ \\ETXamt\CAN\STX \SOH(\ETXR\ETXamt\DC2\EM\n\+ \\bamt_msat\CAN\f \SOH(\ETXR\aamtMsat\DC2!\n\+ \\fpayment_hash\CAN\ETX \SOH(\fR\vpaymentHash\DC2(\n\+ \\DLEfinal_cltv_delta\CAN\EOT \SOH(\ENQR\SOfinalCltvDelta\DC2!\n\+ \\fpayment_addr\CAN\DC4 \SOH(\fR\vpaymentAddr\DC2'\n\+ \\SIpayment_request\CAN\ENQ \SOH(\tR\SOpaymentRequest\DC2'\n\+ \\SItimeout_seconds\CAN\ACK \SOH(\ENQR\SOtimeoutSeconds\DC2\"\n\+ \\rfee_limit_sat\CAN\a \SOH(\ETXR\vfeeLimitSat\DC2$\n\+ \\SOfee_limit_msat\CAN\r \SOH(\ETXR\ffeeLimitMsat\DC2.\n\+ \\DLEoutgoing_chan_id\CAN\b \SOH(\EOTR\SOoutgoingChanIdB\EOT0\SOH\CAN\SOH\DC2*\n\+ \\DC1outgoing_chan_ids\CAN\DC3 \ETX(\EOTR\SIoutgoingChanIds\DC2&\n\+ \\SIlast_hop_pubkey\CAN\SO \SOH(\fR\rlastHopPubkey\DC2\GS\n\+ \\n\+ \cltv_limit\CAN\t \SOH(\ENQR\tcltvLimit\DC21\n\+ \\vroute_hints\CAN\n\+ \ \ETX(\v2\DLE.lnrpc.RouteHintR\n\+ \routeHints\DC2d\n\+ \\DC3dest_custom_records\CAN\v \ETX(\v24.routerrpc.SendPaymentRequest.DestCustomRecordsEntryR\DC1destCustomRecords\DC2,\n\+ \\DC2allow_self_payment\CAN\SI \SOH(\bR\DLEallowSelfPayment\DC26\n\+ \\rdest_features\CAN\DLE \ETX(\SO2\DC1.lnrpc.FeatureBitR\fdestFeatures\DC2\ESC\n\+ \\tmax_parts\CAN\DC1 \SOH(\rR\bmaxParts\DC2.\n\+ \\DC3no_inflight_updates\CAN\DC2 \SOH(\bR\DC1noInflightUpdates\DC2-\n\+ \\DC3max_shard_size_msat\CAN\NAK \SOH(\EOTR\DLEmaxShardSizeMsat\DC2\DLE\n\+ \\ETXamp\CAN\SYN \SOH(\bR\ETXamp\SUBD\n\+ \\SYNDestCustomRecordsEntry\DC2\DLE\n\+ \\ETXkey\CAN\SOH \SOH(\EOTR\ETXkey\DC2\DC4\n\+ \\ENQvalue\CAN\STX \SOH(\fR\ENQvalue:\STX8\SOH"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ dest__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "dest"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"dest")) ::+ Data.ProtoLens.FieldDescriptor SendPaymentRequest+ amt__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "amt"+ (Data.ProtoLens.ScalarField Data.ProtoLens.Int64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"amt")) ::+ Data.ProtoLens.FieldDescriptor SendPaymentRequest+ amtMsat__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "amt_msat"+ (Data.ProtoLens.ScalarField Data.ProtoLens.Int64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"amtMsat")) ::+ Data.ProtoLens.FieldDescriptor SendPaymentRequest+ paymentHash__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "payment_hash"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"paymentHash")) ::+ Data.ProtoLens.FieldDescriptor SendPaymentRequest+ finalCltvDelta__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "final_cltv_delta"+ (Data.ProtoLens.ScalarField Data.ProtoLens.Int32Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"finalCltvDelta")) ::+ Data.ProtoLens.FieldDescriptor SendPaymentRequest+ paymentAddr__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "payment_addr"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"paymentAddr")) ::+ Data.ProtoLens.FieldDescriptor SendPaymentRequest+ paymentRequest__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "payment_request"+ (Data.ProtoLens.ScalarField Data.ProtoLens.StringField ::+ Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"paymentRequest")) ::+ Data.ProtoLens.FieldDescriptor SendPaymentRequest+ timeoutSeconds__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "timeout_seconds"+ (Data.ProtoLens.ScalarField Data.ProtoLens.Int32Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"timeoutSeconds")) ::+ Data.ProtoLens.FieldDescriptor SendPaymentRequest+ feeLimitSat__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "fee_limit_sat"+ (Data.ProtoLens.ScalarField Data.ProtoLens.Int64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"feeLimitSat")) ::+ Data.ProtoLens.FieldDescriptor SendPaymentRequest+ feeLimitMsat__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "fee_limit_msat"+ (Data.ProtoLens.ScalarField Data.ProtoLens.Int64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Int.Int64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"feeLimitMsat")) ::+ Data.ProtoLens.FieldDescriptor SendPaymentRequest+ outgoingChanId__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "outgoing_chan_id"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"outgoingChanId")) ::+ Data.ProtoLens.FieldDescriptor SendPaymentRequest+ outgoingChanIds__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "outgoing_chan_ids"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word64)+ (Data.ProtoLens.RepeatedField+ Data.ProtoLens.Packed+ (Data.ProtoLens.Field.field @"outgoingChanIds")) ::+ Data.ProtoLens.FieldDescriptor SendPaymentRequest+ lastHopPubkey__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "last_hop_pubkey"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"lastHopPubkey")) ::+ Data.ProtoLens.FieldDescriptor SendPaymentRequest+ cltvLimit__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "cltv_limit"+ (Data.ProtoLens.ScalarField Data.ProtoLens.Int32Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"cltvLimit")) ::+ Data.ProtoLens.FieldDescriptor SendPaymentRequest+ routeHints__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "route_hints"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor Proto.LndGrpc.RouteHint)+ (Data.ProtoLens.RepeatedField+ Data.ProtoLens.Unpacked+ (Data.ProtoLens.Field.field @"routeHints")) ::+ Data.ProtoLens.FieldDescriptor SendPaymentRequest+ destCustomRecords__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "dest_custom_records"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor SendPaymentRequest'DestCustomRecordsEntry)+ (Data.ProtoLens.MapField+ (Data.ProtoLens.Field.field @"key")+ (Data.ProtoLens.Field.field @"value")+ (Data.ProtoLens.Field.field @"destCustomRecords")) ::+ Data.ProtoLens.FieldDescriptor SendPaymentRequest+ allowSelfPayment__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "allow_self_payment"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BoolField ::+ Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"allowSelfPayment")) ::+ Data.ProtoLens.FieldDescriptor SendPaymentRequest+ destFeatures__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "dest_features"+ (Data.ProtoLens.ScalarField Data.ProtoLens.EnumField ::+ Data.ProtoLens.FieldTypeDescriptor Proto.LndGrpc.FeatureBit)+ (Data.ProtoLens.RepeatedField+ Data.ProtoLens.Packed+ (Data.ProtoLens.Field.field @"destFeatures")) ::+ Data.ProtoLens.FieldDescriptor SendPaymentRequest+ maxParts__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "max_parts"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt32Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word32)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"maxParts")) ::+ Data.ProtoLens.FieldDescriptor SendPaymentRequest+ noInflightUpdates__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "no_inflight_updates"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BoolField ::+ Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"noInflightUpdates")) ::+ Data.ProtoLens.FieldDescriptor SendPaymentRequest+ maxShardSizeMsat__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "max_shard_size_msat"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"maxShardSizeMsat")) ::+ Data.ProtoLens.FieldDescriptor SendPaymentRequest+ amp__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "amp"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BoolField ::+ Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"amp")) ::+ Data.ProtoLens.FieldDescriptor SendPaymentRequest+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, dest__field_descriptor),+ (Data.ProtoLens.Tag 2, amt__field_descriptor),+ (Data.ProtoLens.Tag 12, amtMsat__field_descriptor),+ (Data.ProtoLens.Tag 3, paymentHash__field_descriptor),+ (Data.ProtoLens.Tag 4, finalCltvDelta__field_descriptor),+ (Data.ProtoLens.Tag 20, paymentAddr__field_descriptor),+ (Data.ProtoLens.Tag 5, paymentRequest__field_descriptor),+ (Data.ProtoLens.Tag 6, timeoutSeconds__field_descriptor),+ (Data.ProtoLens.Tag 7, feeLimitSat__field_descriptor),+ (Data.ProtoLens.Tag 13, feeLimitMsat__field_descriptor),+ (Data.ProtoLens.Tag 8, outgoingChanId__field_descriptor),+ (Data.ProtoLens.Tag 19, outgoingChanIds__field_descriptor),+ (Data.ProtoLens.Tag 14, lastHopPubkey__field_descriptor),+ (Data.ProtoLens.Tag 9, cltvLimit__field_descriptor),+ (Data.ProtoLens.Tag 10, routeHints__field_descriptor),+ (Data.ProtoLens.Tag 11, destCustomRecords__field_descriptor),+ (Data.ProtoLens.Tag 15, allowSelfPayment__field_descriptor),+ (Data.ProtoLens.Tag 16, destFeatures__field_descriptor),+ (Data.ProtoLens.Tag 17, maxParts__field_descriptor),+ (Data.ProtoLens.Tag 18, noInflightUpdates__field_descriptor),+ (Data.ProtoLens.Tag 21, maxShardSizeMsat__field_descriptor),+ (Data.ProtoLens.Tag 22, amp__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _SendPaymentRequest'_unknownFields+ (\ x__ y__ -> x__ {_SendPaymentRequest'_unknownFields = y__})+ defMessage+ = SendPaymentRequest'_constructor+ {_SendPaymentRequest'dest = Data.ProtoLens.fieldDefault,+ _SendPaymentRequest'amt = Data.ProtoLens.fieldDefault,+ _SendPaymentRequest'amtMsat = Data.ProtoLens.fieldDefault,+ _SendPaymentRequest'paymentHash = Data.ProtoLens.fieldDefault,+ _SendPaymentRequest'finalCltvDelta = Data.ProtoLens.fieldDefault,+ _SendPaymentRequest'paymentAddr = Data.ProtoLens.fieldDefault,+ _SendPaymentRequest'paymentRequest = Data.ProtoLens.fieldDefault,+ _SendPaymentRequest'timeoutSeconds = Data.ProtoLens.fieldDefault,+ _SendPaymentRequest'feeLimitSat = Data.ProtoLens.fieldDefault,+ _SendPaymentRequest'feeLimitMsat = Data.ProtoLens.fieldDefault,+ _SendPaymentRequest'outgoingChanId = Data.ProtoLens.fieldDefault,+ _SendPaymentRequest'outgoingChanIds = Data.Vector.Generic.empty,+ _SendPaymentRequest'lastHopPubkey = Data.ProtoLens.fieldDefault,+ _SendPaymentRequest'cltvLimit = Data.ProtoLens.fieldDefault,+ _SendPaymentRequest'routeHints = Data.Vector.Generic.empty,+ _SendPaymentRequest'destCustomRecords = Data.Map.empty,+ _SendPaymentRequest'allowSelfPayment = Data.ProtoLens.fieldDefault,+ _SendPaymentRequest'destFeatures = Data.Vector.Generic.empty,+ _SendPaymentRequest'maxParts = Data.ProtoLens.fieldDefault,+ _SendPaymentRequest'noInflightUpdates = Data.ProtoLens.fieldDefault,+ _SendPaymentRequest'maxShardSizeMsat = Data.ProtoLens.fieldDefault,+ _SendPaymentRequest'amp = Data.ProtoLens.fieldDefault,+ _SendPaymentRequest'_unknownFields = []}+ parseMessage+ = let+ loop ::+ SendPaymentRequest+ -> Data.ProtoLens.Encoding.Growing.Growing Data.Vector.Vector Data.ProtoLens.Encoding.Growing.RealWorld Proto.LndGrpc.FeatureBit+ -> Data.ProtoLens.Encoding.Growing.Growing Data.Vector.Unboxed.Vector Data.ProtoLens.Encoding.Growing.RealWorld Data.Word.Word64+ -> Data.ProtoLens.Encoding.Growing.Growing Data.Vector.Vector Data.ProtoLens.Encoding.Growing.RealWorld Proto.LndGrpc.RouteHint+ -> Data.ProtoLens.Encoding.Bytes.Parser SendPaymentRequest+ loop+ x+ mutable'destFeatures+ mutable'outgoingChanIds+ mutable'routeHints+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do frozen'destFeatures <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ (Data.ProtoLens.Encoding.Growing.unsafeFreeze+ mutable'destFeatures)+ frozen'outgoingChanIds <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ (Data.ProtoLens.Encoding.Growing.unsafeFreeze+ mutable'outgoingChanIds)+ frozen'routeHints <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ (Data.ProtoLens.Encoding.Growing.unsafeFreeze+ mutable'routeHints)+ (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields+ (\ !t -> Prelude.reverse t)+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"vec'destFeatures")+ frozen'destFeatures+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"vec'outgoingChanIds")+ frozen'outgoingChanIds+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"vec'routeHints")+ frozen'routeHints+ x))))+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "dest"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"dest") y x)+ mutable'destFeatures+ mutable'outgoingChanIds+ mutable'routeHints+ 16+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "amt"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"amt") y x)+ mutable'destFeatures+ mutable'outgoingChanIds+ mutable'routeHints+ 96+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "amt_msat"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"amtMsat") y x)+ mutable'destFeatures+ mutable'outgoingChanIds+ mutable'routeHints+ 26+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "payment_hash"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"paymentHash") y x)+ mutable'destFeatures+ mutable'outgoingChanIds+ mutable'routeHints+ 32+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "final_cltv_delta"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"finalCltvDelta") y x)+ mutable'destFeatures+ mutable'outgoingChanIds+ mutable'routeHints+ 162+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "payment_addr"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"paymentAddr") y x)+ mutable'destFeatures+ mutable'outgoingChanIds+ mutable'routeHints+ 42+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do value <- do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len)+ Data.ProtoLens.Encoding.Bytes.runEither+ (case Data.Text.Encoding.decodeUtf8' value of+ (Prelude.Left err)+ -> Prelude.Left (Prelude.show err)+ (Prelude.Right r) -> Prelude.Right r))+ "payment_request"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"paymentRequest") y x)+ mutable'destFeatures+ mutable'outgoingChanIds+ mutable'routeHints+ 48+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "timeout_seconds"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"timeoutSeconds") y x)+ mutable'destFeatures+ mutable'outgoingChanIds+ mutable'routeHints+ 56+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "fee_limit_sat"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"feeLimitSat") y x)+ mutable'destFeatures+ mutable'outgoingChanIds+ mutable'routeHints+ 104+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "fee_limit_msat"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"feeLimitMsat") y x)+ mutable'destFeatures+ mutable'outgoingChanIds+ mutable'routeHints+ 64+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ Data.ProtoLens.Encoding.Bytes.getVarInt "outgoing_chan_id"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"outgoingChanId") y x)+ mutable'destFeatures+ mutable'outgoingChanIds+ mutable'routeHints+ 152+ -> do !y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ Data.ProtoLens.Encoding.Bytes.getVarInt "outgoing_chan_ids"+ v <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ (Data.ProtoLens.Encoding.Growing.append+ mutable'outgoingChanIds y)+ loop x mutable'destFeatures v mutable'routeHints+ 154+ -> do y <- do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len)+ ((let+ ploop qs+ = do packedEnd <- Data.ProtoLens.Encoding.Bytes.atEnd+ if packedEnd then+ Prelude.return qs+ else+ do !q <- (Data.ProtoLens.Encoding.Bytes.<?>)+ Data.ProtoLens.Encoding.Bytes.getVarInt+ "outgoing_chan_ids"+ qs' <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ (Data.ProtoLens.Encoding.Growing.append+ qs q)+ ploop qs'+ in ploop)+ mutable'outgoingChanIds)+ loop x mutable'destFeatures y mutable'routeHints+ 114+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "last_hop_pubkey"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"lastHopPubkey") y x)+ mutable'destFeatures+ mutable'outgoingChanIds+ mutable'routeHints+ 72+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "cltv_limit"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"cltvLimit") y x)+ mutable'destFeatures+ mutable'outgoingChanIds+ mutable'routeHints+ 82+ -> do !y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len)+ Data.ProtoLens.parseMessage)+ "route_hints"+ v <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ (Data.ProtoLens.Encoding.Growing.append mutable'routeHints y)+ loop x mutable'destFeatures mutable'outgoingChanIds v+ 90+ -> do !(entry :: SendPaymentRequest'DestCustomRecordsEntry) <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral+ len)+ Data.ProtoLens.parseMessage)+ "dest_custom_records"+ (let+ key = Lens.Family2.view (Data.ProtoLens.Field.field @"key") entry+ value+ = Lens.Family2.view (Data.ProtoLens.Field.field @"value") entry+ in+ loop+ (Lens.Family2.over+ (Data.ProtoLens.Field.field @"destCustomRecords")+ (\ !t -> Data.Map.insert key value t)+ x)+ mutable'destFeatures+ mutable'outgoingChanIds+ mutable'routeHints)+ 120+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ ((Prelude./=) 0) Data.ProtoLens.Encoding.Bytes.getVarInt)+ "allow_self_payment"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"allowSelfPayment") y x)+ mutable'destFeatures+ mutable'outgoingChanIds+ mutable'routeHints+ 128+ -> do !y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.toEnum+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt))+ "dest_features"+ v <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ (Data.ProtoLens.Encoding.Growing.append+ mutable'destFeatures y)+ loop x v mutable'outgoingChanIds mutable'routeHints+ 130+ -> do y <- do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len)+ ((let+ ploop qs+ = do packedEnd <- Data.ProtoLens.Encoding.Bytes.atEnd+ if packedEnd then+ Prelude.return qs+ else+ do !q <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.toEnum+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt))+ "dest_features"+ qs' <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ (Data.ProtoLens.Encoding.Growing.append+ qs q)+ ploop qs'+ in ploop)+ mutable'destFeatures)+ loop x y mutable'outgoingChanIds mutable'routeHints+ 136+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "max_parts"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"maxParts") y x)+ mutable'destFeatures+ mutable'outgoingChanIds+ mutable'routeHints+ 144+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ ((Prelude./=) 0) Data.ProtoLens.Encoding.Bytes.getVarInt)+ "no_inflight_updates"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"noInflightUpdates") y x)+ mutable'destFeatures+ mutable'outgoingChanIds+ mutable'routeHints+ 168+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ Data.ProtoLens.Encoding.Bytes.getVarInt "max_shard_size_msat"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"maxShardSizeMsat") y x)+ mutable'destFeatures+ mutable'outgoingChanIds+ mutable'routeHints+ 176+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ ((Prelude./=) 0) Data.ProtoLens.Encoding.Bytes.getVarInt)+ "amp"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"amp") y x)+ mutable'destFeatures+ mutable'outgoingChanIds+ mutable'routeHints+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ mutable'destFeatures+ mutable'outgoingChanIds+ mutable'routeHints+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do mutable'destFeatures <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ Data.ProtoLens.Encoding.Growing.new+ mutable'outgoingChanIds <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ Data.ProtoLens.Encoding.Growing.new+ mutable'routeHints <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ Data.ProtoLens.Encoding.Growing.new+ loop+ Data.ProtoLens.defMessage+ mutable'destFeatures+ mutable'outgoingChanIds+ mutable'routeHints)+ "SendPaymentRequest"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let _v = Lens.Family2.view (Data.ProtoLens.Field.field @"dest") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ ((Data.Monoid.<>)+ (let _v = Lens.Family2.view (Data.ProtoLens.Field.field @"amt") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 16)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v))+ ((Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"amtMsat") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 96)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view (Data.ProtoLens.Field.field @"paymentHash") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 26)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"finalCltvDelta") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 32)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt+ Prelude.fromIntegral+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view (Data.ProtoLens.Field.field @"paymentAddr") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 162)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"paymentRequest") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 42)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral+ (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.Text.Encoding.encodeUtf8+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"timeoutSeconds") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 48)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt+ Prelude.fromIntegral+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"feeLimitSat") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 56)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt+ Prelude.fromIntegral+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"feeLimitMsat") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 104)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt+ Prelude.fromIntegral+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"outgoingChanId")+ _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 64)+ (Data.ProtoLens.Encoding.Bytes.putVarInt _v))+ ((Data.Monoid.<>)+ (let+ p = Lens.Family2.view+ (Data.ProtoLens.Field.field+ @"vec'outgoingChanIds")+ _x+ in+ if Data.Vector.Generic.null p then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 154)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral+ (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes+ bs))+ (Data.ProtoLens.Encoding.Bytes.runBuilder+ (Data.ProtoLens.Encoding.Bytes.foldMapBuilder+ Data.ProtoLens.Encoding.Bytes.putVarInt+ p))))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field+ @"lastHopPubkey")+ _x+ in+ if (Prelude.==)+ _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ 114)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral+ (Data.ByteString.length+ bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes+ bs))+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field+ @"cltvLimit")+ _x+ in+ if (Prelude.==)+ _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ 72)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt+ Prelude.fromIntegral+ _v))+ ((Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.foldMapBuilder+ (\ _v+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ 82)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral+ (Data.ByteString.length+ bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes+ bs))+ Data.ProtoLens.encodeMessage+ _v))+ (Lens.Family2.view+ (Data.ProtoLens.Field.field+ @"vec'routeHints")+ _x))+ ((Data.Monoid.<>)+ (Data.Monoid.mconcat+ (Prelude.map+ (\ _v+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ 90)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral+ (Data.ByteString.length+ bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes+ bs))+ Data.ProtoLens.encodeMessage+ (Lens.Family2.set+ (Data.ProtoLens.Field.field+ @"key")+ (Prelude.fst _v)+ (Lens.Family2.set+ (Data.ProtoLens.Field.field+ @"value")+ (Prelude.snd _v)+ (Data.ProtoLens.defMessage ::+ SendPaymentRequest'DestCustomRecordsEntry)))))+ (Data.Map.toList+ (Lens.Family2.view+ (Data.ProtoLens.Field.field+ @"destCustomRecords")+ _x))))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field+ @"allowSelfPayment")+ _x+ in+ if (Prelude.==)+ _v+ Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ 120)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt+ (\ b -> if b then 1 else 0)+ _v))+ ((Data.Monoid.<>)+ (let+ p = Lens.Family2.view+ (Data.ProtoLens.Field.field+ @"vec'destFeatures")+ _x+ in+ if Data.Vector.Generic.null+ p then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ 130)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral+ (Data.ByteString.length+ bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes+ bs))+ (Data.ProtoLens.Encoding.Bytes.runBuilder+ (Data.ProtoLens.Encoding.Bytes.foldMapBuilder+ ((Prelude..)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt+ Prelude.fromIntegral)+ Prelude.fromEnum)+ p))))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field+ @"maxParts")+ _x+ in+ if (Prelude.==)+ _v+ Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ 136)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt+ Prelude.fromIntegral+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field+ @"noInflightUpdates")+ _x+ in+ if (Prelude.==)+ _v+ Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ 144)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt+ (\ b+ -> if b then+ 1+ else+ 0)+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field+ @"maxShardSizeMsat")+ _x+ in+ if (Prelude.==)+ _v+ Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ 168)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field+ @"amp")+ _x+ in+ if (Prelude.==)+ _v+ Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ 176)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt+ (\ b+ -> if b then+ 1+ else+ 0)+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view+ Data.ProtoLens.unknownFields+ _x)))))))))))))))))))))))+instance Control.DeepSeq.NFData SendPaymentRequest where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_SendPaymentRequest'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_SendPaymentRequest'dest x__)+ (Control.DeepSeq.deepseq+ (_SendPaymentRequest'amt x__)+ (Control.DeepSeq.deepseq+ (_SendPaymentRequest'amtMsat x__)+ (Control.DeepSeq.deepseq+ (_SendPaymentRequest'paymentHash x__)+ (Control.DeepSeq.deepseq+ (_SendPaymentRequest'finalCltvDelta x__)+ (Control.DeepSeq.deepseq+ (_SendPaymentRequest'paymentAddr x__)+ (Control.DeepSeq.deepseq+ (_SendPaymentRequest'paymentRequest x__)+ (Control.DeepSeq.deepseq+ (_SendPaymentRequest'timeoutSeconds x__)+ (Control.DeepSeq.deepseq+ (_SendPaymentRequest'feeLimitSat x__)+ (Control.DeepSeq.deepseq+ (_SendPaymentRequest'feeLimitMsat x__)+ (Control.DeepSeq.deepseq+ (_SendPaymentRequest'outgoingChanId x__)+ (Control.DeepSeq.deepseq+ (_SendPaymentRequest'outgoingChanIds x__)+ (Control.DeepSeq.deepseq+ (_SendPaymentRequest'lastHopPubkey x__)+ (Control.DeepSeq.deepseq+ (_SendPaymentRequest'cltvLimit x__)+ (Control.DeepSeq.deepseq+ (_SendPaymentRequest'routeHints x__)+ (Control.DeepSeq.deepseq+ (_SendPaymentRequest'destCustomRecords+ x__)+ (Control.DeepSeq.deepseq+ (_SendPaymentRequest'allowSelfPayment+ x__)+ (Control.DeepSeq.deepseq+ (_SendPaymentRequest'destFeatures+ x__)+ (Control.DeepSeq.deepseq+ (_SendPaymentRequest'maxParts+ x__)+ (Control.DeepSeq.deepseq+ (_SendPaymentRequest'noInflightUpdates+ x__)+ (Control.DeepSeq.deepseq+ (_SendPaymentRequest'maxShardSizeMsat+ x__)+ (Control.DeepSeq.deepseq+ (_SendPaymentRequest'amp+ x__)+ ()))))))))))))))))))))))+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.key' @:: Lens' SendPaymentRequest'DestCustomRecordsEntry Data.Word.Word64@+ * 'Proto.RouterGrpc_Fields.value' @:: Lens' SendPaymentRequest'DestCustomRecordsEntry Data.ByteString.ByteString@ -}+data SendPaymentRequest'DestCustomRecordsEntry+ = SendPaymentRequest'DestCustomRecordsEntry'_constructor {_SendPaymentRequest'DestCustomRecordsEntry'key :: !Data.Word.Word64,+ _SendPaymentRequest'DestCustomRecordsEntry'value :: !Data.ByteString.ByteString,+ _SendPaymentRequest'DestCustomRecordsEntry'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show SendPaymentRequest'DestCustomRecordsEntry where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField SendPaymentRequest'DestCustomRecordsEntry "key" Data.Word.Word64 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'DestCustomRecordsEntry'key+ (\ x__ y__+ -> x__ {_SendPaymentRequest'DestCustomRecordsEntry'key = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField SendPaymentRequest'DestCustomRecordsEntry "value" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendPaymentRequest'DestCustomRecordsEntry'value+ (\ x__ y__+ -> x__ {_SendPaymentRequest'DestCustomRecordsEntry'value = y__}))+ Prelude.id+instance Data.ProtoLens.Message SendPaymentRequest'DestCustomRecordsEntry where+ messageName _+ = Data.Text.pack+ "routerrpc.SendPaymentRequest.DestCustomRecordsEntry"+ packedMessageDescriptor _+ = "\n\+ \\SYNDestCustomRecordsEntry\DC2\DLE\n\+ \\ETXkey\CAN\SOH \SOH(\EOTR\ETXkey\DC2\DC4\n\+ \\ENQvalue\CAN\STX \SOH(\fR\ENQvalue:\STX8\SOH"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ key__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "key"+ (Data.ProtoLens.ScalarField Data.ProtoLens.UInt64Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Word.Word64)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"key")) ::+ Data.ProtoLens.FieldDescriptor SendPaymentRequest'DestCustomRecordsEntry+ value__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "value"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"value")) ::+ Data.ProtoLens.FieldDescriptor SendPaymentRequest'DestCustomRecordsEntry+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, key__field_descriptor),+ (Data.ProtoLens.Tag 2, value__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _SendPaymentRequest'DestCustomRecordsEntry'_unknownFields+ (\ x__ y__+ -> x__+ {_SendPaymentRequest'DestCustomRecordsEntry'_unknownFields = y__})+ defMessage+ = SendPaymentRequest'DestCustomRecordsEntry'_constructor+ {_SendPaymentRequest'DestCustomRecordsEntry'key = Data.ProtoLens.fieldDefault,+ _SendPaymentRequest'DestCustomRecordsEntry'value = Data.ProtoLens.fieldDefault,+ _SendPaymentRequest'DestCustomRecordsEntry'_unknownFields = []}+ parseMessage+ = let+ loop ::+ SendPaymentRequest'DestCustomRecordsEntry+ -> Data.ProtoLens.Encoding.Bytes.Parser SendPaymentRequest'DestCustomRecordsEntry+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 8 -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ Data.ProtoLens.Encoding.Bytes.getVarInt "key"+ loop (Lens.Family2.set (Data.ProtoLens.Field.field @"key") y x)+ 18+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "value"+ loop (Lens.Family2.set (Data.ProtoLens.Field.field @"value") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "DestCustomRecordsEntry"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let _v = Lens.Family2.view (Data.ProtoLens.Field.field @"key") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 8)+ (Data.ProtoLens.Encoding.Bytes.putVarInt _v))+ ((Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"value") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 18)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)))+instance Control.DeepSeq.NFData SendPaymentRequest'DestCustomRecordsEntry where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_SendPaymentRequest'DestCustomRecordsEntry'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_SendPaymentRequest'DestCustomRecordsEntry'key x__)+ (Control.DeepSeq.deepseq+ (_SendPaymentRequest'DestCustomRecordsEntry'value x__) ()))+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.paymentHash' @:: Lens' SendToRouteRequest Data.ByteString.ByteString@+ * 'Proto.RouterGrpc_Fields.route' @:: Lens' SendToRouteRequest Proto.LndGrpc.Route@+ * 'Proto.RouterGrpc_Fields.maybe'route' @:: Lens' SendToRouteRequest (Prelude.Maybe Proto.LndGrpc.Route)@ -}+data SendToRouteRequest+ = SendToRouteRequest'_constructor {_SendToRouteRequest'paymentHash :: !Data.ByteString.ByteString,+ _SendToRouteRequest'route :: !(Prelude.Maybe Proto.LndGrpc.Route),+ _SendToRouteRequest'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show SendToRouteRequest where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField SendToRouteRequest "paymentHash" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendToRouteRequest'paymentHash+ (\ x__ y__ -> x__ {_SendToRouteRequest'paymentHash = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField SendToRouteRequest "route" Proto.LndGrpc.Route where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendToRouteRequest'route+ (\ x__ y__ -> x__ {_SendToRouteRequest'route = y__}))+ (Data.ProtoLens.maybeLens Data.ProtoLens.defMessage)+instance Data.ProtoLens.Field.HasField SendToRouteRequest "maybe'route" (Prelude.Maybe Proto.LndGrpc.Route) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendToRouteRequest'route+ (\ x__ y__ -> x__ {_SendToRouteRequest'route = y__}))+ Prelude.id+instance Data.ProtoLens.Message SendToRouteRequest where+ messageName _ = Data.Text.pack "routerrpc.SendToRouteRequest"+ packedMessageDescriptor _+ = "\n\+ \\DC2SendToRouteRequest\DC2!\n\+ \\fpayment_hash\CAN\SOH \SOH(\fR\vpaymentHash\DC2\"\n\+ \\ENQroute\CAN\STX \SOH(\v2\f.lnrpc.RouteR\ENQroute"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ paymentHash__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "payment_hash"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"paymentHash")) ::+ Data.ProtoLens.FieldDescriptor SendToRouteRequest+ route__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "route"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor Proto.LndGrpc.Route)+ (Data.ProtoLens.OptionalField+ (Data.ProtoLens.Field.field @"maybe'route")) ::+ Data.ProtoLens.FieldDescriptor SendToRouteRequest+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, paymentHash__field_descriptor),+ (Data.ProtoLens.Tag 2, route__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _SendToRouteRequest'_unknownFields+ (\ x__ y__ -> x__ {_SendToRouteRequest'_unknownFields = y__})+ defMessage+ = SendToRouteRequest'_constructor+ {_SendToRouteRequest'paymentHash = Data.ProtoLens.fieldDefault,+ _SendToRouteRequest'route = Prelude.Nothing,+ _SendToRouteRequest'_unknownFields = []}+ parseMessage+ = let+ loop ::+ SendToRouteRequest+ -> Data.ProtoLens.Encoding.Bytes.Parser SendToRouteRequest+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "payment_hash"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"paymentHash") y x)+ 18+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len) Data.ProtoLens.parseMessage)+ "route"+ loop (Lens.Family2.set (Data.ProtoLens.Field.field @"route") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "SendToRouteRequest"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view (Data.ProtoLens.Field.field @"paymentHash") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ ((Data.Monoid.<>)+ (case+ Lens.Family2.view (Data.ProtoLens.Field.field @"maybe'route") _x+ of+ Prelude.Nothing -> Data.Monoid.mempty+ (Prelude.Just _v)+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 18)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.ProtoLens.encodeMessage+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)))+instance Control.DeepSeq.NFData SendToRouteRequest where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_SendToRouteRequest'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_SendToRouteRequest'paymentHash x__)+ (Control.DeepSeq.deepseq (_SendToRouteRequest'route x__) ()))+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.preimage' @:: Lens' SendToRouteResponse Data.ByteString.ByteString@+ * 'Proto.RouterGrpc_Fields.failure' @:: Lens' SendToRouteResponse Proto.LndGrpc.Failure@+ * 'Proto.RouterGrpc_Fields.maybe'failure' @:: Lens' SendToRouteResponse (Prelude.Maybe Proto.LndGrpc.Failure)@ -}+data SendToRouteResponse+ = SendToRouteResponse'_constructor {_SendToRouteResponse'preimage :: !Data.ByteString.ByteString,+ _SendToRouteResponse'failure :: !(Prelude.Maybe Proto.LndGrpc.Failure),+ _SendToRouteResponse'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show SendToRouteResponse where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField SendToRouteResponse "preimage" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendToRouteResponse'preimage+ (\ x__ y__ -> x__ {_SendToRouteResponse'preimage = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField SendToRouteResponse "failure" Proto.LndGrpc.Failure where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendToRouteResponse'failure+ (\ x__ y__ -> x__ {_SendToRouteResponse'failure = y__}))+ (Data.ProtoLens.maybeLens Data.ProtoLens.defMessage)+instance Data.ProtoLens.Field.HasField SendToRouteResponse "maybe'failure" (Prelude.Maybe Proto.LndGrpc.Failure) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SendToRouteResponse'failure+ (\ x__ y__ -> x__ {_SendToRouteResponse'failure = y__}))+ Prelude.id+instance Data.ProtoLens.Message SendToRouteResponse where+ messageName _ = Data.Text.pack "routerrpc.SendToRouteResponse"+ packedMessageDescriptor _+ = "\n\+ \\DC3SendToRouteResponse\DC2\SUB\n\+ \\bpreimage\CAN\SOH \SOH(\fR\bpreimage\DC2(\n\+ \\afailure\CAN\STX \SOH(\v2\SO.lnrpc.FailureR\afailure"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ preimage__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "preimage"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"preimage")) ::+ Data.ProtoLens.FieldDescriptor SendToRouteResponse+ failure__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "failure"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor Proto.LndGrpc.Failure)+ (Data.ProtoLens.OptionalField+ (Data.ProtoLens.Field.field @"maybe'failure")) ::+ Data.ProtoLens.FieldDescriptor SendToRouteResponse+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, preimage__field_descriptor),+ (Data.ProtoLens.Tag 2, failure__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _SendToRouteResponse'_unknownFields+ (\ x__ y__ -> x__ {_SendToRouteResponse'_unknownFields = y__})+ defMessage+ = SendToRouteResponse'_constructor+ {_SendToRouteResponse'preimage = Data.ProtoLens.fieldDefault,+ _SendToRouteResponse'failure = Prelude.Nothing,+ _SendToRouteResponse'_unknownFields = []}+ parseMessage+ = let+ loop ::+ SendToRouteResponse+ -> Data.ProtoLens.Encoding.Bytes.Parser SendToRouteResponse+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "preimage"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"preimage") y x)+ 18+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len) Data.ProtoLens.parseMessage)+ "failure"+ loop (Lens.Family2.set (Data.ProtoLens.Field.field @"failure") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "SendToRouteResponse"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"preimage") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ ((Data.Monoid.<>)+ (case+ Lens.Family2.view (Data.ProtoLens.Field.field @"maybe'failure") _x+ of+ Prelude.Nothing -> Data.Monoid.mempty+ (Prelude.Just _v)+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 18)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.ProtoLens.encodeMessage+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)))+instance Control.DeepSeq.NFData SendToRouteResponse where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_SendToRouteResponse'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_SendToRouteResponse'preimage x__)+ (Control.DeepSeq.deepseq (_SendToRouteResponse'failure x__) ()))+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.config' @:: Lens' SetMissionControlConfigRequest MissionControlConfig@+ * 'Proto.RouterGrpc_Fields.maybe'config' @:: Lens' SetMissionControlConfigRequest (Prelude.Maybe MissionControlConfig)@ -}+data SetMissionControlConfigRequest+ = SetMissionControlConfigRequest'_constructor {_SetMissionControlConfigRequest'config :: !(Prelude.Maybe MissionControlConfig),+ _SetMissionControlConfigRequest'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show SetMissionControlConfigRequest where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField SetMissionControlConfigRequest "config" MissionControlConfig where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SetMissionControlConfigRequest'config+ (\ x__ y__ -> x__ {_SetMissionControlConfigRequest'config = y__}))+ (Data.ProtoLens.maybeLens Data.ProtoLens.defMessage)+instance Data.ProtoLens.Field.HasField SetMissionControlConfigRequest "maybe'config" (Prelude.Maybe MissionControlConfig) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SetMissionControlConfigRequest'config+ (\ x__ y__ -> x__ {_SetMissionControlConfigRequest'config = y__}))+ Prelude.id+instance Data.ProtoLens.Message SetMissionControlConfigRequest where+ messageName _+ = Data.Text.pack "routerrpc.SetMissionControlConfigRequest"+ packedMessageDescriptor _+ = "\n\+ \\RSSetMissionControlConfigRequest\DC27\n\+ \\ACKconfig\CAN\SOH \SOH(\v2\US.routerrpc.MissionControlConfigR\ACKconfig"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ config__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "config"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor MissionControlConfig)+ (Data.ProtoLens.OptionalField+ (Data.ProtoLens.Field.field @"maybe'config")) ::+ Data.ProtoLens.FieldDescriptor SetMissionControlConfigRequest+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, config__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _SetMissionControlConfigRequest'_unknownFields+ (\ x__ y__+ -> x__ {_SetMissionControlConfigRequest'_unknownFields = y__})+ defMessage+ = SetMissionControlConfigRequest'_constructor+ {_SetMissionControlConfigRequest'config = Prelude.Nothing,+ _SetMissionControlConfigRequest'_unknownFields = []}+ parseMessage+ = let+ loop ::+ SetMissionControlConfigRequest+ -> Data.ProtoLens.Encoding.Bytes.Parser SetMissionControlConfigRequest+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len) Data.ProtoLens.parseMessage)+ "config"+ loop (Lens.Family2.set (Data.ProtoLens.Field.field @"config") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage)+ "SetMissionControlConfigRequest"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (case+ Lens.Family2.view (Data.ProtoLens.Field.field @"maybe'config") _x+ of+ Prelude.Nothing -> Data.Monoid.mempty+ (Prelude.Just _v)+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.ProtoLens.encodeMessage+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x))+instance Control.DeepSeq.NFData SetMissionControlConfigRequest where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_SetMissionControlConfigRequest'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_SetMissionControlConfigRequest'config x__) ())+{- | Fields :+ -}+data SetMissionControlConfigResponse+ = SetMissionControlConfigResponse'_constructor {_SetMissionControlConfigResponse'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show SetMissionControlConfigResponse where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Message SetMissionControlConfigResponse where+ messageName _+ = Data.Text.pack "routerrpc.SetMissionControlConfigResponse"+ packedMessageDescriptor _+ = "\n\+ \\USSetMissionControlConfigResponse"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag = let in Data.Map.fromList []+ unknownFields+ = Lens.Family2.Unchecked.lens+ _SetMissionControlConfigResponse'_unknownFields+ (\ x__ y__+ -> x__ {_SetMissionControlConfigResponse'_unknownFields = y__})+ defMessage+ = SetMissionControlConfigResponse'_constructor+ {_SetMissionControlConfigResponse'_unknownFields = []}+ parseMessage+ = let+ loop ::+ SetMissionControlConfigResponse+ -> Data.ProtoLens.Encoding.Bytes.Parser SetMissionControlConfigResponse+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of {+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x) }+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage)+ "SetMissionControlConfigResponse"+ buildMessage+ = \ _x+ -> Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)+instance Control.DeepSeq.NFData SetMissionControlConfigResponse where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_SetMissionControlConfigResponse'_unknownFields x__) ()+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.preimage' @:: Lens' SettleEvent Data.ByteString.ByteString@ -}+data SettleEvent+ = SettleEvent'_constructor {_SettleEvent'preimage :: !Data.ByteString.ByteString,+ _SettleEvent'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show SettleEvent where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField SettleEvent "preimage" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _SettleEvent'preimage+ (\ x__ y__ -> x__ {_SettleEvent'preimage = y__}))+ Prelude.id+instance Data.ProtoLens.Message SettleEvent where+ messageName _ = Data.Text.pack "routerrpc.SettleEvent"+ packedMessageDescriptor _+ = "\n\+ \\vSettleEvent\DC2\SUB\n\+ \\bpreimage\CAN\SOH \SOH(\fR\bpreimage"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ preimage__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "preimage"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"preimage")) ::+ Data.ProtoLens.FieldDescriptor SettleEvent+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, preimage__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _SettleEvent'_unknownFields+ (\ x__ y__ -> x__ {_SettleEvent'_unknownFields = y__})+ defMessage+ = SettleEvent'_constructor+ {_SettleEvent'preimage = Data.ProtoLens.fieldDefault,+ _SettleEvent'_unknownFields = []}+ parseMessage+ = let+ loop ::+ SettleEvent -> Data.ProtoLens.Encoding.Bytes.Parser SettleEvent+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "preimage"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"preimage") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "SettleEvent"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"preimage") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x))+instance Control.DeepSeq.NFData SettleEvent where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_SettleEvent'_unknownFields x__)+ (Control.DeepSeq.deepseq (_SettleEvent'preimage x__) ())+{- | Fields :+ -}+data SubscribeHtlcEventsRequest+ = SubscribeHtlcEventsRequest'_constructor {_SubscribeHtlcEventsRequest'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show SubscribeHtlcEventsRequest where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Message SubscribeHtlcEventsRequest where+ messageName _+ = Data.Text.pack "routerrpc.SubscribeHtlcEventsRequest"+ packedMessageDescriptor _+ = "\n\+ \\SUBSubscribeHtlcEventsRequest"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag = let in Data.Map.fromList []+ unknownFields+ = Lens.Family2.Unchecked.lens+ _SubscribeHtlcEventsRequest'_unknownFields+ (\ x__ y__+ -> x__ {_SubscribeHtlcEventsRequest'_unknownFields = y__})+ defMessage+ = SubscribeHtlcEventsRequest'_constructor+ {_SubscribeHtlcEventsRequest'_unknownFields = []}+ parseMessage+ = let+ loop ::+ SubscribeHtlcEventsRequest+ -> Data.ProtoLens.Encoding.Bytes.Parser SubscribeHtlcEventsRequest+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of {+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x) }+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "SubscribeHtlcEventsRequest"+ buildMessage+ = \ _x+ -> Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)+instance Control.DeepSeq.NFData SubscribeHtlcEventsRequest where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_SubscribeHtlcEventsRequest'_unknownFields x__) ()+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.paymentHash' @:: Lens' TrackPaymentRequest Data.ByteString.ByteString@+ * 'Proto.RouterGrpc_Fields.noInflightUpdates' @:: Lens' TrackPaymentRequest Prelude.Bool@ -}+data TrackPaymentRequest+ = TrackPaymentRequest'_constructor {_TrackPaymentRequest'paymentHash :: !Data.ByteString.ByteString,+ _TrackPaymentRequest'noInflightUpdates :: !Prelude.Bool,+ _TrackPaymentRequest'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show TrackPaymentRequest where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField TrackPaymentRequest "paymentHash" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _TrackPaymentRequest'paymentHash+ (\ x__ y__ -> x__ {_TrackPaymentRequest'paymentHash = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField TrackPaymentRequest "noInflightUpdates" Prelude.Bool where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _TrackPaymentRequest'noInflightUpdates+ (\ x__ y__ -> x__ {_TrackPaymentRequest'noInflightUpdates = y__}))+ Prelude.id+instance Data.ProtoLens.Message TrackPaymentRequest where+ messageName _ = Data.Text.pack "routerrpc.TrackPaymentRequest"+ packedMessageDescriptor _+ = "\n\+ \\DC3TrackPaymentRequest\DC2!\n\+ \\fpayment_hash\CAN\SOH \SOH(\fR\vpaymentHash\DC2.\n\+ \\DC3no_inflight_updates\CAN\STX \SOH(\bR\DC1noInflightUpdates"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ paymentHash__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "payment_hash"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"paymentHash")) ::+ Data.ProtoLens.FieldDescriptor TrackPaymentRequest+ noInflightUpdates__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "no_inflight_updates"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BoolField ::+ Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"noInflightUpdates")) ::+ Data.ProtoLens.FieldDescriptor TrackPaymentRequest+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, paymentHash__field_descriptor),+ (Data.ProtoLens.Tag 2, noInflightUpdates__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _TrackPaymentRequest'_unknownFields+ (\ x__ y__ -> x__ {_TrackPaymentRequest'_unknownFields = y__})+ defMessage+ = TrackPaymentRequest'_constructor+ {_TrackPaymentRequest'paymentHash = Data.ProtoLens.fieldDefault,+ _TrackPaymentRequest'noInflightUpdates = Data.ProtoLens.fieldDefault,+ _TrackPaymentRequest'_unknownFields = []}+ parseMessage+ = let+ loop ::+ TrackPaymentRequest+ -> Data.ProtoLens.Encoding.Bytes.Parser TrackPaymentRequest+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "payment_hash"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"paymentHash") y x)+ 16+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ ((Prelude./=) 0) Data.ProtoLens.Encoding.Bytes.getVarInt)+ "no_inflight_updates"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"noInflightUpdates") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "TrackPaymentRequest"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view (Data.ProtoLens.Field.field @"paymentHash") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"noInflightUpdates") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 16)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt+ (\ b -> if b then 1 else 0)+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)))+instance Control.DeepSeq.NFData TrackPaymentRequest where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_TrackPaymentRequest'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_TrackPaymentRequest'paymentHash x__)+ (Control.DeepSeq.deepseq+ (_TrackPaymentRequest'noInflightUpdates x__) ()))+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.chanPoint' @:: Lens' UpdateChanStatusRequest Proto.LndGrpc.ChannelPoint@+ * 'Proto.RouterGrpc_Fields.maybe'chanPoint' @:: Lens' UpdateChanStatusRequest (Prelude.Maybe Proto.LndGrpc.ChannelPoint)@+ * 'Proto.RouterGrpc_Fields.action' @:: Lens' UpdateChanStatusRequest ChanStatusAction@ -}+data UpdateChanStatusRequest+ = UpdateChanStatusRequest'_constructor {_UpdateChanStatusRequest'chanPoint :: !(Prelude.Maybe Proto.LndGrpc.ChannelPoint),+ _UpdateChanStatusRequest'action :: !ChanStatusAction,+ _UpdateChanStatusRequest'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show UpdateChanStatusRequest where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField UpdateChanStatusRequest "chanPoint" Proto.LndGrpc.ChannelPoint where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _UpdateChanStatusRequest'chanPoint+ (\ x__ y__ -> x__ {_UpdateChanStatusRequest'chanPoint = y__}))+ (Data.ProtoLens.maybeLens Data.ProtoLens.defMessage)+instance Data.ProtoLens.Field.HasField UpdateChanStatusRequest "maybe'chanPoint" (Prelude.Maybe Proto.LndGrpc.ChannelPoint) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _UpdateChanStatusRequest'chanPoint+ (\ x__ y__ -> x__ {_UpdateChanStatusRequest'chanPoint = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField UpdateChanStatusRequest "action" ChanStatusAction where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _UpdateChanStatusRequest'action+ (\ x__ y__ -> x__ {_UpdateChanStatusRequest'action = y__}))+ Prelude.id+instance Data.ProtoLens.Message UpdateChanStatusRequest where+ messageName _ = Data.Text.pack "routerrpc.UpdateChanStatusRequest"+ packedMessageDescriptor _+ = "\n\+ \\ETBUpdateChanStatusRequest\DC22\n\+ \\n\+ \chan_point\CAN\SOH \SOH(\v2\DC3.lnrpc.ChannelPointR\tchanPoint\DC23\n\+ \\ACKaction\CAN\STX \SOH(\SO2\ESC.routerrpc.ChanStatusActionR\ACKaction"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ chanPoint__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "chan_point"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor Proto.LndGrpc.ChannelPoint)+ (Data.ProtoLens.OptionalField+ (Data.ProtoLens.Field.field @"maybe'chanPoint")) ::+ Data.ProtoLens.FieldDescriptor UpdateChanStatusRequest+ action__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "action"+ (Data.ProtoLens.ScalarField Data.ProtoLens.EnumField ::+ Data.ProtoLens.FieldTypeDescriptor ChanStatusAction)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional (Data.ProtoLens.Field.field @"action")) ::+ Data.ProtoLens.FieldDescriptor UpdateChanStatusRequest+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, chanPoint__field_descriptor),+ (Data.ProtoLens.Tag 2, action__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _UpdateChanStatusRequest'_unknownFields+ (\ x__ y__ -> x__ {_UpdateChanStatusRequest'_unknownFields = y__})+ defMessage+ = UpdateChanStatusRequest'_constructor+ {_UpdateChanStatusRequest'chanPoint = Prelude.Nothing,+ _UpdateChanStatusRequest'action = Data.ProtoLens.fieldDefault,+ _UpdateChanStatusRequest'_unknownFields = []}+ parseMessage+ = let+ loop ::+ UpdateChanStatusRequest+ -> Data.ProtoLens.Encoding.Bytes.Parser UpdateChanStatusRequest+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len) Data.ProtoLens.parseMessage)+ "chan_point"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"chanPoint") y x)+ 16+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.toEnum+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt))+ "action"+ loop (Lens.Family2.set (Data.ProtoLens.Field.field @"action") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "UpdateChanStatusRequest"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (case+ Lens.Family2.view+ (Data.ProtoLens.Field.field @"maybe'chanPoint") _x+ of+ Prelude.Nothing -> Data.Monoid.mempty+ (Prelude.Just _v)+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.ProtoLens.encodeMessage+ _v))+ ((Data.Monoid.<>)+ (let+ _v = Lens.Family2.view (Data.ProtoLens.Field.field @"action") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 16)+ ((Prelude..)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral)+ Prelude.fromEnum+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)))+instance Control.DeepSeq.NFData UpdateChanStatusRequest where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_UpdateChanStatusRequest'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_UpdateChanStatusRequest'chanPoint x__)+ (Control.DeepSeq.deepseq (_UpdateChanStatusRequest'action x__) ()))+{- | Fields :+ -}+data UpdateChanStatusResponse+ = UpdateChanStatusResponse'_constructor {_UpdateChanStatusResponse'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show UpdateChanStatusResponse where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Message UpdateChanStatusResponse where+ messageName _ = Data.Text.pack "routerrpc.UpdateChanStatusResponse"+ packedMessageDescriptor _+ = "\n\+ \\CANUpdateChanStatusResponse"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag = let in Data.Map.fromList []+ unknownFields+ = Lens.Family2.Unchecked.lens+ _UpdateChanStatusResponse'_unknownFields+ (\ x__ y__ -> x__ {_UpdateChanStatusResponse'_unknownFields = y__})+ defMessage+ = UpdateChanStatusResponse'_constructor+ {_UpdateChanStatusResponse'_unknownFields = []}+ parseMessage+ = let+ loop ::+ UpdateChanStatusResponse+ -> Data.ProtoLens.Encoding.Bytes.Parser UpdateChanStatusResponse+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of {+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x) }+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "UpdateChanStatusResponse"+ buildMessage+ = \ _x+ -> Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)+instance Control.DeepSeq.NFData UpdateChanStatusResponse where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_UpdateChanStatusResponse'_unknownFields x__) ()+{- | Fields :+ + * 'Proto.RouterGrpc_Fields.pairs' @:: Lens' XImportMissionControlRequest [PairHistory]@+ * 'Proto.RouterGrpc_Fields.vec'pairs' @:: Lens' XImportMissionControlRequest (Data.Vector.Vector PairHistory)@ -}+data XImportMissionControlRequest+ = XImportMissionControlRequest'_constructor {_XImportMissionControlRequest'pairs :: !(Data.Vector.Vector PairHistory),+ _XImportMissionControlRequest'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show XImportMissionControlRequest where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField XImportMissionControlRequest "pairs" [PairHistory] where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _XImportMissionControlRequest'pairs+ (\ x__ y__ -> x__ {_XImportMissionControlRequest'pairs = y__}))+ (Lens.Family2.Unchecked.lens+ Data.Vector.Generic.toList+ (\ _ y__ -> Data.Vector.Generic.fromList y__))+instance Data.ProtoLens.Field.HasField XImportMissionControlRequest "vec'pairs" (Data.Vector.Vector PairHistory) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _XImportMissionControlRequest'pairs+ (\ x__ y__ -> x__ {_XImportMissionControlRequest'pairs = y__}))+ Prelude.id+instance Data.ProtoLens.Message XImportMissionControlRequest where+ messageName _+ = Data.Text.pack "routerrpc.XImportMissionControlRequest"+ packedMessageDescriptor _+ = "\n\+ \\FSXImportMissionControlRequest\DC2,\n\+ \\ENQpairs\CAN\SOH \ETX(\v2\SYN.routerrpc.PairHistoryR\ENQpairs"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ pairs__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "pairs"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor PairHistory)+ (Data.ProtoLens.RepeatedField+ Data.ProtoLens.Unpacked (Data.ProtoLens.Field.field @"pairs")) ::+ Data.ProtoLens.FieldDescriptor XImportMissionControlRequest+ in+ Data.Map.fromList [(Data.ProtoLens.Tag 1, pairs__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _XImportMissionControlRequest'_unknownFields+ (\ x__ y__+ -> x__ {_XImportMissionControlRequest'_unknownFields = y__})+ defMessage+ = XImportMissionControlRequest'_constructor+ {_XImportMissionControlRequest'pairs = Data.Vector.Generic.empty,+ _XImportMissionControlRequest'_unknownFields = []}+ parseMessage+ = let+ loop ::+ XImportMissionControlRequest+ -> Data.ProtoLens.Encoding.Growing.Growing Data.Vector.Vector Data.ProtoLens.Encoding.Growing.RealWorld PairHistory+ -> Data.ProtoLens.Encoding.Bytes.Parser XImportMissionControlRequest+ loop x mutable'pairs+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do frozen'pairs <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ (Data.ProtoLens.Encoding.Growing.unsafeFreeze mutable'pairs)+ (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields+ (\ !t -> Prelude.reverse t)+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"vec'pairs") frozen'pairs x))+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do !y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len)+ Data.ProtoLens.parseMessage)+ "pairs"+ v <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ (Data.ProtoLens.Encoding.Growing.append mutable'pairs y)+ loop x v+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ mutable'pairs+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do mutable'pairs <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ Data.ProtoLens.Encoding.Growing.new+ loop Data.ProtoLens.defMessage mutable'pairs)+ "XImportMissionControlRequest"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.foldMapBuilder+ (\ _v+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.ProtoLens.encodeMessage+ _v))+ (Lens.Family2.view (Data.ProtoLens.Field.field @"vec'pairs") _x))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x))+instance Control.DeepSeq.NFData XImportMissionControlRequest where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_XImportMissionControlRequest'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_XImportMissionControlRequest'pairs x__) ())+{- | Fields :+ -}+data XImportMissionControlResponse+ = XImportMissionControlResponse'_constructor {_XImportMissionControlResponse'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show XImportMissionControlResponse where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Message XImportMissionControlResponse where+ messageName _+ = Data.Text.pack "routerrpc.XImportMissionControlResponse"+ packedMessageDescriptor _+ = "\n\+ \\GSXImportMissionControlResponse"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag = let in Data.Map.fromList []+ unknownFields+ = Lens.Family2.Unchecked.lens+ _XImportMissionControlResponse'_unknownFields+ (\ x__ y__+ -> x__ {_XImportMissionControlResponse'_unknownFields = y__})+ defMessage+ = XImportMissionControlResponse'_constructor+ {_XImportMissionControlResponse'_unknownFields = []}+ parseMessage+ = let+ loop ::+ XImportMissionControlResponse+ -> Data.ProtoLens.Encoding.Bytes.Parser XImportMissionControlResponse+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of {+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x) }+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "XImportMissionControlResponse"+ buildMessage+ = \ _x+ -> Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)+instance Control.DeepSeq.NFData XImportMissionControlResponse where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_XImportMissionControlResponse'_unknownFields x__) ()+data Router = Router {}+instance Data.ProtoLens.Service.Types.Service Router where+ type ServiceName Router = "Router"+ type ServicePackage Router = "routerrpc"+ type ServiceMethods Router = '["buildRoute",+ "estimateRouteFee",+ "getMissionControlConfig",+ "htlcInterceptor",+ "queryMissionControl",+ "queryProbability",+ "resetMissionControl",+ "sendPayment",+ "sendPaymentV2",+ "sendToRoute",+ "sendToRouteV2",+ "setMissionControlConfig",+ "subscribeHtlcEvents",+ "trackPayment",+ "trackPaymentV2",+ "updateChanStatus",+ "ximportMissionControl"]+instance Data.ProtoLens.Service.Types.HasMethodImpl Router "sendPaymentV2" where+ type MethodName Router "sendPaymentV2" = "SendPaymentV2"+ type MethodInput Router "sendPaymentV2" = SendPaymentRequest+ type MethodOutput Router "sendPaymentV2" = Proto.LndGrpc.Payment+ type MethodStreamingType Router "sendPaymentV2" = 'Data.ProtoLens.Service.Types.ServerStreaming+instance Data.ProtoLens.Service.Types.HasMethodImpl Router "trackPaymentV2" where+ type MethodName Router "trackPaymentV2" = "TrackPaymentV2"+ type MethodInput Router "trackPaymentV2" = TrackPaymentRequest+ type MethodOutput Router "trackPaymentV2" = Proto.LndGrpc.Payment+ type MethodStreamingType Router "trackPaymentV2" = 'Data.ProtoLens.Service.Types.ServerStreaming+instance Data.ProtoLens.Service.Types.HasMethodImpl Router "estimateRouteFee" where+ type MethodName Router "estimateRouteFee" = "EstimateRouteFee"+ type MethodInput Router "estimateRouteFee" = RouteFeeRequest+ type MethodOutput Router "estimateRouteFee" = RouteFeeResponse+ type MethodStreamingType Router "estimateRouteFee" = 'Data.ProtoLens.Service.Types.NonStreaming+instance Data.ProtoLens.Service.Types.HasMethodImpl Router "sendToRoute" where+ type MethodName Router "sendToRoute" = "SendToRoute"+ type MethodInput Router "sendToRoute" = SendToRouteRequest+ type MethodOutput Router "sendToRoute" = SendToRouteResponse+ type MethodStreamingType Router "sendToRoute" = 'Data.ProtoLens.Service.Types.NonStreaming+instance Data.ProtoLens.Service.Types.HasMethodImpl Router "sendToRouteV2" where+ type MethodName Router "sendToRouteV2" = "SendToRouteV2"+ type MethodInput Router "sendToRouteV2" = SendToRouteRequest+ type MethodOutput Router "sendToRouteV2" = Proto.LndGrpc.HTLCAttempt+ type MethodStreamingType Router "sendToRouteV2" = 'Data.ProtoLens.Service.Types.NonStreaming+instance Data.ProtoLens.Service.Types.HasMethodImpl Router "resetMissionControl" where+ type MethodName Router "resetMissionControl" = "ResetMissionControl"+ type MethodInput Router "resetMissionControl" = ResetMissionControlRequest+ type MethodOutput Router "resetMissionControl" = ResetMissionControlResponse+ type MethodStreamingType Router "resetMissionControl" = 'Data.ProtoLens.Service.Types.NonStreaming+instance Data.ProtoLens.Service.Types.HasMethodImpl Router "queryMissionControl" where+ type MethodName Router "queryMissionControl" = "QueryMissionControl"+ type MethodInput Router "queryMissionControl" = QueryMissionControlRequest+ type MethodOutput Router "queryMissionControl" = QueryMissionControlResponse+ type MethodStreamingType Router "queryMissionControl" = 'Data.ProtoLens.Service.Types.NonStreaming+instance Data.ProtoLens.Service.Types.HasMethodImpl Router "ximportMissionControl" where+ type MethodName Router "ximportMissionControl" = "XImportMissionControl"+ type MethodInput Router "ximportMissionControl" = XImportMissionControlRequest+ type MethodOutput Router "ximportMissionControl" = XImportMissionControlResponse+ type MethodStreamingType Router "ximportMissionControl" = 'Data.ProtoLens.Service.Types.NonStreaming+instance Data.ProtoLens.Service.Types.HasMethodImpl Router "getMissionControlConfig" where+ type MethodName Router "getMissionControlConfig" = "GetMissionControlConfig"+ type MethodInput Router "getMissionControlConfig" = GetMissionControlConfigRequest+ type MethodOutput Router "getMissionControlConfig" = GetMissionControlConfigResponse+ type MethodStreamingType Router "getMissionControlConfig" = 'Data.ProtoLens.Service.Types.NonStreaming+instance Data.ProtoLens.Service.Types.HasMethodImpl Router "setMissionControlConfig" where+ type MethodName Router "setMissionControlConfig" = "SetMissionControlConfig"+ type MethodInput Router "setMissionControlConfig" = SetMissionControlConfigRequest+ type MethodOutput Router "setMissionControlConfig" = SetMissionControlConfigResponse+ type MethodStreamingType Router "setMissionControlConfig" = 'Data.ProtoLens.Service.Types.NonStreaming+instance Data.ProtoLens.Service.Types.HasMethodImpl Router "queryProbability" where+ type MethodName Router "queryProbability" = "QueryProbability"+ type MethodInput Router "queryProbability" = QueryProbabilityRequest+ type MethodOutput Router "queryProbability" = QueryProbabilityResponse+ type MethodStreamingType Router "queryProbability" = 'Data.ProtoLens.Service.Types.NonStreaming+instance Data.ProtoLens.Service.Types.HasMethodImpl Router "buildRoute" where+ type MethodName Router "buildRoute" = "BuildRoute"+ type MethodInput Router "buildRoute" = BuildRouteRequest+ type MethodOutput Router "buildRoute" = BuildRouteResponse+ type MethodStreamingType Router "buildRoute" = 'Data.ProtoLens.Service.Types.NonStreaming+instance Data.ProtoLens.Service.Types.HasMethodImpl Router "subscribeHtlcEvents" where+ type MethodName Router "subscribeHtlcEvents" = "SubscribeHtlcEvents"+ type MethodInput Router "subscribeHtlcEvents" = SubscribeHtlcEventsRequest+ type MethodOutput Router "subscribeHtlcEvents" = HtlcEvent+ type MethodStreamingType Router "subscribeHtlcEvents" = 'Data.ProtoLens.Service.Types.ServerStreaming+instance Data.ProtoLens.Service.Types.HasMethodImpl Router "sendPayment" where+ type MethodName Router "sendPayment" = "SendPayment"+ type MethodInput Router "sendPayment" = SendPaymentRequest+ type MethodOutput Router "sendPayment" = PaymentStatus+ type MethodStreamingType Router "sendPayment" = 'Data.ProtoLens.Service.Types.ServerStreaming+instance Data.ProtoLens.Service.Types.HasMethodImpl Router "trackPayment" where+ type MethodName Router "trackPayment" = "TrackPayment"+ type MethodInput Router "trackPayment" = TrackPaymentRequest+ type MethodOutput Router "trackPayment" = PaymentStatus+ type MethodStreamingType Router "trackPayment" = 'Data.ProtoLens.Service.Types.ServerStreaming+instance Data.ProtoLens.Service.Types.HasMethodImpl Router "htlcInterceptor" where+ type MethodName Router "htlcInterceptor" = "HtlcInterceptor"+ type MethodInput Router "htlcInterceptor" = ForwardHtlcInterceptResponse+ type MethodOutput Router "htlcInterceptor" = ForwardHtlcInterceptRequest+ type MethodStreamingType Router "htlcInterceptor" = 'Data.ProtoLens.Service.Types.BiDiStreaming+instance Data.ProtoLens.Service.Types.HasMethodImpl Router "updateChanStatus" where+ type MethodName Router "updateChanStatus" = "UpdateChanStatus"+ type MethodInput Router "updateChanStatus" = UpdateChanStatusRequest+ type MethodOutput Router "updateChanStatus" = UpdateChanStatusResponse+ type MethodStreamingType Router "updateChanStatus" = 'Data.ProtoLens.Service.Types.NonStreaming+packedFileDescriptor :: Data.ByteString.ByteString+packedFileDescriptor+ = "\n\+ \\DC1router_grpc.proto\DC2\trouterrpc\SUB\SOlnd_grpc.proto\"\215\a\n\+ \\DC2SendPaymentRequest\DC2\DC2\n\+ \\EOTdest\CAN\SOH \SOH(\fR\EOTdest\DC2\DLE\n\+ \\ETXamt\CAN\STX \SOH(\ETXR\ETXamt\DC2\EM\n\+ \\bamt_msat\CAN\f \SOH(\ETXR\aamtMsat\DC2!\n\+ \\fpayment_hash\CAN\ETX \SOH(\fR\vpaymentHash\DC2(\n\+ \\DLEfinal_cltv_delta\CAN\EOT \SOH(\ENQR\SOfinalCltvDelta\DC2!\n\+ \\fpayment_addr\CAN\DC4 \SOH(\fR\vpaymentAddr\DC2'\n\+ \\SIpayment_request\CAN\ENQ \SOH(\tR\SOpaymentRequest\DC2'\n\+ \\SItimeout_seconds\CAN\ACK \SOH(\ENQR\SOtimeoutSeconds\DC2\"\n\+ \\rfee_limit_sat\CAN\a \SOH(\ETXR\vfeeLimitSat\DC2$\n\+ \\SOfee_limit_msat\CAN\r \SOH(\ETXR\ffeeLimitMsat\DC2.\n\+ \\DLEoutgoing_chan_id\CAN\b \SOH(\EOTR\SOoutgoingChanIdB\EOT0\SOH\CAN\SOH\DC2*\n\+ \\DC1outgoing_chan_ids\CAN\DC3 \ETX(\EOTR\SIoutgoingChanIds\DC2&\n\+ \\SIlast_hop_pubkey\CAN\SO \SOH(\fR\rlastHopPubkey\DC2\GS\n\+ \\n\+ \cltv_limit\CAN\t \SOH(\ENQR\tcltvLimit\DC21\n\+ \\vroute_hints\CAN\n\+ \ \ETX(\v2\DLE.lnrpc.RouteHintR\n\+ \routeHints\DC2d\n\+ \\DC3dest_custom_records\CAN\v \ETX(\v24.routerrpc.SendPaymentRequest.DestCustomRecordsEntryR\DC1destCustomRecords\DC2,\n\+ \\DC2allow_self_payment\CAN\SI \SOH(\bR\DLEallowSelfPayment\DC26\n\+ \\rdest_features\CAN\DLE \ETX(\SO2\DC1.lnrpc.FeatureBitR\fdestFeatures\DC2\ESC\n\+ \\tmax_parts\CAN\DC1 \SOH(\rR\bmaxParts\DC2.\n\+ \\DC3no_inflight_updates\CAN\DC2 \SOH(\bR\DC1noInflightUpdates\DC2-\n\+ \\DC3max_shard_size_msat\CAN\NAK \SOH(\EOTR\DLEmaxShardSizeMsat\DC2\DLE\n\+ \\ETXamp\CAN\SYN \SOH(\bR\ETXamp\SUBD\n\+ \\SYNDestCustomRecordsEntry\DC2\DLE\n\+ \\ETXkey\CAN\SOH \SOH(\EOTR\ETXkey\DC2\DC4\n\+ \\ENQvalue\CAN\STX \SOH(\fR\ENQvalue:\STX8\SOH\"h\n\+ \\DC3TrackPaymentRequest\DC2!\n\+ \\fpayment_hash\CAN\SOH \SOH(\fR\vpaymentHash\DC2.\n\+ \\DC3no_inflight_updates\CAN\STX \SOH(\bR\DC1noInflightUpdates\">\n\+ \\SIRouteFeeRequest\DC2\DC2\n\+ \\EOTdest\CAN\SOH \SOH(\fR\EOTdest\DC2\ETB\n\+ \\aamt_sat\CAN\STX \SOH(\ETXR\ACKamtSat\"d\n\+ \\DLERouteFeeResponse\DC2(\n\+ \\DLErouting_fee_msat\CAN\SOH \SOH(\ETXR\SOroutingFeeMsat\DC2&\n\+ \\SItime_lock_delay\CAN\STX \SOH(\ETXR\rtimeLockDelay\"[\n\+ \\DC2SendToRouteRequest\DC2!\n\+ \\fpayment_hash\CAN\SOH \SOH(\fR\vpaymentHash\DC2\"\n\+ \\ENQroute\CAN\STX \SOH(\v2\f.lnrpc.RouteR\ENQroute\"[\n\+ \\DC3SendToRouteResponse\DC2\SUB\n\+ \\bpreimage\CAN\SOH \SOH(\fR\bpreimage\DC2(\n\+ \\afailure\CAN\STX \SOH(\v2\SO.lnrpc.FailureR\afailure\"\FS\n\+ \\SUBResetMissionControlRequest\"\GS\n\+ \\ESCResetMissionControlResponse\"\FS\n\+ \\SUBQueryMissionControlRequest\"Q\n\+ \\ESCQueryMissionControlResponse\DC2,\n\+ \\ENQpairs\CAN\STX \ETX(\v2\SYN.routerrpc.PairHistoryR\ENQpairsJ\EOT\b\SOH\DLE\STX\"L\n\+ \\FSXImportMissionControlRequest\DC2,\n\+ \\ENQpairs\CAN\SOH \ETX(\v2\SYN.routerrpc.PairHistoryR\ENQpairs\"\US\n\+ \\GSXImportMissionControlResponse\"\138\SOH\n\+ \\vPairHistory\DC2\ESC\n\+ \\tnode_from\CAN\SOH \SOH(\fR\bnodeFrom\DC2\ETB\n\+ \\anode_to\CAN\STX \SOH(\fR\ACKnodeTo\DC2-\n\+ \\ahistory\CAN\a \SOH(\v2\DC3.routerrpc.PairDataR\ahistoryJ\EOT\b\ETX\DLE\EOTJ\EOT\b\EOT\DLE\ENQJ\EOT\b\ENQ\DLE\ACKJ\EOT\b\ACK\DLE\a\"\232\SOH\n\+ \\bPairData\DC2\ESC\n\+ \\tfail_time\CAN\SOH \SOH(\ETXR\bfailTime\DC2 \n\+ \\ffail_amt_sat\CAN\STX \SOH(\ETXR\n\+ \failAmtSat\DC2\"\n\+ \\rfail_amt_msat\CAN\EOT \SOH(\ETXR\vfailAmtMsat\DC2!\n\+ \\fsuccess_time\CAN\ENQ \SOH(\ETXR\vsuccessTime\DC2&\n\+ \\SIsuccess_amt_sat\CAN\ACK \SOH(\ETXR\rsuccessAmtSat\DC2(\n\+ \\DLEsuccess_amt_msat\CAN\a \SOH(\ETXR\SOsuccessAmtMsatJ\EOT\b\ETX\DLE\EOT\" \n\+ \\RSGetMissionControlConfigRequest\"Z\n\+ \\USGetMissionControlConfigResponse\DC27\n\+ \\ACKconfig\CAN\SOH \SOH(\v2\US.routerrpc.MissionControlConfigR\ACKconfig\"Y\n\+ \\RSSetMissionControlConfigRequest\DC27\n\+ \\ACKconfig\CAN\SOH \SOH(\v2\US.routerrpc.MissionControlConfigR\ACKconfig\"!\n\+ \\USSetMissionControlConfigResponse\"\128\STX\n\+ \\DC4MissionControlConfig\DC2*\n\+ \\DC1half_life_seconds\CAN\SOH \SOH(\EOTR\SIhalfLifeSeconds\DC2'\n\+ \\SIhop_probability\CAN\STX \SOH(\STXR\SOhopProbability\DC2\SYN\n\+ \\ACKweight\CAN\ETX \SOH(\STXR\ACKweight\DC26\n\+ \\ETBmaximum_payment_results\CAN\EOT \SOH(\rR\NAKmaximumPaymentResults\DC2C\n\+ \\RSminimum_failure_relax_interval\CAN\ENQ \SOH(\EOTR\ESCminimumFailureRelaxInterval\"j\n\+ \\ETBQueryProbabilityRequest\DC2\ESC\n\+ \\tfrom_node\CAN\SOH \SOH(\fR\bfromNode\DC2\ETB\n\+ \\ato_node\CAN\STX \SOH(\fR\ACKtoNode\DC2\EM\n\+ \\bamt_msat\CAN\ETX \SOH(\ETXR\aamtMsat\"k\n\+ \\CANQueryProbabilityResponse\DC2 \n\+ \\vprobability\CAN\SOH \SOH(\SOHR\vprobability\DC2-\n\+ \\ahistory\CAN\STX \SOH(\v2\DC3.routerrpc.PairDataR\ahistory\"\202\SOH\n\+ \\DC1BuildRouteRequest\DC2\EM\n\+ \\bamt_msat\CAN\SOH \SOH(\ETXR\aamtMsat\DC2(\n\+ \\DLEfinal_cltv_delta\CAN\STX \SOH(\ENQR\SOfinalCltvDelta\DC2,\n\+ \\DLEoutgoing_chan_id\CAN\ETX \SOH(\EOTR\SOoutgoingChanIdB\STX0\SOH\DC2\US\n\+ \\vhop_pubkeys\CAN\EOT \ETX(\fR\n\+ \hopPubkeys\DC2!\n\+ \\fpayment_addr\CAN\ENQ \SOH(\fR\vpaymentAddr\"8\n\+ \\DC2BuildRouteResponse\DC2\"\n\+ \\ENQroute\CAN\SOH \SOH(\v2\f.lnrpc.RouteR\ENQroute\"\FS\n\+ \\SUBSubscribeHtlcEventsRequest\"\246\EOT\n\+ \\tHtlcEvent\DC2.\n\+ \\DC3incoming_channel_id\CAN\SOH \SOH(\EOTR\DC1incomingChannelId\DC2.\n\+ \\DC3outgoing_channel_id\CAN\STX \SOH(\EOTR\DC1outgoingChannelId\DC2(\n\+ \\DLEincoming_htlc_id\CAN\ETX \SOH(\EOTR\SOincomingHtlcId\DC2(\n\+ \\DLEoutgoing_htlc_id\CAN\EOT \SOH(\EOTR\SOoutgoingHtlcId\DC2!\n\+ \\ftimestamp_ns\CAN\ENQ \SOH(\EOTR\vtimestampNs\DC2=\n\+ \\n\+ \event_type\CAN\ACK \SOH(\SO2\RS.routerrpc.HtlcEvent.EventTypeR\teventType\DC2>\n\+ \\rforward_event\CAN\a \SOH(\v2\ETB.routerrpc.ForwardEventH\NULR\fforwardEvent\DC2K\n\+ \\DC2forward_fail_event\CAN\b \SOH(\v2\ESC.routerrpc.ForwardFailEventH\NULR\DLEforwardFailEvent\DC2;\n\+ \\fsettle_event\CAN\t \SOH(\v2\SYN.routerrpc.SettleEventH\NULR\vsettleEvent\DC2B\n\+ \\SIlink_fail_event\CAN\n\+ \ \SOH(\v2\CAN.routerrpc.LinkFailEventH\NULR\rlinkFailEvent\"<\n\+ \\tEventType\DC2\v\n\+ \\aUNKNOWN\DLE\NUL\DC2\b\n\+ \\EOTSEND\DLE\SOH\DC2\v\n\+ \\aRECEIVE\DLE\STX\DC2\v\n\+ \\aFORWARD\DLE\ETXB\a\n\+ \\ENQevent\"\188\SOH\n\+ \\bHtlcInfo\DC2+\n\+ \\DC1incoming_timelock\CAN\SOH \SOH(\rR\DLEincomingTimelock\DC2+\n\+ \\DC1outgoing_timelock\CAN\STX \SOH(\rR\DLEoutgoingTimelock\DC2*\n\+ \\DC1incoming_amt_msat\CAN\ETX \SOH(\EOTR\SIincomingAmtMsat\DC2*\n\+ \\DC1outgoing_amt_msat\CAN\EOT \SOH(\EOTR\SIoutgoingAmtMsat\"7\n\+ \\fForwardEvent\DC2'\n\+ \\EOTinfo\CAN\SOH \SOH(\v2\DC3.routerrpc.HtlcInfoR\EOTinfo\"\DC2\n\+ \\DLEForwardFailEvent\")\n\+ \\vSettleEvent\DC2\SUB\n\+ \\bpreimage\CAN\SOH \SOH(\fR\bpreimage\"\223\SOH\n\+ \\rLinkFailEvent\DC2'\n\+ \\EOTinfo\CAN\SOH \SOH(\v2\DC3.routerrpc.HtlcInfoR\EOTinfo\DC2=\n\+ \\fwire_failure\CAN\STX \SOH(\SO2\SUB.lnrpc.Failure.FailureCodeR\vwireFailure\DC2?\n\+ \\SOfailure_detail\CAN\ETX \SOH(\SO2\CAN.routerrpc.FailureDetailR\rfailureDetail\DC2%\n\+ \\SOfailure_string\CAN\EOT \SOH(\tR\rfailureString\"\138\SOH\n\+ \\rPaymentStatus\DC2-\n\+ \\ENQstate\CAN\SOH \SOH(\SO2\ETB.routerrpc.PaymentStateR\ENQstate\DC2\SUB\n\+ \\bpreimage\CAN\STX \SOH(\fR\bpreimage\DC2(\n\+ \\ENQhtlcs\CAN\EOT \ETX(\v2\DC2.lnrpc.HTLCAttemptR\ENQhtlcsJ\EOT\b\ETX\DLE\EOT\">\n\+ \\n\+ \CircuitKey\DC2\ETB\n\+ \\achan_id\CAN\SOH \SOH(\EOTR\ACKchanId\DC2\ETB\n\+ \\ahtlc_id\CAN\STX \SOH(\EOTR\ACKhtlcId\"\191\EOT\n\+ \\ESCForwardHtlcInterceptRequest\DC2G\n\+ \\DC4incoming_circuit_key\CAN\SOH \SOH(\v2\NAK.routerrpc.CircuitKeyR\DC2incomingCircuitKey\DC20\n\+ \\DC4incoming_amount_msat\CAN\ENQ \SOH(\EOTR\DC2incomingAmountMsat\DC2'\n\+ \\SIincoming_expiry\CAN\ACK \SOH(\rR\SOincomingExpiry\DC2!\n\+ \\fpayment_hash\CAN\STX \SOH(\fR\vpaymentHash\DC2;\n\+ \\SUBoutgoing_requested_chan_id\CAN\a \SOH(\EOTR\ETBoutgoingRequestedChanId\DC20\n\+ \\DC4outgoing_amount_msat\CAN\ETX \SOH(\EOTR\DC2outgoingAmountMsat\DC2'\n\+ \\SIoutgoing_expiry\CAN\EOT \SOH(\rR\SOoutgoingExpiry\DC2`\n\+ \\SOcustom_records\CAN\b \ETX(\v29.routerrpc.ForwardHtlcInterceptRequest.CustomRecordsEntryR\rcustomRecords\DC2\GS\n\+ \\n\+ \onion_blob\CAN\t \SOH(\fR\tonionBlob\SUB@\n\+ \\DC2CustomRecordsEntry\DC2\DLE\n\+ \\ETXkey\CAN\SOH \SOH(\EOTR\ETXkey\DC2\DC4\n\+ \\ENQvalue\CAN\STX \SOH(\fR\ENQvalue:\STX8\SOH\"\192\SOH\n\+ \\FSForwardHtlcInterceptResponse\DC2G\n\+ \\DC4incoming_circuit_key\CAN\SOH \SOH(\v2\NAK.routerrpc.CircuitKeyR\DC2incomingCircuitKey\DC2;\n\+ \\ACKaction\CAN\STX \SOH(\SO2#.routerrpc.ResolveHoldForwardActionR\ACKaction\DC2\SUB\n\+ \\bpreimage\CAN\ETX \SOH(\fR\bpreimage\"\130\SOH\n\+ \\ETBUpdateChanStatusRequest\DC22\n\+ \\n\+ \chan_point\CAN\SOH \SOH(\v2\DC3.lnrpc.ChannelPointR\tchanPoint\DC23\n\+ \\ACKaction\CAN\STX \SOH(\SO2\ESC.routerrpc.ChanStatusActionR\ACKaction\"\SUB\n\+ \\CANUpdateChanStatusResponse*\129\EOT\n\+ \\rFailureDetail\DC2\v\n\+ \\aUNKNOWN\DLE\NUL\DC2\r\n\+ \\tNO_DETAIL\DLE\SOH\DC2\DLE\n\+ \\fONION_DECODE\DLE\STX\DC2\NAK\n\+ \\DC1LINK_NOT_ELIGIBLE\DLE\ETX\DC2\DC4\n\+ \\DLEON_CHAIN_TIMEOUT\DLE\EOT\DC2\DC4\n\+ \\DLEHTLC_EXCEEDS_MAX\DLE\ENQ\DC2\CAN\n\+ \\DC4INSUFFICIENT_BALANCE\DLE\ACK\DC2\SYN\n\+ \\DC2INCOMPLETE_FORWARD\DLE\a\DC2\DC3\n\+ \\SIHTLC_ADD_FAILED\DLE\b\DC2\NAK\n\+ \\DC1FORWARDS_DISABLED\DLE\t\DC2\DC4\n\+ \\DLEINVOICE_CANCELED\DLE\n\+ \\DC2\NAK\n\+ \\DC1INVOICE_UNDERPAID\DLE\v\DC2\ESC\n\+ \\ETBINVOICE_EXPIRY_TOO_SOON\DLE\f\DC2\DC4\n\+ \\DLEINVOICE_NOT_OPEN\DLE\r\DC2\ETB\n\+ \\DC3MPP_INVOICE_TIMEOUT\DLE\SO\DC2\DC4\n\+ \\DLEADDRESS_MISMATCH\DLE\SI\DC2\SYN\n\+ \\DC2SET_TOTAL_MISMATCH\DLE\DLE\DC2\NAK\n\+ \\DC1SET_TOTAL_TOO_LOW\DLE\DC1\DC2\DLE\n\+ \\fSET_OVERPAID\DLE\DC2\DC2\DC3\n\+ \\SIUNKNOWN_INVOICE\DLE\DC3\DC2\DC3\n\+ \\SIINVALID_KEYSEND\DLE\DC4\DC2\DC3\n\+ \\SIMPP_IN_PROGRESS\DLE\NAK\DC2\DC2\n\+ \\SOCIRCULAR_ROUTE\DLE\SYN*\174\SOH\n\+ \\fPaymentState\DC2\r\n\+ \\tIN_FLIGHT\DLE\NUL\DC2\r\n\+ \\tSUCCEEDED\DLE\SOH\DC2\DC2\n\+ \\SOFAILED_TIMEOUT\DLE\STX\DC2\DC3\n\+ \\SIFAILED_NO_ROUTE\DLE\ETX\DC2\DLE\n\+ \\fFAILED_ERROR\DLE\EOT\DC2$\n\+ \ FAILED_INCORRECT_PAYMENT_DETAILS\DLE\ENQ\DC2\US\n\+ \\ESCFAILED_INSUFFICIENT_BALANCE\DLE\ACK*<\n\+ \\CANResolveHoldForwardAction\DC2\n\+ \\n\+ \\ACKSETTLE\DLE\NUL\DC2\b\n\+ \\EOTFAIL\DLE\SOH\DC2\n\+ \\n\+ \\ACKRESUME\DLE\STX*5\n\+ \\DLEChanStatusAction\DC2\n\+ \\n\+ \\ACKENABLE\DLE\NUL\DC2\v\n\+ \\aDISABLE\DLE\SOH\DC2\b\n\+ \\EOTAUTO\DLE\STX2\241\v\n\+ \\ACKRouter\DC2@\n\+ \\rSendPaymentV2\DC2\GS.routerrpc.SendPaymentRequest\SUB\SO.lnrpc.Payment0\SOH\DC2B\n\+ \\SOTrackPaymentV2\DC2\RS.routerrpc.TrackPaymentRequest\SUB\SO.lnrpc.Payment0\SOH\DC2K\n\+ \\DLEEstimateRouteFee\DC2\SUB.routerrpc.RouteFeeRequest\SUB\ESC.routerrpc.RouteFeeResponse\DC2Q\n\+ \\vSendToRoute\DC2\GS.routerrpc.SendToRouteRequest\SUB\RS.routerrpc.SendToRouteResponse\"\ETX\136\STX\SOH\DC2B\n\+ \\rSendToRouteV2\DC2\GS.routerrpc.SendToRouteRequest\SUB\DC2.lnrpc.HTLCAttempt\DC2d\n\+ \\DC3ResetMissionControl\DC2%.routerrpc.ResetMissionControlRequest\SUB&.routerrpc.ResetMissionControlResponse\DC2d\n\+ \\DC3QueryMissionControl\DC2%.routerrpc.QueryMissionControlRequest\SUB&.routerrpc.QueryMissionControlResponse\DC2j\n\+ \\NAKXImportMissionControl\DC2'.routerrpc.XImportMissionControlRequest\SUB(.routerrpc.XImportMissionControlResponse\DC2p\n\+ \\ETBGetMissionControlConfig\DC2).routerrpc.GetMissionControlConfigRequest\SUB*.routerrpc.GetMissionControlConfigResponse\DC2p\n\+ \\ETBSetMissionControlConfig\DC2).routerrpc.SetMissionControlConfigRequest\SUB*.routerrpc.SetMissionControlConfigResponse\DC2[\n\+ \\DLEQueryProbability\DC2\".routerrpc.QueryProbabilityRequest\SUB#.routerrpc.QueryProbabilityResponse\DC2I\n\+ \\n\+ \BuildRoute\DC2\FS.routerrpc.BuildRouteRequest\SUB\GS.routerrpc.BuildRouteResponse\DC2T\n\+ \\DC3SubscribeHtlcEvents\DC2%.routerrpc.SubscribeHtlcEventsRequest\SUB\DC4.routerrpc.HtlcEvent0\SOH\DC2M\n\+ \\vSendPayment\DC2\GS.routerrpc.SendPaymentRequest\SUB\CAN.routerrpc.PaymentStatus\"\ETX\136\STX\SOH0\SOH\DC2O\n\+ \\fTrackPayment\DC2\RS.routerrpc.TrackPaymentRequest\SUB\CAN.routerrpc.PaymentStatus\"\ETX\136\STX\SOH0\SOH\DC2f\n\+ \\SIHtlcInterceptor\DC2'.routerrpc.ForwardHtlcInterceptResponse\SUB&.routerrpc.ForwardHtlcInterceptRequest(\SOH0\SOH\DC2[\n\+ \\DLEUpdateChanStatus\DC2\".routerrpc.UpdateChanStatusRequest\SUB#.routerrpc.UpdateChanStatusResponseB1Z/github.com/lightningnetwork/lnd/lnrpc/routerrpcJ\196\202\SOH\n\+ \\a\DC2\ENQ\STX\NUL\161\ACK\SOH\n\+ \\143\SOH\n\+ \\SOH\f\DC2\ETX\STX\NUL\DC22\132\SOHsource https://raw.githubusercontent.com/lightningnetwork/lnd/c733c139e95a6ef4e5f9ac88b43328ac96c333ef/lnrpc/routerrpc/router.proto\n\+ \\n\+ \\t\n\+ \\STX\ETX\NUL\DC2\ETX\EOT\NUL\CAN\n\+ \\b\n\+ \\SOH\STX\DC2\ETX\ACK\NUL\DC2\n\+ \\b\n\+ \\SOH\b\DC2\ETX\b\NULF\n\+ \\t\n\+ \\STX\b\v\DC2\ETX\b\NULF\n\+ \m\n\+ \\STX\ACK\NUL\DC2\ENQ\f\NUL\143\SOH\SOH\SUB` Router is a service that offers advanced interaction with the router\n\+ \ subsystem of the daemon.\n\+ \\n\+ \\n\+ \\n\+ \\ETX\ACK\NUL\SOH\DC2\ETX\f\b\SO\n\+ \\168\SOH\n\+ \\EOT\ACK\NUL\STX\NUL\DC2\ETX\DC2\EOTJ\SUB\154\SOH\n\+ \SendPaymentV2 attempts to route a payment described by the passed\n\+ \PaymentRequest to the final destination. The call returns a stream of\n\+ \payment updates.\n\+ \\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\NUL\SOH\DC2\ETX\DC2\b\NAK\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\NUL\STX\DC2\ETX\DC2\ETB)\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\NUL\ACK\DC2\ETX\DC24:\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\NUL\ETX\DC2\ETX\DC2;H\n\+ \f\n\+ \\EOT\ACK\NUL\STX\SOH\DC2\ETX\CAN\EOTL\SUBY\n\+ \TrackPaymentV2 returns an update stream for the payment identified by the\n\+ \payment hash.\n\+ \\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\SOH\SOH\DC2\ETX\CAN\b\SYN\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\SOH\STX\DC2\ETX\CAN\CAN+\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\SOH\ACK\DC2\ETX\CAN6<\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\SOH\ETX\DC2\ETX\CAN=J\n\+ \\145\SOH\n\+ \\EOT\ACK\NUL\STX\STX\DC2\ETX\RS\EOTF\SUB\131\SOH\n\+ \EstimateRouteFee allows callers to obtain a lower bound w.r.t how much it\n\+ \may cost to send an HTLC to the target end destination.\n\+ \\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\STX\SOH\DC2\ETX\RS\b\CAN\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\STX\STX\DC2\ETX\RS\SUB)\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\STX\ETX\DC2\ETX\RS4D\n\+ \\235\STX\n\+ \\EOT\ACK\NUL\STX\ETX\DC2\EOT'\EOT)\ENQ\SUB\220\STX\n\+ \Deprecated, use SendToRouteV2. SendToRoute attempts to make a payment via\n\+ \the specified route. This method differs from SendPayment in that it\n\+ \allows users to specify a full route manually. This can be used for\n\+ \things like rebalancing, and atomic swaps. It differs from the newer\n\+ \SendToRouteV2 in that it doesn't return the full HTLC information.\n\+ \\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\ETX\SOH\DC2\ETX'\b\DC3\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\ETX\STX\DC2\ETX'\NAK'\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\ETX\ETX\DC2\ETX'2E\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\ETX\EOT\DC2\ETX(\b!\n\+ \\r\n\+ \\ACK\ACK\NUL\STX\ETX\EOT!\DC2\ETX(\b!\n\+ \\240\SOH\n\+ \\EOT\ACK\NUL\STX\EOT\DC2\ETX1\EOTG\SUB\226\SOH\n\+ \SendToRouteV2 attempts to make a payment via the specified route. This\n\+ \method differs from SendPayment in that it allows users to specify a full\n\+ \route manually. This can be used for things like rebalancing, and atomic\n\+ \swaps.\n\+ \\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\EOT\SOH\DC2\ETX1\b\NAK\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\EOT\STX\DC2\ETX1\ETB)\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\EOT\ETX\DC2\ETX14E\n\+ \c\n\+ \\EOT\ACK\NUL\STX\ENQ\DC2\EOT7\EOT8.\SUBU\n\+ \ResetMissionControl clears all mission control state and starts with a clean\n\+ \slate.\n\+ \\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\ENQ\SOH\DC2\ETX7\b\ESC\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\ENQ\STX\DC2\ETX7\GS7\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\ENQ\ETX\DC2\ETX8\DC1,\n\+ \w\n\+ \\EOT\ACK\NUL\STX\ACK\DC2\EOT>\EOT?.\SUBi\n\+ \QueryMissionControl exposes the internal mission control state to callers.\n\+ \It is a development feature.\n\+ \\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\ACK\SOH\DC2\ETX>\b\ESC\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\ACK\STX\DC2\ETX>\GS7\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\ACK\ETX\DC2\ETX?\DC1,\n\+ \\161\STX\n\+ \\EOT\ACK\NUL\STX\a\DC2\EOTG\EOTH0\SUB\146\STX\n\+ \XImportMissionControl is an experimental API that imports the state provided\n\+ \to the internal mission control's state, using all results which are more\n\+ \recent than our existing values. These values will only be imported\n\+ \in-memory, and will not be persisted across restarts.\n\+ \\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\a\SOH\DC2\ETXG\b\GS\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\a\STX\DC2\ETXG\US;\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\a\ETX\DC2\ETXH\DC1.\n\+ \Q\n\+ \\EOT\ACK\NUL\STX\b\DC2\EOTM\EOTN2\SUBC\n\+ \GetMissionControlConfig returns mission control's current config.\n\+ \\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\b\SOH\DC2\ETXM\b\US\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\b\STX\DC2\ETXM!?\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\b\ETX\DC2\ETXN\DC10\n\+ \k\n\+ \\EOT\ACK\NUL\STX\t\DC2\EOTT\EOTU2\SUB]\n\+ \SetMissionControlConfig will set mission control's config, if the config\n\+ \provided is valid.\n\+ \\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\t\SOH\DC2\ETXT\b\US\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\t\STX\DC2\ETXT!?\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\t\ETX\DC2\ETXU\DC10\n\+ \s\n\+ \\EOT\ACK\NUL\STX\n\+ \\DC2\EOT[\EOT\\+\SUBe\n\+ \QueryProbability returns the current success probability estimate for a\n\+ \given node pair and amount.\n\+ \\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\n\+ \\SOH\DC2\ETX[\b\CAN\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\n\+ \\STX\DC2\ETX[\SUB1\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\n\+ \\ETX\DC2\ETX\\\DC1)\n\+ \\206\SOH\n\+ \\EOT\ACK\NUL\STX\v\DC2\ETXc\EOTD\SUB\192\SOH\n\+ \BuildRoute builds a fully specified route based on a list of hop public\n\+ \keys. It retrieves the relevant channel policies from the graph in order to\n\+ \calculate the correct fees and time locks.\n\+ \\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\v\SOH\DC2\ETXc\b\DC2\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\v\STX\DC2\ETXc\DC4%\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\v\ETX\DC2\ETXc0B\n\+ \\138\SOH\n\+ \\EOT\ACK\NUL\STX\f\DC2\EOTi\EOTj#\SUB|\n\+ \SubscribeHtlcEvents creates a uni-directional stream from the server to\n\+ \the client which delivers a stream of htlc events.\n\+ \\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\f\SOH\DC2\ETXi\b\ESC\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\f\STX\DC2\ETXi\GS7\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\f\ACK\DC2\ETXj\DC1\ETB\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\f\ETX\DC2\ETXj\CAN!\n\+ \\205\SOH\n\+ \\EOT\ACK\NUL\STX\r\DC2\EOTq\EOTs\ENQ\SUB\190\SOH\n\+ \Deprecated, use SendPaymentV2. SendPayment attempts to route a payment\n\+ \described by the passed PaymentRequest to the final destination. The call\n\+ \returns a stream of payment status updates.\n\+ \\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\r\SOH\DC2\ETXq\b\DC3\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\r\STX\DC2\ETXq\NAK'\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\r\ACK\DC2\ETXq28\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\r\ETX\DC2\ETXq9F\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\r\EOT\DC2\ETXr\b!\n\+ \\r\n\+ \\ACK\ACK\NUL\STX\r\EOT!\DC2\ETXr\b!\n\+ \\133\SOH\n\+ \\EOT\ACK\NUL\STX\SO\DC2\EOTy\EOT{\ENQ\SUBw\n\+ \Deprecated, use TrackPaymentV2. TrackPayment returns an update stream for\n\+ \the payment identified by the payment hash.\n\+ \\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\SO\SOH\DC2\ETXy\b\DC4\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\SO\STX\DC2\ETXy\SYN)\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\SO\ACK\DC2\ETXy4:\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\SO\ETX\DC2\ETXy;H\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\SO\EOT\DC2\ETXz\b!\n\+ \\r\n\+ \\ACK\ACK\NUL\STX\SO\EOT!\DC2\ETXz\b!\n\+ \\221\STX\n\+ \\EOT\ACK\NUL\STX\SI\DC2\ACK\132\SOH\EOT\133\SOH5\SUB\204\STX*\n\+ \HtlcInterceptor dispatches a bi-directional streaming RPC in which\n\+ \Forwarded HTLC requests are sent to the client and the client responds with\n\+ \a boolean that tells LND if this htlc should be intercepted.\n\+ \In case of interception, the htlc can be either settled, cancelled or\n\+ \resumed later by using the ResolveHoldForward endpoint.\n\+ \\n\+ \\r\n\+ \\ENQ\ACK\NUL\STX\SI\SOH\DC2\EOT\132\SOH\b\ETB\n\+ \\r\n\+ \\ENQ\ACK\NUL\STX\SI\ENQ\DC2\EOT\132\SOH\EM\US\n\+ \\r\n\+ \\ENQ\ACK\NUL\STX\SI\STX\DC2\EOT\132\SOH <\n\+ \\r\n\+ \\ENQ\ACK\NUL\STX\SI\ACK\DC2\EOT\133\SOH\DC1\ETB\n\+ \\r\n\+ \\ENQ\ACK\NUL\STX\SI\ETX\DC2\EOT\133\SOH\CAN3\n\+ \\244\SOH\n\+ \\EOT\ACK\NUL\STX\DLE\DC2\ACK\141\SOH\EOT\142\SOH+\SUB\227\SOH\n\+ \UpdateChanStatus attempts to manually set the state of a channel\n\+ \(enabled, disabled, or auto). A manual \"disable\" request will cause the\n\+ \channel to stay disabled until a subsequent manual request of either\n\+ \\"enable\" or \"auto\".\n\+ \\n\+ \\r\n\+ \\ENQ\ACK\NUL\STX\DLE\SOH\DC2\EOT\141\SOH\b\CAN\n\+ \\r\n\+ \\ENQ\ACK\NUL\STX\DLE\STX\DC2\EOT\141\SOH\SUB1\n\+ \\r\n\+ \\ENQ\ACK\NUL\STX\DLE\ETX\DC2\EOT\142\SOH\DC1)\n\+ \\f\n\+ \\STX\EOT\NUL\DC2\ACK\145\SOH\NUL\160\STX\SOH\n\+ \\v\n\+ \\ETX\EOT\NUL\SOH\DC2\EOT\145\SOH\b\SUB\n\+ \<\n\+ \\EOT\EOT\NUL\STX\NUL\DC2\EOT\147\SOH\EOT\DC3\SUB. The identity pubkey of the payment recipient\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\NUL\STX\NUL\EOT\DC2\ACK\147\SOH\EOT\145\SOH\FS\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\NUL\ENQ\DC2\EOT\147\SOH\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\NUL\SOH\DC2\EOT\147\SOH\n\+ \\SO\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\NUL\ETX\DC2\EOT\147\SOH\DC1\DC2\n\+ \`\n\+ \\EOT\EOT\NUL\STX\SOH\DC2\EOT\154\SOH\EOT\DC2\SUBR\n\+ \Number of satoshis to send.\n\+ \\n\+ \The fields amt and amt_msat are mutually exclusive.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\NUL\STX\SOH\EOT\DC2\ACK\154\SOH\EOT\147\SOH\DC3\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\SOH\ENQ\DC2\EOT\154\SOH\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\SOH\SOH\DC2\EOT\154\SOH\n\+ \\r\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\SOH\ETX\DC2\EOT\154\SOH\DLE\DC1\n\+ \e\n\+ \\EOT\EOT\NUL\STX\STX\DC2\EOT\161\SOH\EOT\CAN\SUBW\n\+ \Number of millisatoshis to send.\n\+ \\n\+ \The fields amt and amt_msat are mutually exclusive.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\NUL\STX\STX\EOT\DC2\ACK\161\SOH\EOT\154\SOH\DC2\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\STX\ENQ\DC2\EOT\161\SOH\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\STX\SOH\DC2\EOT\161\SOH\n\+ \\DC2\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\STX\ETX\DC2\EOT\161\SOH\NAK\ETB\n\+ \9\n\+ \\EOT\EOT\NUL\STX\ETX\DC2\EOT\164\SOH\EOT\ESC\SUB+ The hash to use within the payment's HTLC\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\NUL\STX\ETX\EOT\DC2\ACK\164\SOH\EOT\161\SOH\CAN\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\ETX\ENQ\DC2\EOT\164\SOH\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\ETX\SOH\DC2\EOT\164\SOH\n\+ \\SYN\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\ETX\ETX\DC2\EOT\164\SOH\EM\SUB\n\+ \q\n\+ \\EOT\EOT\NUL\STX\EOT\DC2\EOT\170\SOH\EOT\US\SUBc\n\+ \The CLTV delta from the current height that should be used to set the\n\+ \timelock for the final hop.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\NUL\STX\EOT\EOT\DC2\ACK\170\SOH\EOT\164\SOH\ESC\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\EOT\ENQ\DC2\EOT\170\SOH\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\EOT\SOH\DC2\EOT\170\SOH\n\+ \\SUB\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\EOT\ETX\DC2\EOT\170\SOH\GS\RS\n\+ \Y\n\+ \\EOT\EOT\NUL\STX\ENQ\DC2\EOT\173\SOH\EOT\FS\SUBK An optional payment addr to be included within the last hop of the route.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\NUL\STX\ENQ\EOT\DC2\ACK\173\SOH\EOT\170\SOH\US\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\ENQ\ENQ\DC2\EOT\173\SOH\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\ENQ\SOH\DC2\EOT\173\SOH\n\+ \\SYN\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\ENQ\ETX\DC2\EOT\173\SOH\EM\ESC\n\+ \\137\ETX\n\+ \\EOT\EOT\NUL\STX\ACK\DC2\EOT\182\SOH\EOT\US\SUB\250\STX\n\+ \A bare-bones invoice for a payment within the Lightning Network. With the\n\+ \details of the invoice, the sender has all the data necessary to send a\n\+ \payment to the recipient. The amount in the payment request may be zero. In\n\+ \that case it is required to set the amt field as well. If no payment request\n\+ \is specified, the following fields are required: dest, amt and payment_hash.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\NUL\STX\ACK\EOT\DC2\ACK\182\SOH\EOT\173\SOH\FS\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\ACK\ENQ\DC2\EOT\182\SOH\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\ACK\SOH\DC2\EOT\182\SOH\v\SUB\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\ACK\ETX\DC2\EOT\182\SOH\GS\RS\n\+ \\130\STX\n\+ \\EOT\EOT\NUL\STX\a\DC2\EOT\190\SOH\EOT\RS\SUB\243\SOH\n\+ \An upper limit on the amount of time we should spend when attempting to\n\+ \fulfill the payment. This is expressed in seconds. If we cannot make a\n\+ \successful payment within this time frame, an error will be returned.\n\+ \This field must be non-zero.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\NUL\STX\a\EOT\DC2\ACK\190\SOH\EOT\182\SOH\US\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\a\ENQ\DC2\EOT\190\SOH\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\a\SOH\DC2\EOT\190\SOH\n\+ \\EM\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\a\ETX\DC2\EOT\190\SOH\FS\GS\n\+ \\129\ETX\n\+ \\EOT\EOT\NUL\STX\b\DC2\EOT\200\SOH\EOT\FS\SUB\242\STX\n\+ \The maximum number of satoshis that will be paid as a fee of the payment.\n\+ \If this field is left to the default value of 0, only zero-fee routes will\n\+ \be considered. This usually means single hop routes connecting directly to\n\+ \the destination. To send the payment without a fee limit, use max int here.\n\+ \\n\+ \The fields fee_limit_sat and fee_limit_msat are mutually exclusive.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\NUL\STX\b\EOT\DC2\ACK\200\SOH\EOT\190\SOH\RS\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\b\ENQ\DC2\EOT\200\SOH\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\b\SOH\DC2\EOT\200\SOH\n\+ \\ETB\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\b\ETX\DC2\EOT\200\SOH\SUB\ESC\n\+ \\134\ETX\n\+ \\EOT\EOT\NUL\STX\t\DC2\EOT\211\SOH\EOT\RS\SUB\247\STX\n\+ \The maximum number of millisatoshis that will be paid as a fee of the\n\+ \payment. If this field is left to the default value of 0, only zero-fee\n\+ \routes will be considered. This usually means single hop routes connecting\n\+ \directly to the destination. To send the payment without a fee limit, use\n\+ \max int here.\n\+ \\n\+ \The fields fee_limit_sat and fee_limit_msat are mutually exclusive.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\NUL\STX\t\EOT\DC2\ACK\211\SOH\EOT\200\SOH\FS\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\t\ENQ\DC2\EOT\211\SOH\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\t\SOH\DC2\EOT\211\SOH\n\+ \\CAN\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\t\ETX\DC2\EOT\211\SOH\ESC\GS\n\+ \\187\SOH\n\+ \\EOT\EOT\NUL\STX\n\+ \\DC2\EOT\218\SOH\EOTH\SUB\172\SOH\n\+ \Deprecated, use outgoing_chan_ids. The channel id of the channel that must\n\+ \be taken to the first hop. If zero, any channel may be used (unless\n\+ \outgoing_chan_ids are set).\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\NUL\STX\n\+ \\EOT\DC2\ACK\218\SOH\EOT\211\SOH\RS\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\n\+ \\ENQ\DC2\EOT\218\SOH\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\n\+ \\SOH\DC2\EOT\218\SOH\v\ESC\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\n\+ \\ETX\DC2\EOT\218\SOH\RS\US\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\n\+ \\b\DC2\EOT\218\SOH G\n\+ \\SO\n\+ \\ACK\EOT\NUL\STX\n\+ \\b\ACK\DC2\EOT\218\SOH!3\n\+ \\SO\n\+ \\ACK\EOT\NUL\STX\n\+ \\b\ETX\DC2\EOT\218\SOH5F\n\+ \q\n\+ \\EOT\EOT\NUL\STX\v\DC2\EOT\224\SOH\EOT+\SUBc\n\+ \The channel ids of the channels are allowed for the first hop. If empty,\n\+ \any channel may be used.\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\v\EOT\DC2\EOT\224\SOH\EOT\f\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\v\ENQ\DC2\EOT\224\SOH\r\DC3\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\v\SOH\DC2\EOT\224\SOH\DC4%\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\v\ETX\DC2\EOT\224\SOH(*\n\+ \W\n\+ \\EOT\EOT\NUL\STX\f\DC2\EOT\229\SOH\EOT\US\SUBI\n\+ \The pubkey of the last hop of the route. If empty, any hop may be used.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\NUL\STX\f\EOT\DC2\ACK\229\SOH\EOT\224\SOH+\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\f\ENQ\DC2\EOT\229\SOH\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\f\SOH\DC2\EOT\229\SOH\n\+ \\EM\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\f\ETX\DC2\EOT\229\SOH\FS\RS\n\+ \\185\SOH\n\+ \\EOT\EOT\NUL\STX\r\DC2\EOT\236\SOH\EOT\EM\SUB\170\SOH\n\+ \An optional maximum total time lock for the route. This should not exceed\n\+ \lnd's `--max-cltv-expiry` setting. If zero, then the value of\n\+ \`--max-cltv-expiry` is enforced.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\NUL\STX\r\EOT\DC2\ACK\236\SOH\EOT\229\SOH\US\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\r\ENQ\DC2\EOT\236\SOH\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\r\SOH\DC2\EOT\236\SOH\n\+ \\DC4\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\r\ETX\DC2\EOT\236\SOH\ETB\CAN\n\+ \W\n\+ \\EOT\EOT\NUL\STX\SO\DC2\EOT\241\SOH\EOT.\SUBI\n\+ \Optional route hints to reach the destination through private channels.\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\SO\EOT\DC2\EOT\241\SOH\EOT\f\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\SO\ACK\DC2\EOT\241\SOH\r\FS\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\SO\SOH\DC2\EOT\241\SOH\GS(\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\SO\ETX\DC2\EOT\241\SOH+-\n\+ \\204\STX\n\+ \\EOT\EOT\NUL\STX\SI\DC2\EOT\250\SOH\EOT0\SUB\189\STX\n\+ \An optional field that can be used to pass an arbitrary set of TLV records\n\+ \to a peer which understands the new records. This can be used to pass\n\+ \application specific data during the payment attempt. Record types are\n\+ \required to be in the custom range >= 65536. When using REST, the values\n\+ \must be encoded as base64.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\NUL\STX\SI\EOT\DC2\ACK\250\SOH\EOT\241\SOH.\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\SI\ACK\DC2\EOT\250\SOH\EOT\SYN\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\SI\SOH\DC2\EOT\250\SOH\ETB*\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\SI\ETX\DC2\EOT\250\SOH-/\n\+ \@\n\+ \\EOT\EOT\NUL\STX\DLE\DC2\EOT\253\SOH\EOT!\SUB2 If set, circular payments to self are permitted.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\NUL\STX\DLE\EOT\DC2\ACK\253\SOH\EOT\250\SOH0\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\DLE\ENQ\DC2\EOT\253\SOH\EOT\b\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\DLE\SOH\DC2\EOT\253\SOH\t\ESC\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\DLE\ETX\DC2\EOT\253\SOH\RS \n\+ \\195\STX\n\+ \\EOT\EOT\NUL\STX\DC1\DC2\EOT\134\STX\EOT1\SUB\180\STX\n\+ \Features assumed to be supported by the final node. All transitive feature\n\+ \dependencies must also be set properly. For a given feature bit pair, either\n\+ \optional or remote may be set, but not both. If this field is nil or empty,\n\+ \the router will try to load destination features from the graph as a\n\+ \fallback.\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\DC1\EOT\DC2\EOT\134\STX\EOT\f\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\DC1\ACK\DC2\EOT\134\STX\r\GS\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\DC1\SOH\DC2\EOT\134\STX\RS+\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\DC1\ETX\DC2\EOT\134\STX.0\n\+ \c\n\+ \\EOT\EOT\NUL\STX\DC2\DC2\EOT\140\STX\EOT\SUB\SUBU\n\+ \The maximum number of partial payments that may be use to complete the full\n\+ \amount.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\NUL\STX\DC2\EOT\DC2\ACK\140\STX\EOT\134\STX1\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\DC2\ENQ\DC2\EOT\140\STX\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\DC2\SOH\DC2\EOT\140\STX\v\DC4\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\DC2\ETX\DC2\EOT\140\STX\ETB\EM\n\+ \\151\SOH\n\+ \\EOT\EOT\NUL\STX\DC3\DC2\EOT\146\STX\EOT\"\SUB\136\SOH\n\+ \If set, only the final payment update is streamed back. Intermediate updates\n\+ \that show which htlcs are still in flight are suppressed.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\NUL\STX\DC3\EOT\DC2\ACK\146\STX\EOT\140\STX\SUB\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\DC3\ENQ\DC2\EOT\146\STX\EOT\b\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\DC3\SOH\DC2\EOT\146\STX\t\FS\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\DC3\ETX\DC2\EOT\146\STX\US!\n\+ \\141\STX\n\+ \\EOT\EOT\NUL\STX\DC4\DC2\EOT\154\STX\EOT$\SUB\254\SOH\n\+ \The largest payment split that should be attempted when making a payment if\n\+ \splitting is necessary. Setting this value will effectively cause lnd to\n\+ \split more aggressively, vs only when it thinks it needs to. Note that this\n\+ \value is in milli-satoshis.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\NUL\STX\DC4\EOT\DC2\ACK\154\STX\EOT\146\STX\"\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\DC4\ENQ\DC2\EOT\154\STX\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\DC4\SOH\DC2\EOT\154\STX\v\RS\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\DC4\ETX\DC2\EOT\154\STX!#\n\+ \9\n\+ \\EOT\EOT\NUL\STX\NAK\DC2\EOT\159\STX\EOT\DC2\SUB+\n\+ \If set, an AMP-payment will be attempted.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\NUL\STX\NAK\EOT\DC2\ACK\159\STX\EOT\154\STX$\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\NAK\ENQ\DC2\EOT\159\STX\EOT\b\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\NAK\SOH\DC2\EOT\159\STX\t\f\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\NAK\ETX\DC2\EOT\159\STX\SI\DC1\n\+ \\f\n\+ \\STX\EOT\SOH\DC2\ACK\162\STX\NUL\171\STX\SOH\n\+ \\v\n\+ \\ETX\EOT\SOH\SOH\DC2\EOT\162\STX\b\ESC\n\+ \3\n\+ \\EOT\EOT\SOH\STX\NUL\DC2\EOT\164\STX\EOT\ESC\SUB% The hash of the payment to look up.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\SOH\STX\NUL\EOT\DC2\ACK\164\STX\EOT\162\STX\GS\n\+ \\r\n\+ \\ENQ\EOT\SOH\STX\NUL\ENQ\DC2\EOT\164\STX\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\SOH\STX\NUL\SOH\DC2\EOT\164\STX\n\+ \\SYN\n\+ \\r\n\+ \\ENQ\EOT\SOH\STX\NUL\ETX\DC2\EOT\164\STX\EM\SUB\n\+ \\151\SOH\n\+ \\EOT\EOT\SOH\STX\SOH\DC2\EOT\170\STX\EOT!\SUB\136\SOH\n\+ \If set, only the final payment update is streamed back. Intermediate updates\n\+ \that show which htlcs are still in flight are suppressed.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\SOH\STX\SOH\EOT\DC2\ACK\170\STX\EOT\164\STX\ESC\n\+ \\r\n\+ \\ENQ\EOT\SOH\STX\SOH\ENQ\DC2\EOT\170\STX\EOT\b\n\+ \\r\n\+ \\ENQ\EOT\SOH\STX\SOH\SOH\DC2\EOT\170\STX\t\FS\n\+ \\r\n\+ \\ENQ\EOT\SOH\STX\SOH\ETX\DC2\EOT\170\STX\US \n\+ \\f\n\+ \\STX\EOT\STX\DC2\ACK\173\STX\NUL\183\STX\SOH\n\+ \\v\n\+ \\ETX\EOT\STX\SOH\DC2\EOT\173\STX\b\ETB\n\+ \M\n\+ \\EOT\EOT\STX\STX\NUL\DC2\EOT\177\STX\EOT\DC3\SUB?\n\+ \The destination once wishes to obtain a routing fee quote to.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\STX\STX\NUL\EOT\DC2\ACK\177\STX\EOT\173\STX\EM\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\NUL\ENQ\DC2\EOT\177\STX\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\NUL\SOH\DC2\EOT\177\STX\n\+ \\SO\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\NUL\ETX\DC2\EOT\177\STX\DC1\DC2\n\+ \H\n\+ \\EOT\EOT\STX\STX\SOH\DC2\EOT\182\STX\EOT\SYN\SUB:\n\+ \The amount one wishes to send to the target destination.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\STX\STX\SOH\EOT\DC2\ACK\182\STX\EOT\177\STX\DC3\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\SOH\ENQ\DC2\EOT\182\STX\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\SOH\SOH\DC2\EOT\182\STX\n\+ \\DC1\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\SOH\ETX\DC2\EOT\182\STX\DC4\NAK\n\+ \\f\n\+ \\STX\EOT\ETX\DC2\ACK\185\STX\NUL\198\STX\SOH\n\+ \\v\n\+ \\ETX\EOT\ETX\SOH\DC2\EOT\185\STX\b\CAN\n\+ \}\n\+ \\EOT\EOT\ETX\STX\NUL\DC2\EOT\190\STX\EOT\US\SUBo\n\+ \A lower bound of the estimated fee to the target destination within the\n\+ \network, expressed in milli-satoshis.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\ETX\STX\NUL\EOT\DC2\ACK\190\STX\EOT\185\STX\SUB\n\+ \\r\n\+ \\ENQ\EOT\ETX\STX\NUL\ENQ\DC2\EOT\190\STX\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\ETX\STX\NUL\SOH\DC2\EOT\190\STX\n\+ \\SUB\n\+ \\r\n\+ \\ENQ\EOT\ETX\STX\NUL\ETX\DC2\EOT\190\STX\GS\RS\n\+ \\174\SOH\n\+ \\EOT\EOT\ETX\STX\SOH\DC2\EOT\197\STX\EOT\RS\SUB\159\SOH\n\+ \An estimate of the worst case time delay that can occur. Note that callers\n\+ \will still need to factor in the final CLTV delta of the last hop into this\n\+ \value.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\ETX\STX\SOH\EOT\DC2\ACK\197\STX\EOT\190\STX\US\n\+ \\r\n\+ \\ENQ\EOT\ETX\STX\SOH\ENQ\DC2\EOT\197\STX\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\ETX\STX\SOH\SOH\DC2\EOT\197\STX\n\+ \\EM\n\+ \\r\n\+ \\ENQ\EOT\ETX\STX\SOH\ETX\DC2\EOT\197\STX\FS\GS\n\+ \\f\n\+ \\STX\EOT\EOT\DC2\ACK\200\STX\NUL\206\STX\SOH\n\+ \\v\n\+ \\ETX\EOT\EOT\SOH\DC2\EOT\200\STX\b\SUB\n\+ \5\n\+ \\EOT\EOT\EOT\STX\NUL\DC2\EOT\202\STX\EOT\ESC\SUB' The payment hash to use for the HTLC.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\EOT\STX\NUL\EOT\DC2\ACK\202\STX\EOT\200\STX\FS\n\+ \\r\n\+ \\ENQ\EOT\EOT\STX\NUL\ENQ\DC2\EOT\202\STX\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\EOT\STX\NUL\SOH\DC2\EOT\202\STX\n\+ \\SYN\n\+ \\r\n\+ \\ENQ\EOT\EOT\STX\NUL\ETX\DC2\EOT\202\STX\EM\SUB\n\+ \M\n\+ \\EOT\EOT\EOT\STX\SOH\DC2\EOT\205\STX\EOT\SUB\SUB? Route that should be used to attempt to complete the payment.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\EOT\STX\SOH\EOT\DC2\ACK\205\STX\EOT\202\STX\ESC\n\+ \\r\n\+ \\ENQ\EOT\EOT\STX\SOH\ACK\DC2\EOT\205\STX\EOT\SI\n\+ \\r\n\+ \\ENQ\EOT\EOT\STX\SOH\SOH\DC2\EOT\205\STX\DLE\NAK\n\+ \\r\n\+ \\ENQ\EOT\EOT\STX\SOH\ETX\DC2\EOT\205\STX\CAN\EM\n\+ \\f\n\+ \\STX\EOT\ENQ\DC2\ACK\208\STX\NUL\214\STX\SOH\n\+ \\v\n\+ \\ETX\EOT\ENQ\SOH\DC2\EOT\208\STX\b\ESC\n\+ \<\n\+ \\EOT\EOT\ENQ\STX\NUL\DC2\EOT\210\STX\EOT\ETB\SUB. The preimage obtained by making the payment.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\ENQ\STX\NUL\EOT\DC2\ACK\210\STX\EOT\208\STX\GS\n\+ \\r\n\+ \\ENQ\EOT\ENQ\STX\NUL\ENQ\DC2\EOT\210\STX\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\ENQ\STX\NUL\SOH\DC2\EOT\210\STX\n\+ \\DC2\n\+ \\r\n\+ \\ENQ\EOT\ENQ\STX\NUL\ETX\DC2\EOT\210\STX\NAK\SYN\n\+ \?\n\+ \\EOT\EOT\ENQ\STX\SOH\DC2\EOT\213\STX\EOT\RS\SUB1 The failure message in case the payment failed.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\ENQ\STX\SOH\EOT\DC2\ACK\213\STX\EOT\210\STX\ETB\n\+ \\r\n\+ \\ENQ\EOT\ENQ\STX\SOH\ACK\DC2\EOT\213\STX\EOT\DC1\n\+ \\r\n\+ \\ENQ\EOT\ENQ\STX\SOH\SOH\DC2\EOT\213\STX\DC2\EM\n\+ \\r\n\+ \\ENQ\EOT\ENQ\STX\SOH\ETX\DC2\EOT\213\STX\FS\GS\n\+ \\f\n\+ \\STX\EOT\ACK\DC2\ACK\216\STX\NUL\217\STX\SOH\n\+ \\v\n\+ \\ETX\EOT\ACK\SOH\DC2\EOT\216\STX\b\"\n\+ \\f\n\+ \\STX\EOT\a\DC2\ACK\219\STX\NUL\220\STX\SOH\n\+ \\v\n\+ \\ETX\EOT\a\SOH\DC2\EOT\219\STX\b#\n\+ \\f\n\+ \\STX\EOT\b\DC2\ACK\222\STX\NUL\223\STX\SOH\n\+ \\v\n\+ \\ETX\EOT\b\SOH\DC2\EOT\222\STX\b\"\n\+ \K\n\+ \\STX\EOT\t\DC2\ACK\226\STX\NUL\231\STX\SOH\SUB= QueryMissionControlResponse contains mission control state.\n\+ \\n\+ \\v\n\+ \\ETX\EOT\t\SOH\DC2\EOT\226\STX\b#\n\+ \\v\n\+ \\ETX\EOT\t\t\DC2\EOT\227\STX\EOT\SI\n\+ \\f\n\+ \\EOT\EOT\t\t\NUL\DC2\EOT\227\STX\r\SO\n\+ \\r\n\+ \\ENQ\EOT\t\t\NUL\SOH\DC2\EOT\227\STX\r\SO\n\+ \\r\n\+ \\ENQ\EOT\t\t\NUL\STX\DC2\EOT\227\STX\r\SO\n\+ \6\n\+ \\EOT\EOT\t\STX\NUL\DC2\EOT\230\STX\EOT#\SUB( Node pair-level mission control state.\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\t\STX\NUL\EOT\DC2\EOT\230\STX\EOT\f\n\+ \\r\n\+ \\ENQ\EOT\t\STX\NUL\ACK\DC2\EOT\230\STX\r\CAN\n\+ \\r\n\+ \\ENQ\EOT\t\STX\NUL\SOH\DC2\EOT\230\STX\EM\RS\n\+ \\r\n\+ \\ENQ\EOT\t\STX\NUL\ETX\DC2\EOT\230\STX!\"\n\+ \\f\n\+ \\STX\EOT\n\+ \\DC2\ACK\233\STX\NUL\236\STX\SOH\n\+ \\v\n\+ \\ETX\EOT\n\+ \\SOH\DC2\EOT\233\STX\b$\n\+ \E\n\+ \\EOT\EOT\n\+ \\STX\NUL\DC2\EOT\235\STX\EOT#\SUB7 Node pair-level mission control state to be imported.\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\n\+ \\STX\NUL\EOT\DC2\EOT\235\STX\EOT\f\n\+ \\r\n\+ \\ENQ\EOT\n\+ \\STX\NUL\ACK\DC2\EOT\235\STX\r\CAN\n\+ \\r\n\+ \\ENQ\EOT\n\+ \\STX\NUL\SOH\DC2\EOT\235\STX\EM\RS\n\+ \\r\n\+ \\ENQ\EOT\n\+ \\STX\NUL\ETX\DC2\EOT\235\STX!\"\n\+ \\f\n\+ \\STX\EOT\v\DC2\ACK\238\STX\NUL\239\STX\SOH\n\+ \\v\n\+ \\ETX\EOT\v\SOH\DC2\EOT\238\STX\b%\n\+ \Z\n\+ \\STX\EOT\f\DC2\ACK\242\STX\NUL\252\STX\SOH\SUBL PairHistory contains the mission control state for a particular node pair.\n\+ \\n\+ \\v\n\+ \\ETX\EOT\f\SOH\DC2\EOT\242\STX\b\DC3\n\+ \3\n\+ \\EOT\EOT\f\STX\NUL\DC2\EOT\244\STX\EOT\CAN\SUB% The source node pubkey of the pair.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\f\STX\NUL\EOT\DC2\ACK\244\STX\EOT\242\STX\NAK\n\+ \\r\n\+ \\ENQ\EOT\f\STX\NUL\ENQ\DC2\EOT\244\STX\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\f\STX\NUL\SOH\DC2\EOT\244\STX\n\+ \\DC3\n\+ \\r\n\+ \\ENQ\EOT\f\STX\NUL\ETX\DC2\EOT\244\STX\SYN\ETB\n\+ \8\n\+ \\EOT\EOT\f\STX\SOH\DC2\EOT\247\STX\EOT\SYN\SUB* The destination node pubkey of the pair.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\f\STX\SOH\EOT\DC2\ACK\247\STX\EOT\244\STX\CAN\n\+ \\r\n\+ \\ENQ\EOT\f\STX\SOH\ENQ\DC2\EOT\247\STX\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\f\STX\SOH\SOH\DC2\EOT\247\STX\n\+ \\DC1\n\+ \\r\n\+ \\ENQ\EOT\f\STX\SOH\ETX\DC2\EOT\247\STX\DC4\NAK\n\+ \\v\n\+ \\ETX\EOT\f\t\DC2\EOT\249\STX\EOT\CAN\n\+ \\f\n\+ \\EOT\EOT\f\t\NUL\DC2\EOT\249\STX\r\SO\n\+ \\r\n\+ \\ENQ\EOT\f\t\NUL\SOH\DC2\EOT\249\STX\r\SO\n\+ \\r\n\+ \\ENQ\EOT\f\t\NUL\STX\DC2\EOT\249\STX\r\SO\n\+ \\f\n\+ \\EOT\EOT\f\t\SOH\DC2\EOT\249\STX\DLE\DC1\n\+ \\r\n\+ \\ENQ\EOT\f\t\SOH\SOH\DC2\EOT\249\STX\DLE\DC1\n\+ \\r\n\+ \\ENQ\EOT\f\t\SOH\STX\DC2\EOT\249\STX\DLE\DC1\n\+ \\f\n\+ \\EOT\EOT\f\t\STX\DC2\EOT\249\STX\DC3\DC4\n\+ \\r\n\+ \\ENQ\EOT\f\t\STX\SOH\DC2\EOT\249\STX\DC3\DC4\n\+ \\r\n\+ \\ENQ\EOT\f\t\STX\STX\DC2\EOT\249\STX\DC3\DC4\n\+ \\f\n\+ \\EOT\EOT\f\t\ETX\DC2\EOT\249\STX\SYN\ETB\n\+ \\r\n\+ \\ENQ\EOT\f\t\ETX\SOH\DC2\EOT\249\STX\SYN\ETB\n\+ \\r\n\+ \\ENQ\EOT\f\t\ETX\STX\DC2\EOT\249\STX\SYN\ETB\n\+ \\f\n\+ \\EOT\EOT\f\STX\STX\DC2\EOT\251\STX\EOT\EM\n\+ \\SI\n\+ \\ENQ\EOT\f\STX\STX\EOT\DC2\ACK\251\STX\EOT\249\STX\CAN\n\+ \\r\n\+ \\ENQ\EOT\f\STX\STX\ACK\DC2\EOT\251\STX\EOT\f\n\+ \\r\n\+ \\ENQ\EOT\f\STX\STX\SOH\DC2\EOT\251\STX\r\DC4\n\+ \\r\n\+ \\ENQ\EOT\f\STX\STX\ETX\DC2\EOT\251\STX\ETB\CAN\n\+ \\f\n\+ \\STX\EOT\r\DC2\ACK\254\STX\NUL\152\ETX\SOH\n\+ \\v\n\+ \\ETX\EOT\r\SOH\DC2\EOT\254\STX\b\DLE\n\+ \%\n\+ \\EOT\EOT\r\STX\NUL\DC2\EOT\128\ETX\EOT\CAN\SUB\ETB Time of last failure.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\r\STX\NUL\EOT\DC2\ACK\128\ETX\EOT\254\STX\DC2\n\+ \\r\n\+ \\ENQ\EOT\r\STX\NUL\ENQ\DC2\EOT\128\ETX\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\r\STX\NUL\SOH\DC2\EOT\128\ETX\n\+ \\DC3\n\+ \\r\n\+ \\ENQ\EOT\r\STX\NUL\ETX\DC2\EOT\128\ETX\SYN\ETB\n\+ \\140\SOH\n\+ \\EOT\EOT\r\STX\SOH\DC2\EOT\134\ETX\EOT\ESC\SUB~\n\+ \Lowest amount that failed to forward rounded to whole sats. This may be\n\+ \set to zero if the failure is independent of amount.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\r\STX\SOH\EOT\DC2\ACK\134\ETX\EOT\128\ETX\CAN\n\+ \\r\n\+ \\ENQ\EOT\r\STX\SOH\ENQ\DC2\EOT\134\ETX\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\r\STX\SOH\SOH\DC2\EOT\134\ETX\n\+ \\SYN\n\+ \\r\n\+ \\ENQ\EOT\r\STX\SOH\ETX\DC2\EOT\134\ETX\EM\SUB\n\+ \\131\SOH\n\+ \\EOT\EOT\r\STX\STX\DC2\EOT\140\ETX\EOT\FS\SUBu\n\+ \Lowest amount that failed to forward in millisats. This may be\n\+ \set to zero if the failure is independent of amount.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\r\STX\STX\EOT\DC2\ACK\140\ETX\EOT\134\ETX\ESC\n\+ \\r\n\+ \\ENQ\EOT\r\STX\STX\ENQ\DC2\EOT\140\ETX\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\r\STX\STX\SOH\DC2\EOT\140\ETX\n\+ \\ETB\n\+ \\r\n\+ \\ENQ\EOT\r\STX\STX\ETX\DC2\EOT\140\ETX\SUB\ESC\n\+ \\v\n\+ \\ETX\EOT\r\t\DC2\EOT\142\ETX\EOT\SI\n\+ \\f\n\+ \\EOT\EOT\r\t\NUL\DC2\EOT\142\ETX\r\SO\n\+ \\r\n\+ \\ENQ\EOT\r\t\NUL\SOH\DC2\EOT\142\ETX\r\SO\n\+ \\r\n\+ \\ENQ\EOT\r\t\NUL\STX\DC2\EOT\142\ETX\r\SO\n\+ \%\n\+ \\EOT\EOT\r\STX\ETX\DC2\EOT\145\ETX\EOT\ESC\SUB\ETB Time of last success.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\r\STX\ETX\EOT\DC2\ACK\145\ETX\EOT\142\ETX\SI\n\+ \\r\n\+ \\ENQ\EOT\r\STX\ETX\ENQ\DC2\EOT\145\ETX\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\r\STX\ETX\SOH\DC2\EOT\145\ETX\n\+ \\SYN\n\+ \\r\n\+ \\ENQ\EOT\r\STX\ETX\ETX\DC2\EOT\145\ETX\EM\SUB\n\+ \X\n\+ \\EOT\EOT\r\STX\EOT\DC2\EOT\148\ETX\EOT\RS\SUBJ Highest amount that we could successfully forward rounded to whole sats.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\r\STX\EOT\EOT\DC2\ACK\148\ETX\EOT\145\ETX\ESC\n\+ \\r\n\+ \\ENQ\EOT\r\STX\EOT\ENQ\DC2\EOT\148\ETX\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\r\STX\EOT\SOH\DC2\EOT\148\ETX\n\+ \\EM\n\+ \\r\n\+ \\ENQ\EOT\r\STX\EOT\ETX\DC2\EOT\148\ETX\FS\GS\n\+ \O\n\+ \\EOT\EOT\r\STX\ENQ\DC2\EOT\151\ETX\EOT\US\SUBA Highest amount that we could successfully forward in millisats.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\r\STX\ENQ\EOT\DC2\ACK\151\ETX\EOT\148\ETX\RS\n\+ \\r\n\+ \\ENQ\EOT\r\STX\ENQ\ENQ\DC2\EOT\151\ETX\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\r\STX\ENQ\SOH\DC2\EOT\151\ETX\n\+ \\SUB\n\+ \\r\n\+ \\ENQ\EOT\r\STX\ENQ\ETX\DC2\EOT\151\ETX\GS\RS\n\+ \\f\n\+ \\STX\EOT\SO\DC2\ACK\154\ETX\NUL\155\ETX\SOH\n\+ \\v\n\+ \\ETX\EOT\SO\SOH\DC2\EOT\154\ETX\b&\n\+ \\f\n\+ \\STX\EOT\SI\DC2\ACK\157\ETX\NUL\162\ETX\SOH\n\+ \\v\n\+ \\ETX\EOT\SI\SOH\DC2\EOT\157\ETX\b'\n\+ \:\n\+ \\EOT\EOT\SI\STX\NUL\DC2\EOT\161\ETX\EOT$\SUB,\n\+ \Mission control's currently active config.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\SI\STX\NUL\EOT\DC2\ACK\161\ETX\EOT\157\ETX)\n\+ \\r\n\+ \\ENQ\EOT\SI\STX\NUL\ACK\DC2\EOT\161\ETX\EOT\CAN\n\+ \\r\n\+ \\ENQ\EOT\SI\STX\NUL\SOH\DC2\EOT\161\ETX\EM\US\n\+ \\r\n\+ \\ENQ\EOT\SI\STX\NUL\ETX\DC2\EOT\161\ETX\"#\n\+ \\f\n\+ \\STX\EOT\DLE\DC2\ACK\164\ETX\NUL\170\ETX\SOH\n\+ \\v\n\+ \\ETX\EOT\DLE\SOH\DC2\EOT\164\ETX\b&\n\+ \\131\SOH\n\+ \\EOT\EOT\DLE\STX\NUL\DC2\EOT\169\ETX\EOT$\SUBu\n\+ \The config to set for mission control. Note that all values *must* be set,\n\+ \because the full config will be applied.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\DLE\STX\NUL\EOT\DC2\ACK\169\ETX\EOT\164\ETX(\n\+ \\r\n\+ \\ENQ\EOT\DLE\STX\NUL\ACK\DC2\EOT\169\ETX\EOT\CAN\n\+ \\r\n\+ \\ENQ\EOT\DLE\STX\NUL\SOH\DC2\EOT\169\ETX\EM\US\n\+ \\r\n\+ \\ENQ\EOT\DLE\STX\NUL\ETX\DC2\EOT\169\ETX\"#\n\+ \\f\n\+ \\STX\EOT\DC1\DC2\ACK\172\ETX\NUL\173\ETX\SOH\n\+ \\v\n\+ \\ETX\EOT\DC1\SOH\DC2\EOT\172\ETX\b'\n\+ \\f\n\+ \\STX\EOT\DC2\DC2\ACK\175\ETX\NUL\213\ETX\SOH\n\+ \\v\n\+ \\ETX\EOT\DC2\SOH\DC2\EOT\175\ETX\b\FS\n\+ \\217\STX\n\+ \\EOT\EOT\DC2\STX\NUL\DC2\EOT\183\ETX\EOT!\SUB\202\STX\n\+ \The amount of time mission control will take to restore a penalized node\n\+ \or channel back to 50% success probability, expressed in seconds. Setting\n\+ \this value to a higher value will penalize failures for longer, making\n\+ \mission control less likely to route through nodes and channels that we\n\+ \have previously recorded failures for.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\DC2\STX\NUL\EOT\DC2\ACK\183\ETX\EOT\175\ETX\RS\n\+ \\r\n\+ \\ENQ\EOT\DC2\STX\NUL\ENQ\DC2\EOT\183\ETX\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\DC2\STX\NUL\SOH\DC2\EOT\183\ETX\v\FS\n\+ \\r\n\+ \\ENQ\EOT\DC2\STX\NUL\ETX\DC2\EOT\183\ETX\US \n\+ \\156\STX\n\+ \\EOT\EOT\DC2\STX\SOH\DC2\EOT\191\ETX\EOT\RS\SUB\141\STX\n\+ \The probability of success mission control should assign to hop in a route\n\+ \where it has no other information available. Higher values will make mission\n\+ \control more willing to try hops that we have no information about, lower\n\+ \values will discourage trying these hops.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\DC2\STX\SOH\EOT\DC2\ACK\191\ETX\EOT\183\ETX!\n\+ \\r\n\+ \\ENQ\EOT\DC2\STX\SOH\ENQ\DC2\EOT\191\ETX\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\DC2\STX\SOH\SOH\DC2\EOT\191\ETX\n\+ \\EM\n\+ \\r\n\+ \\ENQ\EOT\DC2\STX\SOH\ETX\DC2\EOT\191\ETX\FS\GS\n\+ \\253\STX\n\+ \\EOT\EOT\DC2\STX\STX\DC2\EOT\201\ETX\EOT\NAK\SUB\238\STX\n\+ \The importance that mission control should place on historical results,\n\+ \expressed as a value in [0;1]. Setting this value to 1 will ignore all\n\+ \historical payments and just use the hop probability to assess the\n\+ \probability of success for each hop. A zero value ignores hop probability\n\+ \completely and relies entirely on historical results, unless none are\n\+ \available.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\DC2\STX\STX\EOT\DC2\ACK\201\ETX\EOT\191\ETX\RS\n\+ \\r\n\+ \\ENQ\EOT\DC2\STX\STX\ENQ\DC2\EOT\201\ETX\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\DC2\STX\STX\SOH\DC2\EOT\201\ETX\n\+ \\DLE\n\+ \\r\n\+ \\ENQ\EOT\DC2\STX\STX\ETX\DC2\EOT\201\ETX\DC3\DC4\n\+ \V\n\+ \\EOT\EOT\DC2\STX\ETX\DC2\EOT\206\ETX\EOT'\SUBH\n\+ \The maximum number of payment results that mission control will store.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\DC2\STX\ETX\EOT\DC2\ACK\206\ETX\EOT\201\ETX\NAK\n\+ \\r\n\+ \\ENQ\EOT\DC2\STX\ETX\ENQ\DC2\EOT\206\ETX\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\DC2\STX\ETX\SOH\DC2\EOT\206\ETX\v\"\n\+ \\r\n\+ \\ENQ\EOT\DC2\STX\ETX\ETX\DC2\EOT\206\ETX%&\n\+ \\128\SOH\n\+ \\EOT\EOT\DC2\STX\EOT\DC2\EOT\212\ETX\EOT.\SUBr\n\+ \The minimum time that must have passed since the previously recorded failure\n\+ \before we raise the failure amount.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\DC2\STX\EOT\EOT\DC2\ACK\212\ETX\EOT\206\ETX'\n\+ \\r\n\+ \\ENQ\EOT\DC2\STX\EOT\ENQ\DC2\EOT\212\ETX\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\DC2\STX\EOT\SOH\DC2\EOT\212\ETX\v)\n\+ \\r\n\+ \\ENQ\EOT\DC2\STX\EOT\ETX\DC2\EOT\212\ETX,-\n\+ \\f\n\+ \\STX\EOT\DC3\DC2\ACK\215\ETX\NUL\224\ETX\SOH\n\+ \\v\n\+ \\ETX\EOT\DC3\SOH\DC2\EOT\215\ETX\b\US\n\+ \3\n\+ \\EOT\EOT\DC3\STX\NUL\DC2\EOT\217\ETX\EOT\CAN\SUB% The source node pubkey of the pair.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\DC3\STX\NUL\EOT\DC2\ACK\217\ETX\EOT\215\ETX!\n\+ \\r\n\+ \\ENQ\EOT\DC3\STX\NUL\ENQ\DC2\EOT\217\ETX\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\DC3\STX\NUL\SOH\DC2\EOT\217\ETX\n\+ \\DC3\n\+ \\r\n\+ \\ENQ\EOT\DC3\STX\NUL\ETX\DC2\EOT\217\ETX\SYN\ETB\n\+ \8\n\+ \\EOT\EOT\DC3\STX\SOH\DC2\EOT\220\ETX\EOT\SYN\SUB* The destination node pubkey of the pair.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\DC3\STX\SOH\EOT\DC2\ACK\220\ETX\EOT\217\ETX\CAN\n\+ \\r\n\+ \\ENQ\EOT\DC3\STX\SOH\ENQ\DC2\EOT\220\ETX\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\DC3\STX\SOH\SOH\DC2\EOT\220\ETX\n\+ \\DC1\n\+ \\r\n\+ \\ENQ\EOT\DC3\STX\SOH\ETX\DC2\EOT\220\ETX\DC4\NAK\n\+ \@\n\+ \\EOT\EOT\DC3\STX\STX\DC2\EOT\223\ETX\EOT\ETB\SUB2 The amount for which to calculate a probability.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\DC3\STX\STX\EOT\DC2\ACK\223\ETX\EOT\220\ETX\SYN\n\+ \\r\n\+ \\ENQ\EOT\DC3\STX\STX\ENQ\DC2\EOT\223\ETX\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\DC3\STX\STX\SOH\DC2\EOT\223\ETX\n\+ \\DC2\n\+ \\r\n\+ \\ENQ\EOT\DC3\STX\STX\ETX\DC2\EOT\223\ETX\NAK\SYN\n\+ \\f\n\+ \\STX\EOT\DC4\DC2\ACK\226\ETX\NUL\232\ETX\SOH\n\+ \\v\n\+ \\ETX\EOT\DC4\SOH\DC2\EOT\226\ETX\b \n\+ \?\n\+ \\EOT\EOT\DC4\STX\NUL\DC2\EOT\228\ETX\EOT\ESC\SUB1 The success probability for the requested pair.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\DC4\STX\NUL\EOT\DC2\ACK\228\ETX\EOT\226\ETX\"\n\+ \\r\n\+ \\ENQ\EOT\DC4\STX\NUL\ENQ\DC2\EOT\228\ETX\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\DC4\STX\NUL\SOH\DC2\EOT\228\ETX\v\SYN\n\+ \\r\n\+ \\ENQ\EOT\DC4\STX\NUL\ETX\DC2\EOT\228\ETX\EM\SUB\n\+ \;\n\+ \\EOT\EOT\DC4\STX\SOH\DC2\EOT\231\ETX\EOT\EM\SUB- The historical data for the requested pair.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\DC4\STX\SOH\EOT\DC2\ACK\231\ETX\EOT\228\ETX\ESC\n\+ \\r\n\+ \\ENQ\EOT\DC4\STX\SOH\ACK\DC2\EOT\231\ETX\EOT\f\n\+ \\r\n\+ \\ENQ\EOT\DC4\STX\SOH\SOH\DC2\EOT\231\ETX\r\DC4\n\+ \\r\n\+ \\ENQ\EOT\DC4\STX\SOH\ETX\DC2\EOT\231\ETX\ETB\CAN\n\+ \\f\n\+ \\STX\EOT\NAK\DC2\ACK\234\ETX\NUL\133\EOT\SOH\n\+ \\v\n\+ \\ETX\EOT\NAK\SOH\DC2\EOT\234\ETX\b\EM\n\+ \j\n\+ \\EOT\EOT\NAK\STX\NUL\DC2\EOT\239\ETX\EOT\ETB\SUB\\\n\+ \The amount to send expressed in msat. If set to zero, the minimum routable\n\+ \amount is used.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\NAK\STX\NUL\EOT\DC2\ACK\239\ETX\EOT\234\ETX\ESC\n\+ \\r\n\+ \\ENQ\EOT\NAK\STX\NUL\ENQ\DC2\EOT\239\ETX\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\NAK\STX\NUL\SOH\DC2\EOT\239\ETX\n\+ \\DC2\n\+ \\r\n\+ \\ENQ\EOT\NAK\STX\NUL\ETX\DC2\EOT\239\ETX\NAK\SYN\n\+ \h\n\+ \\EOT\EOT\NAK\STX\SOH\DC2\EOT\245\ETX\EOT\US\SUBZ\n\+ \CLTV delta from the current height that should be used for the timelock\n\+ \of the final hop\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\NAK\STX\SOH\EOT\DC2\ACK\245\ETX\EOT\239\ETX\ETB\n\+ \\r\n\+ \\ENQ\EOT\NAK\STX\SOH\ENQ\DC2\EOT\245\ETX\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\NAK\STX\SOH\SOH\DC2\EOT\245\ETX\n\+ \\SUB\n\+ \\r\n\+ \\ENQ\EOT\NAK\STX\SOH\ETX\DC2\EOT\245\ETX\GS\RS\n\+ \t\n\+ \\EOT\EOT\NAK\STX\STX\DC2\EOT\251\ETX\EOT5\SUBf\n\+ \The channel id of the channel that must be taken to the first hop. If zero,\n\+ \any channel may be used.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\NAK\STX\STX\EOT\DC2\ACK\251\ETX\EOT\245\ETX\US\n\+ \\r\n\+ \\ENQ\EOT\NAK\STX\STX\ENQ\DC2\EOT\251\ETX\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\NAK\STX\STX\SOH\DC2\EOT\251\ETX\v\ESC\n\+ \\r\n\+ \\ENQ\EOT\NAK\STX\STX\ETX\DC2\EOT\251\ETX\RS\US\n\+ \\r\n\+ \\ENQ\EOT\NAK\STX\STX\b\DC2\EOT\251\ETX 4\n\+ \\SO\n\+ \\ACK\EOT\NAK\STX\STX\b\ACK\DC2\EOT\251\ETX!3\n\+ \c\n\+ \\EOT\EOT\NAK\STX\ETX\DC2\EOT\129\EOT\EOT#\SUBU\n\+ \A list of hops that defines the route. This does not include the source hop\n\+ \pubkey.\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\NAK\STX\ETX\EOT\DC2\EOT\129\EOT\EOT\f\n\+ \\r\n\+ \\ENQ\EOT\NAK\STX\ETX\ENQ\DC2\EOT\129\EOT\r\DC2\n\+ \\r\n\+ \\ENQ\EOT\NAK\STX\ETX\SOH\DC2\EOT\129\EOT\DC3\RS\n\+ \\r\n\+ \\ENQ\EOT\NAK\STX\ETX\ETX\DC2\EOT\129\EOT!\"\n\+ \Y\n\+ \\EOT\EOT\NAK\STX\EOT\DC2\EOT\132\EOT\EOT\ESC\SUBK An optional payment addr to be included within the last hop of the route.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\NAK\STX\EOT\EOT\DC2\ACK\132\EOT\EOT\129\EOT#\n\+ \\r\n\+ \\ENQ\EOT\NAK\STX\EOT\ENQ\DC2\EOT\132\EOT\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\NAK\STX\EOT\SOH\DC2\EOT\132\EOT\n\+ \\SYN\n\+ \\r\n\+ \\ENQ\EOT\NAK\STX\EOT\ETX\DC2\EOT\132\EOT\EM\SUB\n\+ \\f\n\+ \\STX\EOT\SYN\DC2\ACK\135\EOT\NUL\140\EOT\SOH\n\+ \\v\n\+ \\ETX\EOT\SYN\SOH\DC2\EOT\135\EOT\b\SUB\n\+ \N\n\+ \\EOT\EOT\SYN\STX\NUL\DC2\EOT\139\EOT\EOT\SUB\SUB@\n\+ \Fully specified route that can be used to execute the payment.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\SYN\STX\NUL\EOT\DC2\ACK\139\EOT\EOT\135\EOT\FS\n\+ \\r\n\+ \\ENQ\EOT\SYN\STX\NUL\ACK\DC2\EOT\139\EOT\EOT\SI\n\+ \\r\n\+ \\ENQ\EOT\SYN\STX\NUL\SOH\DC2\EOT\139\EOT\DLE\NAK\n\+ \\r\n\+ \\ENQ\EOT\SYN\STX\NUL\ETX\DC2\EOT\139\EOT\CAN\EM\n\+ \\f\n\+ \\STX\EOT\ETB\DC2\ACK\142\EOT\NUL\143\EOT\SOH\n\+ \\v\n\+ \\ETX\EOT\ETB\SOH\DC2\EOT\142\EOT\b\"\n\+ \\177\ETX\n\+ \\STX\EOT\CAN\DC2\ACK\153\EOT\NUL\202\EOT\SOH\SUB\162\ETX\n\+ \HtlcEvent contains the htlc event that was processed. These are served on a\n\+ \best-effort basis; events are not persisted, delivery is not guaranteed\n\+ \(in the event of a crash in the switch, forward events may be lost) and\n\+ \some events may be replayed upon restart. Events consumed from this package\n\+ \should be de-duplicated by the htlc's unique combination of incoming and\n\+ \outgoing channel id and htlc id. [EXPERIMENTAL]\n\+ \\n\+ \\v\n\+ \\ETX\EOT\CAN\SOH\DC2\EOT\153\EOT\b\DC1\n\+ \q\n\+ \\EOT\EOT\CAN\STX\NUL\DC2\EOT\158\EOT\EOT#\SUBc\n\+ \The short channel id that the incoming htlc arrived at our node on. This\n\+ \value is zero for sends.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\CAN\STX\NUL\EOT\DC2\ACK\158\EOT\EOT\153\EOT\DC3\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\NUL\ENQ\DC2\EOT\158\EOT\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\NUL\SOH\DC2\EOT\158\EOT\v\RS\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\NUL\ETX\DC2\EOT\158\EOT!\"\n\+ \n\n\+ \\EOT\EOT\CAN\STX\SOH\DC2\EOT\164\EOT\EOT#\SUB`\n\+ \The short channel id that the outgoing htlc left our node on. This value\n\+ \is zero for receives.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\CAN\STX\SOH\EOT\DC2\ACK\164\EOT\EOT\158\EOT#\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\SOH\ENQ\DC2\EOT\164\EOT\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\SOH\SOH\DC2\EOT\164\EOT\v\RS\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\SOH\ETX\DC2\EOT\164\EOT!\"\n\+ \t\n\+ \\EOT\EOT\CAN\STX\STX\DC2\EOT\170\EOT\EOT \SUBf\n\+ \Incoming id is the index of the incoming htlc in the incoming channel.\n\+ \This value is zero for sends.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\CAN\STX\STX\EOT\DC2\ACK\170\EOT\EOT\164\EOT#\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\STX\ENQ\DC2\EOT\170\EOT\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\STX\SOH\DC2\EOT\170\EOT\v\ESC\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\STX\ETX\DC2\EOT\170\EOT\RS\US\n\+ \w\n\+ \\EOT\EOT\CAN\STX\ETX\DC2\EOT\176\EOT\EOT \SUBi\n\+ \Outgoing id is the index of the outgoing htlc in the outgoing channel.\n\+ \This value is zero for receives.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\CAN\STX\ETX\EOT\DC2\ACK\176\EOT\EOT\170\EOT \n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\ETX\ENQ\DC2\EOT\176\EOT\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\ETX\SOH\DC2\EOT\176\EOT\v\ESC\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\ETX\ETX\DC2\EOT\176\EOT\RS\US\n\+ \E\n\+ \\EOT\EOT\CAN\STX\EOT\DC2\EOT\181\EOT\EOT\FS\SUB7\n\+ \The time in unix nanoseconds that the event occurred.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\CAN\STX\EOT\EOT\DC2\ACK\181\EOT\EOT\176\EOT \n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\EOT\ENQ\DC2\EOT\181\EOT\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\EOT\SOH\DC2\EOT\181\EOT\v\ETB\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\EOT\ETX\DC2\EOT\181\EOT\SUB\ESC\n\+ \\SO\n\+ \\EOT\EOT\CAN\EOT\NUL\DC2\ACK\183\EOT\EOT\188\EOT\ENQ\n\+ \\r\n\+ \\ENQ\EOT\CAN\EOT\NUL\SOH\DC2\EOT\183\EOT\t\DC2\n\+ \\SO\n\+ \\ACK\EOT\CAN\EOT\NUL\STX\NUL\DC2\EOT\184\EOT\b\DC4\n\+ \\SI\n\+ \\a\EOT\CAN\EOT\NUL\STX\NUL\SOH\DC2\EOT\184\EOT\b\SI\n\+ \\SI\n\+ \\a\EOT\CAN\EOT\NUL\STX\NUL\STX\DC2\EOT\184\EOT\DC2\DC3\n\+ \\SO\n\+ \\ACK\EOT\CAN\EOT\NUL\STX\SOH\DC2\EOT\185\EOT\b\DC1\n\+ \\SI\n\+ \\a\EOT\CAN\EOT\NUL\STX\SOH\SOH\DC2\EOT\185\EOT\b\f\n\+ \\SI\n\+ \\a\EOT\CAN\EOT\NUL\STX\SOH\STX\DC2\EOT\185\EOT\SI\DLE\n\+ \\SO\n\+ \\ACK\EOT\CAN\EOT\NUL\STX\STX\DC2\EOT\186\EOT\b\DC4\n\+ \\SI\n\+ \\a\EOT\CAN\EOT\NUL\STX\STX\SOH\DC2\EOT\186\EOT\b\SI\n\+ \\SI\n\+ \\a\EOT\CAN\EOT\NUL\STX\STX\STX\DC2\EOT\186\EOT\DC2\DC3\n\+ \\SO\n\+ \\ACK\EOT\CAN\EOT\NUL\STX\ETX\DC2\EOT\187\EOT\b\DC4\n\+ \\SI\n\+ \\a\EOT\CAN\EOT\NUL\STX\ETX\SOH\DC2\EOT\187\EOT\b\SI\n\+ \\SI\n\+ \\a\EOT\CAN\EOT\NUL\STX\ETX\STX\DC2\EOT\187\EOT\DC2\DC3\n\+ \a\n\+ \\EOT\EOT\CAN\STX\ENQ\DC2\EOT\194\EOT\EOT\GS\SUBS\n\+ \The event type indicates whether the htlc was part of a send, receive or\n\+ \forward.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\CAN\STX\ENQ\EOT\DC2\ACK\194\EOT\EOT\188\EOT\ENQ\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\ENQ\ACK\DC2\EOT\194\EOT\EOT\r\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\ENQ\SOH\DC2\EOT\194\EOT\SO\CAN\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\ENQ\ETX\DC2\EOT\194\EOT\ESC\FS\n\+ \\SO\n\+ \\EOT\EOT\CAN\b\NUL\DC2\ACK\196\EOT\EOT\201\EOT\ENQ\n\+ \\r\n\+ \\ENQ\EOT\CAN\b\NUL\SOH\DC2\EOT\196\EOT\n\+ \\SI\n\+ \\f\n\+ \\EOT\EOT\CAN\STX\ACK\DC2\EOT\197\EOT\b'\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\ACK\ACK\DC2\EOT\197\EOT\b\DC4\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\ACK\SOH\DC2\EOT\197\EOT\NAK\"\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\ACK\ETX\DC2\EOT\197\EOT%&\n\+ \\f\n\+ \\EOT\EOT\CAN\STX\a\DC2\EOT\198\EOT\b0\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\a\ACK\DC2\EOT\198\EOT\b\CAN\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\a\SOH\DC2\EOT\198\EOT\EM+\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\a\ETX\DC2\EOT\198\EOT./\n\+ \\f\n\+ \\EOT\EOT\CAN\STX\b\DC2\EOT\199\EOT\b%\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\b\ACK\DC2\EOT\199\EOT\b\DC3\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\b\SOH\DC2\EOT\199\EOT\DC4 \n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\b\ETX\DC2\EOT\199\EOT#$\n\+ \\f\n\+ \\EOT\EOT\CAN\STX\t\DC2\EOT\200\EOT\b+\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\t\ACK\DC2\EOT\200\EOT\b\NAK\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\t\SOH\DC2\EOT\200\EOT\SYN%\n\+ \\r\n\+ \\ENQ\EOT\CAN\STX\t\ETX\DC2\EOT\200\EOT(*\n\+ \\f\n\+ \\STX\EOT\EM\DC2\ACK\204\EOT\NUL\216\EOT\SOH\n\+ \\v\n\+ \\ETX\EOT\EM\SOH\DC2\EOT\204\EOT\b\DLE\n\+ \2\n\+ \\EOT\EOT\EM\STX\NUL\DC2\EOT\206\EOT\EOT!\SUB$ The timelock on the incoming htlc.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\EM\STX\NUL\EOT\DC2\ACK\206\EOT\EOT\204\EOT\DC2\n\+ \\r\n\+ \\ENQ\EOT\EM\STX\NUL\ENQ\DC2\EOT\206\EOT\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\EM\STX\NUL\SOH\DC2\EOT\206\EOT\v\FS\n\+ \\r\n\+ \\ENQ\EOT\EM\STX\NUL\ETX\DC2\EOT\206\EOT\US \n\+ \2\n\+ \\EOT\EOT\EM\STX\SOH\DC2\EOT\209\EOT\EOT!\SUB$ The timelock on the outgoing htlc.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\EM\STX\SOH\EOT\DC2\ACK\209\EOT\EOT\206\EOT!\n\+ \\r\n\+ \\ENQ\EOT\EM\STX\SOH\ENQ\DC2\EOT\209\EOT\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\EM\STX\SOH\SOH\DC2\EOT\209\EOT\v\FS\n\+ \\r\n\+ \\ENQ\EOT\EM\STX\SOH\ETX\DC2\EOT\209\EOT\US \n\+ \0\n\+ \\EOT\EOT\EM\STX\STX\DC2\EOT\212\EOT\EOT!\SUB\" The amount of the incoming htlc.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\EM\STX\STX\EOT\DC2\ACK\212\EOT\EOT\209\EOT!\n\+ \\r\n\+ \\ENQ\EOT\EM\STX\STX\ENQ\DC2\EOT\212\EOT\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\EM\STX\STX\SOH\DC2\EOT\212\EOT\v\FS\n\+ \\r\n\+ \\ENQ\EOT\EM\STX\STX\ETX\DC2\EOT\212\EOT\US \n\+ \0\n\+ \\EOT\EOT\EM\STX\ETX\DC2\EOT\215\EOT\EOT!\SUB\" The amount of the outgoing htlc.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\EM\STX\ETX\EOT\DC2\ACK\215\EOT\EOT\212\EOT!\n\+ \\r\n\+ \\ENQ\EOT\EM\STX\ETX\ENQ\DC2\EOT\215\EOT\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\EM\STX\ETX\SOH\DC2\EOT\215\EOT\v\FS\n\+ \\r\n\+ \\ENQ\EOT\EM\STX\ETX\ETX\DC2\EOT\215\EOT\US \n\+ \\f\n\+ \\STX\EOT\SUB\DC2\ACK\218\EOT\NUL\221\EOT\SOH\n\+ \\v\n\+ \\ETX\EOT\SUB\SOH\DC2\EOT\218\EOT\b\DC4\n\+ \H\n\+ \\EOT\EOT\SUB\STX\NUL\DC2\EOT\220\EOT\EOT\SYN\SUB: Info contains details about the htlc that was forwarded.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\SUB\STX\NUL\EOT\DC2\ACK\220\EOT\EOT\218\EOT\SYN\n\+ \\r\n\+ \\ENQ\EOT\SUB\STX\NUL\ACK\DC2\EOT\220\EOT\EOT\f\n\+ \\r\n\+ \\ENQ\EOT\SUB\STX\NUL\SOH\DC2\EOT\220\EOT\r\DC1\n\+ \\r\n\+ \\ENQ\EOT\SUB\STX\NUL\ETX\DC2\EOT\220\EOT\DC4\NAK\n\+ \\f\n\+ \\STX\EOT\ESC\DC2\ACK\223\EOT\NUL\224\EOT\SOH\n\+ \\v\n\+ \\ETX\EOT\ESC\SOH\DC2\EOT\223\EOT\b\CAN\n\+ \\f\n\+ \\STX\EOT\FS\DC2\ACK\226\EOT\NUL\229\EOT\SOH\n\+ \\v\n\+ \\ETX\EOT\FS\SOH\DC2\EOT\226\EOT\b\DC3\n\+ \&\n\+ \\EOT\EOT\FS\STX\NUL\DC2\EOT\228\EOT\EOT\ETB\SUB\CAN The revealed preimage.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\FS\STX\NUL\EOT\DC2\ACK\228\EOT\EOT\226\EOT\NAK\n\+ \\r\n\+ \\ENQ\EOT\FS\STX\NUL\ENQ\DC2\EOT\228\EOT\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\FS\STX\NUL\SOH\DC2\EOT\228\EOT\n\+ \\DC2\n\+ \\r\n\+ \\ENQ\EOT\FS\STX\NUL\ETX\DC2\EOT\228\EOT\NAK\SYN\n\+ \\f\n\+ \\STX\EOT\GS\DC2\ACK\231\EOT\NUL\247\EOT\SOH\n\+ \\v\n\+ \\ETX\EOT\GS\SOH\DC2\EOT\231\EOT\b\NAK\n\+ \D\n\+ \\EOT\EOT\GS\STX\NUL\DC2\EOT\233\EOT\EOT\SYN\SUB6 Info contains details about the htlc that we failed.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\GS\STX\NUL\EOT\DC2\ACK\233\EOT\EOT\231\EOT\ETB\n\+ \\r\n\+ \\ENQ\EOT\GS\STX\NUL\ACK\DC2\EOT\233\EOT\EOT\f\n\+ \\r\n\+ \\ENQ\EOT\GS\STX\NUL\SOH\DC2\EOT\233\EOT\r\DC1\n\+ \\r\n\+ \\ENQ\EOT\GS\STX\NUL\ETX\DC2\EOT\233\EOT\DC4\NAK\n\+ \C\n\+ \\EOT\EOT\GS\STX\SOH\DC2\EOT\236\EOT\EOT/\SUB5 FailureCode is the BOLT error code for the failure.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\GS\STX\SOH\EOT\DC2\ACK\236\EOT\EOT\233\EOT\SYN\n\+ \\r\n\+ \\ENQ\EOT\GS\STX\SOH\ACK\DC2\EOT\236\EOT\EOT\GS\n\+ \\r\n\+ \\ENQ\EOT\GS\STX\SOH\SOH\DC2\EOT\236\EOT\RS*\n\+ \\r\n\+ \\ENQ\EOT\GS\STX\SOH\ETX\DC2\EOT\236\EOT-.\n\+ \\238\SOH\n\+ \\EOT\EOT\GS\STX\STX\DC2\EOT\243\EOT\EOT%\SUB\223\SOH\n\+ \FailureDetail provides additional information about the reason for the\n\+ \failure. This detail enriches the information provided by the wire message\n\+ \and may be 'no detail' if the wire message requires no additional metadata.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\GS\STX\STX\EOT\DC2\ACK\243\EOT\EOT\236\EOT/\n\+ \\r\n\+ \\ENQ\EOT\GS\STX\STX\ACK\DC2\EOT\243\EOT\EOT\DC1\n\+ \\r\n\+ \\ENQ\EOT\GS\STX\STX\SOH\DC2\EOT\243\EOT\DC2 \n\+ \\r\n\+ \\ENQ\EOT\GS\STX\STX\ETX\DC2\EOT\243\EOT#$\n\+ \<\n\+ \\EOT\EOT\GS\STX\ETX\DC2\EOT\246\EOT\EOT\RS\SUB. A string representation of the link failure.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\GS\STX\ETX\EOT\DC2\ACK\246\EOT\EOT\243\EOT%\n\+ \\r\n\+ \\ENQ\EOT\GS\STX\ETX\ENQ\DC2\EOT\246\EOT\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\GS\STX\ETX\SOH\DC2\EOT\246\EOT\v\EM\n\+ \\r\n\+ \\ENQ\EOT\GS\STX\ETX\ETX\DC2\EOT\246\EOT\FS\GS\n\+ \\f\n\+ \\STX\ENQ\NUL\DC2\ACK\249\EOT\NUL\145\ENQ\SOH\n\+ \\v\n\+ \\ETX\ENQ\NUL\SOH\DC2\EOT\249\EOT\ENQ\DC2\n\+ \\f\n\+ \\EOT\ENQ\NUL\STX\NUL\DC2\EOT\250\EOT\EOT\DLE\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\NUL\SOH\DC2\EOT\250\EOT\EOT\v\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\NUL\STX\DC2\EOT\250\EOT\SO\SI\n\+ \\f\n\+ \\EOT\ENQ\NUL\STX\SOH\DC2\EOT\251\EOT\EOT\DC2\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\SOH\SOH\DC2\EOT\251\EOT\EOT\r\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\SOH\STX\DC2\EOT\251\EOT\DLE\DC1\n\+ \\f\n\+ \\EOT\ENQ\NUL\STX\STX\DC2\EOT\252\EOT\EOT\NAK\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\STX\SOH\DC2\EOT\252\EOT\EOT\DLE\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\STX\STX\DC2\EOT\252\EOT\DC3\DC4\n\+ \\f\n\+ \\EOT\ENQ\NUL\STX\ETX\DC2\EOT\253\EOT\EOT\SUB\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\ETX\SOH\DC2\EOT\253\EOT\EOT\NAK\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\ETX\STX\DC2\EOT\253\EOT\CAN\EM\n\+ \\f\n\+ \\EOT\ENQ\NUL\STX\EOT\DC2\EOT\254\EOT\EOT\EM\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\EOT\SOH\DC2\EOT\254\EOT\EOT\DC4\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\EOT\STX\DC2\EOT\254\EOT\ETB\CAN\n\+ \\f\n\+ \\EOT\ENQ\NUL\STX\ENQ\DC2\EOT\255\EOT\EOT\EM\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\ENQ\SOH\DC2\EOT\255\EOT\EOT\DC4\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\ENQ\STX\DC2\EOT\255\EOT\ETB\CAN\n\+ \\f\n\+ \\EOT\ENQ\NUL\STX\ACK\DC2\EOT\128\ENQ\EOT\GS\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\ACK\SOH\DC2\EOT\128\ENQ\EOT\CAN\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\ACK\STX\DC2\EOT\128\ENQ\ESC\FS\n\+ \\f\n\+ \\EOT\ENQ\NUL\STX\a\DC2\EOT\129\ENQ\EOT\ESC\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\a\SOH\DC2\EOT\129\ENQ\EOT\SYN\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\a\STX\DC2\EOT\129\ENQ\EM\SUB\n\+ \\f\n\+ \\EOT\ENQ\NUL\STX\b\DC2\EOT\130\ENQ\EOT\CAN\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\b\SOH\DC2\EOT\130\ENQ\EOT\DC3\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\b\STX\DC2\EOT\130\ENQ\SYN\ETB\n\+ \\f\n\+ \\EOT\ENQ\NUL\STX\t\DC2\EOT\131\ENQ\EOT\SUB\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\t\SOH\DC2\EOT\131\ENQ\EOT\NAK\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\t\STX\DC2\EOT\131\ENQ\CAN\EM\n\+ \\f\n\+ \\EOT\ENQ\NUL\STX\n\+ \\DC2\EOT\132\ENQ\EOT\SUB\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\n\+ \\SOH\DC2\EOT\132\ENQ\EOT\DC4\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\n\+ \\STX\DC2\EOT\132\ENQ\ETB\EM\n\+ \\f\n\+ \\EOT\ENQ\NUL\STX\v\DC2\EOT\133\ENQ\EOT\ESC\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\v\SOH\DC2\EOT\133\ENQ\EOT\NAK\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\v\STX\DC2\EOT\133\ENQ\CAN\SUB\n\+ \\f\n\+ \\EOT\ENQ\NUL\STX\f\DC2\EOT\134\ENQ\EOT!\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\f\SOH\DC2\EOT\134\ENQ\EOT\ESC\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\f\STX\DC2\EOT\134\ENQ\RS \n\+ \\f\n\+ \\EOT\ENQ\NUL\STX\r\DC2\EOT\135\ENQ\EOT\SUB\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\r\SOH\DC2\EOT\135\ENQ\EOT\DC4\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\r\STX\DC2\EOT\135\ENQ\ETB\EM\n\+ \\f\n\+ \\EOT\ENQ\NUL\STX\SO\DC2\EOT\136\ENQ\EOT\GS\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\SO\SOH\DC2\EOT\136\ENQ\EOT\ETB\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\SO\STX\DC2\EOT\136\ENQ\SUB\FS\n\+ \\f\n\+ \\EOT\ENQ\NUL\STX\SI\DC2\EOT\137\ENQ\EOT\SUB\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\SI\SOH\DC2\EOT\137\ENQ\EOT\DC4\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\SI\STX\DC2\EOT\137\ENQ\ETB\EM\n\+ \\f\n\+ \\EOT\ENQ\NUL\STX\DLE\DC2\EOT\138\ENQ\EOT\FS\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\DLE\SOH\DC2\EOT\138\ENQ\EOT\SYN\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\DLE\STX\DC2\EOT\138\ENQ\EM\ESC\n\+ \\f\n\+ \\EOT\ENQ\NUL\STX\DC1\DC2\EOT\139\ENQ\EOT\ESC\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\DC1\SOH\DC2\EOT\139\ENQ\EOT\NAK\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\DC1\STX\DC2\EOT\139\ENQ\CAN\SUB\n\+ \\f\n\+ \\EOT\ENQ\NUL\STX\DC2\DC2\EOT\140\ENQ\EOT\SYN\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\DC2\SOH\DC2\EOT\140\ENQ\EOT\DLE\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\DC2\STX\DC2\EOT\140\ENQ\DC3\NAK\n\+ \\f\n\+ \\EOT\ENQ\NUL\STX\DC3\DC2\EOT\141\ENQ\EOT\EM\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\DC3\SOH\DC2\EOT\141\ENQ\EOT\DC3\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\DC3\STX\DC2\EOT\141\ENQ\SYN\CAN\n\+ \\f\n\+ \\EOT\ENQ\NUL\STX\DC4\DC2\EOT\142\ENQ\EOT\EM\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\DC4\SOH\DC2\EOT\142\ENQ\EOT\DC3\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\DC4\STX\DC2\EOT\142\ENQ\SYN\CAN\n\+ \\f\n\+ \\EOT\ENQ\NUL\STX\NAK\DC2\EOT\143\ENQ\EOT\EM\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\NAK\SOH\DC2\EOT\143\ENQ\EOT\DC3\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\NAK\STX\DC2\EOT\143\ENQ\SYN\CAN\n\+ \\f\n\+ \\EOT\ENQ\NUL\STX\SYN\DC2\EOT\144\ENQ\EOT\CAN\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\SYN\SOH\DC2\EOT\144\ENQ\EOT\DC2\n\+ \\r\n\+ \\ENQ\ENQ\NUL\STX\SYN\STX\DC2\EOT\144\ENQ\NAK\ETB\n\+ \\f\n\+ \\STX\ENQ\SOH\DC2\ACK\147\ENQ\NUL\184\ENQ\SOH\n\+ \\v\n\+ \\ETX\ENQ\SOH\SOH\DC2\EOT\147\ENQ\ENQ\DC1\n\+ \+\n\+ \\EOT\ENQ\SOH\STX\NUL\DC2\EOT\151\ENQ\EOT\DC2\SUB\GS\n\+ \Payment is still in flight.\n\+ \\n\+ \\r\n\+ \\ENQ\ENQ\SOH\STX\NUL\SOH\DC2\EOT\151\ENQ\EOT\r\n\+ \\r\n\+ \\ENQ\ENQ\SOH\STX\NUL\STX\DC2\EOT\151\ENQ\DLE\DC1\n\+ \/\n\+ \\EOT\ENQ\SOH\STX\SOH\DC2\EOT\156\ENQ\EOT\DC2\SUB!\n\+ \Payment completed successfully.\n\+ \\n\+ \\r\n\+ \\ENQ\ENQ\SOH\STX\SOH\SOH\DC2\EOT\156\ENQ\EOT\r\n\+ \\r\n\+ \\ENQ\ENQ\SOH\STX\SOH\STX\DC2\EOT\156\ENQ\DLE\DC1\n\+ \S\n\+ \\EOT\ENQ\SOH\STX\STX\DC2\EOT\161\ENQ\EOT\ETB\SUBE\n\+ \There are more routes to try, but the payment timeout was exceeded.\n\+ \\n\+ \\r\n\+ \\ENQ\ENQ\SOH\STX\STX\SOH\DC2\EOT\161\ENQ\EOT\DC2\n\+ \\r\n\+ \\ENQ\ENQ\SOH\STX\STX\STX\DC2\EOT\161\ENQ\NAK\SYN\n\+ \s\n\+ \\EOT\ENQ\SOH\STX\ETX\DC2\EOT\167\ENQ\EOT\CAN\SUBe\n\+ \All possible routes were tried and failed permanently. Or were no\n\+ \routes to the destination at all.\n\+ \\n\+ \\r\n\+ \\ENQ\ENQ\SOH\STX\ETX\SOH\DC2\EOT\167\ENQ\EOT\DC3\n\+ \\r\n\+ \\ENQ\ENQ\SOH\STX\ETX\STX\DC2\EOT\167\ENQ\SYN\ETB\n\+ \4\n\+ \\EOT\ENQ\SOH\STX\EOT\DC2\EOT\172\ENQ\EOT\NAK\SUB&\n\+ \A non-recoverable error has occured.\n\+ \\n\+ \\r\n\+ \\ENQ\ENQ\SOH\STX\EOT\SOH\DC2\EOT\172\ENQ\EOT\DLE\n\+ \\r\n\+ \\ENQ\ENQ\SOH\STX\EOT\STX\DC2\EOT\172\ENQ\DC3\DC4\n\+ \a\n\+ \\EOT\ENQ\SOH\STX\ENQ\DC2\EOT\178\ENQ\EOT)\SUBS\n\+ \Payment details incorrect (unknown hash, invalid amt or\n\+ \invalid final cltv delta)\n\+ \\n\+ \\r\n\+ \\ENQ\ENQ\SOH\STX\ENQ\SOH\DC2\EOT\178\ENQ\EOT$\n\+ \\r\n\+ \\ENQ\ENQ\SOH\STX\ENQ\STX\DC2\EOT\178\ENQ'(\n\+ \+\n\+ \\EOT\ENQ\SOH\STX\ACK\DC2\EOT\183\ENQ\EOT$\SUB\GS\n\+ \Insufficient local balance.\n\+ \\n\+ \\r\n\+ \\ENQ\ENQ\SOH\STX\ACK\SOH\DC2\EOT\183\ENQ\EOT\US\n\+ \\r\n\+ \\ENQ\ENQ\SOH\STX\ACK\STX\DC2\EOT\183\ENQ\"#\n\+ \\f\n\+ \\STX\EOT\RS\DC2\ACK\186\ENQ\NUL\201\ENQ\SOH\n\+ \\v\n\+ \\ETX\EOT\RS\SOH\DC2\EOT\186\ENQ\b\NAK\n\+ \0\n\+ \\EOT\EOT\RS\STX\NUL\DC2\EOT\188\ENQ\EOT\ESC\SUB\" Current state the payment is in.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\RS\STX\NUL\EOT\DC2\ACK\188\ENQ\EOT\186\ENQ\ETB\n\+ \\r\n\+ \\ENQ\EOT\RS\STX\NUL\ACK\DC2\EOT\188\ENQ\EOT\DLE\n\+ \\r\n\+ \\ENQ\EOT\RS\STX\NUL\SOH\DC2\EOT\188\ENQ\DC1\SYN\n\+ \\r\n\+ \\ENQ\EOT\RS\STX\NUL\ETX\DC2\EOT\188\ENQ\EM\SUB\n\+ \E\n\+ \\EOT\EOT\RS\STX\SOH\DC2\EOT\193\ENQ\EOT\ETB\SUB7\n\+ \The pre-image of the payment when state is SUCCEEDED.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\RS\STX\SOH\EOT\DC2\ACK\193\ENQ\EOT\188\ENQ\ESC\n\+ \\r\n\+ \\ENQ\EOT\RS\STX\SOH\ENQ\DC2\EOT\193\ENQ\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\RS\STX\SOH\SOH\DC2\EOT\193\ENQ\n\+ \\DC2\n\+ \\r\n\+ \\ENQ\EOT\RS\STX\SOH\ETX\DC2\EOT\193\ENQ\NAK\SYN\n\+ \\v\n\+ \\ETX\EOT\RS\t\DC2\EOT\195\ENQ\EOT\SI\n\+ \\f\n\+ \\EOT\EOT\RS\t\NUL\DC2\EOT\195\ENQ\r\SO\n\+ \\r\n\+ \\ENQ\EOT\RS\t\NUL\SOH\DC2\EOT\195\ENQ\r\SO\n\+ \\r\n\+ \\ENQ\EOT\RS\t\NUL\STX\DC2\EOT\195\ENQ\r\SO\n\+ \O\n\+ \\EOT\EOT\RS\STX\STX\DC2\EOT\200\ENQ\EOT)\SUBA\n\+ \The HTLCs made in attempt to settle the payment [EXPERIMENTAL].\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\RS\STX\STX\EOT\DC2\EOT\200\ENQ\EOT\f\n\+ \\r\n\+ \\ENQ\EOT\RS\STX\STX\ACK\DC2\EOT\200\ENQ\r\RS\n\+ \\r\n\+ \\ENQ\EOT\RS\STX\STX\SOH\DC2\EOT\200\ENQ\US$\n\+ \\r\n\+ \\ENQ\EOT\RS\STX\STX\ETX\DC2\EOT\200\ENQ'(\n\+ \\f\n\+ \\STX\EOT\US\DC2\ACK\203\ENQ\NUL\209\ENQ\SOH\n\+ \\v\n\+ \\ETX\EOT\US\SOH\DC2\EOT\203\ENQ\b\DC2\n\+ \H\n\+ \\EOT\EOT\US\STX\NUL\DC2\EOT\205\ENQ\EOT\ETB\SUB:/ The id of the channel that the is part of this circuit.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\US\STX\NUL\EOT\DC2\ACK\205\ENQ\EOT\203\ENQ\DC4\n\+ \\r\n\+ \\ENQ\EOT\US\STX\NUL\ENQ\DC2\EOT\205\ENQ\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\US\STX\NUL\SOH\DC2\EOT\205\ENQ\v\DC2\n\+ \\r\n\+ \\ENQ\EOT\US\STX\NUL\ETX\DC2\EOT\205\ENQ\NAK\SYN\n\+ \H\n\+ \\EOT\EOT\US\STX\SOH\DC2\EOT\208\ENQ\EOT\ETB\SUB:/ The index of the incoming htlc in the incoming channel.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\US\STX\SOH\EOT\DC2\ACK\208\ENQ\EOT\205\ENQ\ETB\n\+ \\r\n\+ \\ENQ\EOT\US\STX\SOH\ENQ\DC2\EOT\208\ENQ\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\US\STX\SOH\SOH\DC2\EOT\208\ENQ\v\DC2\n\+ \\r\n\+ \\ENQ\EOT\US\STX\SOH\ETX\DC2\EOT\208\ENQ\NAK\SYN\n\+ \\f\n\+ \\STX\EOT \DC2\ACK\211\ENQ\NUL\247\ENQ\SOH\n\+ \\v\n\+ \\ETX\EOT \SOH\DC2\EOT\211\ENQ\b#\n\+ \q\n\+ \\EOT\EOT \STX\NUL\DC2\EOT\216\ENQ\EOT(\SUBc\n\+ \The key of this forwarded htlc. It defines the incoming channel id and\n\+ \the index in this channel.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT \STX\NUL\EOT\DC2\ACK\216\ENQ\EOT\211\ENQ%\n\+ \\r\n\+ \\ENQ\EOT \STX\NUL\ACK\DC2\EOT\216\ENQ\EOT\SO\n\+ \\r\n\+ \\ENQ\EOT \STX\NUL\SOH\DC2\EOT\216\ENQ\SI#\n\+ \\r\n\+ \\ENQ\EOT \STX\NUL\ETX\DC2\EOT\216\ENQ&'\n\+ \)\n\+ \\EOT\EOT \STX\SOH\DC2\EOT\219\ENQ\EOT$\SUB\ESC The incoming htlc amount.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT \STX\SOH\EOT\DC2\ACK\219\ENQ\EOT\216\ENQ(\n\+ \\r\n\+ \\ENQ\EOT \STX\SOH\ENQ\DC2\EOT\219\ENQ\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT \STX\SOH\SOH\DC2\EOT\219\ENQ\v\US\n\+ \\r\n\+ \\ENQ\EOT \STX\SOH\ETX\DC2\EOT\219\ENQ\"#\n\+ \)\n\+ \\EOT\EOT \STX\STX\DC2\EOT\222\ENQ\EOT\US\SUB\ESC The incoming htlc expiry.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT \STX\STX\EOT\DC2\ACK\222\ENQ\EOT\219\ENQ$\n\+ \\r\n\+ \\ENQ\EOT \STX\STX\ENQ\DC2\EOT\222\ENQ\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT \STX\STX\SOH\DC2\EOT\222\ENQ\v\SUB\n\+ \\r\n\+ \\ENQ\EOT \STX\STX\ETX\DC2\EOT\222\ENQ\GS\RS\n\+ \]\n\+ \\EOT\EOT \STX\ETX\DC2\EOT\228\ENQ\EOT\ESC\SUBO\n\+ \The htlc payment hash. This value is not guaranteed to be unique per\n\+ \request.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT \STX\ETX\EOT\DC2\ACK\228\ENQ\EOT\222\ENQ\US\n\+ \\r\n\+ \\ENQ\EOT \STX\ETX\ENQ\DC2\EOT\228\ENQ\EOT\t\n\+ \\r\n\+ \\ENQ\EOT \STX\ETX\SOH\DC2\EOT\228\ENQ\n\+ \\SYN\n\+ \\r\n\+ \\ENQ\EOT \STX\ETX\ETX\DC2\EOT\228\ENQ\EM\SUB\n\+ \\133\STX\n\+ \\EOT\EOT \STX\EOT\DC2\EOT\234\ENQ\EOT*\SUB\246\SOH The requested outgoing channel id for this forwarded htlc. Because of\n\+ \ non-strict forwarding, this isn't necessarily the channel over which the\n\+ \ packet will be forwarded eventually. A different channel to the same peer\n\+ \ may be selected as well.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT \STX\EOT\EOT\DC2\ACK\234\ENQ\EOT\228\ENQ\ESC\n\+ \\r\n\+ \\ENQ\EOT \STX\EOT\ENQ\DC2\EOT\234\ENQ\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT \STX\EOT\SOH\DC2\EOT\234\ENQ\v%\n\+ \\r\n\+ \\ENQ\EOT \STX\EOT\ETX\DC2\EOT\234\ENQ()\n\+ \)\n\+ \\EOT\EOT \STX\ENQ\DC2\EOT\237\ENQ\EOT$\SUB\ESC The outgoing htlc amount.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT \STX\ENQ\EOT\DC2\ACK\237\ENQ\EOT\234\ENQ*\n\+ \\r\n\+ \\ENQ\EOT \STX\ENQ\ENQ\DC2\EOT\237\ENQ\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT \STX\ENQ\SOH\DC2\EOT\237\ENQ\v\US\n\+ \\r\n\+ \\ENQ\EOT \STX\ENQ\ETX\DC2\EOT\237\ENQ\"#\n\+ \)\n\+ \\EOT\EOT \STX\ACK\DC2\EOT\240\ENQ\EOT\US\SUB\ESC The outgoing htlc expiry.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT \STX\ACK\EOT\DC2\ACK\240\ENQ\EOT\237\ENQ$\n\+ \\r\n\+ \\ENQ\EOT \STX\ACK\ENQ\DC2\EOT\240\ENQ\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\EOT \STX\ACK\SOH\DC2\EOT\240\ENQ\v\SUB\n\+ \\r\n\+ \\ENQ\EOT \STX\ACK\ETX\DC2\EOT\240\ENQ\GS\RS\n\+ \D\n\+ \\EOT\EOT \STX\a\DC2\EOT\243\ENQ\EOT*\SUB6 Any custom records that were present in the payload.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT \STX\a\EOT\DC2\ACK\243\ENQ\EOT\240\ENQ\US\n\+ \\r\n\+ \\ENQ\EOT \STX\a\ACK\DC2\EOT\243\ENQ\EOT\SYN\n\+ \\r\n\+ \\ENQ\EOT \STX\a\SOH\DC2\EOT\243\ENQ\ETB%\n\+ \\r\n\+ \\ENQ\EOT \STX\a\ETX\DC2\EOT\243\ENQ()\n\+ \/\n\+ \\EOT\EOT \STX\b\DC2\EOT\246\ENQ\EOT\EM\SUB! The onion blob for the next hop\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT \STX\b\EOT\DC2\ACK\246\ENQ\EOT\243\ENQ*\n\+ \\r\n\+ \\ENQ\EOT \STX\b\ENQ\DC2\EOT\246\ENQ\EOT\t\n\+ \\r\n\+ \\ENQ\EOT \STX\b\SOH\DC2\EOT\246\ENQ\n\+ \\DC4\n\+ \\r\n\+ \\ENQ\EOT \STX\b\ETX\DC2\EOT\246\ENQ\ETB\CAN\n\+ \\157\STX\n\+ \\STX\EOT!\DC2\ACK\128\ACK\NUL\140\ACK\SOH\SUB\142\STX*\n\+ \ForwardHtlcInterceptResponse enables the caller to resolve a previously hold\n\+ \forward. The caller can choose either to:\n\+ \- `Resume`: Execute the default behavior (usually forward).\n\+ \- `Reject`: Fail the htlc backwards.\n\+ \- `Settle`: Settle this htlc with a given preimage.\n\+ \\n\+ \\v\n\+ \\ETX\EOT!\SOH\DC2\EOT\128\ACK\b$\n\+ \r\n\+ \\EOT\EOT!\STX\NUL\DC2\EOT\133\ACK\EOT(\SUBd*\n\+ \The key of this forwarded htlc. It defines the incoming channel id and\n\+ \the index in this channel.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT!\STX\NUL\EOT\DC2\ACK\133\ACK\EOT\128\ACK&\n\+ \\r\n\+ \\ENQ\EOT!\STX\NUL\ACK\DC2\EOT\133\ACK\EOT\SO\n\+ \\r\n\+ \\ENQ\EOT!\STX\NUL\SOH\DC2\EOT\133\ACK\SI#\n\+ \\r\n\+ \\ENQ\EOT!\STX\NUL\ETX\DC2\EOT\133\ACK&'\n\+ \=\n\+ \\EOT\EOT!\STX\SOH\DC2\EOT\136\ACK\EOT(\SUB/ The resolve action for this intercepted htlc.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT!\STX\SOH\EOT\DC2\ACK\136\ACK\EOT\133\ACK(\n\+ \\r\n\+ \\ENQ\EOT!\STX\SOH\ACK\DC2\EOT\136\ACK\EOT\FS\n\+ \\r\n\+ \\ENQ\EOT!\STX\SOH\SOH\DC2\EOT\136\ACK\GS#\n\+ \\r\n\+ \\ENQ\EOT!\STX\SOH\ETX\DC2\EOT\136\ACK&'\n\+ \B\n\+ \\EOT\EOT!\STX\STX\DC2\EOT\139\ACK\EOT\ETB\SUB4 The preimage in case the resolve action is Settle.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT!\STX\STX\EOT\DC2\ACK\139\ACK\EOT\136\ACK(\n\+ \\r\n\+ \\ENQ\EOT!\STX\STX\ENQ\DC2\EOT\139\ACK\EOT\t\n\+ \\r\n\+ \\ENQ\EOT!\STX\STX\SOH\DC2\EOT\139\ACK\n\+ \\DC2\n\+ \\r\n\+ \\ENQ\EOT!\STX\STX\ETX\DC2\EOT\139\ACK\NAK\SYN\n\+ \\f\n\+ \\STX\ENQ\STX\DC2\ACK\142\ACK\NUL\146\ACK\SOH\n\+ \\v\n\+ \\ETX\ENQ\STX\SOH\DC2\EOT\142\ACK\ENQ\GS\n\+ \\f\n\+ \\EOT\ENQ\STX\STX\NUL\DC2\EOT\143\ACK\EOT\SI\n\+ \\r\n\+ \\ENQ\ENQ\STX\STX\NUL\SOH\DC2\EOT\143\ACK\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\ENQ\STX\STX\NUL\STX\DC2\EOT\143\ACK\r\SO\n\+ \\f\n\+ \\EOT\ENQ\STX\STX\SOH\DC2\EOT\144\ACK\EOT\r\n\+ \\r\n\+ \\ENQ\ENQ\STX\STX\SOH\SOH\DC2\EOT\144\ACK\EOT\b\n\+ \\r\n\+ \\ENQ\ENQ\STX\STX\SOH\STX\DC2\EOT\144\ACK\v\f\n\+ \\f\n\+ \\EOT\ENQ\STX\STX\STX\DC2\EOT\145\ACK\EOT\SI\n\+ \\r\n\+ \\ENQ\ENQ\STX\STX\STX\SOH\DC2\EOT\145\ACK\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\ENQ\STX\STX\STX\STX\DC2\EOT\145\ACK\r\SO\n\+ \\f\n\+ \\STX\EOT\"\DC2\ACK\148\ACK\NUL\152\ACK\SOH\n\+ \\v\n\+ \\ETX\EOT\"\SOH\DC2\EOT\148\ACK\b\US\n\+ \\f\n\+ \\EOT\EOT\"\STX\NUL\DC2\EOT\149\ACK\EOT&\n\+ \\SI\n\+ \\ENQ\EOT\"\STX\NUL\EOT\DC2\ACK\149\ACK\EOT\148\ACK!\n\+ \\r\n\+ \\ENQ\EOT\"\STX\NUL\ACK\DC2\EOT\149\ACK\EOT\SYN\n\+ \\r\n\+ \\ENQ\EOT\"\STX\NUL\SOH\DC2\EOT\149\ACK\ETB!\n\+ \\r\n\+ \\ENQ\EOT\"\STX\NUL\ETX\DC2\EOT\149\ACK$%\n\+ \\f\n\+ \\EOT\EOT\"\STX\SOH\DC2\EOT\151\ACK\EOT \n\+ \\SI\n\+ \\ENQ\EOT\"\STX\SOH\EOT\DC2\ACK\151\ACK\EOT\149\ACK&\n\+ \\r\n\+ \\ENQ\EOT\"\STX\SOH\ACK\DC2\EOT\151\ACK\EOT\DC4\n\+ \\r\n\+ \\ENQ\EOT\"\STX\SOH\SOH\DC2\EOT\151\ACK\NAK\ESC\n\+ \\r\n\+ \\ENQ\EOT\"\STX\SOH\ETX\DC2\EOT\151\ACK\RS\US\n\+ \\f\n\+ \\STX\ENQ\ETX\DC2\ACK\154\ACK\NUL\158\ACK\SOH\n\+ \\v\n\+ \\ETX\ENQ\ETX\SOH\DC2\EOT\154\ACK\ENQ\NAK\n\+ \\f\n\+ \\EOT\ENQ\ETX\STX\NUL\DC2\EOT\155\ACK\EOT\SI\n\+ \\r\n\+ \\ENQ\ENQ\ETX\STX\NUL\SOH\DC2\EOT\155\ACK\EOT\n\+ \\n\+ \\r\n\+ \\ENQ\ENQ\ETX\STX\NUL\STX\DC2\EOT\155\ACK\r\SO\n\+ \\f\n\+ \\EOT\ENQ\ETX\STX\SOH\DC2\EOT\156\ACK\EOT\DLE\n\+ \\r\n\+ \\ENQ\ENQ\ETX\STX\SOH\SOH\DC2\EOT\156\ACK\EOT\v\n\+ \\r\n\+ \\ENQ\ENQ\ETX\STX\SOH\STX\DC2\EOT\156\ACK\SO\SI\n\+ \\f\n\+ \\EOT\ENQ\ETX\STX\STX\DC2\EOT\157\ACK\EOT\r\n\+ \\r\n\+ \\ENQ\ENQ\ETX\STX\STX\SOH\DC2\EOT\157\ACK\EOT\b\n\+ \\r\n\+ \\ENQ\ENQ\ETX\STX\STX\STX\DC2\EOT\157\ACK\v\f\n\+ \\f\n\+ \\STX\EOT#\DC2\ACK\160\ACK\NUL\161\ACK\SOH\n\+ \\v\n\+ \\ETX\EOT#\SOH\DC2\EOT\160\ACK\b b\ACKproto3"
+ src/Proto/RouterGrpc_Fields.hs view
@@ -0,0 +1,620 @@+{- This file was auto-generated from router_grpc.proto by the proto-lens-protoc program. -}+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies, UndecidableInstances, GeneralizedNewtypeDeriving, MultiParamTypeClasses, FlexibleContexts, FlexibleInstances, PatternSynonyms, MagicHash, NoImplicitPrelude, DataKinds, BangPatterns, TypeApplications, OverloadedStrings, DerivingStrategies#-}+{-# OPTIONS_GHC -Wno-unused-imports#-}+{-# OPTIONS_GHC -Wno-duplicate-exports#-}+{-# OPTIONS_GHC -Wno-dodgy-exports#-}+module Proto.RouterGrpc_Fields where+import qualified Data.ProtoLens.Runtime.Prelude as Prelude+import qualified Data.ProtoLens.Runtime.Data.Int as Data.Int+import qualified Data.ProtoLens.Runtime.Data.Monoid as Data.Monoid+import qualified Data.ProtoLens.Runtime.Data.Word as Data.Word+import qualified Data.ProtoLens.Runtime.Data.ProtoLens as Data.ProtoLens+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Bytes as Data.ProtoLens.Encoding.Bytes+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Growing as Data.ProtoLens.Encoding.Growing+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Parser.Unsafe as Data.ProtoLens.Encoding.Parser.Unsafe+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Wire as Data.ProtoLens.Encoding.Wire+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Field as Data.ProtoLens.Field+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Message.Enum as Data.ProtoLens.Message.Enum+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Service.Types as Data.ProtoLens.Service.Types+import qualified Data.ProtoLens.Runtime.Lens.Family2 as Lens.Family2+import qualified Data.ProtoLens.Runtime.Lens.Family2.Unchecked as Lens.Family2.Unchecked+import qualified Data.ProtoLens.Runtime.Data.Text as Data.Text+import qualified Data.ProtoLens.Runtime.Data.Map as Data.Map+import qualified Data.ProtoLens.Runtime.Data.ByteString as Data.ByteString+import qualified Data.ProtoLens.Runtime.Data.ByteString.Char8 as Data.ByteString.Char8+import qualified Data.ProtoLens.Runtime.Data.Text.Encoding as Data.Text.Encoding+import qualified Data.ProtoLens.Runtime.Data.Vector as Data.Vector+import qualified Data.ProtoLens.Runtime.Data.Vector.Generic as Data.Vector.Generic+import qualified Data.ProtoLens.Runtime.Data.Vector.Unboxed as Data.Vector.Unboxed+import qualified Data.ProtoLens.Runtime.Text.Read as Text.Read+import qualified Proto.LndGrpc+action ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "action" a) =>+ Lens.Family2.LensLike' f s a+action = Data.ProtoLens.Field.field @"action"+allowSelfPayment ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "allowSelfPayment" a) =>+ Lens.Family2.LensLike' f s a+allowSelfPayment = Data.ProtoLens.Field.field @"allowSelfPayment"+amp ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "amp" a) =>+ Lens.Family2.LensLike' f s a+amp = Data.ProtoLens.Field.field @"amp"+amt ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "amt" a) =>+ Lens.Family2.LensLike' f s a+amt = Data.ProtoLens.Field.field @"amt"+amtMsat ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "amtMsat" a) =>+ Lens.Family2.LensLike' f s a+amtMsat = Data.ProtoLens.Field.field @"amtMsat"+amtSat ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "amtSat" a) =>+ Lens.Family2.LensLike' f s a+amtSat = Data.ProtoLens.Field.field @"amtSat"+chanId ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "chanId" a) =>+ Lens.Family2.LensLike' f s a+chanId = Data.ProtoLens.Field.field @"chanId"+chanPoint ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "chanPoint" a) =>+ Lens.Family2.LensLike' f s a+chanPoint = Data.ProtoLens.Field.field @"chanPoint"+cltvLimit ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "cltvLimit" a) =>+ Lens.Family2.LensLike' f s a+cltvLimit = Data.ProtoLens.Field.field @"cltvLimit"+config ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "config" a) =>+ Lens.Family2.LensLike' f s a+config = Data.ProtoLens.Field.field @"config"+customRecords ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "customRecords" a) =>+ Lens.Family2.LensLike' f s a+customRecords = Data.ProtoLens.Field.field @"customRecords"+dest ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "dest" a) =>+ Lens.Family2.LensLike' f s a+dest = Data.ProtoLens.Field.field @"dest"+destCustomRecords ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "destCustomRecords" a) =>+ Lens.Family2.LensLike' f s a+destCustomRecords = Data.ProtoLens.Field.field @"destCustomRecords"+destFeatures ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "destFeatures" a) =>+ Lens.Family2.LensLike' f s a+destFeatures = Data.ProtoLens.Field.field @"destFeatures"+eventType ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "eventType" a) =>+ Lens.Family2.LensLike' f s a+eventType = Data.ProtoLens.Field.field @"eventType"+failAmtMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "failAmtMsat" a) =>+ Lens.Family2.LensLike' f s a+failAmtMsat = Data.ProtoLens.Field.field @"failAmtMsat"+failAmtSat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "failAmtSat" a) =>+ Lens.Family2.LensLike' f s a+failAmtSat = Data.ProtoLens.Field.field @"failAmtSat"+failTime ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "failTime" a) =>+ Lens.Family2.LensLike' f s a+failTime = Data.ProtoLens.Field.field @"failTime"+failure ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "failure" a) =>+ Lens.Family2.LensLike' f s a+failure = Data.ProtoLens.Field.field @"failure"+failureDetail ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "failureDetail" a) =>+ Lens.Family2.LensLike' f s a+failureDetail = Data.ProtoLens.Field.field @"failureDetail"+failureString ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "failureString" a) =>+ Lens.Family2.LensLike' f s a+failureString = Data.ProtoLens.Field.field @"failureString"+feeLimitMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "feeLimitMsat" a) =>+ Lens.Family2.LensLike' f s a+feeLimitMsat = Data.ProtoLens.Field.field @"feeLimitMsat"+feeLimitSat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "feeLimitSat" a) =>+ Lens.Family2.LensLike' f s a+feeLimitSat = Data.ProtoLens.Field.field @"feeLimitSat"+finalCltvDelta ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "finalCltvDelta" a) =>+ Lens.Family2.LensLike' f s a+finalCltvDelta = Data.ProtoLens.Field.field @"finalCltvDelta"+forwardEvent ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "forwardEvent" a) =>+ Lens.Family2.LensLike' f s a+forwardEvent = Data.ProtoLens.Field.field @"forwardEvent"+forwardFailEvent ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "forwardFailEvent" a) =>+ Lens.Family2.LensLike' f s a+forwardFailEvent = Data.ProtoLens.Field.field @"forwardFailEvent"+fromNode ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "fromNode" a) =>+ Lens.Family2.LensLike' f s a+fromNode = Data.ProtoLens.Field.field @"fromNode"+halfLifeSeconds ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "halfLifeSeconds" a) =>+ Lens.Family2.LensLike' f s a+halfLifeSeconds = Data.ProtoLens.Field.field @"halfLifeSeconds"+history ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "history" a) =>+ Lens.Family2.LensLike' f s a+history = Data.ProtoLens.Field.field @"history"+hopProbability ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "hopProbability" a) =>+ Lens.Family2.LensLike' f s a+hopProbability = Data.ProtoLens.Field.field @"hopProbability"+hopPubkeys ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "hopPubkeys" a) =>+ Lens.Family2.LensLike' f s a+hopPubkeys = Data.ProtoLens.Field.field @"hopPubkeys"+htlcId ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "htlcId" a) =>+ Lens.Family2.LensLike' f s a+htlcId = Data.ProtoLens.Field.field @"htlcId"+htlcs ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "htlcs" a) =>+ Lens.Family2.LensLike' f s a+htlcs = Data.ProtoLens.Field.field @"htlcs"+incomingAmountMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "incomingAmountMsat" a) =>+ Lens.Family2.LensLike' f s a+incomingAmountMsat+ = Data.ProtoLens.Field.field @"incomingAmountMsat"+incomingAmtMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "incomingAmtMsat" a) =>+ Lens.Family2.LensLike' f s a+incomingAmtMsat = Data.ProtoLens.Field.field @"incomingAmtMsat"+incomingChannelId ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "incomingChannelId" a) =>+ Lens.Family2.LensLike' f s a+incomingChannelId = Data.ProtoLens.Field.field @"incomingChannelId"+incomingCircuitKey ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "incomingCircuitKey" a) =>+ Lens.Family2.LensLike' f s a+incomingCircuitKey+ = Data.ProtoLens.Field.field @"incomingCircuitKey"+incomingExpiry ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "incomingExpiry" a) =>+ Lens.Family2.LensLike' f s a+incomingExpiry = Data.ProtoLens.Field.field @"incomingExpiry"+incomingHtlcId ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "incomingHtlcId" a) =>+ Lens.Family2.LensLike' f s a+incomingHtlcId = Data.ProtoLens.Field.field @"incomingHtlcId"+incomingTimelock ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "incomingTimelock" a) =>+ Lens.Family2.LensLike' f s a+incomingTimelock = Data.ProtoLens.Field.field @"incomingTimelock"+info ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "info" a) =>+ Lens.Family2.LensLike' f s a+info = Data.ProtoLens.Field.field @"info"+key ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "key" a) =>+ Lens.Family2.LensLike' f s a+key = Data.ProtoLens.Field.field @"key"+lastHopPubkey ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "lastHopPubkey" a) =>+ Lens.Family2.LensLike' f s a+lastHopPubkey = Data.ProtoLens.Field.field @"lastHopPubkey"+linkFailEvent ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "linkFailEvent" a) =>+ Lens.Family2.LensLike' f s a+linkFailEvent = Data.ProtoLens.Field.field @"linkFailEvent"+maxParts ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maxParts" a) =>+ Lens.Family2.LensLike' f s a+maxParts = Data.ProtoLens.Field.field @"maxParts"+maxShardSizeMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maxShardSizeMsat" a) =>+ Lens.Family2.LensLike' f s a+maxShardSizeMsat = Data.ProtoLens.Field.field @"maxShardSizeMsat"+maximumPaymentResults ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maximumPaymentResults" a) =>+ Lens.Family2.LensLike' f s a+maximumPaymentResults+ = Data.ProtoLens.Field.field @"maximumPaymentResults"+maybe'chanPoint ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'chanPoint" a) =>+ Lens.Family2.LensLike' f s a+maybe'chanPoint = Data.ProtoLens.Field.field @"maybe'chanPoint"+maybe'config ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'config" a) =>+ Lens.Family2.LensLike' f s a+maybe'config = Data.ProtoLens.Field.field @"maybe'config"+maybe'event ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'event" a) =>+ Lens.Family2.LensLike' f s a+maybe'event = Data.ProtoLens.Field.field @"maybe'event"+maybe'failure ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'failure" a) =>+ Lens.Family2.LensLike' f s a+maybe'failure = Data.ProtoLens.Field.field @"maybe'failure"+maybe'forwardEvent ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'forwardEvent" a) =>+ Lens.Family2.LensLike' f s a+maybe'forwardEvent+ = Data.ProtoLens.Field.field @"maybe'forwardEvent"+maybe'forwardFailEvent ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'forwardFailEvent" a) =>+ Lens.Family2.LensLike' f s a+maybe'forwardFailEvent+ = Data.ProtoLens.Field.field @"maybe'forwardFailEvent"+maybe'history ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'history" a) =>+ Lens.Family2.LensLike' f s a+maybe'history = Data.ProtoLens.Field.field @"maybe'history"+maybe'incomingCircuitKey ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'incomingCircuitKey" a) =>+ Lens.Family2.LensLike' f s a+maybe'incomingCircuitKey+ = Data.ProtoLens.Field.field @"maybe'incomingCircuitKey"+maybe'info ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'info" a) =>+ Lens.Family2.LensLike' f s a+maybe'info = Data.ProtoLens.Field.field @"maybe'info"+maybe'linkFailEvent ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'linkFailEvent" a) =>+ Lens.Family2.LensLike' f s a+maybe'linkFailEvent+ = Data.ProtoLens.Field.field @"maybe'linkFailEvent"+maybe'route ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'route" a) =>+ Lens.Family2.LensLike' f s a+maybe'route = Data.ProtoLens.Field.field @"maybe'route"+maybe'settleEvent ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'settleEvent" a) =>+ Lens.Family2.LensLike' f s a+maybe'settleEvent = Data.ProtoLens.Field.field @"maybe'settleEvent"+minimumFailureRelaxInterval ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "minimumFailureRelaxInterval" a) =>+ Lens.Family2.LensLike' f s a+minimumFailureRelaxInterval+ = Data.ProtoLens.Field.field @"minimumFailureRelaxInterval"+noInflightUpdates ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "noInflightUpdates" a) =>+ Lens.Family2.LensLike' f s a+noInflightUpdates = Data.ProtoLens.Field.field @"noInflightUpdates"+nodeFrom ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "nodeFrom" a) =>+ Lens.Family2.LensLike' f s a+nodeFrom = Data.ProtoLens.Field.field @"nodeFrom"+nodeTo ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "nodeTo" a) =>+ Lens.Family2.LensLike' f s a+nodeTo = Data.ProtoLens.Field.field @"nodeTo"+onionBlob ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "onionBlob" a) =>+ Lens.Family2.LensLike' f s a+onionBlob = Data.ProtoLens.Field.field @"onionBlob"+outgoingAmountMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "outgoingAmountMsat" a) =>+ Lens.Family2.LensLike' f s a+outgoingAmountMsat+ = Data.ProtoLens.Field.field @"outgoingAmountMsat"+outgoingAmtMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "outgoingAmtMsat" a) =>+ Lens.Family2.LensLike' f s a+outgoingAmtMsat = Data.ProtoLens.Field.field @"outgoingAmtMsat"+outgoingChanId ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "outgoingChanId" a) =>+ Lens.Family2.LensLike' f s a+outgoingChanId = Data.ProtoLens.Field.field @"outgoingChanId"+outgoingChanIds ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "outgoingChanIds" a) =>+ Lens.Family2.LensLike' f s a+outgoingChanIds = Data.ProtoLens.Field.field @"outgoingChanIds"+outgoingChannelId ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "outgoingChannelId" a) =>+ Lens.Family2.LensLike' f s a+outgoingChannelId = Data.ProtoLens.Field.field @"outgoingChannelId"+outgoingExpiry ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "outgoingExpiry" a) =>+ Lens.Family2.LensLike' f s a+outgoingExpiry = Data.ProtoLens.Field.field @"outgoingExpiry"+outgoingHtlcId ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "outgoingHtlcId" a) =>+ Lens.Family2.LensLike' f s a+outgoingHtlcId = Data.ProtoLens.Field.field @"outgoingHtlcId"+outgoingRequestedChanId ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "outgoingRequestedChanId" a) =>+ Lens.Family2.LensLike' f s a+outgoingRequestedChanId+ = Data.ProtoLens.Field.field @"outgoingRequestedChanId"+outgoingTimelock ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "outgoingTimelock" a) =>+ Lens.Family2.LensLike' f s a+outgoingTimelock = Data.ProtoLens.Field.field @"outgoingTimelock"+pairs ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "pairs" a) =>+ Lens.Family2.LensLike' f s a+pairs = Data.ProtoLens.Field.field @"pairs"+paymentAddr ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "paymentAddr" a) =>+ Lens.Family2.LensLike' f s a+paymentAddr = Data.ProtoLens.Field.field @"paymentAddr"+paymentHash ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "paymentHash" a) =>+ Lens.Family2.LensLike' f s a+paymentHash = Data.ProtoLens.Field.field @"paymentHash"+paymentRequest ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "paymentRequest" a) =>+ Lens.Family2.LensLike' f s a+paymentRequest = Data.ProtoLens.Field.field @"paymentRequest"+preimage ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "preimage" a) =>+ Lens.Family2.LensLike' f s a+preimage = Data.ProtoLens.Field.field @"preimage"+probability ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "probability" a) =>+ Lens.Family2.LensLike' f s a+probability = Data.ProtoLens.Field.field @"probability"+route ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "route" a) =>+ Lens.Family2.LensLike' f s a+route = Data.ProtoLens.Field.field @"route"+routeHints ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "routeHints" a) =>+ Lens.Family2.LensLike' f s a+routeHints = Data.ProtoLens.Field.field @"routeHints"+routingFeeMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "routingFeeMsat" a) =>+ Lens.Family2.LensLike' f s a+routingFeeMsat = Data.ProtoLens.Field.field @"routingFeeMsat"+settleEvent ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "settleEvent" a) =>+ Lens.Family2.LensLike' f s a+settleEvent = Data.ProtoLens.Field.field @"settleEvent"+state ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "state" a) =>+ Lens.Family2.LensLike' f s a+state = Data.ProtoLens.Field.field @"state"+successAmtMsat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "successAmtMsat" a) =>+ Lens.Family2.LensLike' f s a+successAmtMsat = Data.ProtoLens.Field.field @"successAmtMsat"+successAmtSat ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "successAmtSat" a) =>+ Lens.Family2.LensLike' f s a+successAmtSat = Data.ProtoLens.Field.field @"successAmtSat"+successTime ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "successTime" a) =>+ Lens.Family2.LensLike' f s a+successTime = Data.ProtoLens.Field.field @"successTime"+timeLockDelay ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "timeLockDelay" a) =>+ Lens.Family2.LensLike' f s a+timeLockDelay = Data.ProtoLens.Field.field @"timeLockDelay"+timeoutSeconds ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "timeoutSeconds" a) =>+ Lens.Family2.LensLike' f s a+timeoutSeconds = Data.ProtoLens.Field.field @"timeoutSeconds"+timestampNs ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "timestampNs" a) =>+ Lens.Family2.LensLike' f s a+timestampNs = Data.ProtoLens.Field.field @"timestampNs"+toNode ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "toNode" a) =>+ Lens.Family2.LensLike' f s a+toNode = Data.ProtoLens.Field.field @"toNode"+value ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "value" a) =>+ Lens.Family2.LensLike' f s a+value = Data.ProtoLens.Field.field @"value"+vec'destFeatures ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'destFeatures" a) =>+ Lens.Family2.LensLike' f s a+vec'destFeatures = Data.ProtoLens.Field.field @"vec'destFeatures"+vec'hopPubkeys ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'hopPubkeys" a) =>+ Lens.Family2.LensLike' f s a+vec'hopPubkeys = Data.ProtoLens.Field.field @"vec'hopPubkeys"+vec'htlcs ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'htlcs" a) =>+ Lens.Family2.LensLike' f s a+vec'htlcs = Data.ProtoLens.Field.field @"vec'htlcs"+vec'outgoingChanIds ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'outgoingChanIds" a) =>+ Lens.Family2.LensLike' f s a+vec'outgoingChanIds+ = Data.ProtoLens.Field.field @"vec'outgoingChanIds"+vec'pairs ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'pairs" a) =>+ Lens.Family2.LensLike' f s a+vec'pairs = Data.ProtoLens.Field.field @"vec'pairs"+vec'routeHints ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'routeHints" a) =>+ Lens.Family2.LensLike' f s a+vec'routeHints = Data.ProtoLens.Field.field @"vec'routeHints"+weight ::+ forall f s a.+ (Prelude.Functor f, Data.ProtoLens.Field.HasField s "weight" a) =>+ Lens.Family2.LensLike' f s a+weight = Data.ProtoLens.Field.field @"weight"+wireFailure ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "wireFailure" a) =>+ Lens.Family2.LensLike' f s a+wireFailure = Data.ProtoLens.Field.field @"wireFailure"
+ src/Proto/WalletUnlockerGrpc.hs view
@@ -0,0 +1,2121 @@+{- This file was auto-generated from wallet_unlocker_grpc.proto by the proto-lens-protoc program. -}+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies, UndecidableInstances, GeneralizedNewtypeDeriving, MultiParamTypeClasses, FlexibleContexts, FlexibleInstances, PatternSynonyms, MagicHash, NoImplicitPrelude, DataKinds, BangPatterns, TypeApplications, OverloadedStrings, DerivingStrategies#-}+{-# OPTIONS_GHC -Wno-unused-imports#-}+{-# OPTIONS_GHC -Wno-duplicate-exports#-}+{-# OPTIONS_GHC -Wno-dodgy-exports#-}+module Proto.WalletUnlockerGrpc (+ WalletUnlocker(..), ChangePasswordRequest(),+ ChangePasswordResponse(), GenSeedRequest(), GenSeedResponse(),+ InitWalletRequest(), InitWalletResponse(), UnlockWalletRequest(),+ UnlockWalletResponse()+ ) where+import qualified Data.ProtoLens.Runtime.Control.DeepSeq as Control.DeepSeq+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Prism as Data.ProtoLens.Prism+import qualified Data.ProtoLens.Runtime.Prelude as Prelude+import qualified Data.ProtoLens.Runtime.Data.Int as Data.Int+import qualified Data.ProtoLens.Runtime.Data.Monoid as Data.Monoid+import qualified Data.ProtoLens.Runtime.Data.Word as Data.Word+import qualified Data.ProtoLens.Runtime.Data.ProtoLens as Data.ProtoLens+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Bytes as Data.ProtoLens.Encoding.Bytes+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Growing as Data.ProtoLens.Encoding.Growing+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Parser.Unsafe as Data.ProtoLens.Encoding.Parser.Unsafe+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Wire as Data.ProtoLens.Encoding.Wire+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Field as Data.ProtoLens.Field+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Message.Enum as Data.ProtoLens.Message.Enum+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Service.Types as Data.ProtoLens.Service.Types+import qualified Data.ProtoLens.Runtime.Lens.Family2 as Lens.Family2+import qualified Data.ProtoLens.Runtime.Lens.Family2.Unchecked as Lens.Family2.Unchecked+import qualified Data.ProtoLens.Runtime.Data.Text as Data.Text+import qualified Data.ProtoLens.Runtime.Data.Map as Data.Map+import qualified Data.ProtoLens.Runtime.Data.ByteString as Data.ByteString+import qualified Data.ProtoLens.Runtime.Data.ByteString.Char8 as Data.ByteString.Char8+import qualified Data.ProtoLens.Runtime.Data.Text.Encoding as Data.Text.Encoding+import qualified Data.ProtoLens.Runtime.Data.Vector as Data.Vector+import qualified Data.ProtoLens.Runtime.Data.Vector.Generic as Data.Vector.Generic+import qualified Data.ProtoLens.Runtime.Data.Vector.Unboxed as Data.Vector.Unboxed+import qualified Data.ProtoLens.Runtime.Text.Read as Text.Read+import qualified Proto.LndGrpc+{- | Fields :+ + * 'Proto.WalletUnlockerGrpc_Fields.currentPassword' @:: Lens' ChangePasswordRequest Data.ByteString.ByteString@+ * 'Proto.WalletUnlockerGrpc_Fields.newPassword' @:: Lens' ChangePasswordRequest Data.ByteString.ByteString@+ * 'Proto.WalletUnlockerGrpc_Fields.statelessInit' @:: Lens' ChangePasswordRequest Prelude.Bool@+ * 'Proto.WalletUnlockerGrpc_Fields.newMacaroonRootKey' @:: Lens' ChangePasswordRequest Prelude.Bool@ -}+data ChangePasswordRequest+ = ChangePasswordRequest'_constructor {_ChangePasswordRequest'currentPassword :: !Data.ByteString.ByteString,+ _ChangePasswordRequest'newPassword :: !Data.ByteString.ByteString,+ _ChangePasswordRequest'statelessInit :: !Prelude.Bool,+ _ChangePasswordRequest'newMacaroonRootKey :: !Prelude.Bool,+ _ChangePasswordRequest'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show ChangePasswordRequest where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField ChangePasswordRequest "currentPassword" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _ChangePasswordRequest'currentPassword+ (\ x__ y__ -> x__ {_ChangePasswordRequest'currentPassword = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField ChangePasswordRequest "newPassword" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _ChangePasswordRequest'newPassword+ (\ x__ y__ -> x__ {_ChangePasswordRequest'newPassword = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField ChangePasswordRequest "statelessInit" Prelude.Bool where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _ChangePasswordRequest'statelessInit+ (\ x__ y__ -> x__ {_ChangePasswordRequest'statelessInit = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField ChangePasswordRequest "newMacaroonRootKey" Prelude.Bool where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _ChangePasswordRequest'newMacaroonRootKey+ (\ x__ y__+ -> x__ {_ChangePasswordRequest'newMacaroonRootKey = y__}))+ Prelude.id+instance Data.ProtoLens.Message ChangePasswordRequest where+ messageName _ = Data.Text.pack "lnrpc.ChangePasswordRequest"+ packedMessageDescriptor _+ = "\n\+ \\NAKChangePasswordRequest\DC2)\n\+ \\DLEcurrent_password\CAN\SOH \SOH(\fR\SIcurrentPassword\DC2!\n\+ \\fnew_password\CAN\STX \SOH(\fR\vnewPassword\DC2%\n\+ \\SOstateless_init\CAN\ETX \SOH(\bR\rstatelessInit\DC21\n\+ \\NAKnew_macaroon_root_key\CAN\EOT \SOH(\bR\DC2newMacaroonRootKey"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ currentPassword__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "current_password"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"currentPassword")) ::+ Data.ProtoLens.FieldDescriptor ChangePasswordRequest+ newPassword__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "new_password"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"newPassword")) ::+ Data.ProtoLens.FieldDescriptor ChangePasswordRequest+ statelessInit__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "stateless_init"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BoolField ::+ Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"statelessInit")) ::+ Data.ProtoLens.FieldDescriptor ChangePasswordRequest+ newMacaroonRootKey__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "new_macaroon_root_key"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BoolField ::+ Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"newMacaroonRootKey")) ::+ Data.ProtoLens.FieldDescriptor ChangePasswordRequest+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, currentPassword__field_descriptor),+ (Data.ProtoLens.Tag 2, newPassword__field_descriptor),+ (Data.ProtoLens.Tag 3, statelessInit__field_descriptor),+ (Data.ProtoLens.Tag 4, newMacaroonRootKey__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _ChangePasswordRequest'_unknownFields+ (\ x__ y__ -> x__ {_ChangePasswordRequest'_unknownFields = y__})+ defMessage+ = ChangePasswordRequest'_constructor+ {_ChangePasswordRequest'currentPassword = Data.ProtoLens.fieldDefault,+ _ChangePasswordRequest'newPassword = Data.ProtoLens.fieldDefault,+ _ChangePasswordRequest'statelessInit = Data.ProtoLens.fieldDefault,+ _ChangePasswordRequest'newMacaroonRootKey = Data.ProtoLens.fieldDefault,+ _ChangePasswordRequest'_unknownFields = []}+ parseMessage+ = let+ loop ::+ ChangePasswordRequest+ -> Data.ProtoLens.Encoding.Bytes.Parser ChangePasswordRequest+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "current_password"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"currentPassword") y x)+ 18+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "new_password"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"newPassword") y x)+ 24+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ ((Prelude./=) 0) Data.ProtoLens.Encoding.Bytes.getVarInt)+ "stateless_init"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"statelessInit") y x)+ 32+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ ((Prelude./=) 0) Data.ProtoLens.Encoding.Bytes.getVarInt)+ "new_macaroon_root_key"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"newMacaroonRootKey") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "ChangePasswordRequest"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"currentPassword") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view (Data.ProtoLens.Field.field @"newPassword") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 18)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"statelessInit") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 24)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt+ (\ b -> if b then 1 else 0)+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"newMacaroonRootKey") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 32)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt+ (\ b -> if b then 1 else 0)+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)))))+instance Control.DeepSeq.NFData ChangePasswordRequest where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_ChangePasswordRequest'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_ChangePasswordRequest'currentPassword x__)+ (Control.DeepSeq.deepseq+ (_ChangePasswordRequest'newPassword x__)+ (Control.DeepSeq.deepseq+ (_ChangePasswordRequest'statelessInit x__)+ (Control.DeepSeq.deepseq+ (_ChangePasswordRequest'newMacaroonRootKey x__) ()))))+{- | Fields :+ + * 'Proto.WalletUnlockerGrpc_Fields.adminMacaroon' @:: Lens' ChangePasswordResponse Data.ByteString.ByteString@ -}+data ChangePasswordResponse+ = ChangePasswordResponse'_constructor {_ChangePasswordResponse'adminMacaroon :: !Data.ByteString.ByteString,+ _ChangePasswordResponse'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show ChangePasswordResponse where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField ChangePasswordResponse "adminMacaroon" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _ChangePasswordResponse'adminMacaroon+ (\ x__ y__ -> x__ {_ChangePasswordResponse'adminMacaroon = y__}))+ Prelude.id+instance Data.ProtoLens.Message ChangePasswordResponse where+ messageName _ = Data.Text.pack "lnrpc.ChangePasswordResponse"+ packedMessageDescriptor _+ = "\n\+ \\SYNChangePasswordResponse\DC2%\n\+ \\SOadmin_macaroon\CAN\SOH \SOH(\fR\radminMacaroon"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ adminMacaroon__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "admin_macaroon"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"adminMacaroon")) ::+ Data.ProtoLens.FieldDescriptor ChangePasswordResponse+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, adminMacaroon__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _ChangePasswordResponse'_unknownFields+ (\ x__ y__ -> x__ {_ChangePasswordResponse'_unknownFields = y__})+ defMessage+ = ChangePasswordResponse'_constructor+ {_ChangePasswordResponse'adminMacaroon = Data.ProtoLens.fieldDefault,+ _ChangePasswordResponse'_unknownFields = []}+ parseMessage+ = let+ loop ::+ ChangePasswordResponse+ -> Data.ProtoLens.Encoding.Bytes.Parser ChangePasswordResponse+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "admin_macaroon"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"adminMacaroon") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "ChangePasswordResponse"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"adminMacaroon") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x))+instance Control.DeepSeq.NFData ChangePasswordResponse where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_ChangePasswordResponse'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_ChangePasswordResponse'adminMacaroon x__) ())+{- | Fields :+ + * 'Proto.WalletUnlockerGrpc_Fields.aezeedPassphrase' @:: Lens' GenSeedRequest Data.ByteString.ByteString@+ * 'Proto.WalletUnlockerGrpc_Fields.seedEntropy' @:: Lens' GenSeedRequest Data.ByteString.ByteString@ -}+data GenSeedRequest+ = GenSeedRequest'_constructor {_GenSeedRequest'aezeedPassphrase :: !Data.ByteString.ByteString,+ _GenSeedRequest'seedEntropy :: !Data.ByteString.ByteString,+ _GenSeedRequest'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show GenSeedRequest where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField GenSeedRequest "aezeedPassphrase" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _GenSeedRequest'aezeedPassphrase+ (\ x__ y__ -> x__ {_GenSeedRequest'aezeedPassphrase = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField GenSeedRequest "seedEntropy" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _GenSeedRequest'seedEntropy+ (\ x__ y__ -> x__ {_GenSeedRequest'seedEntropy = y__}))+ Prelude.id+instance Data.ProtoLens.Message GenSeedRequest where+ messageName _ = Data.Text.pack "lnrpc.GenSeedRequest"+ packedMessageDescriptor _+ = "\n\+ \\SOGenSeedRequest\DC2+\n\+ \\DC1aezeed_passphrase\CAN\SOH \SOH(\fR\DLEaezeedPassphrase\DC2!\n\+ \\fseed_entropy\CAN\STX \SOH(\fR\vseedEntropy"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ aezeedPassphrase__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "aezeed_passphrase"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"aezeedPassphrase")) ::+ Data.ProtoLens.FieldDescriptor GenSeedRequest+ seedEntropy__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "seed_entropy"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"seedEntropy")) ::+ Data.ProtoLens.FieldDescriptor GenSeedRequest+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, aezeedPassphrase__field_descriptor),+ (Data.ProtoLens.Tag 2, seedEntropy__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _GenSeedRequest'_unknownFields+ (\ x__ y__ -> x__ {_GenSeedRequest'_unknownFields = y__})+ defMessage+ = GenSeedRequest'_constructor+ {_GenSeedRequest'aezeedPassphrase = Data.ProtoLens.fieldDefault,+ _GenSeedRequest'seedEntropy = Data.ProtoLens.fieldDefault,+ _GenSeedRequest'_unknownFields = []}+ parseMessage+ = let+ loop ::+ GenSeedRequest+ -> Data.ProtoLens.Encoding.Bytes.Parser GenSeedRequest+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "aezeed_passphrase"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"aezeedPassphrase") y x)+ 18+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "seed_entropy"+ loop+ (Lens.Family2.set (Data.ProtoLens.Field.field @"seedEntropy") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "GenSeedRequest"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"aezeedPassphrase") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view (Data.ProtoLens.Field.field @"seedEntropy") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 18)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)))+instance Control.DeepSeq.NFData GenSeedRequest where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_GenSeedRequest'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_GenSeedRequest'aezeedPassphrase x__)+ (Control.DeepSeq.deepseq (_GenSeedRequest'seedEntropy x__) ()))+{- | Fields :+ + * 'Proto.WalletUnlockerGrpc_Fields.cipherSeedMnemonic' @:: Lens' GenSeedResponse [Data.Text.Text]@+ * 'Proto.WalletUnlockerGrpc_Fields.vec'cipherSeedMnemonic' @:: Lens' GenSeedResponse (Data.Vector.Vector Data.Text.Text)@+ * 'Proto.WalletUnlockerGrpc_Fields.encipheredSeed' @:: Lens' GenSeedResponse Data.ByteString.ByteString@ -}+data GenSeedResponse+ = GenSeedResponse'_constructor {_GenSeedResponse'cipherSeedMnemonic :: !(Data.Vector.Vector Data.Text.Text),+ _GenSeedResponse'encipheredSeed :: !Data.ByteString.ByteString,+ _GenSeedResponse'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show GenSeedResponse where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField GenSeedResponse "cipherSeedMnemonic" [Data.Text.Text] where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _GenSeedResponse'cipherSeedMnemonic+ (\ x__ y__ -> x__ {_GenSeedResponse'cipherSeedMnemonic = y__}))+ (Lens.Family2.Unchecked.lens+ Data.Vector.Generic.toList+ (\ _ y__ -> Data.Vector.Generic.fromList y__))+instance Data.ProtoLens.Field.HasField GenSeedResponse "vec'cipherSeedMnemonic" (Data.Vector.Vector Data.Text.Text) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _GenSeedResponse'cipherSeedMnemonic+ (\ x__ y__ -> x__ {_GenSeedResponse'cipherSeedMnemonic = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField GenSeedResponse "encipheredSeed" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _GenSeedResponse'encipheredSeed+ (\ x__ y__ -> x__ {_GenSeedResponse'encipheredSeed = y__}))+ Prelude.id+instance Data.ProtoLens.Message GenSeedResponse where+ messageName _ = Data.Text.pack "lnrpc.GenSeedResponse"+ packedMessageDescriptor _+ = "\n\+ \\SIGenSeedResponse\DC20\n\+ \\DC4cipher_seed_mnemonic\CAN\SOH \ETX(\tR\DC2cipherSeedMnemonic\DC2'\n\+ \\SIenciphered_seed\CAN\STX \SOH(\fR\SOencipheredSeed"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ cipherSeedMnemonic__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "cipher_seed_mnemonic"+ (Data.ProtoLens.ScalarField Data.ProtoLens.StringField ::+ Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)+ (Data.ProtoLens.RepeatedField+ Data.ProtoLens.Unpacked+ (Data.ProtoLens.Field.field @"cipherSeedMnemonic")) ::+ Data.ProtoLens.FieldDescriptor GenSeedResponse+ encipheredSeed__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "enciphered_seed"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"encipheredSeed")) ::+ Data.ProtoLens.FieldDescriptor GenSeedResponse+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, cipherSeedMnemonic__field_descriptor),+ (Data.ProtoLens.Tag 2, encipheredSeed__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _GenSeedResponse'_unknownFields+ (\ x__ y__ -> x__ {_GenSeedResponse'_unknownFields = y__})+ defMessage+ = GenSeedResponse'_constructor+ {_GenSeedResponse'cipherSeedMnemonic = Data.Vector.Generic.empty,+ _GenSeedResponse'encipheredSeed = Data.ProtoLens.fieldDefault,+ _GenSeedResponse'_unknownFields = []}+ parseMessage+ = let+ loop ::+ GenSeedResponse+ -> Data.ProtoLens.Encoding.Growing.Growing Data.Vector.Vector Data.ProtoLens.Encoding.Growing.RealWorld Data.Text.Text+ -> Data.ProtoLens.Encoding.Bytes.Parser GenSeedResponse+ loop x mutable'cipherSeedMnemonic+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do frozen'cipherSeedMnemonic <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ (Data.ProtoLens.Encoding.Growing.unsafeFreeze+ mutable'cipherSeedMnemonic)+ (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields+ (\ !t -> Prelude.reverse t)+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"vec'cipherSeedMnemonic")+ frozen'cipherSeedMnemonic+ x))+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do !y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do value <- do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len)+ Data.ProtoLens.Encoding.Bytes.runEither+ (case Data.Text.Encoding.decodeUtf8' value of+ (Prelude.Left err)+ -> Prelude.Left (Prelude.show err)+ (Prelude.Right r) -> Prelude.Right r))+ "cipher_seed_mnemonic"+ v <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ (Data.ProtoLens.Encoding.Growing.append+ mutable'cipherSeedMnemonic y)+ loop x v+ 18+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "enciphered_seed"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"encipheredSeed") y x)+ mutable'cipherSeedMnemonic+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ mutable'cipherSeedMnemonic+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do mutable'cipherSeedMnemonic <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ Data.ProtoLens.Encoding.Growing.new+ loop Data.ProtoLens.defMessage mutable'cipherSeedMnemonic)+ "GenSeedResponse"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.foldMapBuilder+ (\ _v+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.Text.Encoding.encodeUtf8+ _v))+ (Lens.Family2.view+ (Data.ProtoLens.Field.field @"vec'cipherSeedMnemonic") _x))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"encipheredSeed") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 18)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)))+instance Control.DeepSeq.NFData GenSeedResponse where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_GenSeedResponse'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_GenSeedResponse'cipherSeedMnemonic x__)+ (Control.DeepSeq.deepseq (_GenSeedResponse'encipheredSeed x__) ()))+{- | Fields :+ + * 'Proto.WalletUnlockerGrpc_Fields.walletPassword' @:: Lens' InitWalletRequest Data.ByteString.ByteString@+ * 'Proto.WalletUnlockerGrpc_Fields.cipherSeedMnemonic' @:: Lens' InitWalletRequest [Data.Text.Text]@+ * 'Proto.WalletUnlockerGrpc_Fields.vec'cipherSeedMnemonic' @:: Lens' InitWalletRequest (Data.Vector.Vector Data.Text.Text)@+ * 'Proto.WalletUnlockerGrpc_Fields.aezeedPassphrase' @:: Lens' InitWalletRequest Data.ByteString.ByteString@+ * 'Proto.WalletUnlockerGrpc_Fields.recoveryWindow' @:: Lens' InitWalletRequest Data.Int.Int32@+ * 'Proto.WalletUnlockerGrpc_Fields.channelBackups' @:: Lens' InitWalletRequest Proto.LndGrpc.ChanBackupSnapshot@+ * 'Proto.WalletUnlockerGrpc_Fields.maybe'channelBackups' @:: Lens' InitWalletRequest (Prelude.Maybe Proto.LndGrpc.ChanBackupSnapshot)@+ * 'Proto.WalletUnlockerGrpc_Fields.statelessInit' @:: Lens' InitWalletRequest Prelude.Bool@ -}+data InitWalletRequest+ = InitWalletRequest'_constructor {_InitWalletRequest'walletPassword :: !Data.ByteString.ByteString,+ _InitWalletRequest'cipherSeedMnemonic :: !(Data.Vector.Vector Data.Text.Text),+ _InitWalletRequest'aezeedPassphrase :: !Data.ByteString.ByteString,+ _InitWalletRequest'recoveryWindow :: !Data.Int.Int32,+ _InitWalletRequest'channelBackups :: !(Prelude.Maybe Proto.LndGrpc.ChanBackupSnapshot),+ _InitWalletRequest'statelessInit :: !Prelude.Bool,+ _InitWalletRequest'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show InitWalletRequest where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField InitWalletRequest "walletPassword" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _InitWalletRequest'walletPassword+ (\ x__ y__ -> x__ {_InitWalletRequest'walletPassword = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField InitWalletRequest "cipherSeedMnemonic" [Data.Text.Text] where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _InitWalletRequest'cipherSeedMnemonic+ (\ x__ y__ -> x__ {_InitWalletRequest'cipherSeedMnemonic = y__}))+ (Lens.Family2.Unchecked.lens+ Data.Vector.Generic.toList+ (\ _ y__ -> Data.Vector.Generic.fromList y__))+instance Data.ProtoLens.Field.HasField InitWalletRequest "vec'cipherSeedMnemonic" (Data.Vector.Vector Data.Text.Text) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _InitWalletRequest'cipherSeedMnemonic+ (\ x__ y__ -> x__ {_InitWalletRequest'cipherSeedMnemonic = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField InitWalletRequest "aezeedPassphrase" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _InitWalletRequest'aezeedPassphrase+ (\ x__ y__ -> x__ {_InitWalletRequest'aezeedPassphrase = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField InitWalletRequest "recoveryWindow" Data.Int.Int32 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _InitWalletRequest'recoveryWindow+ (\ x__ y__ -> x__ {_InitWalletRequest'recoveryWindow = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField InitWalletRequest "channelBackups" Proto.LndGrpc.ChanBackupSnapshot where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _InitWalletRequest'channelBackups+ (\ x__ y__ -> x__ {_InitWalletRequest'channelBackups = y__}))+ (Data.ProtoLens.maybeLens Data.ProtoLens.defMessage)+instance Data.ProtoLens.Field.HasField InitWalletRequest "maybe'channelBackups" (Prelude.Maybe Proto.LndGrpc.ChanBackupSnapshot) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _InitWalletRequest'channelBackups+ (\ x__ y__ -> x__ {_InitWalletRequest'channelBackups = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField InitWalletRequest "statelessInit" Prelude.Bool where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _InitWalletRequest'statelessInit+ (\ x__ y__ -> x__ {_InitWalletRequest'statelessInit = y__}))+ Prelude.id+instance Data.ProtoLens.Message InitWalletRequest where+ messageName _ = Data.Text.pack "lnrpc.InitWalletRequest"+ packedMessageDescriptor _+ = "\n\+ \\DC1InitWalletRequest\DC2'\n\+ \\SIwallet_password\CAN\SOH \SOH(\fR\SOwalletPassword\DC20\n\+ \\DC4cipher_seed_mnemonic\CAN\STX \ETX(\tR\DC2cipherSeedMnemonic\DC2+\n\+ \\DC1aezeed_passphrase\CAN\ETX \SOH(\fR\DLEaezeedPassphrase\DC2'\n\+ \\SIrecovery_window\CAN\EOT \SOH(\ENQR\SOrecoveryWindow\DC2B\n\+ \\SIchannel_backups\CAN\ENQ \SOH(\v2\EM.lnrpc.ChanBackupSnapshotR\SOchannelBackups\DC2%\n\+ \\SOstateless_init\CAN\ACK \SOH(\bR\rstatelessInit"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ walletPassword__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "wallet_password"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"walletPassword")) ::+ Data.ProtoLens.FieldDescriptor InitWalletRequest+ cipherSeedMnemonic__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "cipher_seed_mnemonic"+ (Data.ProtoLens.ScalarField Data.ProtoLens.StringField ::+ Data.ProtoLens.FieldTypeDescriptor Data.Text.Text)+ (Data.ProtoLens.RepeatedField+ Data.ProtoLens.Unpacked+ (Data.ProtoLens.Field.field @"cipherSeedMnemonic")) ::+ Data.ProtoLens.FieldDescriptor InitWalletRequest+ aezeedPassphrase__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "aezeed_passphrase"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"aezeedPassphrase")) ::+ Data.ProtoLens.FieldDescriptor InitWalletRequest+ recoveryWindow__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "recovery_window"+ (Data.ProtoLens.ScalarField Data.ProtoLens.Int32Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"recoveryWindow")) ::+ Data.ProtoLens.FieldDescriptor InitWalletRequest+ channelBackups__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "channel_backups"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor Proto.LndGrpc.ChanBackupSnapshot)+ (Data.ProtoLens.OptionalField+ (Data.ProtoLens.Field.field @"maybe'channelBackups")) ::+ Data.ProtoLens.FieldDescriptor InitWalletRequest+ statelessInit__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "stateless_init"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BoolField ::+ Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"statelessInit")) ::+ Data.ProtoLens.FieldDescriptor InitWalletRequest+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, walletPassword__field_descriptor),+ (Data.ProtoLens.Tag 2, cipherSeedMnemonic__field_descriptor),+ (Data.ProtoLens.Tag 3, aezeedPassphrase__field_descriptor),+ (Data.ProtoLens.Tag 4, recoveryWindow__field_descriptor),+ (Data.ProtoLens.Tag 5, channelBackups__field_descriptor),+ (Data.ProtoLens.Tag 6, statelessInit__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _InitWalletRequest'_unknownFields+ (\ x__ y__ -> x__ {_InitWalletRequest'_unknownFields = y__})+ defMessage+ = InitWalletRequest'_constructor+ {_InitWalletRequest'walletPassword = Data.ProtoLens.fieldDefault,+ _InitWalletRequest'cipherSeedMnemonic = Data.Vector.Generic.empty,+ _InitWalletRequest'aezeedPassphrase = Data.ProtoLens.fieldDefault,+ _InitWalletRequest'recoveryWindow = Data.ProtoLens.fieldDefault,+ _InitWalletRequest'channelBackups = Prelude.Nothing,+ _InitWalletRequest'statelessInit = Data.ProtoLens.fieldDefault,+ _InitWalletRequest'_unknownFields = []}+ parseMessage+ = let+ loop ::+ InitWalletRequest+ -> Data.ProtoLens.Encoding.Growing.Growing Data.Vector.Vector Data.ProtoLens.Encoding.Growing.RealWorld Data.Text.Text+ -> Data.ProtoLens.Encoding.Bytes.Parser InitWalletRequest+ loop x mutable'cipherSeedMnemonic+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do frozen'cipherSeedMnemonic <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ (Data.ProtoLens.Encoding.Growing.unsafeFreeze+ mutable'cipherSeedMnemonic)+ (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields+ (\ !t -> Prelude.reverse t)+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"vec'cipherSeedMnemonic")+ frozen'cipherSeedMnemonic+ x))+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "wallet_password"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"walletPassword") y x)+ mutable'cipherSeedMnemonic+ 18+ -> do !y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do value <- do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len)+ Data.ProtoLens.Encoding.Bytes.runEither+ (case Data.Text.Encoding.decodeUtf8' value of+ (Prelude.Left err)+ -> Prelude.Left (Prelude.show err)+ (Prelude.Right r) -> Prelude.Right r))+ "cipher_seed_mnemonic"+ v <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ (Data.ProtoLens.Encoding.Growing.append+ mutable'cipherSeedMnemonic y)+ loop x v+ 26+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "aezeed_passphrase"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"aezeedPassphrase") y x)+ mutable'cipherSeedMnemonic+ 32+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "recovery_window"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"recoveryWindow") y x)+ mutable'cipherSeedMnemonic+ 42+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len) Data.ProtoLens.parseMessage)+ "channel_backups"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"channelBackups") y x)+ mutable'cipherSeedMnemonic+ 48+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ ((Prelude./=) 0) Data.ProtoLens.Encoding.Bytes.getVarInt)+ "stateless_init"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"statelessInit") y x)+ mutable'cipherSeedMnemonic+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ mutable'cipherSeedMnemonic+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do mutable'cipherSeedMnemonic <- Data.ProtoLens.Encoding.Parser.Unsafe.unsafeLiftIO+ Data.ProtoLens.Encoding.Growing.new+ loop Data.ProtoLens.defMessage mutable'cipherSeedMnemonic)+ "InitWalletRequest"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"walletPassword") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ ((Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.foldMapBuilder+ (\ _v+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 18)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.Text.Encoding.encodeUtf8+ _v))+ (Lens.Family2.view+ (Data.ProtoLens.Field.field @"vec'cipherSeedMnemonic") _x))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"aezeedPassphrase") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 26)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"recoveryWindow") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 32)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v))+ ((Data.Monoid.<>)+ (case+ Lens.Family2.view+ (Data.ProtoLens.Field.field @"maybe'channelBackups") _x+ of+ Prelude.Nothing -> Data.Monoid.mempty+ (Prelude.Just _v)+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 42)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.ProtoLens.encodeMessage+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"statelessInit") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 48)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt+ (\ b -> if b then 1 else 0)+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)))))))+instance Control.DeepSeq.NFData InitWalletRequest where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_InitWalletRequest'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_InitWalletRequest'walletPassword x__)+ (Control.DeepSeq.deepseq+ (_InitWalletRequest'cipherSeedMnemonic x__)+ (Control.DeepSeq.deepseq+ (_InitWalletRequest'aezeedPassphrase x__)+ (Control.DeepSeq.deepseq+ (_InitWalletRequest'recoveryWindow x__)+ (Control.DeepSeq.deepseq+ (_InitWalletRequest'channelBackups x__)+ (Control.DeepSeq.deepseq+ (_InitWalletRequest'statelessInit x__) ()))))))+{- | Fields :+ + * 'Proto.WalletUnlockerGrpc_Fields.adminMacaroon' @:: Lens' InitWalletResponse Data.ByteString.ByteString@ -}+data InitWalletResponse+ = InitWalletResponse'_constructor {_InitWalletResponse'adminMacaroon :: !Data.ByteString.ByteString,+ _InitWalletResponse'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show InitWalletResponse where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField InitWalletResponse "adminMacaroon" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _InitWalletResponse'adminMacaroon+ (\ x__ y__ -> x__ {_InitWalletResponse'adminMacaroon = y__}))+ Prelude.id+instance Data.ProtoLens.Message InitWalletResponse where+ messageName _ = Data.Text.pack "lnrpc.InitWalletResponse"+ packedMessageDescriptor _+ = "\n\+ \\DC2InitWalletResponse\DC2%\n\+ \\SOadmin_macaroon\CAN\SOH \SOH(\fR\radminMacaroon"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ adminMacaroon__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "admin_macaroon"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"adminMacaroon")) ::+ Data.ProtoLens.FieldDescriptor InitWalletResponse+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, adminMacaroon__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _InitWalletResponse'_unknownFields+ (\ x__ y__ -> x__ {_InitWalletResponse'_unknownFields = y__})+ defMessage+ = InitWalletResponse'_constructor+ {_InitWalletResponse'adminMacaroon = Data.ProtoLens.fieldDefault,+ _InitWalletResponse'_unknownFields = []}+ parseMessage+ = let+ loop ::+ InitWalletResponse+ -> Data.ProtoLens.Encoding.Bytes.Parser InitWalletResponse+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "admin_macaroon"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"adminMacaroon") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "InitWalletResponse"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"adminMacaroon") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x))+instance Control.DeepSeq.NFData InitWalletResponse where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_InitWalletResponse'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_InitWalletResponse'adminMacaroon x__) ())+{- | Fields :+ + * 'Proto.WalletUnlockerGrpc_Fields.walletPassword' @:: Lens' UnlockWalletRequest Data.ByteString.ByteString@+ * 'Proto.WalletUnlockerGrpc_Fields.recoveryWindow' @:: Lens' UnlockWalletRequest Data.Int.Int32@+ * 'Proto.WalletUnlockerGrpc_Fields.channelBackups' @:: Lens' UnlockWalletRequest Proto.LndGrpc.ChanBackupSnapshot@+ * 'Proto.WalletUnlockerGrpc_Fields.maybe'channelBackups' @:: Lens' UnlockWalletRequest (Prelude.Maybe Proto.LndGrpc.ChanBackupSnapshot)@+ * 'Proto.WalletUnlockerGrpc_Fields.statelessInit' @:: Lens' UnlockWalletRequest Prelude.Bool@ -}+data UnlockWalletRequest+ = UnlockWalletRequest'_constructor {_UnlockWalletRequest'walletPassword :: !Data.ByteString.ByteString,+ _UnlockWalletRequest'recoveryWindow :: !Data.Int.Int32,+ _UnlockWalletRequest'channelBackups :: !(Prelude.Maybe Proto.LndGrpc.ChanBackupSnapshot),+ _UnlockWalletRequest'statelessInit :: !Prelude.Bool,+ _UnlockWalletRequest'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show UnlockWalletRequest where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Field.HasField UnlockWalletRequest "walletPassword" Data.ByteString.ByteString where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _UnlockWalletRequest'walletPassword+ (\ x__ y__ -> x__ {_UnlockWalletRequest'walletPassword = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField UnlockWalletRequest "recoveryWindow" Data.Int.Int32 where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _UnlockWalletRequest'recoveryWindow+ (\ x__ y__ -> x__ {_UnlockWalletRequest'recoveryWindow = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField UnlockWalletRequest "channelBackups" Proto.LndGrpc.ChanBackupSnapshot where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _UnlockWalletRequest'channelBackups+ (\ x__ y__ -> x__ {_UnlockWalletRequest'channelBackups = y__}))+ (Data.ProtoLens.maybeLens Data.ProtoLens.defMessage)+instance Data.ProtoLens.Field.HasField UnlockWalletRequest "maybe'channelBackups" (Prelude.Maybe Proto.LndGrpc.ChanBackupSnapshot) where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _UnlockWalletRequest'channelBackups+ (\ x__ y__ -> x__ {_UnlockWalletRequest'channelBackups = y__}))+ Prelude.id+instance Data.ProtoLens.Field.HasField UnlockWalletRequest "statelessInit" Prelude.Bool where+ fieldOf _+ = (Prelude..)+ (Lens.Family2.Unchecked.lens+ _UnlockWalletRequest'statelessInit+ (\ x__ y__ -> x__ {_UnlockWalletRequest'statelessInit = y__}))+ Prelude.id+instance Data.ProtoLens.Message UnlockWalletRequest where+ messageName _ = Data.Text.pack "lnrpc.UnlockWalletRequest"+ packedMessageDescriptor _+ = "\n\+ \\DC3UnlockWalletRequest\DC2'\n\+ \\SIwallet_password\CAN\SOH \SOH(\fR\SOwalletPassword\DC2'\n\+ \\SIrecovery_window\CAN\STX \SOH(\ENQR\SOrecoveryWindow\DC2B\n\+ \\SIchannel_backups\CAN\ETX \SOH(\v2\EM.lnrpc.ChanBackupSnapshotR\SOchannelBackups\DC2%\n\+ \\SOstateless_init\CAN\EOT \SOH(\bR\rstatelessInit"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag+ = let+ walletPassword__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "wallet_password"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BytesField ::+ Data.ProtoLens.FieldTypeDescriptor Data.ByteString.ByteString)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"walletPassword")) ::+ Data.ProtoLens.FieldDescriptor UnlockWalletRequest+ recoveryWindow__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "recovery_window"+ (Data.ProtoLens.ScalarField Data.ProtoLens.Int32Field ::+ Data.ProtoLens.FieldTypeDescriptor Data.Int.Int32)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"recoveryWindow")) ::+ Data.ProtoLens.FieldDescriptor UnlockWalletRequest+ channelBackups__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "channel_backups"+ (Data.ProtoLens.MessageField Data.ProtoLens.MessageType ::+ Data.ProtoLens.FieldTypeDescriptor Proto.LndGrpc.ChanBackupSnapshot)+ (Data.ProtoLens.OptionalField+ (Data.ProtoLens.Field.field @"maybe'channelBackups")) ::+ Data.ProtoLens.FieldDescriptor UnlockWalletRequest+ statelessInit__field_descriptor+ = Data.ProtoLens.FieldDescriptor+ "stateless_init"+ (Data.ProtoLens.ScalarField Data.ProtoLens.BoolField ::+ Data.ProtoLens.FieldTypeDescriptor Prelude.Bool)+ (Data.ProtoLens.PlainField+ Data.ProtoLens.Optional+ (Data.ProtoLens.Field.field @"statelessInit")) ::+ Data.ProtoLens.FieldDescriptor UnlockWalletRequest+ in+ Data.Map.fromList+ [(Data.ProtoLens.Tag 1, walletPassword__field_descriptor),+ (Data.ProtoLens.Tag 2, recoveryWindow__field_descriptor),+ (Data.ProtoLens.Tag 3, channelBackups__field_descriptor),+ (Data.ProtoLens.Tag 4, statelessInit__field_descriptor)]+ unknownFields+ = Lens.Family2.Unchecked.lens+ _UnlockWalletRequest'_unknownFields+ (\ x__ y__ -> x__ {_UnlockWalletRequest'_unknownFields = y__})+ defMessage+ = UnlockWalletRequest'_constructor+ {_UnlockWalletRequest'walletPassword = Data.ProtoLens.fieldDefault,+ _UnlockWalletRequest'recoveryWindow = Data.ProtoLens.fieldDefault,+ _UnlockWalletRequest'channelBackups = Prelude.Nothing,+ _UnlockWalletRequest'statelessInit = Data.ProtoLens.fieldDefault,+ _UnlockWalletRequest'_unknownFields = []}+ parseMessage+ = let+ loop ::+ UnlockWalletRequest+ -> Data.ProtoLens.Encoding.Bytes.Parser UnlockWalletRequest+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of+ 10+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.getBytes+ (Prelude.fromIntegral len))+ "wallet_password"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"walletPassword") y x)+ 16+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ Prelude.fromIntegral+ Data.ProtoLens.Encoding.Bytes.getVarInt)+ "recovery_window"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"recoveryWindow") y x)+ 26+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (do len <- Data.ProtoLens.Encoding.Bytes.getVarInt+ Data.ProtoLens.Encoding.Bytes.isolate+ (Prelude.fromIntegral len) Data.ProtoLens.parseMessage)+ "channel_backups"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"channelBackups") y x)+ 32+ -> do y <- (Data.ProtoLens.Encoding.Bytes.<?>)+ (Prelude.fmap+ ((Prelude./=) 0) Data.ProtoLens.Encoding.Bytes.getVarInt)+ "stateless_init"+ loop+ (Lens.Family2.set+ (Data.ProtoLens.Field.field @"statelessInit") y x)+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x)+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "UnlockWalletRequest"+ buildMessage+ = \ _x+ -> (Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"walletPassword") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 10)+ ((\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"recoveryWindow") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 16)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt Prelude.fromIntegral _v))+ ((Data.Monoid.<>)+ (case+ Lens.Family2.view+ (Data.ProtoLens.Field.field @"maybe'channelBackups") _x+ of+ Prelude.Nothing -> Data.Monoid.mempty+ (Prelude.Just _v)+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 26)+ ((Prelude..)+ (\ bs+ -> (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt+ (Prelude.fromIntegral (Data.ByteString.length bs)))+ (Data.ProtoLens.Encoding.Bytes.putBytes bs))+ Data.ProtoLens.encodeMessage+ _v))+ ((Data.Monoid.<>)+ (let+ _v+ = Lens.Family2.view+ (Data.ProtoLens.Field.field @"statelessInit") _x+ in+ if (Prelude.==) _v Data.ProtoLens.fieldDefault then+ Data.Monoid.mempty+ else+ (Data.Monoid.<>)+ (Data.ProtoLens.Encoding.Bytes.putVarInt 32)+ ((Prelude..)+ Data.ProtoLens.Encoding.Bytes.putVarInt+ (\ b -> if b then 1 else 0)+ _v))+ (Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)))))+instance Control.DeepSeq.NFData UnlockWalletRequest where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_UnlockWalletRequest'_unknownFields x__)+ (Control.DeepSeq.deepseq+ (_UnlockWalletRequest'walletPassword x__)+ (Control.DeepSeq.deepseq+ (_UnlockWalletRequest'recoveryWindow x__)+ (Control.DeepSeq.deepseq+ (_UnlockWalletRequest'channelBackups x__)+ (Control.DeepSeq.deepseq+ (_UnlockWalletRequest'statelessInit x__) ()))))+{- | Fields :+ -}+data UnlockWalletResponse+ = UnlockWalletResponse'_constructor {_UnlockWalletResponse'_unknownFields :: !Data.ProtoLens.FieldSet}+ deriving stock (Prelude.Eq, Prelude.Ord)+instance Prelude.Show UnlockWalletResponse where+ showsPrec _ __x __s+ = Prelude.showChar+ '{'+ (Prelude.showString+ (Data.ProtoLens.showMessageShort __x) (Prelude.showChar '}' __s))+instance Data.ProtoLens.Message UnlockWalletResponse where+ messageName _ = Data.Text.pack "lnrpc.UnlockWalletResponse"+ packedMessageDescriptor _+ = "\n\+ \\DC4UnlockWalletResponse"+ packedFileDescriptor _ = packedFileDescriptor+ fieldsByTag = let in Data.Map.fromList []+ unknownFields+ = Lens.Family2.Unchecked.lens+ _UnlockWalletResponse'_unknownFields+ (\ x__ y__ -> x__ {_UnlockWalletResponse'_unknownFields = y__})+ defMessage+ = UnlockWalletResponse'_constructor+ {_UnlockWalletResponse'_unknownFields = []}+ parseMessage+ = let+ loop ::+ UnlockWalletResponse+ -> Data.ProtoLens.Encoding.Bytes.Parser UnlockWalletResponse+ loop x+ = do end <- Data.ProtoLens.Encoding.Bytes.atEnd+ if end then+ do (let missing = []+ in+ if Prelude.null missing then+ Prelude.return ()+ else+ Prelude.fail+ ((Prelude.++)+ "Missing required fields: "+ (Prelude.show (missing :: [Prelude.String]))))+ Prelude.return+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> Prelude.reverse t) x)+ else+ do tag <- Data.ProtoLens.Encoding.Bytes.getVarInt+ case tag of {+ wire+ -> do !y <- Data.ProtoLens.Encoding.Wire.parseTaggedValueFromWire+ wire+ loop+ (Lens.Family2.over+ Data.ProtoLens.unknownFields (\ !t -> (:) y t) x) }+ in+ (Data.ProtoLens.Encoding.Bytes.<?>)+ (do loop Data.ProtoLens.defMessage) "UnlockWalletResponse"+ buildMessage+ = \ _x+ -> Data.ProtoLens.Encoding.Wire.buildFieldSet+ (Lens.Family2.view Data.ProtoLens.unknownFields _x)+instance Control.DeepSeq.NFData UnlockWalletResponse where+ rnf+ = \ x__+ -> Control.DeepSeq.deepseq+ (_UnlockWalletResponse'_unknownFields x__) ()+data WalletUnlocker = WalletUnlocker {}+instance Data.ProtoLens.Service.Types.Service WalletUnlocker where+ type ServiceName WalletUnlocker = "WalletUnlocker"+ type ServicePackage WalletUnlocker = "lnrpc"+ type ServiceMethods WalletUnlocker = '["changePassword",+ "genSeed",+ "initWallet",+ "unlockWallet"]+instance Data.ProtoLens.Service.Types.HasMethodImpl WalletUnlocker "genSeed" where+ type MethodName WalletUnlocker "genSeed" = "GenSeed"+ type MethodInput WalletUnlocker "genSeed" = GenSeedRequest+ type MethodOutput WalletUnlocker "genSeed" = GenSeedResponse+ type MethodStreamingType WalletUnlocker "genSeed" = 'Data.ProtoLens.Service.Types.NonStreaming+instance Data.ProtoLens.Service.Types.HasMethodImpl WalletUnlocker "initWallet" where+ type MethodName WalletUnlocker "initWallet" = "InitWallet"+ type MethodInput WalletUnlocker "initWallet" = InitWalletRequest+ type MethodOutput WalletUnlocker "initWallet" = InitWalletResponse+ type MethodStreamingType WalletUnlocker "initWallet" = 'Data.ProtoLens.Service.Types.NonStreaming+instance Data.ProtoLens.Service.Types.HasMethodImpl WalletUnlocker "unlockWallet" where+ type MethodName WalletUnlocker "unlockWallet" = "UnlockWallet"+ type MethodInput WalletUnlocker "unlockWallet" = UnlockWalletRequest+ type MethodOutput WalletUnlocker "unlockWallet" = UnlockWalletResponse+ type MethodStreamingType WalletUnlocker "unlockWallet" = 'Data.ProtoLens.Service.Types.NonStreaming+instance Data.ProtoLens.Service.Types.HasMethodImpl WalletUnlocker "changePassword" where+ type MethodName WalletUnlocker "changePassword" = "ChangePassword"+ type MethodInput WalletUnlocker "changePassword" = ChangePasswordRequest+ type MethodOutput WalletUnlocker "changePassword" = ChangePasswordResponse+ type MethodStreamingType WalletUnlocker "changePassword" = 'Data.ProtoLens.Service.Types.NonStreaming+packedFileDescriptor :: Data.ByteString.ByteString+packedFileDescriptor+ = "\n\+ \\SUBwallet_unlocker_grpc.proto\DC2\ENQlnrpc\SUB\SOlnd_grpc.proto\"`\n\+ \\SOGenSeedRequest\DC2+\n\+ \\DC1aezeed_passphrase\CAN\SOH \SOH(\fR\DLEaezeedPassphrase\DC2!\n\+ \\fseed_entropy\CAN\STX \SOH(\fR\vseedEntropy\"l\n\+ \\SIGenSeedResponse\DC20\n\+ \\DC4cipher_seed_mnemonic\CAN\SOH \ETX(\tR\DC2cipherSeedMnemonic\DC2'\n\+ \\SIenciphered_seed\CAN\STX \SOH(\fR\SOencipheredSeed\"\175\STX\n\+ \\DC1InitWalletRequest\DC2'\n\+ \\SIwallet_password\CAN\SOH \SOH(\fR\SOwalletPassword\DC20\n\+ \\DC4cipher_seed_mnemonic\CAN\STX \ETX(\tR\DC2cipherSeedMnemonic\DC2+\n\+ \\DC1aezeed_passphrase\CAN\ETX \SOH(\fR\DLEaezeedPassphrase\DC2'\n\+ \\SIrecovery_window\CAN\EOT \SOH(\ENQR\SOrecoveryWindow\DC2B\n\+ \\SIchannel_backups\CAN\ENQ \SOH(\v2\EM.lnrpc.ChanBackupSnapshotR\SOchannelBackups\DC2%\n\+ \\SOstateless_init\CAN\ACK \SOH(\bR\rstatelessInit\";\n\+ \\DC2InitWalletResponse\DC2%\n\+ \\SOadmin_macaroon\CAN\SOH \SOH(\fR\radminMacaroon\"\210\SOH\n\+ \\DC3UnlockWalletRequest\DC2'\n\+ \\SIwallet_password\CAN\SOH \SOH(\fR\SOwalletPassword\DC2'\n\+ \\SIrecovery_window\CAN\STX \SOH(\ENQR\SOrecoveryWindow\DC2B\n\+ \\SIchannel_backups\CAN\ETX \SOH(\v2\EM.lnrpc.ChanBackupSnapshotR\SOchannelBackups\DC2%\n\+ \\SOstateless_init\CAN\EOT \SOH(\bR\rstatelessInit\"\SYN\n\+ \\DC4UnlockWalletResponse\"\191\SOH\n\+ \\NAKChangePasswordRequest\DC2)\n\+ \\DLEcurrent_password\CAN\SOH \SOH(\fR\SIcurrentPassword\DC2!\n\+ \\fnew_password\CAN\STX \SOH(\fR\vnewPassword\DC2%\n\+ \\SOstateless_init\CAN\ETX \SOH(\bR\rstatelessInit\DC21\n\+ \\NAKnew_macaroon_root_key\CAN\EOT \SOH(\bR\DC2newMacaroonRootKey\"?\n\+ \\SYNChangePasswordResponse\DC2%\n\+ \\SOadmin_macaroon\CAN\SOH \SOH(\fR\radminMacaroon2\165\STX\n\+ \\SOWalletUnlocker\DC28\n\+ \\aGenSeed\DC2\NAK.lnrpc.GenSeedRequest\SUB\SYN.lnrpc.GenSeedResponse\DC2A\n\+ \\n\+ \InitWallet\DC2\CAN.lnrpc.InitWalletRequest\SUB\EM.lnrpc.InitWalletResponse\DC2G\n\+ \\fUnlockWallet\DC2\SUB.lnrpc.UnlockWalletRequest\SUB\ESC.lnrpc.UnlockWalletResponse\DC2M\n\+ \\SOChangePassword\DC2\FS.lnrpc.ChangePasswordRequest\SUB\GS.lnrpc.ChangePasswordResponseB'Z%github.com/lightningnetwork/lnd/lnrpcJ\232I\n\+ \\a\DC2\ENQ\STX\NUL\239\SOH\SOH\n\+ \\141\SOH\n\+ \\SOH\f\DC2\ETX\STX\NUL\DC22\130\SOHsource https://raw.githubusercontent.com/lightningnetwork/lnd/c733c139e95a6ef4e5f9ac88b43328ac96c333ef/lnrpc/walletunlocker.proto\n\+ \\n\+ \\t\n\+ \\STX\ETX\NUL\DC2\ETX\EOT\NUL\CAN\n\+ \\b\n\+ \\SOH\STX\DC2\ETX\ACK\NUL\SO\n\+ \\b\n\+ \\SOH\b\DC2\ETX\b\NUL<\n\+ \\t\n\+ \\STX\b\v\DC2\ETX\b\NUL<\n\+ \\187\ACK\n\+ \\STX\ACK\NUL\DC2\EOT\RS\NULF\SOH\SUB\136\SOH WalletUnlocker is a service that is used to set up a wallet password for\n\+ \ lnd at first startup, and unlock a previously set up wallet.\n\+ \2\163\ENQ\n\+ \ Comments in this file will be directly parsed into the API\n\+ \ Documentation as descriptions of the associated method, message, or field.\n\+ \ These descriptions should go right above the definition of the object, and\n\+ \ can be in either block or // comment format.\n\+ \\n\+ \ An RPC method can be matched to an lncli command by placing a line in the\n\+ \ beginning of the description in exactly the following format:\n\+ \ lncli: `methodname`\n\+ \\n\+ \ Failure to specify the exact name of the command will cause documentation\n\+ \ generation to fail.\n\+ \\n\+ \ More information on how exactly the gRPC documentation is generated from\n\+ \ this proto file can be found here:\n\+ \ https://github.com/lightninglabs/lightning-api\n\+ \\n\+ \\n\+ \\n\+ \\ETX\ACK\NUL\SOH\DC2\ETX\RS\b\SYN\n\+ \\200\ETX\n\+ \\EOT\ACK\NUL\STX\NUL\DC2\ETX)\EOT;\SUB\186\ETX\n\+ \GenSeed is the first method that should be used to instantiate a new lnd\n\+ \instance. This method allows a caller to generate a new aezeed cipher seed\n\+ \given an optional passphrase. If provided, the passphrase will be necessary\n\+ \to decrypt the cipherseed to expose the internal wallet seed.\n\+ \\n\+ \Once the cipherseed is obtained and verified by the user, the InitWallet\n\+ \method should be used to commit the newly generated seed, and create the\n\+ \wallet.\n\+ \\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\NUL\SOH\DC2\ETX)\b\SI\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\NUL\STX\DC2\ETX)\DC1\US\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\NUL\ETX\DC2\ETX)*9\n\+ \\133\ENQ\n\+ \\EOT\ACK\NUL\STX\SOH\DC2\ETX9\EOTD\SUB\247\EOT\n\+ \InitWallet is used when lnd is starting up for the first time to fully\n\+ \initialize the daemon and its internal wallet. At the very least a wallet\n\+ \password must be provided. This will be used to encrypt sensitive material\n\+ \on disk.\n\+ \\n\+ \In the case of a recovery scenario, the user can also specify their aezeed\n\+ \mnemonic and passphrase. If set, then the daemon will use this prior state\n\+ \to initialize its internal wallet.\n\+ \\n\+ \Alternatively, this can be used along with the GenSeed RPC to obtain a\n\+ \seed, then present it to the user. Once it has been verified by the user,\n\+ \the seed can be fed into this RPC in order to commit the new wallet.\n\+ \\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\SOH\SOH\DC2\ETX9\b\DC2\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\SOH\STX\DC2\ETX9\DC4%\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\SOH\ETX\DC2\ETX90B\n\+ \z\n\+ \\EOT\ACK\NUL\STX\STX\DC2\ETX?\EOTJ\SUBm lncli: `unlock`\n\+ \UnlockWallet is used at startup of lnd to provide a password to unlock\n\+ \the wallet database.\n\+ \\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\STX\SOH\DC2\ETX?\b\DC4\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\STX\STX\DC2\ETX?\SYN)\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\STX\ETX\DC2\ETX?4H\n\+ \\166\SOH\n\+ \\EOT\ACK\NUL\STX\ETX\DC2\ETXE\EOTP\SUB\152\SOH lncli: `changepassword`\n\+ \ChangePassword changes the password of the encrypted wallet. This will\n\+ \automatically unlock the wallet database if successful.\n\+ \\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\ETX\SOH\DC2\ETXE\b\SYN\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\ETX\STX\DC2\ETXE\CAN-\n\+ \\f\n\+ \\ENQ\ACK\NUL\STX\ETX\ETX\DC2\ETXE8N\n\+ \\n\+ \\n\+ \\STX\EOT\NUL\DC2\EOTH\NULV\SOH\n\+ \\n\+ \\n\+ \\ETX\EOT\NUL\SOH\DC2\ETXH\b\SYN\n\+ \\191\SOH\n\+ \\EOT\EOT\NUL\STX\NUL\DC2\ETXN\EOT \SUB\177\SOH\n\+ \aezeed_passphrase is an optional user provided passphrase that will be used\n\+ \to encrypt the generated aezeed cipher seed. When using REST, this field\n\+ \must be encoded as base64.\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\NUL\EOT\DC2\EOTN\EOTH\CAN\n\+ \\f\n\+ \\ENQ\EOT\NUL\STX\NUL\ENQ\DC2\ETXN\EOT\t\n\+ \\f\n\+ \\ENQ\EOT\NUL\STX\NUL\SOH\DC2\ETXN\n\+ \\ESC\n\+ \\f\n\+ \\ENQ\EOT\NUL\STX\NUL\ETX\DC2\ETXN\RS\US\n\+ \\211\SOH\n\+ \\EOT\EOT\NUL\STX\SOH\DC2\ETXU\EOT\ESC\SUB\197\SOH\n\+ \seed_entropy is an optional 16-bytes generated via CSPRNG. If not\n\+ \specified, then a fresh set of randomness will be used to create the seed.\n\+ \When using REST, this field must be encoded as base64.\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\NUL\STX\SOH\EOT\DC2\EOTU\EOTN \n\+ \\f\n\+ \\ENQ\EOT\NUL\STX\SOH\ENQ\DC2\ETXU\EOT\t\n\+ \\f\n\+ \\ENQ\EOT\NUL\STX\SOH\SOH\DC2\ETXU\n\+ \\SYN\n\+ \\f\n\+ \\ENQ\EOT\NUL\STX\SOH\ETX\DC2\ETXU\EM\SUB\n\+ \\n\+ \\n\+ \\STX\EOT\SOH\DC2\EOTW\NULf\SOH\n\+ \\n\+ \\n\+ \\ETX\EOT\SOH\SOH\DC2\ETXW\b\ETB\n\+ \\194\STX\n\+ \\EOT\EOT\SOH\STX\NUL\DC2\ETX_\EOT-\SUB\180\STX\n\+ \cipher_seed_mnemonic is a 24-word mnemonic that encodes a prior aezeed\n\+ \cipher seed obtained by the user. This field is optional, as if not\n\+ \provided, then the daemon will generate a new cipher seed for the user.\n\+ \Otherwise, then the daemon will attempt to recover the wallet state linked\n\+ \to this cipher seed.\n\+ \\n\+ \\f\n\+ \\ENQ\EOT\SOH\STX\NUL\EOT\DC2\ETX_\EOT\f\n\+ \\f\n\+ \\ENQ\EOT\SOH\STX\NUL\ENQ\DC2\ETX_\r\DC3\n\+ \\f\n\+ \\ENQ\EOT\SOH\STX\NUL\SOH\DC2\ETX_\DC4(\n\+ \\f\n\+ \\ENQ\EOT\SOH\STX\NUL\ETX\DC2\ETX_+,\n\+ \\146\SOH\n\+ \\EOT\EOT\SOH\STX\SOH\DC2\ETXe\EOT\RS\SUB\132\SOH\n\+ \enciphered_seed are the raw aezeed cipher seed bytes. This is the raw\n\+ \cipher text before run through our mnemonic encoding scheme.\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\SOH\STX\SOH\EOT\DC2\EOTe\EOT_-\n\+ \\f\n\+ \\ENQ\EOT\SOH\STX\SOH\ENQ\DC2\ETXe\EOT\t\n\+ \\f\n\+ \\ENQ\EOT\SOH\STX\SOH\SOH\DC2\ETXe\n\+ \\EM\n\+ \\f\n\+ \\ENQ\EOT\SOH\STX\SOH\ETX\DC2\ETXe\FS\GS\n\+ \\v\n\+ \\STX\EOT\STX\DC2\ENQh\NUL\153\SOH\SOH\n\+ \\n\+ \\n\+ \\ETX\EOT\STX\SOH\DC2\ETXh\b\EM\n\+ \\252\SOH\n\+ \\EOT\EOT\STX\STX\NUL\DC2\ETXo\EOT\RS\SUB\238\SOH\n\+ \wallet_password is the passphrase that should be used to encrypt the\n\+ \wallet. This MUST be at least 8 chars in length. After creation, this\n\+ \password is required to unlock the daemon. When using REST, this field\n\+ \must be encoded as base64.\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\NUL\EOT\DC2\EOTo\EOTh\ESC\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\NUL\ENQ\DC2\ETXo\EOT\t\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\NUL\SOH\DC2\ETXo\n\+ \\EM\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\NUL\ETX\DC2\ETXo\FS\GS\n\+ \\196\SOH\n\+ \\EOT\EOT\STX\STX\SOH\DC2\ETXv\EOT-\SUB\182\SOH\n\+ \cipher_seed_mnemonic is a 24-word mnemonic that encodes a prior aezeed\n\+ \cipher seed obtained by the user. This may have been generated by the\n\+ \GenSeed method, or be an existing seed.\n\+ \\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\SOH\EOT\DC2\ETXv\EOT\f\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\SOH\ENQ\DC2\ETXv\r\DC3\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\SOH\SOH\DC2\ETXv\DC4(\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\SOH\ETX\DC2\ETXv+,\n\+ \\191\SOH\n\+ \\EOT\EOT\STX\STX\STX\DC2\ETX}\EOT \SUB\177\SOH\n\+ \aezeed_passphrase is an optional user provided passphrase that will be used\n\+ \to encrypt the generated aezeed cipher seed. When using REST, this field\n\+ \must be encoded as base64.\n\+ \\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\STX\EOT\DC2\EOT}\EOTv-\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\STX\ENQ\DC2\ETX}\EOT\t\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\STX\SOH\DC2\ETX}\n\+ \\ESC\n\+ \\f\n\+ \\ENQ\EOT\STX\STX\STX\ETX\DC2\ETX}\RS\US\n\+ \\212\STX\n\+ \\EOT\EOT\STX\STX\ETX\DC2\EOT\134\SOH\EOT\RS\SUB\197\STX\n\+ \recovery_window is an optional argument specifying the address lookahead\n\+ \when restoring a wallet seed. The recovery window applies to each\n\+ \individual branch of the BIP44 derivation paths. Supplying a recovery\n\+ \window of zero indicates that no addresses should be recovered, such after\n\+ \the first initialization of the wallet.\n\+ \\n\+ \\SO\n\+ \\ENQ\EOT\STX\STX\ETX\EOT\DC2\ENQ\134\SOH\EOT} \n\+ \\r\n\+ \\ENQ\EOT\STX\STX\ETX\ENQ\DC2\EOT\134\SOH\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\ETX\SOH\DC2\EOT\134\SOH\n\+ \\EM\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\ETX\ETX\DC2\EOT\134\SOH\FS\GS\n\+ \\203\ETX\n\+ \\EOT\EOT\STX\STX\EOT\DC2\EOT\144\SOH\EOT+\SUB\188\ETX\n\+ \channel_backups is an optional argument that allows clients to recover the\n\+ \settled funds within a set of channels. This should be populated if the\n\+ \user was unable to close out all channels and sweep funds before partial or\n\+ \total data loss occurred. If specified, then after on-chain recovery of\n\+ \funds, lnd begin to carry out the data loss recovery protocol in order to\n\+ \recover the funds in each channel from a remote force closed transaction.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\STX\STX\EOT\EOT\DC2\ACK\144\SOH\EOT\134\SOH\RS\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\EOT\ACK\DC2\EOT\144\SOH\EOT\SYN\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\EOT\SOH\DC2\EOT\144\SOH\ETB&\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\EOT\ETX\DC2\EOT\144\SOH)*\n\+ \\171\STX\n\+ \\EOT\EOT\STX\STX\ENQ\DC2\EOT\152\SOH\EOT\FS\SUB\156\STX\n\+ \stateless_init is an optional argument instructing the daemon NOT to create\n\+ \any *.macaroon files in its filesystem. If this parameter is set, then the\n\+ \admin macaroon returned in the response MUST be stored by the caller of the\n\+ \RPC as otherwise all access to the daemon will be lost!\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\STX\STX\ENQ\EOT\DC2\ACK\152\SOH\EOT\144\SOH+\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\ENQ\ENQ\DC2\EOT\152\SOH\EOT\b\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\ENQ\SOH\DC2\EOT\152\SOH\t\ETB\n\+ \\r\n\+ \\ENQ\EOT\STX\STX\ENQ\ETX\DC2\EOT\152\SOH\SUB\ESC\n\+ \\f\n\+ \\STX\EOT\ETX\DC2\ACK\154\SOH\NUL\163\SOH\SOH\n\+ \\v\n\+ \\ETX\EOT\ETX\SOH\DC2\EOT\154\SOH\b\SUB\n\+ \\229\STX\n\+ \\EOT\EOT\ETX\STX\NUL\DC2\EOT\162\SOH\EOT\GS\SUB\214\STX\n\+ \The binary serialized admin macaroon that can be used to access the daemon\n\+ \after creating the wallet. If the stateless_init parameter was set to true,\n\+ \this is the ONLY copy of the macaroon and MUST be stored safely by the\n\+ \caller. Otherwise a copy of this macaroon is also persisted on disk by the\n\+ \daemon, together with other macaroon files.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\ETX\STX\NUL\EOT\DC2\ACK\162\SOH\EOT\154\SOH\FS\n\+ \\r\n\+ \\ENQ\EOT\ETX\STX\NUL\ENQ\DC2\EOT\162\SOH\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\ETX\STX\NUL\SOH\DC2\EOT\162\SOH\n\+ \\CAN\n\+ \\r\n\+ \\ENQ\EOT\ETX\STX\NUL\ETX\DC2\EOT\162\SOH\ESC\FS\n\+ \\f\n\+ \\STX\EOT\EOT\DC2\ACK\165\SOH\NUL\197\SOH\SOH\n\+ \\v\n\+ \\ETX\EOT\EOT\SOH\DC2\EOT\165\SOH\b\ESC\n\+ \\239\SOH\n\+ \\EOT\EOT\EOT\STX\NUL\DC2\EOT\171\SOH\EOT\RS\SUB\224\SOH\n\+ \wallet_password should be the current valid passphrase for the daemon. This\n\+ \will be required to decrypt on-disk material that the daemon requires to\n\+ \function properly. When using REST, this field must be encoded as base64.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\EOT\STX\NUL\EOT\DC2\ACK\171\SOH\EOT\165\SOH\GS\n\+ \\r\n\+ \\ENQ\EOT\EOT\STX\NUL\ENQ\DC2\EOT\171\SOH\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\EOT\STX\NUL\SOH\DC2\EOT\171\SOH\n\+ \\EM\n\+ \\r\n\+ \\ENQ\EOT\EOT\STX\NUL\ETX\DC2\EOT\171\SOH\FS\GS\n\+ \\212\STX\n\+ \\EOT\EOT\EOT\STX\SOH\DC2\EOT\180\SOH\EOT\RS\SUB\197\STX\n\+ \recovery_window is an optional argument specifying the address lookahead\n\+ \when restoring a wallet seed. The recovery window applies to each\n\+ \individual branch of the BIP44 derivation paths. Supplying a recovery\n\+ \window of zero indicates that no addresses should be recovered, such after\n\+ \the first initialization of the wallet.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\EOT\STX\SOH\EOT\DC2\ACK\180\SOH\EOT\171\SOH\RS\n\+ \\r\n\+ \\ENQ\EOT\EOT\STX\SOH\ENQ\DC2\EOT\180\SOH\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\EOT\STX\SOH\SOH\DC2\EOT\180\SOH\n\+ \\EM\n\+ \\r\n\+ \\ENQ\EOT\EOT\STX\SOH\ETX\DC2\EOT\180\SOH\FS\GS\n\+ \\203\ETX\n\+ \\EOT\EOT\EOT\STX\STX\DC2\EOT\190\SOH\EOT+\SUB\188\ETX\n\+ \channel_backups is an optional argument that allows clients to recover the\n\+ \settled funds within a set of channels. This should be populated if the\n\+ \user was unable to close out all channels and sweep funds before partial or\n\+ \total data loss occurred. If specified, then after on-chain recovery of\n\+ \funds, lnd begin to carry out the data loss recovery protocol in order to\n\+ \recover the funds in each channel from a remote force closed transaction.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\EOT\STX\STX\EOT\DC2\ACK\190\SOH\EOT\180\SOH\RS\n\+ \\r\n\+ \\ENQ\EOT\EOT\STX\STX\ACK\DC2\EOT\190\SOH\EOT\SYN\n\+ \\r\n\+ \\ENQ\EOT\EOT\STX\STX\SOH\DC2\EOT\190\SOH\ETB&\n\+ \\r\n\+ \\ENQ\EOT\EOT\STX\STX\ETX\DC2\EOT\190\SOH)*\n\+ \\132\SOH\n\+ \\EOT\EOT\EOT\STX\ETX\DC2\EOT\196\SOH\EOT\FS\SUBv\n\+ \stateless_init is an optional argument instructing the daemon NOT to create\n\+ \any *.macaroon files in its file system.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\EOT\STX\ETX\EOT\DC2\ACK\196\SOH\EOT\190\SOH+\n\+ \\r\n\+ \\ENQ\EOT\EOT\STX\ETX\ENQ\DC2\EOT\196\SOH\EOT\b\n\+ \\r\n\+ \\ENQ\EOT\EOT\STX\ETX\SOH\DC2\EOT\196\SOH\t\ETB\n\+ \\r\n\+ \\ENQ\EOT\EOT\STX\ETX\ETX\DC2\EOT\196\SOH\SUB\ESC\n\+ \\f\n\+ \\STX\EOT\ENQ\DC2\ACK\198\SOH\NUL\199\SOH\SOH\n\+ \\v\n\+ \\ETX\EOT\ENQ\SOH\DC2\EOT\198\SOH\b\FS\n\+ \\f\n\+ \\STX\EOT\ACK\DC2\ACK\201\SOH\NUL\228\SOH\SOH\n\+ \\v\n\+ \\ETX\EOT\ACK\SOH\DC2\EOT\201\SOH\b\GS\n\+ \\154\SOH\n\+ \\EOT\EOT\ACK\STX\NUL\DC2\EOT\206\SOH\EOT\US\SUB\139\SOH\n\+ \current_password should be the current valid passphrase used to unlock the\n\+ \daemon. When using REST, this field must be encoded as base64.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\ACK\STX\NUL\EOT\DC2\ACK\206\SOH\EOT\201\SOH\US\n\+ \\r\n\+ \\ENQ\EOT\ACK\STX\NUL\ENQ\DC2\EOT\206\SOH\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\ACK\STX\NUL\SOH\DC2\EOT\206\SOH\n\+ \\SUB\n\+ \\r\n\+ \\ENQ\EOT\ACK\STX\NUL\ETX\DC2\EOT\206\SOH\GS\RS\n\+ \\155\SOH\n\+ \\EOT\EOT\ACK\STX\SOH\DC2\EOT\212\SOH\EOT\ESC\SUB\140\SOH\n\+ \new_password should be the new passphrase that will be needed to unlock the\n\+ \daemon. When using REST, this field must be encoded as base64.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\ACK\STX\SOH\EOT\DC2\ACK\212\SOH\EOT\206\SOH\US\n\+ \\r\n\+ \\ENQ\EOT\ACK\STX\SOH\ENQ\DC2\EOT\212\SOH\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\ACK\STX\SOH\SOH\DC2\EOT\212\SOH\n\+ \\SYN\n\+ \\r\n\+ \\ENQ\EOT\ACK\STX\SOH\ETX\DC2\EOT\212\SOH\EM\SUB\n\+ \\171\STX\n\+ \\EOT\EOT\ACK\STX\STX\DC2\EOT\220\SOH\EOT\FS\SUB\156\STX\n\+ \stateless_init is an optional argument instructing the daemon NOT to create\n\+ \any *.macaroon files in its filesystem. If this parameter is set, then the\n\+ \admin macaroon returned in the response MUST be stored by the caller of the\n\+ \RPC as otherwise all access to the daemon will be lost!\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\ACK\STX\STX\EOT\DC2\ACK\220\SOH\EOT\212\SOH\ESC\n\+ \\r\n\+ \\ENQ\EOT\ACK\STX\STX\ENQ\DC2\EOT\220\SOH\EOT\b\n\+ \\r\n\+ \\ENQ\EOT\ACK\STX\STX\SOH\DC2\EOT\220\SOH\t\ETB\n\+ \\r\n\+ \\ENQ\EOT\ACK\STX\STX\ETX\DC2\EOT\220\SOH\SUB\ESC\n\+ \\192\SOH\n\+ \\EOT\EOT\ACK\STX\ETX\DC2\EOT\227\SOH\EOT#\SUB\177\SOH\n\+ \new_macaroon_root_key is an optional argument instructing the daemon to\n\+ \rotate the macaroon root key when set to true. This will invalidate all\n\+ \previously generated macaroons.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\ACK\STX\ETX\EOT\DC2\ACK\227\SOH\EOT\220\SOH\FS\n\+ \\r\n\+ \\ENQ\EOT\ACK\STX\ETX\ENQ\DC2\EOT\227\SOH\EOT\b\n\+ \\r\n\+ \\ENQ\EOT\ACK\STX\ETX\SOH\DC2\EOT\227\SOH\t\RS\n\+ \\r\n\+ \\ENQ\EOT\ACK\STX\ETX\ETX\DC2\EOT\227\SOH!\"\n\+ \\f\n\+ \\STX\EOT\a\DC2\ACK\229\SOH\NUL\239\SOH\SOH\n\+ \\v\n\+ \\ETX\EOT\a\SOH\DC2\EOT\229\SOH\b\RS\n\+ \\183\ETX\n\+ \\EOT\EOT\a\STX\NUL\DC2\EOT\238\SOH\EOT\GS\SUB\168\ETX\n\+ \The binary serialized admin macaroon that can be used to access the daemon\n\+ \after rotating the macaroon root key. If both the stateless_init and\n\+ \new_macaroon_root_key parameter were set to true, this is the ONLY copy of\n\+ \the macaroon that was created from the new root key and MUST be stored\n\+ \safely by the caller. Otherwise a copy of this macaroon is also persisted on\n\+ \disk by the daemon, together with other macaroon files.\n\+ \\n\+ \\SI\n\+ \\ENQ\EOT\a\STX\NUL\EOT\DC2\ACK\238\SOH\EOT\229\SOH \n\+ \\r\n\+ \\ENQ\EOT\a\STX\NUL\ENQ\DC2\EOT\238\SOH\EOT\t\n\+ \\r\n\+ \\ENQ\EOT\a\STX\NUL\SOH\DC2\EOT\238\SOH\n\+ \\CAN\n\+ \\r\n\+ \\ENQ\EOT\a\STX\NUL\ETX\DC2\EOT\238\SOH\ESC\FSb\ACKproto3"
+ src/Proto/WalletUnlockerGrpc_Fields.hs view
@@ -0,0 +1,118 @@+{- This file was auto-generated from wallet_unlocker_grpc.proto by the proto-lens-protoc program. -}+{-# LANGUAGE ScopedTypeVariables, DataKinds, TypeFamilies, UndecidableInstances, GeneralizedNewtypeDeriving, MultiParamTypeClasses, FlexibleContexts, FlexibleInstances, PatternSynonyms, MagicHash, NoImplicitPrelude, DataKinds, BangPatterns, TypeApplications, OverloadedStrings, DerivingStrategies#-}+{-# OPTIONS_GHC -Wno-unused-imports#-}+{-# OPTIONS_GHC -Wno-duplicate-exports#-}+{-# OPTIONS_GHC -Wno-dodgy-exports#-}+module Proto.WalletUnlockerGrpc_Fields where+import qualified Data.ProtoLens.Runtime.Prelude as Prelude+import qualified Data.ProtoLens.Runtime.Data.Int as Data.Int+import qualified Data.ProtoLens.Runtime.Data.Monoid as Data.Monoid+import qualified Data.ProtoLens.Runtime.Data.Word as Data.Word+import qualified Data.ProtoLens.Runtime.Data.ProtoLens as Data.ProtoLens+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Bytes as Data.ProtoLens.Encoding.Bytes+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Growing as Data.ProtoLens.Encoding.Growing+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Parser.Unsafe as Data.ProtoLens.Encoding.Parser.Unsafe+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Encoding.Wire as Data.ProtoLens.Encoding.Wire+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Field as Data.ProtoLens.Field+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Message.Enum as Data.ProtoLens.Message.Enum+import qualified Data.ProtoLens.Runtime.Data.ProtoLens.Service.Types as Data.ProtoLens.Service.Types+import qualified Data.ProtoLens.Runtime.Lens.Family2 as Lens.Family2+import qualified Data.ProtoLens.Runtime.Lens.Family2.Unchecked as Lens.Family2.Unchecked+import qualified Data.ProtoLens.Runtime.Data.Text as Data.Text+import qualified Data.ProtoLens.Runtime.Data.Map as Data.Map+import qualified Data.ProtoLens.Runtime.Data.ByteString as Data.ByteString+import qualified Data.ProtoLens.Runtime.Data.ByteString.Char8 as Data.ByteString.Char8+import qualified Data.ProtoLens.Runtime.Data.Text.Encoding as Data.Text.Encoding+import qualified Data.ProtoLens.Runtime.Data.Vector as Data.Vector+import qualified Data.ProtoLens.Runtime.Data.Vector.Generic as Data.Vector.Generic+import qualified Data.ProtoLens.Runtime.Data.Vector.Unboxed as Data.Vector.Unboxed+import qualified Data.ProtoLens.Runtime.Text.Read as Text.Read+import qualified Proto.LndGrpc+adminMacaroon ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "adminMacaroon" a) =>+ Lens.Family2.LensLike' f s a+adminMacaroon = Data.ProtoLens.Field.field @"adminMacaroon"+aezeedPassphrase ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "aezeedPassphrase" a) =>+ Lens.Family2.LensLike' f s a+aezeedPassphrase = Data.ProtoLens.Field.field @"aezeedPassphrase"+channelBackups ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "channelBackups" a) =>+ Lens.Family2.LensLike' f s a+channelBackups = Data.ProtoLens.Field.field @"channelBackups"+cipherSeedMnemonic ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "cipherSeedMnemonic" a) =>+ Lens.Family2.LensLike' f s a+cipherSeedMnemonic+ = Data.ProtoLens.Field.field @"cipherSeedMnemonic"+currentPassword ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "currentPassword" a) =>+ Lens.Family2.LensLike' f s a+currentPassword = Data.ProtoLens.Field.field @"currentPassword"+encipheredSeed ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "encipheredSeed" a) =>+ Lens.Family2.LensLike' f s a+encipheredSeed = Data.ProtoLens.Field.field @"encipheredSeed"+maybe'channelBackups ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "maybe'channelBackups" a) =>+ Lens.Family2.LensLike' f s a+maybe'channelBackups+ = Data.ProtoLens.Field.field @"maybe'channelBackups"+newMacaroonRootKey ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "newMacaroonRootKey" a) =>+ Lens.Family2.LensLike' f s a+newMacaroonRootKey+ = Data.ProtoLens.Field.field @"newMacaroonRootKey"+newPassword ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "newPassword" a) =>+ Lens.Family2.LensLike' f s a+newPassword = Data.ProtoLens.Field.field @"newPassword"+recoveryWindow ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "recoveryWindow" a) =>+ Lens.Family2.LensLike' f s a+recoveryWindow = Data.ProtoLens.Field.field @"recoveryWindow"+seedEntropy ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "seedEntropy" a) =>+ Lens.Family2.LensLike' f s a+seedEntropy = Data.ProtoLens.Field.field @"seedEntropy"+statelessInit ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "statelessInit" a) =>+ Lens.Family2.LensLike' f s a+statelessInit = Data.ProtoLens.Field.field @"statelessInit"+vec'cipherSeedMnemonic ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "vec'cipherSeedMnemonic" a) =>+ Lens.Family2.LensLike' f s a+vec'cipherSeedMnemonic+ = Data.ProtoLens.Field.field @"vec'cipherSeedMnemonic"+walletPassword ::+ forall f s a.+ (Prelude.Functor f,+ Data.ProtoLens.Field.HasField s "walletPassword" a) =>+ Lens.Family2.LensLike' f s a+walletPassword = Data.ProtoLens.Field.field @"walletPassword"
+ test/LndClient/RPCSpec.hs view
@@ -0,0 +1,341 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GeneralisedNewtypeDeriving #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TupleSections #-}+{-# LANGUAGE TypeFamilies #-}++module LndClient.RPCSpec+ ( spec,+ )+where++import LndClient.Data.AddHodlInvoice as HodlInvoice (AddHodlInvoiceRequest (..))+import LndClient.Data.AddInvoice as AddInvoice+ ( AddInvoiceRequest (..),+ AddInvoiceResponse (..),+ )+import LndClient.Data.Channel as Channel (Channel (..))+import LndClient.Data.CloseChannel (CloseChannelRequest (..))+import qualified LndClient.Data.CloseChannel as CloseChannel+import qualified LndClient.Data.ClosedChannels as ClosedChannels+import LndClient.Data.GetInfo (GetInfoResponse (..))+import LndClient.Data.Invoice as Invoice (Invoice (..), InvoiceState (..))+import LndClient.Data.ListChannels as LC (ListChannelsRequest (..))+import LndClient.Data.ListInvoices as ListInvoices+ ( ListInvoiceRequest (..),+ ListInvoiceResponse (..),+ )+import LndClient.Data.OpenChannel (OpenChannelRequest (..))+import LndClient.Data.PayReq as PayReq (PayReq (..))+import LndClient.Data.SendPayment (SendPaymentRequest (..))+import LndClient.Data.SubscribeInvoices+ ( SubscribeInvoicesRequest (..),+ )+import LndClient.Import+import LndClient.LndTest+import LndClient.QRCode+import LndClient.RPC.Katip+import LndClient.TestApp+import qualified LndClient.Watcher as Watcher+import Test.Hspec++spec :: Spec+spec = do+ it "fromJSON" $ do+ x <- readLndEnv+ envLndSyncGrpcTimeout x `shouldBe` newGrpcTimeout 59+ envLndAsyncGrpcTimeout x `shouldBe` Nothing+ it "decodePayReq" $ withEnv $ do+ lnd <- getLndEnv Bob+ x0 <- liftLndResult =<< addInvoice lnd addInvoiceRequest+ x1 <-+ liftLndResult+ =<< decodePayReq lnd (AddInvoice.paymentRequest x0)+ liftIO $ do+ PayReq.paymentHash x1+ `shouldBe` AddInvoice.rHash x0+ PayReq.numMsat x1+ `shouldBe` AddInvoice.valueMsat addInvoiceRequest+ Just (PayReq.expiry x1)+ `shouldBe` AddInvoice.expiry addInvoiceRequest+ it "lookupInvoice" $ withEnv $ do+ lnd <- getLndEnv Bob+ x0 <- liftLndResult =<< addInvoice lnd addInvoiceRequest+ x1 <- liftLndResult =<< lookupInvoice lnd (AddInvoice.rHash x0)+ liftIO $ do+ Invoice.rHash x1+ `shouldBe` AddInvoice.rHash x0+ Invoice.paymentRequest x1+ `shouldBe` AddInvoice.paymentRequest x0+ Invoice.addIndex x1+ `shouldBe` AddInvoice.addIndex x0+ Just (Invoice.memo x1)+ `shouldBe` AddInvoice.memo addInvoiceRequest+ Invoice.valueMsat x1+ `shouldBe` AddInvoice.valueMsat addInvoiceRequest+ it "addInvoice" $ withEnv $ do+ lnd <- getLndEnv Bob+ res <- addInvoice lnd addInvoiceRequest+ liftIO $ res `shouldSatisfy` isRight+ it "addInvoiceQrCode" $ withEnv $ do+ lnd <- getLndEnv Bob+ res <- liftLndResult =<< addInvoice lnd addInvoiceRequest+ let qr = qrPngDataUrl qrDefOpts (AddInvoice.paymentRequest res)+ liftIO $ qr `shouldSatisfy` isJust+ it "addNormalInvoice" $ withEnv $ do+ queue <- getInvoiceTChan Bob+ lnd <- getLndEnv Bob+ inv <- liftLndResult =<< addInvoice lnd addInvoiceRequest+ res <-+ receiveInvoice+ (AddInvoice.rHash inv)+ Invoice.OPEN+ queue+ liftIO $ res `shouldSatisfy` isRight+ it "settleNormalInvoice" $ withEnv $ do+ void $ setupOneChannel Alice Bob+ chan <- getInvoiceTChan Bob+ bob <- getLndEnv Bob+ inv <- liftLndResult =<< addInvoice bob addInvoiceRequest+ let rh = AddInvoice.rHash inv+ liftLndResult+ =<< receiveInvoice rh Invoice.OPEN chan+ alice <- getLndEnv Alice+ let pr = AddInvoice.paymentRequest inv+ let spr = SendPaymentRequest pr $ MSat 1000000+ void $ liftLndResult =<< sendPayment alice spr+ res <- receiveInvoice rh Invoice.SETTLED chan+ liftIO $ res `shouldSatisfy` isRight+ it "addHodlInvoice" $ withEnv $ do+ lnd <- getLndEnv Bob+ r <- newRPreimage+ let req =+ AddHodlInvoiceRequest+ { memo = Just "HELLO",+ hash = newRHash r,+ valueMsat = MSat 1000000,+ expiry = Just $ Seconds 1000+ }+ x0 <- addHodlInvoice lnd req+ x1 <- ensureHodlInvoice lnd req+ liftIO $ do+ x0 `shouldSatisfy` isRight+ x0 `shouldBe` AddInvoice.paymentRequest <$> x1+ it "watchNormal" $ withEnv $ do+ bob <- getLndEnv Bob+ w <- Watcher.spawnLink bob subscribeInvoicesChan ignore3+ chan <- Watcher.dupLndTChan w+ Watcher.watch w subscribeInvoicesRequest+ inv <- liftLndResult =<< addInvoice bob addInvoiceRequest+ res <-+ receiveInvoice+ (AddInvoice.rHash inv)+ Invoice.OPEN+ chan+ Watcher.delete w+ liftIO $ res `shouldSatisfy` isRight+ it "watchUnit" $ withEnv $ do+ bob <- getLndEnv Bob+ alice <- getLndEnv Alice+ w <- Watcher.spawnLinkUnit bob subscribeChannelEventsChan ignore2+ chan <- Watcher.dupLndTChan w+ Watcher.watchUnit w+ GetInfoResponse bobPubKey _ _ <- liftLndResult =<< getInfo bob+ let openChannelRequest =+ OpenChannelRequest+ { nodePubkey = bobPubKey,+ localFundingAmount = MSat 20000000,+ pushSat = Just $ MSat 1000000,+ targetConf = Nothing,+ satPerByte = Nothing,+ private = Nothing,+ minHtlcMsat = Nothing,+ remoteCsvDelay = Nothing,+ minConfs = Nothing,+ spendUnconfirmed = Nothing,+ closeAddress = Nothing+ }+ cp <- liftLndResult =<< openChannelSync alice openChannelRequest+ res <- receiveActiveChannel proxyOwner cp chan+ Watcher.delete w+ liftIO $ res `shouldSatisfy` isRight+ it "unWatch" $ withEnv $ do+ lnd <- getLndEnv Bob+ w <-+ Watcher.spawnLink+ lnd+ subscribeInvoicesChan+ -- can unWatch from the callback+ $ \w k _ -> Watcher.unWatch w k+ chan <- Watcher.dupLndTChan w+ Watcher.watch w subscribeInvoicesRequest+ void . liftLndResult =<< addInvoice lnd addInvoiceRequest+ -- can unWatch from the outside as well+ Watcher.unWatch w subscribeInvoicesRequest+ purgeChan chan+ void . liftLndResult =<< addInvoice lnd addInvoiceRequest+ res <- readTChanTimeout (MicroSecondsDelay 500000) chan+ Watcher.delete w+ liftIO $ res `shouldBe` Nothing+ it "ensureHodlInvoice" $ withEnv $ do+ r <- newRPreimage+ let req =+ AddHodlInvoiceRequest+ { memo = Just "HELLO",+ hash = newRHash r,+ valueMsat = MSat 1000000,+ expiry = Just $ Seconds 1000+ }+ bob <- getLndEnv Bob+ res <- ensureHodlInvoice bob req+ liftIO $ res `shouldSatisfy` isRight+ it "cancelInvoice" $ withEnv $ do+ void $ setupOneChannel Alice Bob+ r <- newRPreimage+ let rh = newRHash r+ let hipr =+ AddHodlInvoiceRequest+ Nothing+ rh+ (MSat 1000000)+ Nothing+ bob <- getLndEnv Bob+ q <- getInvoiceTChan Bob+ qq <- getSingleInvoiceTChan Bob+ pr <-+ liftLndResult+ =<< addHodlInvoice bob hipr+ watchSingleInvoice Bob rh+ liftLndResult+ =<< receiveInvoice rh Invoice.OPEN q+ let spr = SendPaymentRequest pr $ MSat 1000000+ alice <- getLndEnv Alice+ withSpawnLink+ (liftLndResult =<< sendPayment alice spr)+ ( const $ do+ --+ -- NOTE : this is working only in coingaming LND fork+ -- which is fixing this bug+ -- https://github.com/lightningnetwork/lnd/issues/4544+ --+ liftLndResult+ =<< receiveInvoice rh Invoice.ACCEPTED qq+ res <- cancelInvoice bob rh+ liftLndResult+ =<< receiveInvoice rh Invoice.CANCELED qq+ liftIO $ res `shouldSatisfy` isRight+ )+ it "settleInvoice" $ withEnv $ do+ void $ setupOneChannel Alice Bob+ r <- newRPreimage+ let rh = newRHash r+ let hipr =+ AddHodlInvoiceRequest Nothing rh (MSat 1000000) Nothing+ bob <- getLndEnv Bob+ q <- getInvoiceTChan Bob+ qq <- getSingleInvoiceTChan Bob+ pr <- liftLndResult =<< addHodlInvoice bob hipr+ watchSingleInvoice Bob rh+ liftLndResult+ =<< receiveInvoice rh Invoice.OPEN q+ let spr = SendPaymentRequest pr $ MSat 1000000+ alice <- getLndEnv Alice+ withSpawnLink+ (liftLndResult =<< sendPayment alice spr)+ ( const $ do+ --+ -- NOTE : this is working only in coingaming LND fork+ -- which is fixing this bug+ -- https://github.com/lightningnetwork/lnd/issues/4544+ --+ liftLndResult+ =<< receiveInvoice rh Invoice.ACCEPTED qq+ res <- settleInvoice bob r+ liftLndResult+ =<< receiveInvoice rh Invoice.SETTLED qq+ liftIO $ res `shouldSatisfy` isRight+ )+ it "listInvoices" $ withEnv $ do+ lnd <- getLndEnv Bob+ rh <-+ AddInvoice.rHash+ <$> (liftLndResult =<< addInvoice lnd addInvoiceRequest)+ let listReq =+ ListInvoiceRequest+ { pendingOnly = False,+ indexOffset = AddIndex 0,+ numMaxInvoices = 0,+ reversed = False+ }+ xs <-+ ListInvoices.invoices+ <$> (liftLndResult =<< listInvoices lnd listReq)+ liftIO $ xs `shouldSatisfy` any ((rh ==) . Invoice.rHash)+ it "listChannelAndClose" $ withEnv $ do+ void $ setupOneChannel Alice Bob+ lnd <- getLndEnv Bob+ let listReq = ListChannelsRequest False False False False Nothing+ cs0 <- liftLndResult =<< listChannels lnd listReq+ lazyConnectNodes proxyOwner+ cp <-+ liftMaybe "ChannelPoint is required" $+ Channel.channelPoint <$> safeHead cs0+ withSpawnLink+ ( closeChannel+ (const $ return ())+ lnd+ (CloseChannelRequest cp False Nothing Nothing Nothing)+ )+ ( const $ do+ liftLndResult =<< receiveClosedChannels proxyOwner [cp]+ cs1 <- liftLndResult =<< listChannels lnd listReq+ liftIO $ (length cs0 - length cs1) `shouldBe` 1+ )+ it "closedChannels" $ withEnv $ do+ cp <- setupOneChannel Alice Bob+ closeAllChannels proxyOwner+ lnd <- getLndEnv Bob+ res <- closedChannels lnd ClosedChannels.defReq+ liftIO $+ res+ `shouldSatisfy` ( \case+ Left {} -> False+ Right xs -> any ((cp ==) . CloseChannel.chPoint) xs+ )+ where+ --+ -- TODO : fix this, it's not really working for some reason+ -- LND says "payment isn't initiated" error in logs+ --+ --it "trackPaymentV2" $ withEnv $ do+ -- setupOneChannel+ -- --+ -- -- prepare invoice and subscription+ -- --+ -- bob <- getLndEnv Bob+ -- inv <- liftLndResult =<< addInvoice bob addInvoiceRequest+ -- let rh = AddInvoice.rHash inv+ -- let pr = AddInvoice.paymentRequest inv+ -- let spr = SendPaymentRequest pr $ MSat 1000+ -- --+ -- -- spawn payment watcher and settle invoice+ -- --+ -- w <- Watcher.spawnLink bob trackPaymentV2Chan $ \_ _ _ -> pure ()+ -- chan <- Watcher.dupLndTChan w+ -- Watcher.watch w $ TrackPaymentRequest rh False+ -- alice <- getLndEnv Alice+ -- void $ liftLndResult =<< sendPayment alice spr+ -- res <- readTChanTimeout (MicroSecondsDelay 500000) chan+ -- Watcher.delete w+ -- liftIO $ res `shouldSatisfy` isJust+ subscribeInvoicesRequest =+ SubscribeInvoicesRequest (Just $ AddIndex 1) Nothing+ addInvoiceRequest =+ AddInvoiceRequest+ { memo = Just "HELLO",+ valueMsat = MSat 1000000,+ expiry = Just $ Seconds 1000+ }
+ test/LndClient/TestApp.hs view
@@ -0,0 +1,160 @@+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GeneralisedNewtypeDeriving #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TypeFamilies #-}++module LndClient.TestApp+ ( withEnv,+ Owner (..),+ proxyOwner,+ )+where++import LndClient.Data.LndEnv+import LndClient.Import+import LndClient.LndTest+import qualified Network.Bitcoin as BTC (Client)+import Network.GRPC.Client.Helpers (GrpcClientConfig (..))++data Env+ = Env+ { envAlice :: TestEnv,+ envBob :: TestEnv,+ envBtc :: BTC.Client,+ envKatipNS :: Namespace,+ envKatipCTX :: LogContexts,+ envKatipLE :: LogEnv+ }++data Owner = Alice | Bob+ deriving (Eq, Ord, Show, Bounded, Enum)++proxyOwner :: Proxy Owner+proxyOwner = Proxy++newBobEnv :: LndEnv -> LndEnv+newBobEnv x =+ x+ { envLndConfig =+ (envLndConfig x)+ { _grpcClientConfigPort = 11009+ },+ envLndCipherSeedMnemonic =+ Just $+ CipherSeedMnemonic+ [ "absent",+ "betray",+ "direct",+ "scheme",+ "sunset",+ "mechanic",+ "exhaust",+ "suggest",+ "boy",+ "arena",+ "sketch",+ "bone",+ "news",+ "south",+ "way",+ "survey",+ "clip",+ "dutch",+ "depart",+ "green",+ "furnace",+ "wire",+ "wave",+ "fall"+ ],+ envLndAezeedPassphrase = Nothing+ }++readEnv :: IO Env+readEnv = do+ handleScribe <-+ mkHandleScribeWithFormatter+ bracketFormat+ ColorIfTerminal+ stdout+ (permitItem DebugS)+ V2+ le <-+ registerScribe "stdout" handleScribe defaultScribeSettings+ =<< initLogEnv "LndClient" "test"+ bc <- newBtcClient btcEnv+ aliceLndEnv <- liftIO readLndEnv+ runKatipContextT le (mempty :: LogContexts) mempty $ do+ alice <-+ newTestEnv+ aliceLndEnv+ $ NodeLocation "localhost:9735"+ bob <-+ newTestEnv+ (newBobEnv aliceLndEnv)+ $ NodeLocation "localhost:9734"+ pure+ Env+ { envAlice = alice,+ envBob = bob,+ envBtc = bc,+ envKatipLE = le,+ envKatipCTX = mempty,+ envKatipNS = mempty+ }++withEnv :: AppM IO () -> IO ()+withEnv this = do+ env <- readEnv+ runApp env $ setupZeroChannels proxyOwner >> this+ void . closeScribes $ envKatipLE env++btcEnv :: BtcEnv+btcEnv =+ BtcEnv+ { btcUrl = BtcUrl "http://localhost:18443",+ btcLogin = BtcLogin "developer",+ btcPassword = BtcPassword "developer"+ }++newtype AppM m a+ = AppM+ { unAppM :: ReaderT Env m a+ }+ deriving (Functor, Applicative, Monad, MonadIO, MonadReader Env)++instance (MonadUnliftIO m) => MonadUnliftIO (AppM m) where+ withRunInIO run = AppM (withRunInIO (\k -> run (k . unAppM)))+ askUnliftIO =+ AppM+ ( fmap+ (\(UnliftIO run) -> UnliftIO (run . unAppM))+ askUnliftIO+ )++instance (MonadIO m) => Katip (AppM m) where+ getLogEnv = asks envKatipLE+ localLogEnv f (AppM m) =+ AppM (local (\s -> s {envKatipLE = f (envKatipLE s)}) m)++instance (MonadIO m) => KatipContext (AppM m) where+ getKatipContext = asks envKatipCTX+ localKatipContext f (AppM m) =+ AppM (local (\s -> s {envKatipCTX = f (envKatipCTX s)}) m)+ getKatipNamespace = asks envKatipNS+ localKatipNamespace f (AppM m) =+ AppM (local (\s -> s {envKatipNS = f (envKatipNS s)}) m)++instance (MonadUnliftIO m) => LndTest (AppM m) Owner where+ getBtcClient = const $ asks envBtc+ getTestEnv = \case+ Alice -> asks envAlice+ Bob -> asks envBob++runApp :: Env -> AppM m a -> m a+runApp env app = runReaderT (unAppM app) env
+ test/Spec.hs view
@@ -0,0 +1,2 @@+{-# OPTIONS_GHC -Wno-missing-export-lists #-}+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}