From 110b1800fcb0e7bccf47dceed96602250f074027 Mon Sep 17 00:00:00 2001 From: daywalker90 Date: Wed, 8 Jul 2026 17:33:51 +0200 Subject: [PATCH 01/20] reckless: rust rewrite Changelog-Changed: reckless: complete rewrite with new subcommands `listinstalled` and `tip`. Replaced `search` with `listavailable`. --- .github/workflows/readme-rpc-sync.yml | 1 - .msggen.json | 356 +++ Cargo.lock | 77 + Cargo.toml | 1 + Makefile | 12 +- cln-grpc/proto/node.proto | 142 ++ cln-grpc/src/convert.rs | 202 ++ cln-grpc/src/server.rs | 57 + cln-rpc/src/model.rs | 320 +++ cln-rpc/src/notifications.rs | 61 + contrib/msggen/msggen/schema.json | 637 ++++- contrib/msggen/msggen/utils/utils.py | 2 + contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py | 1244 +++++----- .../pyln/grpc/node_pb2_grpc.py | 86 + contrib/pyln-testing/pyln/testing/grpc2py.py | 93 + contrib/pyln-testing/pyln/testing/utils.py | 2 +- doc/Makefile | 3 +- .../plugin-development/plugin-manager.md | 16 +- doc/index.rst | 2 +- doc/lightning-reckless.1.md | 159 -- doc/lightningd-config.5.md | 5 + doc/node-operators-guide/plugins.md | 108 +- doc/reckless.7.md | 167 -- doc/schemas/listconfigs.json | 25 + doc/schemas/notification/reckless_log.json | 54 + doc/schemas/plugin.json | 20 +- doc/schemas/reckless.json | 538 ++++- mkdocs.yml | 2 +- nix/apps.nix | 4 - plugins/.gitignore | 2 +- plugins/Makefile | 16 +- plugins/reckless-plugin/Cargo.toml | 32 + plugins/reckless-plugin/README.md | 121 + plugins/reckless-plugin/src/cmds.rs | 6 + plugins/reckless-plugin/src/cmds/enable.rs | 188 ++ plugins/reckless-plugin/src/cmds/install.rs | 317 +++ plugins/reckless-plugin/src/cmds/list.rs | 86 + plugins/reckless-plugin/src/cmds/source.rs | 207 ++ plugins/reckless-plugin/src/cmds/tip.rs | 121 + plugins/reckless-plugin/src/cmds/update.rs | 321 +++ plugins/reckless-plugin/src/installers.rs | 625 +++++ plugins/reckless-plugin/src/main.rs | 200 ++ plugins/reckless-plugin/src/structs.rs | 899 +++++++ plugins/reckless-plugin/src/util.rs | 1456 +++++++++++ plugins/recklessrpc.c | 334 --- plugins/src/options.rs | 35 +- .../testpluginvaliddeps/requirements.txt | 1 + .../testpluginvaliddeps.py | 26 + .../lightningd/testplugmani/manifest.json | 8 + .../lightningd/testplugmani/reqs.txt | 2 + .../lightningd/testplugmani/run.py | 33 + .../lightningd/testplugmani/testplugpass.py | 25 + .../lightningd/testplugpyproj/poetry.lock | 523 ++++ .../testplugreqopts/requirements.txt | 1 + .../testplugreqopts/testplugreqopts.py | 22 + .../rkls_api_lightningd_plugins.json | 38 - tests/rkls_github_canned_server.py | 43 - tests/test_reckless.py | 622 ++--- tools/reckless | 2145 ----------------- 59 files changed, 8676 insertions(+), 4175 deletions(-) delete mode 100644 doc/lightning-reckless.1.md delete mode 100644 doc/reckless.7.md create mode 100644 doc/schemas/notification/reckless_log.json create mode 100644 plugins/reckless-plugin/Cargo.toml create mode 100644 plugins/reckless-plugin/README.md create mode 100644 plugins/reckless-plugin/src/cmds.rs create mode 100644 plugins/reckless-plugin/src/cmds/enable.rs create mode 100644 plugins/reckless-plugin/src/cmds/install.rs create mode 100644 plugins/reckless-plugin/src/cmds/list.rs create mode 100644 plugins/reckless-plugin/src/cmds/source.rs create mode 100644 plugins/reckless-plugin/src/cmds/tip.rs create mode 100644 plugins/reckless-plugin/src/cmds/update.rs create mode 100644 plugins/reckless-plugin/src/installers.rs create mode 100644 plugins/reckless-plugin/src/main.rs create mode 100644 plugins/reckless-plugin/src/structs.rs create mode 100644 plugins/reckless-plugin/src/util.rs delete mode 100644 plugins/recklessrpc.c create mode 100644 tests/data/recklessrepo/lightningd/testpluginvaliddeps/requirements.txt create mode 100644 tests/data/recklessrepo/lightningd/testpluginvaliddeps/testpluginvaliddeps.py create mode 100644 tests/data/recklessrepo/lightningd/testplugmani/manifest.json create mode 100644 tests/data/recklessrepo/lightningd/testplugmani/reqs.txt create mode 100755 tests/data/recklessrepo/lightningd/testplugmani/run.py create mode 100755 tests/data/recklessrepo/lightningd/testplugmani/testplugpass.py create mode 100644 tests/data/recklessrepo/lightningd/testplugpyproj/poetry.lock create mode 100644 tests/data/recklessrepo/lightningd/testplugreqopts/requirements.txt create mode 100644 tests/data/recklessrepo/lightningd/testplugreqopts/testplugreqopts.py delete mode 100644 tests/data/recklessrepo/rkls_api_lightningd_plugins.json delete mode 100644 tests/rkls_github_canned_server.py delete mode 100755 tools/reckless diff --git a/.github/workflows/readme-rpc-sync.yml b/.github/workflows/readme-rpc-sync.yml index 855815b1fe9a..4bd99202b62c 100644 --- a/.github/workflows/readme-rpc-sync.yml +++ b/.github/workflows/readme-rpc-sync.yml @@ -12,7 +12,6 @@ on: - 'doc/*.5.md' - 'doc/*.8.md' - 'doc/lightningd-*.7.md' - - 'doc/reckless.7.md' workflow_dispatch: jobs: diff --git a/.msggen.json b/.msggen.json index fadf6c8a285b..d86be6191f54 100644 --- a/.msggen.json +++ b/.msggen.json @@ -556,6 +556,43 @@ "startdir": 3, "stop": 1 }, + "RecklessCommand": { + "disable": 6, + "enable": 5, + "help": 9, + "install": 0, + "listavailable": 3, + "listinstalled": 4, + "source": 7, + "tip": 8, + "uninstall": 2, + "update": 1 + }, + "RecklessListavailableInstaller": { + "Custom": 9, + "Go": 8, + "Nodejs": 6, + "PoetryVenv": 3, + "PyprojectViaPip": 4, + "Python": 5, + "PythonUv": 0, + "PythonUvLegacy": 2, + "PythonUvShebang": 1, + "Rust": 7 + }, + "RecklessLogLevel": { + "broken": 5, + "debug": 2, + "info": 3, + "io": 0, + "trace": 1, + "unusual": 4 + }, + "RecklessSubcommand": { + "add": 0, + "list": 1, + "remove": 2 + }, "RecoverResult": { "Recovery restart in progress": 0 }, @@ -2595,6 +2632,7 @@ "ListConfigs.configs.plugin": 10, "ListConfigs.configs.plugin-dir": 11, "ListConfigs.configs.proxy": 52, + "ListConfigs.configs.reckless-dir": 85, "ListConfigs.configs.recover": 84, "ListConfigs.configs.regtest": 6, "ListConfigs.configs.require-confirmed-inputs": 68, @@ -2900,6 +2938,10 @@ "ListConfigs.configs.proxy.source": 2, "ListConfigs.configs.proxy.value_str": 1 }, + "ListconfigsConfigsReckless-dir": { + "ListConfigs.configs.reckless-dir.source": 1, + "ListConfigs.configs.reckless-dir.value_str": 2 + }, "ListconfigsConfigsRecover": { "ListConfigs.configs.recover.source": 1, "ListConfigs.configs.recover.value_str": 2 @@ -3936,6 +3978,84 @@ "PreApproveKeysend.destination": 1, "PreApproveKeysend.payment_hash": 2 }, + "RecklessDisable": { + "Reckless.disable.plugin_name": 1 + }, + "RecklessEnable": { + "Reckless.enable.plugin_name": 1 + }, + "RecklessInstall": { + "Reckless.install.enabled": 1, + "Reckless.install.installed_commit": 2, + "Reckless.install.plugin_name": 3 + }, + "RecklessListavailable": { + "Reckless.listavailable[].installer": 1, + "Reckless.listavailable[].manifest": 2, + "Reckless.listavailable[].origin": 3, + "Reckless.listavailable[].plugin_name": 4 + }, + "RecklessListavailableManifest": { + "Reckless.listavailable[].manifest.dependencies[]": 1, + "Reckless.listavailable[].manifest.entrypoint": 2, + "Reckless.listavailable[].manifest.install_cmd[]": 3, + "Reckless.listavailable[].manifest.installable": 4, + "Reckless.listavailable[].manifest.long_description": 5, + "Reckless.listavailable[].manifest.offer": 6, + "Reckless.listavailable[].manifest.required_options[]": 7, + "Reckless.listavailable[].manifest.short_description": 8 + }, + "RecklessListintalled": { + "Reckless.listintalled[].installation_date": 1, + "Reckless.listintalled[].installation_time": 2, + "Reckless.listintalled[].installed_commit": 3, + "Reckless.listintalled[].original_source": 4, + "Reckless.listintalled[].plugin_name": 5, + "Reckless.listintalled[].requested_commit": 6 + }, + "RecklessLogNotification": { + "reckless_log.level": 1, + "reckless_log.log": 2, + "reckless_log.time": 3, + "reckless_log.timestamp": 4 + }, + "RecklessRequest": { + "Reckless.amount_msat": 1, + "Reckless.command": 2, + "Reckless.developer": 3, + "Reckless.options[]": 4, + "Reckless.payer_note": 5, + "Reckless.subcommand": 6, + "Reckless.target": 7, + "Reckless.verbose": 8 + }, + "RecklessResponse": { + "Reckless.disable": 1, + "Reckless.enable": 2, + "Reckless.install": 3, + "Reckless.listavailable[]": 4, + "Reckless.listintalled[]": 5, + "Reckless.log[]": 6, + "Reckless.sources[]": 7, + "Reckless.tip": 8, + "Reckless.uninstall": 9, + "Reckless.update[]": 10 + }, + "RecklessTip": { + "Reckless.tip.amount_msat": 1, + "Reckless.tip.amount_sent_msat": 2, + "Reckless.tip.failed_parts": 3, + "Reckless.tip.payment_preimage": 4, + "Reckless.tip.successful_parts": 5 + }, + "RecklessUninstall": { + "Reckless.uninstall.plugin_name": 1 + }, + "RecklessUpdate": { + "Reckless.update[].enabled": 1, + "Reckless.update[].installed_commit": 2, + "Reckless.update[].plugin_name": 3 + }, "RecoverRequest": { "Recover.hsmsecret": 1 }, @@ -10708,6 +10828,18 @@ "added": "v23.08", "deprecated": null }, + "ListConfigs.configs.reckless-dir": { + "added": "v26.09", + "deprecated": null + }, + "ListConfigs.configs.reckless-dir.source": { + "added": "v26.09", + "deprecated": null + }, + "ListConfigs.configs.reckless-dir.value_str": { + "added": "v26.09", + "deprecated": null + }, "ListConfigs.configs.recover": { "added": "v23.11", "deprecated": null @@ -13524,6 +13656,210 @@ "added": "v23.02", "deprecated": null }, + "Reckless": { + "added": "v22.11", + "deprecated": null + }, + "Reckless.amount_msat": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.command": { + "added": "v22.11", + "deprecated": null + }, + "Reckless.developer": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.disable": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.disable.plugin_name": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.enable": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.enable.plugin_name": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.install": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.install.enabled": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.install.installed_commit": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.install.plugin_name": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.listavailable[]": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.listavailable[].installer": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.listavailable[].manifest": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.listavailable[].manifest.dependencies[]": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.listavailable[].manifest.entrypoint": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.listavailable[].manifest.install_cmd[]": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.listavailable[].manifest.installable": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.listavailable[].manifest.long_description": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.listavailable[].manifest.offer": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.listavailable[].manifest.required_options[]": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.listavailable[].manifest.short_description": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.listavailable[].origin": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.listavailable[].plugin_name": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.listintalled[]": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.listintalled[].installation_date": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.listintalled[].installation_time": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.listintalled[].installed_commit": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.listintalled[].original_source": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.listintalled[].plugin_name": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.listintalled[].requested_commit": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.log[]": { + "added": "v22.11", + "deprecated": null + }, + "Reckless.options[]": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.payer_note": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.sources[]": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.subcommand": { + "added": "v22.11", + "deprecated": null + }, + "Reckless.target": { + "added": "v22.11", + "deprecated": null + }, + "Reckless.tip": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.tip.amount_msat": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.tip.amount_sent_msat": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.tip.failed_parts": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.tip.payment_preimage": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.tip.successful_parts": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.uninstall": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.uninstall.plugin_name": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.update[]": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.update[].enabled": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.update[].installed_commit": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.update[].plugin_name": { + "added": "v26.09", + "deprecated": null + }, + "Reckless.verbose": { + "added": "v26.09", + "deprecated": null + }, "Recover": { "added": "pre-v0.10.1", "deprecated": null @@ -16796,6 +17132,26 @@ "added": "pre-v0.10.1", "deprecated": null }, + "reckless_log": { + "added": "v26.09", + "deprecated": null + }, + "reckless_log.level": { + "added": "v26.09", + "deprecated": null + }, + "reckless_log.log": { + "added": "v26.09", + "deprecated": null + }, + "reckless_log.time": { + "added": "v26.09", + "deprecated": null + }, + "reckless_log.timestamp": { + "added": "v26.09", + "deprecated": null + }, "recover_hook": { "added": "v23.08", "deprecated": null diff --git a/Cargo.lock b/Cargo.lock index 1edbce5194b7..f0d743f6f70e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -436,6 +436,46 @@ dependencies = [ "windows-link", ] +[[package]] +name = "clap" +version = "4.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" + [[package]] name = "cln-bip353" version = "0.1.0" @@ -549,6 +589,28 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "cln-reckless" +version = "0.1.0" +dependencies = [ + "anyhow", + "chrono", + "clap", + "cln-plugin", + "cln-rpc", + "futures", + "hex", + "log", + "log-panics", + "serde", + "serde_json", + "sha2", + "tokio", + "tokio-util", + "url", + "which", +] + [[package]] name = "cln-rpc" version = "0.7.0" @@ -2965,6 +3027,12 @@ dependencies = [ "loom", ] +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + [[package]] name = "subtle" version = "2.6.1" @@ -3731,6 +3799,15 @@ dependencies = [ "rustls-pki-types", ] +[[package]] +name = "which" +version = "8.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81995fafaaaf6ae47a7d0cc83c67caf92aeb7e5331650ae6ff856f7c0c60c459" +dependencies = [ + "libc", +] + [[package]] name = "winapi-util" version = "0.1.11" diff --git a/Cargo.toml b/Cargo.toml index 6f476f0c16c9..f0be9353b25b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,6 +20,7 @@ members = [ "plugins/wss-proxy-plugin", "plugins/bip353-plugin", "plugins/currencyrate-plugin", + "plugins/reckless-plugin", ] [workspace.dependencies] diff --git a/Makefile b/Makefile index 20d4aedff053..dee62e1a99c3 100644 --- a/Makefile +++ b/Makefile @@ -461,8 +461,7 @@ ALL_NONGEN_SRCFILES := $(ALL_NONGEN_HEADERS) $(ALL_NONGEN_SOURCES) BIN_PROGRAMS = \ cli/lightning-cli \ lightningd/lightningd \ - tools/lightning-hsmtool\ - tools/reckless + tools/lightning-hsmtool PKGLIBEXEC_PROGRAMS = \ lightningd/lightning_channeld \ lightningd/lightning_closingd \ @@ -883,7 +882,7 @@ clean: obsclean # See doc/contribute-to-core-lightning/contributor-workflow.md PYLNS=client proto testing -update-versions: update-pyln-versions update-reckless-version update-dot-version # FIXME: update-doc-examples +update-versions: update-pyln-versions update-dot-version # FIXME: update-doc-examples @uv lock update-pyln-versions: $(PYLNS:%=update-pyln-version-%) @@ -921,11 +920,6 @@ pyln-build-all: pyln-build pyln-build-bolts pyln-build-grpc-proto pyln-build-wss update-lock: uv sync --all-extras --all-groups -update-reckless-version: - @if [ -z "$(NEW_VERSION)" ]; then echo "Set NEW_VERSION!" >&2; exit 1; fi - @echo "Updating tools/reckless to $(NEW_VERSION)" - @$(SED) -i.bak "s/__VERSION__ = '.*'/__VERSION__ = '$(NEW_VERSION)'/" tools/reckless && rm tools/reckless.bak - update-dot-version: @if [ -z "$(NEW_VERSION)" ]; then echo "Set NEW_VERSION!" >&2; exit 1; fi echo $(NEW_VERSION) > .version @@ -1198,6 +1192,6 @@ canned-gossmap: devtools/gossmap-compress print-binary-sizes: $(ALL_PROGRAMS) $(ALL_TEST_PROGRAMS) $(BIN_PROGRAMS) @echo User programs: - @size -t $(PKGLIBEXEC_PROGRAMS) $(filter-out tools/reckless,$(BIN_PROGRAMS)) $(PLUGINS) + @size -t $(PKGLIBEXEC_PROGRAMS) $(BIN_PROGRAMS) $(PLUGINS) @echo All programs: @size -t $(ALL_PROGRAMS) $(ALL_TEST_PROGRAMS) | tail -n1 diff --git a/cln-grpc/proto/node.proto b/cln-grpc/proto/node.proto index c7fa0ef362cf..533fdf36b56c 100644 --- a/cln-grpc/proto/node.proto +++ b/cln-grpc/proto/node.proto @@ -161,6 +161,7 @@ service Node { rpc CreateProof(CreateproofRequest) returns (CreateproofResponse) {} rpc Xkeysend(XkeysendRequest) returns (XkeysendResponse) {} rpc Graceful(GracefulRequest) returns (GracefulResponse) {} + rpc Reckless(RecklessRequest) returns (RecklessResponse) {} rpc SubscribeBalanceSnapshot(StreamBalanceSnapshotRequest) returns (stream BalanceSnapshotNotification) {} rpc SubscribeBlockAdded(StreamBlockAddedRequest) returns (stream BlockAddedNotification) {} @@ -186,6 +187,7 @@ service Node { rpc SubscribeWarning(StreamWarningRequest) returns (stream WarningNotification) {} rpc SubscribePayPartEnd(StreamPayPartEndRequest) returns (stream PayPartEndNotification) {} rpc SubscribePayPartStart(StreamPayPartStartRequest) returns (stream PayPartStartNotification) {} + rpc SubscribeRecklessLog(StreamRecklessLogRequest) returns (stream RecklessLogNotification) {} } message GetinfoRequest { @@ -3247,6 +3249,7 @@ message ListconfigsConfigs { optional ListconfigsConfigsMinemergencymsat min_emergency_msat = 82; optional ListconfigsConfigsPaymentfrontingnode payment_fronting_node = 83; optional ListconfigsConfigsRecover recover = 84; + optional ListconfigsConfigsRecklessdir reckless_dir = 85; } message ListconfigsConfigsAccepthtlctlvtype { @@ -3594,6 +3597,11 @@ message ListconfigsConfigsProxy { string source = 2; } +message ListconfigsConfigsRecklessdir { + string source = 1; + string value_str = 2; +} + message ListconfigsConfigsRecover { string source = 1; string value_str = 2; @@ -4655,6 +4663,121 @@ message GracefulResponse { repeated bytes pending_peers = 2; } +message RecklessRequest { + // Reckless.command + enum RecklessCommand { + INSTALL = 0; + UPDATE = 1; + UNINSTALL = 2; + LISTAVAILABLE = 3; + LISTINSTALLED = 4; + ENABLE = 5; + DISABLE = 6; + SOURCE = 7; + TIP = 8; + HELP = 9; + } + // Reckless.subcommand + enum RecklessSubcommand { + ADD = 0; + LIST = 1; + REMOVE = 2; + } + optional Amount amount_msat = 1; + RecklessCommand command = 2; + optional bool developer = 3; + repeated string options = 4; + optional string payer_note = 5; + optional RecklessSubcommand subcommand = 6; + optional string target = 7; + optional bool verbose = 8; +} + +message RecklessResponse { + optional RecklessDisable disable = 1; + optional RecklessEnable enable = 2; + optional RecklessInstall install = 3; + repeated RecklessListavailable listavailable = 4; + repeated RecklessListintalled listintalled = 5; + repeated string log = 6; + repeated string sources = 7; + optional RecklessTip tip = 8; + optional RecklessUninstall uninstall = 9; + repeated RecklessUpdate update = 10; +} + +message RecklessDisable { + string plugin_name = 1; +} + +message RecklessEnable { + string plugin_name = 1; +} + +message RecklessInstall { + bool enabled = 1; + optional string installed_commit = 2; + string plugin_name = 3; +} + +message RecklessListavailable { + // Reckless.listavailable[].installer + enum RecklessListavailableInstaller { + PYTHONUV = 0; + PYTHONUVSHEBANG = 1; + PYTHONUVLEGACY = 2; + POETRYVENV = 3; + PYPROJECTVIAPIP = 4; + PYTHON = 5; + NODEJS = 6; + RUST = 7; + GO = 8; + CUSTOM = 9; + } + RecklessListavailableInstaller installer = 1; + RecklessListavailableManifest manifest = 2; + string origin = 3; + string plugin_name = 4; +} + +message RecklessListavailableManifest { + repeated string dependencies = 1; + string entrypoint = 2; + repeated string install_cmd = 3; + optional bool installable = 4; + optional string long_description = 5; + optional string offer = 6; + repeated string required_options = 7; + optional string short_description = 8; +} + +message RecklessListintalled { + string installation_date = 1; + double installation_time = 2; + optional string installed_commit = 3; + string original_source = 4; + string plugin_name = 5; + optional string requested_commit = 6; +} + +message RecklessTip { + Amount amount_msat = 1; + Amount amount_sent_msat = 2; + uint64 failed_parts = 3; + bytes payment_preimage = 4; + uint64 successful_parts = 5; +} + +message RecklessUninstall { + string plugin_name = 1; +} + +message RecklessUpdate { + bool enabled = 1; + optional string installed_commit = 2; + string plugin_name = 3; +} + message StreamBalanceSnapshotRequest { } @@ -5077,3 +5200,22 @@ message PayPartStartHops { Amount channel_in_msat = 4; Amount channel_out_msat = 5; } + +message StreamRecklessLogRequest { +} + +message RecklessLogNotification { + // reckless_log.level + enum RecklessLogLevel { + IO = 0; + TRACE = 1; + DEBUG = 2; + INFO = 3; + UNUSUAL = 4; + BROKEN = 5; + } + RecklessLogLevel level = 1; + string log = 2; + string time = 3; + string timestamp = 4; +} diff --git a/cln-grpc/src/convert.rs b/cln-grpc/src/convert.rs index 605165f43019..8e38f7f06cba 100644 --- a/cln-grpc/src/convert.rs +++ b/cln-grpc/src/convert.rs @@ -3757,6 +3757,16 @@ impl From for pb::ListconfigsConfigsProxy { } } +#[allow(unused_variables)] +impl From for pb::ListconfigsConfigsRecklessdir { + fn from(c: responses::ListconfigsConfigsRecklessdir) -> Self { + Self { + source: c.source, // Rule #2 for type string + value_str: c.value_str, // Rule #2 for type string + } + } +} + #[allow(unused_variables)] impl From for pb::ListconfigsConfigsRecover { fn from(c: responses::ListconfigsConfigsRecover) -> Self { @@ -3959,6 +3969,7 @@ impl From for pb::ListconfigsConfigs { plugin: c.plugin.map(|v| v.into()), plugin_dir: c.plugin_dir.map(|v| v.into()), proxy: c.proxy.map(|v| v.into()), + reckless_dir: c.reckless_dir.map(|v| v.into()), recover: c.recover.map(|v| v.into()), regtest: c.regtest.map(|v| v.into()), require_confirmed_inputs: c.require_confirmed_inputs.map(|v| v.into()), @@ -5085,6 +5096,136 @@ impl From for pb::GracefulResponse { } } +#[allow(unused_variables)] +impl From for pb::RecklessDisable { + fn from(c: responses::RecklessDisable) -> Self { + Self { + plugin_name: c.plugin_name, // Rule #2 for type string + } + } +} + +#[allow(unused_variables)] +impl From for pb::RecklessEnable { + fn from(c: responses::RecklessEnable) -> Self { + Self { + plugin_name: c.plugin_name, // Rule #2 for type string + } + } +} + +#[allow(unused_variables)] +impl From for pb::RecklessInstall { + fn from(c: responses::RecklessInstall) -> Self { + Self { + enabled: c.enabled, // Rule #2 for type boolean + installed_commit: c.installed_commit, // Rule #2 for type string? + plugin_name: c.plugin_name, // Rule #2 for type string + } + } +} + +#[allow(unused_variables)] +impl From for pb::RecklessListavailableManifest { + fn from(c: responses::RecklessListavailableManifest) -> Self { + Self { + // Field: Reckless.listavailable[].manifest.dependencies[] + dependencies: c.dependencies.map(|arr| arr.into_iter().map(|i| i.into()).collect()).unwrap_or(vec![]), // Rule #3 + entrypoint: c.entrypoint, // Rule #2 for type string + // Field: Reckless.listavailable[].manifest.install_cmd[] + install_cmd: c.install_cmd.map(|arr| arr.into_iter().map(|i| i.into()).collect()).unwrap_or(vec![]), // Rule #3 + installable: c.installable, // Rule #2 for type boolean? + long_description: c.long_description, // Rule #2 for type string? + offer: c.offer, // Rule #2 for type string? + // Field: Reckless.listavailable[].manifest.required_options[] + required_options: c.required_options.map(|arr| arr.into_iter().map(|i| i.into()).collect()).unwrap_or(vec![]), // Rule #3 + short_description: c.short_description, // Rule #2 for type string? + } + } +} + +#[allow(unused_variables)] +impl From for pb::RecklessListavailable { + fn from(c: responses::RecklessListavailable) -> Self { + Self { + installer: c.installer as i32, + manifest: Some(c.manifest.into()), + origin: c.origin, // Rule #2 for type string + plugin_name: c.plugin_name, // Rule #2 for type string + } + } +} + +#[allow(unused_variables)] +impl From for pb::RecklessListintalled { + fn from(c: responses::RecklessListintalled) -> Self { + Self { + installation_date: c.installation_date, // Rule #2 for type string + installation_time: c.installation_time, // Rule #2 for type number + installed_commit: c.installed_commit, // Rule #2 for type string? + original_source: c.original_source, // Rule #2 for type string + plugin_name: c.plugin_name, // Rule #2 for type string + requested_commit: c.requested_commit, // Rule #2 for type string? + } + } +} + +#[allow(unused_variables)] +impl From for pb::RecklessTip { + fn from(c: responses::RecklessTip) -> Self { + Self { + amount_msat: Some(c.amount_msat.into()), // Rule #2 for type msat + amount_sent_msat: Some(c.amount_sent_msat.into()), // Rule #2 for type msat + failed_parts: c.failed_parts, // Rule #2 for type u64 + payment_preimage: c.payment_preimage.to_vec(), // Rule #2 for type secret + successful_parts: c.successful_parts, // Rule #2 for type u64 + } + } +} + +#[allow(unused_variables)] +impl From for pb::RecklessUninstall { + fn from(c: responses::RecklessUninstall) -> Self { + Self { + plugin_name: c.plugin_name, // Rule #2 for type string + } + } +} + +#[allow(unused_variables)] +impl From for pb::RecklessUpdate { + fn from(c: responses::RecklessUpdate) -> Self { + Self { + enabled: c.enabled, // Rule #2 for type boolean + installed_commit: c.installed_commit, // Rule #2 for type string? + plugin_name: c.plugin_name, // Rule #2 for type string + } + } +} + +#[allow(unused_variables)] +impl From for pb::RecklessResponse { + fn from(c: responses::RecklessResponse) -> Self { + Self { + disable: c.disable.map(|v| v.into()), + enable: c.enable.map(|v| v.into()), + install: c.install.map(|v| v.into()), + // Field: Reckless.listavailable[] + listavailable: c.listavailable.map(|arr| arr.into_iter().map(|i| i.into()).collect()).unwrap_or(vec![]), // Rule #3 + // Field: Reckless.listintalled[] + listintalled: c.listintalled.map(|arr| arr.into_iter().map(|i| i.into()).collect()).unwrap_or(vec![]), // Rule #3 + // Field: Reckless.log[] + log: c.log.into_iter().map(|i| i.into()).collect(), // Rule #3 for type string + // Field: Reckless.sources[] + sources: c.sources.map(|arr| arr.into_iter().map(|i| i.into()).collect()).unwrap_or(vec![]), // Rule #3 + tip: c.tip.map(|v| v.into()), + uninstall: c.uninstall.map(|v| v.into()), + // Field: Reckless.update[] + update: c.update.map(|arr| arr.into_iter().map(|i| i.into()).collect()).unwrap_or(vec![]), // Rule #3 + } + } +} + #[allow(unused_variables)] impl From for pb::BalanceSnapshotAccounts { fn from(c: notifications::BalanceSnapshotAccounts) -> Self { @@ -5490,6 +5631,18 @@ impl From for pb::PayPartStartNotificat } } +#[allow(unused_variables)] +impl From for pb::RecklessLogNotification { + fn from(c: notifications::RecklessLogNotification) -> Self { + Self { + level: c.level as i32, + log: c.log, // Rule #2 for type string + time: c.time, // Rule #2 for type string + timestamp: c.timestamp, // Rule #2 for type string + } + } +} + #[allow(unused_variables)] impl From for pb::GetinfoRequest { fn from(c: requests::GetinfoRequest) -> Self { @@ -7430,6 +7583,23 @@ impl From for pb::GracefulRequest { } } +#[allow(unused_variables)] +impl From for pb::RecklessRequest { + fn from(c: requests::RecklessRequest) -> Self { + Self { + amount_msat: c.amount_msat.map(|f| f.into()), // Rule #2 for type msat? + command: c.command as i32, + developer: c.developer, // Rule #2 for type boolean? + // Field: Reckless.options[] + options: c.options.map(|arr| arr.into_iter().map(|i| i.into()).collect()).unwrap_or(vec![]), // Rule #3 + payer_note: c.payer_note, // Rule #2 for type string? + subcommand: c.subcommand.map(|v| v as i32), + target: c.target, // Rule #2 for type string? + verbose: c.verbose, // Rule #2 for type boolean? + } + } +} + #[allow(unused_variables)] impl From for pb::StreamBalanceSnapshotRequest { fn from(c: notifications::requests::StreamBalanceSnapshotRequest) -> Self { @@ -7622,6 +7792,14 @@ impl From for pb::StreamPayP } } +#[allow(unused_variables)] +impl From for pb::StreamRecklessLogRequest { + fn from(c: notifications::requests::StreamRecklessLogRequest) -> Self { + Self { + } + } +} + #[allow(unused_variables)] impl From for requests::GetinfoRequest { @@ -9486,6 +9664,22 @@ impl From for requests::GracefulRequest { } } +#[allow(unused_variables)] +impl From for requests::RecklessRequest { + fn from(c: pb::RecklessRequest) -> Self { + Self { + amount_msat: c.amount_msat.map(|a| a.into()), // Rule #1 for type msat? + command: c.command.try_into().unwrap(), + developer: c.developer, // Rule #1 for type boolean? + options: Some(c.options.into_iter().map(|s| s.into()).collect()), // Rule #4 + payer_note: c.payer_note, // Rule #1 for type string? + subcommand: c.subcommand.map(|v| v.try_into().unwrap()), + target: c.target, // Rule #1 for type string? + verbose: c.verbose, // Rule #1 for type boolean? + } + } +} + #[allow(unused_variables)] impl From for notifications::requests::StreamBalanceSnapshotRequest { fn from(c: pb::StreamBalanceSnapshotRequest) -> Self { @@ -9678,3 +9872,11 @@ impl From for notifications::requests::StreamPayP } } +#[allow(unused_variables)] +impl From for notifications::requests::StreamRecklessLogRequest { + fn from(c: pb::StreamRecklessLogRequest) -> Self { + Self { + } + } +} + diff --git a/cln-grpc/src/server.rs b/cln-grpc/src/server.rs index 0bc2d6eb727a..f1d8315c2d31 100644 --- a/cln-grpc/src/server.rs +++ b/cln-grpc/src/server.rs @@ -4983,6 +4983,38 @@ impl Node for Server } + async fn reckless( + &self, + request: tonic::Request, + ) -> Result, tonic::Status> { + let req = request.into_inner(); + let req: requests::RecklessRequest = req.into(); + debug!("Client asked for reckless"); + trace!("reckless request: {:?}", req); + let mut rpc = ClnRpc::new(&self.rpc_path) + .await + .map_err(|e| Status::new(Code::Internal, e.to_string()))?; + let result = rpc.call(Request::Reckless(req)) + .await + .map_err(|e| Status::new( + Code::Unknown, + format!("Error calling method Reckless: {:?}", e)))?; + match result { + Response::Reckless(r) => { + trace!("reckless response: {:?}", r); + Ok(tonic::Response::new(r.into())) + }, + r => Err(Status::new( + Code::Internal, + format!( + "Unexpected result {:?} to method call Reckless", + r + ) + )), + } + + } + type SubscribeBalanceSnapshotStream = NotificationStream; @@ -5583,4 +5615,29 @@ impl Node for Server }; Ok(tonic::Response::new(result)) } + + + type SubscribeRecklessLogStream = NotificationStream; + + async fn subscribe_reckless_log( + &self, + _request : tonic::Request + ) -> Result, tonic::Status> { + let receiver = self.events.subscribe(); + let stream = BroadcastStream::new(receiver); + let boxed = Box::pin(stream); + + let result = NotificationStream { + inner : boxed, + fn_filter_map : |x| { + match x { + Notification::RecklessLog(x) => { + Some(x.into()) + } + _ => None + } + } + }; + Ok(tonic::Response::new(result)) + } } \ No newline at end of file diff --git a/cln-rpc/src/model.rs b/cln-rpc/src/model.rs index b23470def0be..8512f6a01963 100644 --- a/cln-rpc/src/model.rs +++ b/cln-rpc/src/model.rs @@ -210,6 +210,7 @@ pub enum Request { CreateProof(requests::CreateproofRequest), Xkeysend(requests::XkeysendRequest), Graceful(requests::GracefulRequest), + Reckless(requests::RecklessRequest), } #[derive(Clone, Debug, Serialize, Deserialize)] @@ -408,6 +409,7 @@ pub enum Response { CreateProof(responses::CreateproofResponse), Xkeysend(responses::XkeysendResponse), Graceful(responses::GracefulResponse), + Reckless(responses::RecklessResponse), } @@ -5474,6 +5476,139 @@ pub mod requests { "graceful" } } + /// ['A subcommand. Only in combination with *command* **source**.'] + #[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, Eq)] + #[allow(non_camel_case_types)] + pub enum RecklessSubcommand { + #[serde(rename = "add")] + ADD = 0, + #[serde(rename = "list")] + LIST = 1, + #[serde(rename = "remove")] + REMOVE = 2, + } + + impl TryFrom for RecklessSubcommand { + type Error = anyhow::Error; + fn try_from(c: i32) -> Result { + match c { + 0 => Ok(RecklessSubcommand::ADD), + 1 => Ok(RecklessSubcommand::LIST), + 2 => Ok(RecklessSubcommand::REMOVE), + o => Err(anyhow::anyhow!("Unknown variant {} for enum RecklessSubcommand", o)), + } + } + } + + impl ToString for RecklessSubcommand { + fn to_string(&self) -> String { + match self { + RecklessSubcommand::ADD => "ADD", + RecklessSubcommand::LIST => "LIST", + RecklessSubcommand::REMOVE => "REMOVE", + }.to_string() + } + } + + /// ['Determines which command to pass to reckless', ' - *command* **install** takes a *plugin_name* to search for and install a named plugin.', ' - *command* **uninstall** takes a *plugin_name* and attempts to uninstall a plugin of the same name.', ' - *command* **help** takes a *command* to display help for (plain text).', '...'] + #[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, Eq)] + #[allow(non_camel_case_types)] + pub enum RecklessCommand { + #[serde(rename = "install")] + INSTALL = 0, + #[serde(rename = "update")] + UPDATE = 1, + #[serde(rename = "uninstall")] + UNINSTALL = 2, + #[serde(rename = "listavailable")] + LISTAVAILABLE = 3, + #[serde(rename = "listinstalled")] + LISTINSTALLED = 4, + #[serde(rename = "enable")] + ENABLE = 5, + #[serde(rename = "disable")] + DISABLE = 6, + #[serde(rename = "source")] + SOURCE = 7, + #[serde(rename = "tip")] + TIP = 8, + #[serde(rename = "help")] + HELP = 9, + } + + impl TryFrom for RecklessCommand { + type Error = anyhow::Error; + fn try_from(c: i32) -> Result { + match c { + 0 => Ok(RecklessCommand::INSTALL), + 1 => Ok(RecklessCommand::UPDATE), + 2 => Ok(RecklessCommand::UNINSTALL), + 3 => Ok(RecklessCommand::LISTAVAILABLE), + 4 => Ok(RecklessCommand::LISTINSTALLED), + 5 => Ok(RecklessCommand::ENABLE), + 6 => Ok(RecklessCommand::DISABLE), + 7 => Ok(RecklessCommand::SOURCE), + 8 => Ok(RecklessCommand::TIP), + 9 => Ok(RecklessCommand::HELP), + o => Err(anyhow::anyhow!("Unknown variant {} for enum RecklessCommand", o)), + } + } + } + + impl ToString for RecklessCommand { + fn to_string(&self) -> String { + match self { + RecklessCommand::INSTALL => "INSTALL", + RecklessCommand::UPDATE => "UPDATE", + RecklessCommand::UNINSTALL => "UNINSTALL", + RecklessCommand::LISTAVAILABLE => "LISTAVAILABLE", + RecklessCommand::LISTINSTALLED => "LISTINSTALLED", + RecklessCommand::ENABLE => "ENABLE", + RecklessCommand::DISABLE => "DISABLE", + RecklessCommand::SOURCE => "SOURCE", + RecklessCommand::TIP => "TIP", + RecklessCommand::HELP => "HELP", + }.to_string() + } + } + + #[derive(Clone, Debug, Deserialize, Serialize)] + pub struct RecklessRequest { + #[serde(skip_serializing_if = "Option::is_none")] + pub amount_msat: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub developer: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub payer_note: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub subcommand: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub target: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub verbose: Option, + #[serde(skip_serializing_if = "crate::is_none_or_empty")] + pub options: Option>, + // Path `Reckless.command` + pub command: RecklessCommand, + } + + impl From for Request { + fn from(r: RecklessRequest) -> Self { + Request::Reckless(r) + } + } + + impl IntoRequest for RecklessRequest { + type Response = super::responses::RecklessResponse; + } + + impl TypedRequest for RecklessRequest { + type Response = super::responses::RecklessResponse; + + fn method(&self) -> &str { + "reckless" + } + } } @@ -11354,6 +11489,12 @@ pub mod responses { pub values_str: Vec, } + #[derive(Clone, Debug, Deserialize, Serialize)] + pub struct ListconfigsConfigsRecklessdir { + pub source: String, + pub value_str: String, + } + #[derive(Clone, Debug, Deserialize, Serialize)] pub struct ListconfigsConfigsRequireconfirmedinputs { pub source: String, @@ -11697,6 +11838,9 @@ pub mod responses { #[serde(rename = "plugin-dir")] #[serde(skip_serializing_if = "Option::is_none")] pub plugin_dir: Option, + #[serde(rename = "reckless-dir")] + #[serde(skip_serializing_if = "Option::is_none")] + pub reckless_dir: Option, #[serde(rename = "require-confirmed-inputs")] #[serde(skip_serializing_if = "Option::is_none")] pub require_confirmed_inputs: Option, @@ -13444,5 +13588,181 @@ pub mod responses { } } + #[derive(Clone, Debug, Deserialize, Serialize)] + pub struct RecklessDisable { + pub plugin_name: String, + } + + #[derive(Clone, Debug, Deserialize, Serialize)] + pub struct RecklessEnable { + pub plugin_name: String, + } + + #[derive(Clone, Debug, Deserialize, Serialize)] + pub struct RecklessInstall { + #[serde(skip_serializing_if = "Option::is_none")] + pub installed_commit: Option, + pub enabled: bool, + pub plugin_name: String, + } + + #[derive(Clone, Debug, Deserialize, Serialize)] + pub struct RecklessTip { + pub amount_msat: Amount, + pub amount_sent_msat: Amount, + pub failed_parts: u64, + pub payment_preimage: Secret, + pub successful_parts: u64, + } + + #[derive(Clone, Debug, Deserialize, Serialize)] + pub struct RecklessUninstall { + pub plugin_name: String, + } + + /// ['The name of the plugin installer that will be used.'] + #[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, Eq)] + #[allow(non_camel_case_types)] + pub enum RecklessListavailableInstaller { + #[serde(rename = "PythonUv")] + PYTHONUV = 0, + #[serde(rename = "PythonUvShebang")] + PYTHONUVSHEBANG = 1, + #[serde(rename = "PythonUvLegacy")] + PYTHONUVLEGACY = 2, + #[serde(rename = "PoetryVenv")] + POETRYVENV = 3, + #[serde(rename = "PyprojectViaPip")] + PYPROJECTVIAPIP = 4, + #[serde(rename = "Python")] + PYTHON = 5, + #[serde(rename = "Nodejs")] + NODEJS = 6, + #[serde(rename = "Rust")] + RUST = 7, + #[serde(rename = "Go")] + GO = 8, + #[serde(rename = "Custom")] + CUSTOM = 9, + } + + impl TryFrom for RecklessListavailableInstaller { + type Error = anyhow::Error; + fn try_from(c: i32) -> Result { + match c { + 0 => Ok(RecklessListavailableInstaller::PYTHONUV), + 1 => Ok(RecklessListavailableInstaller::PYTHONUVSHEBANG), + 2 => Ok(RecklessListavailableInstaller::PYTHONUVLEGACY), + 3 => Ok(RecklessListavailableInstaller::POETRYVENV), + 4 => Ok(RecklessListavailableInstaller::PYPROJECTVIAPIP), + 5 => Ok(RecklessListavailableInstaller::PYTHON), + 6 => Ok(RecklessListavailableInstaller::NODEJS), + 7 => Ok(RecklessListavailableInstaller::RUST), + 8 => Ok(RecklessListavailableInstaller::GO), + 9 => Ok(RecklessListavailableInstaller::CUSTOM), + o => Err(anyhow::anyhow!("Unknown variant {} for enum RecklessListavailableInstaller", o)), + } + } + } + + impl ToString for RecklessListavailableInstaller { + fn to_string(&self) -> String { + match self { + RecklessListavailableInstaller::PYTHONUV => "PYTHONUV", + RecklessListavailableInstaller::PYTHONUVSHEBANG => "PYTHONUVSHEBANG", + RecklessListavailableInstaller::PYTHONUVLEGACY => "PYTHONUVLEGACY", + RecklessListavailableInstaller::POETRYVENV => "POETRYVENV", + RecklessListavailableInstaller::PYPROJECTVIAPIP => "PYPROJECTVIAPIP", + RecklessListavailableInstaller::PYTHON => "PYTHON", + RecklessListavailableInstaller::NODEJS => "NODEJS", + RecklessListavailableInstaller::RUST => "RUST", + RecklessListavailableInstaller::GO => "GO", + RecklessListavailableInstaller::CUSTOM => "CUSTOM", + }.to_string() + } + } + + #[derive(Clone, Debug, Deserialize, Serialize)] + pub struct RecklessListavailableManifest { + #[serde(skip_serializing_if = "Option::is_none")] + pub installable: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub long_description: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub offer: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub short_description: Option, + #[serde(skip_serializing_if = "crate::is_none_or_empty")] + pub dependencies: Option>, + #[serde(skip_serializing_if = "crate::is_none_or_empty")] + pub install_cmd: Option>, + #[serde(skip_serializing_if = "crate::is_none_or_empty")] + pub required_options: Option>, + pub entrypoint: String, + } + + #[derive(Clone, Debug, Deserialize, Serialize)] + pub struct RecklessListavailable { + // Path `Reckless.listavailable[].installer` + pub installer: RecklessListavailableInstaller, + pub manifest: RecklessListavailableManifest, + pub origin: String, + pub plugin_name: String, + } + + #[derive(Clone, Debug, Deserialize, Serialize)] + pub struct RecklessListintalled { + #[serde(skip_serializing_if = "Option::is_none")] + pub installed_commit: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub requested_commit: Option, + pub installation_date: String, + pub installation_time: f64, + pub original_source: String, + pub plugin_name: String, + } + + #[derive(Clone, Debug, Deserialize, Serialize)] + pub struct RecklessUpdate { + #[serde(skip_serializing_if = "Option::is_none")] + pub installed_commit: Option, + pub enabled: bool, + pub plugin_name: String, + } + + #[derive(Clone, Debug, Deserialize, Serialize)] + pub struct RecklessResponse { + #[serde(skip_serializing_if = "Option::is_none")] + pub disable: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub enable: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub install: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub tip: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub uninstall: Option, + #[serde(skip_serializing_if = "crate::is_none_or_empty")] + pub listavailable: Option>, + #[serde(skip_serializing_if = "crate::is_none_or_empty")] + pub listintalled: Option>, + #[serde(skip_serializing_if = "crate::is_none_or_empty")] + pub sources: Option>, + #[serde(skip_serializing_if = "crate::is_none_or_empty")] + pub update: Option>, + pub log: Vec, + } + + impl TryFrom for RecklessResponse { + type Error = super::TryFromResponseError; + + fn try_from(response: Response) -> Result { + match response { + Response::Reckless(response) => Ok(response), + _ => Err(TryFromResponseError) + } + } + } + } diff --git a/cln-rpc/src/notifications.rs b/cln-rpc/src/notifications.rs index 41d70605ee55..30b07355813a 100644 --- a/cln-rpc/src/notifications.rs +++ b/cln-rpc/src/notifications.rs @@ -55,6 +55,8 @@ pub enum Notification { PayPartEnd(PayPartEndNotification), #[serde(rename = "pay_part_start")] PayPartStart(PayPartStartNotification), + #[serde(rename = "reckless_log")] + RecklessLog(RecklessLogNotification), } @@ -938,6 +940,61 @@ pub struct PayPartStartNotification { pub total_payment_msat: Amount, } +/// ['The log level of the emitted message.'] +#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, Eq)] +#[allow(non_camel_case_types)] +pub enum RecklessLogLevel { + #[serde(rename = "io")] + IO = 0, + #[serde(rename = "trace")] + TRACE = 1, + #[serde(rename = "debug")] + DEBUG = 2, + #[serde(rename = "info")] + INFO = 3, + #[serde(rename = "unusual")] + UNUSUAL = 4, + #[serde(rename = "broken")] + BROKEN = 5, +} + +impl TryFrom for RecklessLogLevel { + type Error = anyhow::Error; + fn try_from(c: i32) -> Result { + match c { + 0 => Ok(RecklessLogLevel::IO), + 1 => Ok(RecklessLogLevel::TRACE), + 2 => Ok(RecklessLogLevel::DEBUG), + 3 => Ok(RecklessLogLevel::INFO), + 4 => Ok(RecklessLogLevel::UNUSUAL), + 5 => Ok(RecklessLogLevel::BROKEN), + o => Err(anyhow::anyhow!("Unknown variant {} for enum RecklessLogLevel", o)), + } + } +} + +impl ToString for RecklessLogLevel { + fn to_string(&self) -> String { + match self { + RecklessLogLevel::IO => "IO", + RecklessLogLevel::TRACE => "TRACE", + RecklessLogLevel::DEBUG => "DEBUG", + RecklessLogLevel::INFO => "INFO", + RecklessLogLevel::UNUSUAL => "UNUSUAL", + RecklessLogLevel::BROKEN => "BROKEN", + }.to_string() + } +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct RecklessLogNotification { + // Path `reckless_log.level` + pub level: RecklessLogLevel, + pub log: String, + pub time: String, + pub timestamp: String, +} + pub mod requests{ use serde::{Serialize, Deserialize}; @@ -1037,4 +1094,8 @@ use serde::{Serialize, Deserialize}; pub struct StreamPayPartStartRequest { } + #[derive(Clone, Debug, Deserialize, Serialize)] + pub struct StreamRecklessLogRequest { + } + } diff --git a/contrib/msggen/msggen/schema.json b/contrib/msggen/msggen/schema.json index cc1b9ee5df71..15d710544ef9 100644 --- a/contrib/msggen/msggen/schema.json +++ b/contrib/msggen/msggen/schema.json @@ -22523,6 +22523,31 @@ ] } } + }, + "reckless-dir": { + "added": "v26.09", + "type": "object", + "additionalProperties": false, + "required": [ + "value_str", + "source" + ], + "properties": { + "value_str": { + "added": "v26.09", + "type": "string", + "description": [ + "Field from config or cmdline, or default." + ] + }, + "source": { + "added": "v26.09", + "type": "string", + "description": [ + "Source of configuration setting." + ] + } + } } } } @@ -33214,11 +33239,6 @@ "active": true, "dynamic": true }, - { - "name": "/usr/local/libexec/plugins/recklessrpc", - "active": true, - "dynamic": true - }, { "name": "/usr/local/libexec/plugins/recover", "active": true, @@ -33269,6 +33289,11 @@ "active": true, "dynamic": true }, + { + "name": "/usr/local/libexec/plugins/cln-reckless", + "active": true, + "dynamic": true + }, { "name": "/usr/local/libexec/plugins/bookkeeper", "active": true, @@ -33362,11 +33387,6 @@ "active": true, "dynamic": true }, - { - "name": "/usr/local/libexec/plugins/recklessrpc", - "active": true, - "dynamic": true - }, { "name": "/usr/local/libexec/plugins/recover", "active": true, @@ -33417,6 +33437,11 @@ "active": true, "dynamic": true }, + { + "name": "/usr/local/libexec/plugins/cln-reckless", + "active": true, + "dynamic": true + }, { "name": "/usr/local/libexec/plugins/bookkeeper", "active": true, @@ -33588,10 +33613,11 @@ "reckless.json": { "$schema": "../rpc-schema-draft.json", "type": "object", + "added": "v22.11", "rpc": "reckless", - "title": "Issue a command to the reckless plugin manager utility", + "title": "Reckless, a plugin manager", "description": [ - "The **reckless** RPC starts a reckless process with the *command* and *target* provided. Node configuration, network, and lightning direrctory are automatically passed to the reckless utility." + "The **reckless** RPC lets you manage plugins. It has multiple commands available, best described in the **help** command." ], "request": { "required": [ @@ -33603,63 +33629,411 @@ "type": "string", "enum": [ "install", + "update", "uninstall", - "search", + "listavailable", + "listinstalled", "enable", "disable", "source", - "--version" + "tip", + "help" ], "description": [ "Determines which command to pass to reckless", " - *command* **install** takes a *plugin_name* to search for and install a named plugin.", " - *command* **uninstall** takes a *plugin_name* and attempts to uninstall a plugin of the same name.", - " - *command* **search** takes a *plugin_name* to search for a named plugin.", + " - *command* **help** takes a *command* to display help for (plain text).", "..." ] }, - "target/subcommand": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "array" - } + "subcommand": { + "type": "string", + "enum": [ + "add", + "list", + "remove" ], "description": [ - "Target of a reckless command or a subcommand." + "A subcommand. Only in combination with *command* **source**." ] }, "target": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "array" - } - ], + "type": "string", "description": [ - "*name* of a plugin to install/uninstall/search/enable/disable or source to add/remove." + "*name* of a plugin to install/update/uninstall/listavailable/enable/disable or source to add/remove. Can also have a git ref added with `@` to install a specific version." + ] + }, + "options": { + "type": "array", + "added": "v26.09", + "items": { + "type": "string" + }, + "description": [ + "Plugin options to be used with the commands **install**/**update**/**enable** in the form of `key=value`." + ] + }, + "amount_msat": { + "type": "msat", + "added": "v26.09", + "description": [ + "The amount of msat to send when using the *command* **tip**." + ] + }, + "payer_note": { + "type": "string", + "added": "v26.09", + "description": [ + "A message that a payer is willing to send to a payee when using the *command* **tip**." + ] + }, + "verbose": { + "type": "boolean", + "added": "v26.09", + "description": [ + "Verbose output for all logging outputs for this command." + ] + }, + "developer": { + "type": "boolean", + "added": "v26.09", + "description": [ + "Build plugins in debug mode and do not clean up build files where applicable." ] } } }, "response": { "required": [ - "log", - "result" + "log" ], "additionalProperties": false, "properties": { - "result": { + "install": { + "type": "object", + "added": "v26.09", + "properties": { + "plugin_name": { + "type": "string", + "description": [ + "The name of the plugin that was installed." + ] + }, + "enabled": { + "type": "boolean", + "description": [ + "Whether the plugin was enabled or not." + ] + }, + "installed_commit": { + "type": "string", + "description": [ + "The git ref that was installed. Only present if source is a remote git repository." + ] + } + }, + "required": [ + "plugin_name", + "enabled" + ], + "additionalProperties": false + }, + "update": { + "type": "array", + "added": "v26.09", + "items": { + "type": "object", + "properties": { + "plugin_name": { + "type": "string", + "description": [ + "The name of the plugin that was updated." + ] + }, + "enabled": { + "type": "boolean", + "description": [ + "Whether the plugin was enabled or not." + ] + }, + "installed_commit": { + "type": "string", + "description": [ + "The git ref that the plugin was updated to. Only present if source is a remote git repository." + ] + } + }, + "required": [ + "plugin_name", + "enabled" + ], + "additionalProperties": false + } + }, + "uninstall": { + "type": "object", + "added": "v26.09", + "properties": { + "plugin_name": { + "type": "string", + "description": [ + "The name of the plugin that was uninstalled." + ] + } + }, + "required": [ + "plugin_name" + ], + "additionalProperties": false + }, + "enable": { + "type": "object", + "added": "v26.09", + "properties": { + "plugin_name": { + "type": "string", + "description": [ + "The name of the plugin that was enabled." + ] + } + }, + "required": [ + "plugin_name" + ], + "additionalProperties": false + }, + "disable": { + "type": "object", + "added": "v26.09", + "properties": { + "plugin_name": { + "type": "string", + "description": [ + "The name of the plugin that was disabled." + ] + } + }, + "required": [ + "plugin_name" + ], + "additionalProperties": false + }, + "listavailable": { + "type": "array", + "added": "v26.09", + "items": { + "type": "object", + "properties": { + "plugin_name": { + "type": "string", + "description": [ + "The name of the plugin that was listed." + ] + }, + "installer": { + "type": "string", + "enum": [ + "PythonUv", + "PythonUvShebang", + "PythonUvLegacy", + "PoetryVenv", + "PyprojectViaPip", + "Python", + "Nodejs", + "Rust", + "Go", + "Custom" + ], + "description": [ + "The name of the plugin installer that will be used." + ] + }, + "manifest": { + "type": "object", + "properties": { + "short_description": { + "type": "string", + "description": [ + "A short description of the plugin." + ] + }, + "long_description": { + "type": "string", + "description": [ + "A long description of the plugin." + ] + }, + "entrypoint": { + "type": "string", + "description": [ + "The entrypoint for the plugin." + ] + }, + "dependencies": { + "type": "array", + "items": { + "type": "string" + }, + "description": [ + "Programs needed to install this plugin." + ] + }, + "install_cmd": { + "type": "array", + "items": { + "type": "string" + }, + "description": [ + "Custom commands needed to install this plugin, if the default installers do not work." + ] + }, + "required_options": { + "type": "array", + "items": { + "type": "string" + }, + "description": [ + "Options needed to install this plugin." + ] + }, + "offer": { + "type": "string", + "description": [ + "An offer for users to tip for this plugin." + ] + }, + "installable": { + "type": "boolean", + "description": [ + "Whether this plugin is reckless-installable." + ] + } + }, + "required": [ + "entrypoint" + ], + "additionalProperties": false + }, + "origin": { + "type": "string", + "description": [ + "The origin of the plugin." + ] + } + }, + "required": [ + "plugin_name", + "installer", + "manifest", + "origin" + ], + "additionalProperties": false + } + }, + "listintalled": { + "type": "array", + "added": "v26.09", + "items": { + "type": "object", + "properties": { + "plugin_name": { + "type": "string", + "description": [ + "The name of the plugin that was listed." + ] + }, + "installation_date": { + "type": "string", + "description": [ + "The date the plugin was installed." + ] + }, + "installation_time": { + "type": "number", + "description": [ + "The timestamp the plugin was installed." + ] + }, + "original_source": { + "type": "string", + "description": [ + "The original source of the plugin." + ] + }, + "requested_commit": { + "type": "string", + "description": [ + "The git ref that was requested to be installed." + ] + }, + "installed_commit": { + "type": "string", + "description": [ + "The git ref that was installed." + ] + } + }, + "required": [ + "plugin_name", + "installation_date", + "installation_time", + "original_source" + ], + "additionalProperties": false + } + }, + "sources": { "type": "array", + "added": "v26.09", "items": { "type": "string" }, "description": [ - "Output of the requested reckless command." + "The list of current sources." + ] + }, + "tip": { + "type": "object", + "added": "v26.09", + "properties": { + "payment_preimage": { + "type": "secret", + "description": [ + "The proof of payment: SHA256 of this **payment_hash**." + ] + }, + "failed_parts": { + "type": "u64", + "description": [ + "How many separate payment parts failed." + ] + }, + "successful_parts": { + "type": "u64", + "description": [ + "How many separate payment parts succeeded (or are anticipated to succeed). This will be at least one." + ] + }, + "amount_msat": { + "type": "msat", + "description": [ + "Amount the recipient received." + ] + }, + "amount_sent_msat": { + "type": "msat", + "description": [ + "Total amount we sent (including fees)." + ] + } + }, + "required": [ + "payment_preimage", + "failed_parts", + "successful_parts", + "amount_msat", + "amount_sent_msat" ] }, "log": { @@ -33668,13 +34042,14 @@ "type": "string" }, "description": [ - "Verbose log entries of the requested reckless command." + "Log entries of the requested reckless command." ] } } }, "author": [ - "Alex Myers [alex@endothermic.dev](mailto:alex@endothermic.dev) is mainly responsible." + "Alex Myers [alex@endothermic.dev](mailto:alex@endothermic.dev) is mainly responsible for the original python reckless.", + "daywalker90 [daywalker990@gmx.de](mailto:daywalker990@gmx.de) is mainly responsible for the current rust reckless." ], "see_also": [ "reckless(1)" @@ -33688,90 +34063,82 @@ "id": "example:reckless#1", "method": "reckless", "params": { - "command": "search", - "target/subcommand": "backup" + "command": "install", + "target": "summary" } }, "response": { - "result": [ - "https://github.com/lightningd/plugins" - ], + "install": { + "enabled": false, + "installed_commit": "002761088174c151237e8a847c50603db20d5abf", + "plugin_name": "summary" + }, "log": [ - "DEBUG: Warning: Reckless requires write access", - "DEBUG: fetching from gh API: https://api.github.com/repos/lightningd/plugins/contents/", - "DEBUG: fetching from gh API: https://api.github.com/repos/lightningd/plugins/git/trees/294f93d7060799439c994daa84f534c4d1458325", - "INFO: found backup in source: https://github.com/lightningd/plugins", - "DEBUG: entry: None", - "DEBUG: sub-directory: backup" + "INFO: running command: `git clone --recursive https://github.com/lightningd/plugins /tmp/ltests-88arihe3/test_generate_examples_1/lightning-1/reckless/lightningd/plugins`", + "", + "INFO: running command: `git submodule sync --recursive` (cwd: /tmp/ltests-88arihe3/test_generate_examples_1/lightning-1/reckless/lightningd/plugins)", + "", + "INFO: running command: `git submodule update --init --recursive` (cwd: /tmp/ltests-88arihe3/test_generate_examples_1/lightning-1/reckless/lightningd/plugins)", + "WARNING: could not detect installer for /tmp/ltests-88arihe3/test_generate_examples_1/lightning-1/reckless/lightningd/plugins: entryfile not found", + "INFO: Plugins matching 'summary':", + "INFO: summary (https://github.com/lightningd/plugins)", + "INFO: found summary in source: https://github.com/lightningd/plugins", + "INFO: running command: `git pull --ff-only` (cwd: /tmp/ltests-88arihe3/test_generate_examples_1/lightning-1/reckless/lightningd/plugins)", + "INFO: Already up to date.", + "INFO: running command: `git submodule sync --recursive` (cwd: /tmp/ltests-88arihe3/test_generate_examples_1/lightning-1/reckless/lightningd/plugins)", + "", + "INFO: running command: `git submodule update --init --recursive` (cwd: /tmp/ltests-88arihe3/test_generate_examples_1/lightning-1/reckless/lightningd/plugins)", + "INFO: running command: `git checkout HEAD` (cwd: /tmp/ltests-88arihe3/test_generate_examples_1/lightning-1/reckless/lightningd/plugins/summary)", + "INFO: Your branch is up to date with 'origin/master'.", + "INFO: using installer pythonuvshebang", + "INFO: running command: `git rev-parse HEAD` (cwd: /tmp/ltests-88arihe3/test_generate_examples_1/lightning-1/reckless/lightningd/plugins/summary)", + "INFO: 002761088174c151237e8a847c50603db20d5abf", + "INFO: plugin installed: /tmp/ltests-88arihe3/test_generate_examples_1/lightning-1/reckless/summary/summary.py", + "WARNING: plugin exited before sending getmanifest response", + "WARNING: summary failed to start, it may require options, read the logs!" ] } }, { "request": { - "id": "example:reckless#2", + "id": "example:reckless#1", "method": "reckless", "params": { - "command": "install", - "target/subcommand": [ - "summars", - "currecyrate" - ] + "command": "tip", + "target": "summary", + "amount_msat": 1000, + "payer_note": "thanks!" } }, "response": { - "result": [ - "/tmp/l1/reckless/summars", - "/tmp/l1/reckless/currencyrate" - ], + "tip": { + "amount_msat": 1000, + "amount_sent_msat": 1000, + "failed_parts": 0, + "payment_preimage": "940148d45ce964205c289a215d2b45e7bad32caa4318eb1977184fe424d04a00", + "successful_parts": 1 + }, "log": [ - "DEBUG: Searching for summars", - "DEBUG: fetching from gh API: https://api.github.com/repos/lightningd/plugins/contents/", - "DEBUG: fetching from gh API: https://api.github.com/repos/lightningd/plugins/git/trees/294f93d7060799439c994daa84f534c4d1458325", - "INFO: found summars in source: https://github.com/lightningd/plugins", - "DEBUG: entry: None", - "DEBUG: sub-directory: summars", - "DEBUG: Retrieving summars from https://github.com/lightningd/plugins", - "DEBUG: Install requested from InstInfo(summars, https://github.com/lightningd/plugins, None, None, None, summars).", - "INFO: cloning Source.GITHUB_REPO InstInfo(summars, https://github.com/lightningd/plugins, None, None, None, summars)", - "DEBUG: cloned_src: InstInfo(summars, /tmp/reckless-726255950dyifh_fh/clone, None, Cargo.toml, Cargo.toml, summars/summars)", - "DEBUG: using latest commit of default branch", - "DEBUG: checked out HEAD: 5e449468bd57db7d0f33178fe0dc867e0da94133", - "DEBUG: using installer rust", - "DEBUG: creating /tmp/l1/reckless/summars", - "DEBUG: creating /tmp/l1/reckless/summars/source", - "DEBUG: copying /tmp/reckless-726255950dyifh_fh/clone/summars/summars tree to /tmp/l1/reckless/summars/source/summars", - "DEBUG: linking source /tmp/l1/reckless/summars/source/summars/Cargo.toml to /tmp/l1/reckless/summars/Cargo.toml", - "DEBUG: InstInfo(summars, /tmp/l1/reckless/summars, None, Cargo.toml, Cargo.toml, source/summars)", - "DEBUG: cargo installing from /tmp/l1/reckless/summars/source/summars", - "DEBUG: rust project compiled successfully", - "INFO: plugin installed: /tmp/l1/reckless/summars", - "DEBUG: activating summars", - "INFO: summars enabled", - "DEBUG: Searching for currencyrate", - "DEBUG: fetching from gh API: https://api.github.com/repos/lightningd/plugins/contents/", - "DEBUG: fetching from gh API: https://api.github.com/repos/lightningd/plugins/git/trees/294f93d7060799439c994daa84f534c4d1458325", - "INFO: found currencyrate in source: https://github.com/lightningd/plugins", - "DEBUG: entry: None", - "DEBUG: sub-directory: currencyrate", - "DEBUG: Retrieving currencyrate from https://github.com/lightningd/plugins", - "DEBUG: Install requested from InstInfo(currencyrate, https://github.com/lightningd/plugins, None, None, None, currencyrate).", - "INFO: cloning Source.GITHUB_REPO InstInfo(currencyrate, https://github.com/lightningd/plugins, None, None, None, currencyrate)", - "DEBUG: cloned_src: InstInfo(currencyrate, /tmp/reckless-192564272t478naxn/clone, None, currencyrate.py, requirements.txt, currencyrate/currencyrate)", - "DEBUG: using latest commit of default branch", - "DEBUG: checked out HEAD: 5e449468bd57db7d0f33178fe0dc867e0da94133", - "DEBUG: using installer python3venv", - "DEBUG: creating /tmp/l1/reckless/currencyrate", - "DEBUG: creating /tmp/l1/reckless/currencyrate/source", - "DEBUG: copying /tmp/reckless-192564272t478naxn/clone/currencyrate/currencyrate tree to /tmp/l1/reckless/currencyrate/source/currencyrate", - "DEBUG: linking source /tmp/l1/reckless/currencyrate/source/currencyrate/currencyrate.py to /tmp/l1/reckless/currencyrate/currencyrate.py", - "DEBUG: InstInfo(currencyrate, /tmp/l1/reckless/currencyrate, None, currencyrate.py, requirements.txt, source/currencyrate)", - "DEBUG: configuring a python virtual environment (pip) in /tmp/l1/reckless/currencyrate/.venv", - "DEBUG: virtual environment created in /tmp/l1/reckless/currencyrate/.venv.", - "INFO: dependencies installed successfully", - "DEBUG: virtual environment for cloned plugin: .venv", - "INFO: plugin installed: /tmp/l1/reckless/currencyrate", - "DEBUG: activating currencyrate", - "INFO: currencyrate enabled" + "WARNING: summary is not installed", + "INFO: summary not installed, searching in sources...", + "INFO: running command: `git remote set-head origin -a` (cwd: /tmp/l1/reckless/lightningd/plugins)", + "INFO: origin/HEAD set to master", + "INFO: running command: `git symbolic-ref refs/remotes/origin/HEAD --short` (cwd: /tmp/l1/reckless/lightningd/plugins)", + "INFO: origin/master", + "INFO: running command: `git checkout master` (cwd: /tmp/l1/reckless/lightningd/plugins)", + "WARNING: Already on 'master'", + "INFO: Your branch is up to date with 'origin/master'.", + "INFO: running command: `git pull --ff-only` (cwd: /tmp/l1/reckless/lightningd/plugins)", + "INFO: Already up to date.", + "INFO: running command: `git submodule sync --recursive` (cwd: /tmp/l1/reckless/lightningd/plugins)", + "", + "INFO: running command: `git submodule update --init --recursive` (cwd: /tmp/l1/reckless/lightningd/plugins)", + "WARNING: could not detect installer for /tmp/l1/reckless/lightningd/plugins: entryfile not found", + "INFO: Plugins matching 'summary':", + "INFO: summary (/media/addonssd/dev/plugins/summary)", + "INFO: found summary in source: /media/addonssd/dev/plugins/summary", + "INFO: Sending 1000msat to summary author...", + "INFO: Successfully sent 1000msat to summary author!" ] } } @@ -42566,6 +42933,60 @@ } } }, + "reckless_log.json": { + "$schema": "../../rpc-schema-draft.json", + "type": "object", + "additionalProperties": false, + "notification": "reckless_log", + "title": "Notification for reckless log events", + "description": [ + "The **reckless_log** notification informs whenever the reckless plugin emits a log message during **install** or **update**" + ], + "added": "v26.09", + "request": {}, + "response": { + "required": [ + "level", + "time", + "timestamp", + "log" + ], + "properties": { + "level": { + "type": "string", + "enum": [ + "io", + "trace", + "debug", + "info", + "unusual", + "broken" + ], + "description": [ + "The log level of the emitted message." + ] + }, + "time": { + "type": "string", + "description": [ + "The event time as seconds since epoch with subsecond precision." + ] + }, + "timestamp": { + "type": "string", + "description": [ + "The event time in ISO 8601 format." + ] + }, + "log": { + "type": "string", + "description": [ + "The original log message." + ] + } + } + } + }, "sendpay_failure.json": { "$schema": "../../rpc-schema-draft.json", "type": "object", diff --git a/contrib/msggen/msggen/utils/utils.py b/contrib/msggen/msggen/utils/utils.py index 84260309ae9f..3b86b436a602 100644 --- a/contrib/msggen/msggen/utils/utils.py +++ b/contrib/msggen/msggen/utils/utils.py @@ -163,6 +163,7 @@ "CreateProof", "Xkeysend", "Graceful", + "Reckless", ] grpc_notification_names = [ @@ -198,6 +199,7 @@ "schema_name": "xpay_pay_part_start", "typename": "PayPartStart", }, + {"name": "reckless_log", "typename": "RecklessLog"}, ] hook_names = [ diff --git a/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py b/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py index 5dc698e35b86..482bc4de8a57 100644 --- a/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py +++ b/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py @@ -25,7 +25,7 @@ from pyln.grpc import primitives_pb2 as primitives__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\nnode.proto\x12\x03\x63ln\x1a\x10primitives.proto\"\x10\n\x0eGetinfoRequest\"\xb1\x04\n\x0fGetinfoResponse\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\r\n\x05\x61lias\x18\x02 \x01(\t\x12\r\n\x05\x63olor\x18\x03 \x01(\x0c\x12\x11\n\tnum_peers\x18\x04 \x01(\r\x12\x1c\n\x14num_pending_channels\x18\x05 \x01(\r\x12\x1b\n\x13num_active_channels\x18\x06 \x01(\r\x12\x1d\n\x15num_inactive_channels\x18\x07 \x01(\r\x12\x0f\n\x07version\x18\x08 \x01(\t\x12\x15\n\rlightning_dir\x18\t \x01(\t\x12\x32\n\x0cour_features\x18\n \x01(\x0b\x32\x17.cln.GetinfoOurFeaturesH\x00\x88\x01\x01\x12\x13\n\x0b\x62lockheight\x18\x0b \x01(\r\x12\x0f\n\x07network\x18\x0c \x01(\t\x12(\n\x13\x66\x65\x65s_collected_msat\x18\r \x01(\x0b\x32\x0b.cln.Amount\x12$\n\x07\x61\x64\x64ress\x18\x0e \x03(\x0b\x32\x13.cln.GetinfoAddress\x12$\n\x07\x62inding\x18\x0f \x03(\x0b\x32\x13.cln.GetinfoBinding\x12\"\n\x15warning_bitcoind_sync\x18\x10 \x01(\tH\x01\x88\x01\x01\x12$\n\x17warning_lightningd_sync\x18\x11 \x01(\tH\x02\x88\x01\x01\x42\x0f\n\r_our_featuresB\x18\n\x16_warning_bitcoind_syncB\x1a\n\x18_warning_lightningd_sync\"\xc4\x01\n\x0eGetinfoAddress\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.GetinfoAddress.GetinfoAddressType\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x00\x88\x01\x01\"G\n\x12GetinfoAddressType\x12\x07\n\x03\x44NS\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x42\n\n\x08_address\"\xac\x02\n\x0eGetinfoBinding\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.GetinfoBinding.GetinfoBindingType\x12\x14\n\x07\x61\x64\x64ress\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04port\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06socket\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x14\n\x07subtype\x18\x05 \x01(\tH\x03\x88\x01\x01\"_\n\x12GetinfoBindingType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x12\r\n\tWEBSOCKET\x10\x05\x42\n\n\x08_addressB\x07\n\x05_portB\t\n\x07_socketB\n\n\x08_subtype\"R\n\x12GetinfoOurFeatures\x12\x0c\n\x04init\x18\x01 \x01(\x0c\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x0f\n\x07\x63hannel\x18\x03 \x01(\x0c\x12\x0f\n\x07invoice\x18\x04 \x01(\x0c\"\xb5\x01\n\x10ListpeersRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x38\n\x05level\x18\x02 \x01(\x0e\x32$.cln.ListpeersRequest.ListpeersLevelH\x01\x88\x01\x01\"E\n\x0eListpeersLevel\x12\x06\n\x02IO\x10\x00\x12\t\n\x05\x44\x45\x42UG\x10\x01\x12\x08\n\x04INFO\x10\x02\x12\x0b\n\x07UNUSUAL\x10\x03\x12\t\n\x05TRACE\x10\x04\x42\x05\n\x03_idB\x08\n\x06_level\"7\n\x11ListpeersResponse\x12\"\n\x05peers\x18\x01 \x03(\x0b\x32\x13.cln.ListpeersPeers\"\xc9\x01\n\x0eListpeersPeers\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x11\n\tconnected\x18\x02 \x01(\x08\x12#\n\x03log\x18\x03 \x03(\x0b\x32\x16.cln.ListpeersPeersLog\x12\x0f\n\x07netaddr\x18\x05 \x03(\t\x12\x15\n\x08\x66\x65\x61tures\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12\x18\n\x0bremote_addr\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x0cnum_channels\x18\x08 \x01(\rB\x0b\n\t_featuresB\x0e\n\x0c_remote_addr\"\x88\x03\n\x11ListpeersPeersLog\x12?\n\titem_type\x18\x01 \x01(\x0e\x32,.cln.ListpeersPeersLog.ListpeersPeersLogType\x12\x18\n\x0bnum_skipped\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04time\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06source\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x10\n\x03log\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x07node_id\x18\x06 \x01(\x0cH\x04\x88\x01\x01\x12\x11\n\x04\x64\x61ta\x18\x07 \x01(\x0cH\x05\x88\x01\x01\"t\n\x15ListpeersPeersLogType\x12\x0b\n\x07SKIPPED\x10\x00\x12\n\n\x06\x42ROKEN\x10\x01\x12\x0b\n\x07UNUSUAL\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\t\n\x05\x44\x45\x42UG\x10\x04\x12\t\n\x05IO_IN\x10\x05\x12\n\n\x06IO_OUT\x10\x06\x12\t\n\x05TRACE\x10\x07\x42\x0e\n\x0c_num_skippedB\x07\n\x05_timeB\t\n\x07_sourceB\x06\n\x04_logB\n\n\x08_node_idB\x07\n\x05_data\"0\n\x10ListfundsRequest\x12\x12\n\x05spent\x18\x01 \x01(\x08H\x00\x88\x01\x01\x42\x08\n\x06_spent\"e\n\x11ListfundsResponse\x12&\n\x07outputs\x18\x01 \x03(\x0b\x32\x15.cln.ListfundsOutputs\x12(\n\x08\x63hannels\x18\x02 \x03(\x0b\x32\x16.cln.ListfundsChannels\"\x97\x02\n\x11ListfundsChannels\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12$\n\x0four_amount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66unding_txid\x18\x04 \x01(\x0c\x12\x16\n\x0e\x66unding_output\x18\x05 \x01(\r\x12\x11\n\tconnected\x18\x06 \x01(\x08\x12 \n\x05state\x18\x07 \x01(\x0e\x32\x11.cln.ChannelState\x12\x1d\n\x10short_channel_id\x18\x08 \x01(\tH\x00\x88\x01\x01\x12\x12\n\nchannel_id\x18\t \x01(\x0c\x42\x13\n\x11_short_channel_id\"\xb9\x03\n\x10ListfundsOutputs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06output\x18\x02 \x01(\r\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0cscriptpubkey\x18\x04 \x01(\x0c\x12\x14\n\x07\x61\x64\x64ress\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0credeemscript\x18\x06 \x01(\x0cH\x01\x88\x01\x01\x12<\n\x06status\x18\x07 \x01(\x0e\x32,.cln.ListfundsOutputs.ListfundsOutputsStatus\x12\x18\n\x0b\x62lockheight\x18\x08 \x01(\rH\x02\x88\x01\x01\x12\x10\n\x08reserved\x18\t \x01(\x08\x12\x1e\n\x11reserved_to_block\x18\n \x01(\rH\x03\x88\x01\x01\"Q\n\x16ListfundsOutputsStatus\x12\x0f\n\x0bUNCONFIRMED\x10\x00\x12\r\n\tCONFIRMED\x10\x01\x12\t\n\x05SPENT\x10\x02\x12\x0c\n\x08IMMATURE\x10\x03\x42\n\n\x08_addressB\x0f\n\r_redeemscriptB\x0e\n\x0c_blockheightB\x14\n\x12_reserved_to_block\"\xbb\x03\n\x0eSendpayRequest\x12 \n\x05route\x18\x01 \x03(\x0b\x32\x11.cln.SendpayRoute\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x12\n\x05label\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x1b\n\x0epayment_secret\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x13\n\x06partid\x18\x07 \x01(\x04H\x03\x88\x01\x01\x12\x14\n\x07groupid\x18\t \x01(\x04H\x04\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\x0b \x01(\x0cH\x06\x88\x01\x01\x12\x1d\n\x10payment_metadata\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\r \x01(\tH\x08\x88\x01\x01\x42\x08\n\x06_labelB\t\n\x07_bolt11B\x11\n\x0f_payment_secretB\t\n\x07_partidB\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x13\n\x11_payment_metadataB\x0e\n\x0c_description\"\x96\x05\n\x0fSendpayResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x07groupid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x32\n\x06status\x18\x04 \x01(\x0e\x32\".cln.SendpayResponse.SendpayStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06partid\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x14\n\x07message\x18\x0e \x01(\tH\x08\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0f \x01(\x04H\t\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\n\x88\x01\x01\"*\n\rSendpayStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x42\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\n\n\x08_messageB\x0f\n\r_completed_atB\x10\n\x0e_updated_index\"\xe6\x02\n\x0cSendpayRoute\x12\x0f\n\x02id\x18\x02 \x01(\x0cH\x00\x88\x01\x01\x12\x12\n\x05\x64\x65lay\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x14\n\x07\x63hannel\x18\x04 \x01(\tH\x02\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12!\n\x14short_channel_id_dir\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x18\n\x0bnode_id_out\x18\x07 \x01(\x0cH\x05\x88\x01\x01\x12)\n\x0f\x61mount_out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x15\n\x08\x63ltv_out\x18\t \x01(\rH\x07\x88\x01\x01\x42\x05\n\x03_idB\x08\n\x06_delayB\n\n\x08_channelB\x0e\n\x0c_amount_msatB\x17\n\x15_short_channel_id_dirB\x0e\n\x0c_node_id_outB\x12\n\x10_amount_out_msatB\x0b\n\t_cltv_out\"\x93\x01\n\x13ListchannelsRequest\x12\x1d\n\x10short_channel_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06source\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x42\x13\n\x11_short_channel_idB\t\n\x07_sourceB\x0e\n\x0c_destination\"C\n\x14ListchannelsResponse\x12+\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x19.cln.ListchannelsChannels\"\xb3\x03\n\x14ListchannelsChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\x0e\n\x06public\x18\x04 \x01(\x08\x12 \n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x15\n\rmessage_flags\x18\x06 \x01(\r\x12\x15\n\rchannel_flags\x18\x07 \x01(\r\x12\x0e\n\x06\x61\x63tive\x18\x08 \x01(\x08\x12\x13\n\x0blast_update\x18\t \x01(\r\x12\x1d\n\x15\x62\x61se_fee_millisatoshi\x18\n \x01(\r\x12\x19\n\x11\x66\x65\x65_per_millionth\x18\x0b \x01(\r\x12\r\n\x05\x64\x65lay\x18\x0c \x01(\r\x12&\n\x11htlc_minimum_msat\x18\r \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x11htlc_maximum_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x10\n\x08\x66\x65\x61tures\x18\x0f \x01(\x0c\x12\x11\n\tdirection\x18\x10 \x01(\rB\x14\n\x12_htlc_maximum_msat\"#\n\x10\x41\x64\x64gossipRequest\x12\x0f\n\x07message\x18\x01 \x01(\x0c\"\x13\n\x11\x41\x64\x64gossipResponse\"\xaf\x01\n\x14\x41\x64\x64psbtoutputRequest\x12\x1f\n\x07satoshi\x18\x01 \x01(\x0b\x32\x0e.cln.AmountSat\x12\x15\n\x08locktime\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x18\n\x0binitialpsbt\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x04 \x01(\tH\x02\x88\x01\x01\x42\x0b\n\t_locktimeB\x0e\n\x0c_initialpsbtB\x0e\n\x0c_destination\"U\n\x15\x41\x64\x64psbtoutputResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x1e\n\x16\x65stimated_added_weight\x18\x02 \x01(\r\x12\x0e\n\x06outnum\x18\x03 \x01(\r\"O\n\x14\x41utocleanonceRequest\x12*\n\tsubsystem\x18\x01 \x01(\x0e\x32\x17.cln.AutocleanSubsystem\x12\x0b\n\x03\x61ge\x18\x02 \x01(\x04\"G\n\x15\x41utocleanonceResponse\x12.\n\tautoclean\x18\x01 \x01(\x0b\x32\x1b.cln.AutocleanonceAutoclean\"\x89\x05\n\x16\x41utocleanonceAutoclean\x12L\n\x11succeededforwards\x18\x01 \x01(\x0b\x32,.cln.AutocleanonceAutocleanSucceededforwardsH\x00\x88\x01\x01\x12\x46\n\x0e\x66\x61iledforwards\x18\x02 \x01(\x0b\x32).cln.AutocleanonceAutocleanFailedforwardsH\x01\x88\x01\x01\x12\x44\n\rsucceededpays\x18\x03 \x01(\x0b\x32(.cln.AutocleanonceAutocleanSucceededpaysH\x02\x88\x01\x01\x12>\n\nfailedpays\x18\x04 \x01(\x0b\x32%.cln.AutocleanonceAutocleanFailedpaysH\x03\x88\x01\x01\x12\x42\n\x0cpaidinvoices\x18\x05 \x01(\x0b\x32\'.cln.AutocleanonceAutocleanPaidinvoicesH\x04\x88\x01\x01\x12H\n\x0f\x65xpiredinvoices\x18\x06 \x01(\x0b\x32*.cln.AutocleanonceAutocleanExpiredinvoicesH\x05\x88\x01\x01\x12\x44\n\rnetworkevents\x18\x07 \x01(\x0b\x32(.cln.AutocleanonceAutocleanNetworkeventsH\x06\x88\x01\x01\x42\x14\n\x12_succeededforwardsB\x11\n\x0f_failedforwardsB\x10\n\x0e_succeededpaysB\r\n\x0b_failedpaysB\x0f\n\r_paidinvoicesB\x12\n\x10_expiredinvoicesB\x10\n\x0e_networkevents\"K\n%AutocleanonceAutocleanExpiredinvoices\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"J\n$AutocleanonceAutocleanFailedforwards\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"F\n AutocleanonceAutocleanFailedpays\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"I\n#AutocleanonceAutocleanNetworkevents\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"H\n\"AutocleanonceAutocleanPaidinvoices\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"M\n\'AutocleanonceAutocleanSucceededforwards\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"I\n#AutocleanonceAutocleanSucceededpays\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"W\n\x16\x41utocleanstatusRequest\x12/\n\tsubsystem\x18\x01 \x01(\x0e\x32\x17.cln.AutocleanSubsystemH\x00\x88\x01\x01\x42\x0c\n\n_subsystem\"K\n\x17\x41utocleanstatusResponse\x12\x30\n\tautoclean\x18\x01 \x01(\x0b\x32\x1d.cln.AutocleanstatusAutoclean\"\x99\x05\n\x18\x41utocleanstatusAutoclean\x12N\n\x11succeededforwards\x18\x01 \x01(\x0b\x32..cln.AutocleanstatusAutocleanSucceededforwardsH\x00\x88\x01\x01\x12H\n\x0e\x66\x61iledforwards\x18\x02 \x01(\x0b\x32+.cln.AutocleanstatusAutocleanFailedforwardsH\x01\x88\x01\x01\x12\x46\n\rsucceededpays\x18\x03 \x01(\x0b\x32*.cln.AutocleanstatusAutocleanSucceededpaysH\x02\x88\x01\x01\x12@\n\nfailedpays\x18\x04 \x01(\x0b\x32\'.cln.AutocleanstatusAutocleanFailedpaysH\x03\x88\x01\x01\x12\x44\n\x0cpaidinvoices\x18\x05 \x01(\x0b\x32).cln.AutocleanstatusAutocleanPaidinvoicesH\x04\x88\x01\x01\x12J\n\x0f\x65xpiredinvoices\x18\x06 \x01(\x0b\x32,.cln.AutocleanstatusAutocleanExpiredinvoicesH\x05\x88\x01\x01\x12\x46\n\rnetworkevents\x18\x07 \x01(\x0b\x32*.cln.AutocleanstatusAutocleanNetworkeventsH\x06\x88\x01\x01\x42\x14\n\x12_succeededforwardsB\x11\n\x0f_failedforwardsB\x10\n\x0e_succeededpaysB\r\n\x0b_failedpaysB\x0f\n\r_paidinvoicesB\x12\n\x10_expiredinvoicesB\x10\n\x0e_networkevents\"e\n\'AutocleanstatusAutocleanExpiredinvoices\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"d\n&AutocleanstatusAutocleanFailedforwards\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"`\n\"AutocleanstatusAutocleanFailedpays\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"c\n%AutocleanstatusAutocleanNetworkevents\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"b\n$AutocleanstatusAutocleanPaidinvoices\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"g\n)AutocleanstatusAutocleanSucceededforwards\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"c\n%AutocleanstatusAutocleanSucceededpays\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"U\n\x13\x43heckmessageRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\r\n\x05zbase\x18\x02 \x01(\t\x12\x13\n\x06pubkey\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x42\t\n\x07_pubkey\"8\n\x14\x43heckmessageResponse\x12\x10\n\x08verified\x18\x01 \x01(\x08\x12\x0e\n\x06pubkey\x18\x02 \x01(\x0c\"\xcb\x02\n\x0c\x43loseRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x1e\n\x11unilateraltimeout\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\tH\x01\x88\x01\x01\x12!\n\x14\x66\x65\x65_negotiation_step\x18\x04 \x01(\tH\x02\x88\x01\x01\x12)\n\rwrong_funding\x18\x05 \x01(\x0b\x32\r.cln.OutpointH\x03\x88\x01\x01\x12\x1f\n\x12\x66orce_lease_closed\x18\x06 \x01(\x08H\x04\x88\x01\x01\x12\x1e\n\x08\x66\x65\x65range\x18\x07 \x03(\x0b\x32\x0c.cln.FeerateB\x14\n\x12_unilateraltimeoutB\x0e\n\x0c_destinationB\x17\n\x15_fee_negotiation_stepB\x10\n\x0e_wrong_fundingB\x15\n\x13_force_lease_closed\"\x93\x01\n\rCloseResponse\x12/\n\titem_type\x18\x01 \x01(\x0e\x32\x1c.cln.CloseResponse.CloseType\x12\x0b\n\x03txs\x18\x04 \x03(\x0c\x12\r\n\x05txids\x18\x05 \x03(\x0c\"5\n\tCloseType\x12\n\n\x06MUTUAL\x10\x00\x12\x0e\n\nUNILATERAL\x10\x01\x12\x0c\n\x08UNOPENED\x10\x02\"T\n\x0e\x43onnectRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\x04host\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04port\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x07\n\x05_hostB\x07\n\x05_port\"\xb4\x01\n\x0f\x43onnectResponse\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x10\n\x08\x66\x65\x61tures\x18\x02 \x01(\x0c\x12\x38\n\tdirection\x18\x03 \x01(\x0e\x32%.cln.ConnectResponse.ConnectDirection\x12$\n\x07\x61\x64\x64ress\x18\x04 \x01(\x0b\x32\x13.cln.ConnectAddress\"#\n\x10\x43onnectDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\"\xfb\x01\n\x0e\x43onnectAddress\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.ConnectAddress.ConnectAddressType\x12\x13\n\x06socket\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04port\x18\x04 \x01(\rH\x02\x88\x01\x01\"P\n\x12\x43onnectAddressType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x42\t\n\x07_socketB\n\n\x08_addressB\x07\n\x05_port\"J\n\x14\x43reateinvoiceRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12\x10\n\x08preimage\x18\x03 \x01(\x0c\"\xe6\x05\n\x15\x43reateinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x06\x62olt11\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x04 \x01(\x0c\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12>\n\x06status\x18\x06 \x01(\x0e\x32..cln.CreateinvoiceResponse.CreateinvoiceStatus\x12\x13\n\x0b\x64\x65scription\x18\x07 \x01(\t\x12\x12\n\nexpires_at\x18\x08 \x01(\x04\x12\x16\n\tpay_index\x18\t \x01(\x04H\x03\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x06\x88\x01\x01\x12\x1b\n\x0elocal_offer_id\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0f \x01(\tH\x08\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12:\n\rpaid_outpoint\x18\x11 \x01(\x0b\x32\x1e.cln.CreateinvoicePaidOutpointH\t\x88\x01\x01\"8\n\x13\x43reateinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x11\n\x0f_local_offer_idB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_paid_outpoint\"9\n\x19\x43reateinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\xb4\x02\n\x10\x44\x61tastoreRequest\x12\x10\n\x03hex\x18\x02 \x01(\x0cH\x00\x88\x01\x01\x12\x36\n\x04mode\x18\x03 \x01(\x0e\x32#.cln.DatastoreRequest.DatastoreModeH\x01\x88\x01\x01\x12\x17\n\ngeneration\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\t\x12\x13\n\x06string\x18\x06 \x01(\tH\x03\x88\x01\x01\"p\n\rDatastoreMode\x12\x0f\n\x0bMUST_CREATE\x10\x00\x12\x10\n\x0cMUST_REPLACE\x10\x01\x12\x15\n\x11\x43REATE_OR_REPLACE\x10\x02\x12\x0f\n\x0bMUST_APPEND\x10\x03\x12\x14\n\x10\x43REATE_OR_APPEND\x10\x04\x42\x06\n\x04_hexB\x07\n\x05_modeB\r\n\x0b_generationB\t\n\x07_string\"\x82\x01\n\x11\x44\x61tastoreResponse\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\tB\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"$\n\x15\x44\x61tastoreusageRequest\x12\x0b\n\x03key\x18\x01 \x03(\t\"S\n\x16\x44\x61tastoreusageResponse\x12\x39\n\x0e\x64\x61tastoreusage\x18\x01 \x01(\x0b\x32!.cln.DatastoreusageDatastoreusage\"@\n\x1c\x44\x61tastoreusageDatastoreusage\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x13\n\x0btotal_bytes\x18\x02 \x01(\x04\"\x9d\x01\n\x12\x43reateonionRequest\x12\"\n\x04hops\x18\x01 \x03(\x0b\x32\x14.cln.CreateonionHops\x12\x11\n\tassocdata\x18\x02 \x01(\x0c\x12\x18\n\x0bsession_key\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x17\n\nonion_size\x18\x04 \x01(\rH\x01\x88\x01\x01\x42\x0e\n\x0c_session_keyB\r\n\x0b_onion_size\"<\n\x13\x43reateonionResponse\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12\x16\n\x0eshared_secrets\x18\x02 \x03(\x0c\"2\n\x0f\x43reateonionHops\x12\x0e\n\x06pubkey\x18\x01 \x01(\x0c\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\"J\n\x13\x44\x65ldatastoreRequest\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x0b\n\x03key\x18\x03 \x03(\tB\r\n\x0b_generation\"\x85\x01\n\x14\x44\x65ldatastoreResponse\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\tB\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"\xb6\x01\n\x11\x44\x65linvoiceRequest\x12\r\n\x05label\x18\x01 \x01(\t\x12\x37\n\x06status\x18\x02 \x01(\x0e\x32\'.cln.DelinvoiceRequest.DelinvoiceStatus\x12\x15\n\x08\x64\x65sconly\x18\x03 \x01(\x08H\x00\x88\x01\x01\"5\n\x10\x44\x65linvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\x0b\n\t_desconly\"\xcf\x05\n\x12\x44\x65linvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x06\x62olt11\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x03 \x01(\tH\x01\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x06 \x01(\x0c\x12\x38\n\x06status\x18\x07 \x01(\x0e\x32(.cln.DelinvoiceResponse.DelinvoiceStatus\x12\x12\n\nexpires_at\x18\x08 \x01(\x04\x12\x1b\n\x0elocal_offer_id\x18\t \x01(\x0cH\x04\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0c \x01(\x04\x12\x1a\n\rupdated_index\x18\r \x01(\x04H\x06\x88\x01\x01\x12\x16\n\tpay_index\x18\x0e \x01(\x04H\x07\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x12\x14\n\x07paid_at\x18\x10 \x01(\x04H\t\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x11 \x01(\x0cH\n\x88\x01\x01\"5\n\x10\x44\x65linvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x0e\n\x0c_descriptionB\x11\n\x0f_local_offer_idB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_updated_indexB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimage\"\x9f\x01\n\x17\x44\x65vforgetchannelRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x17\n\nchannel_id\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\x05\x66orce\x18\x04 \x01(\x08H\x02\x88\x01\x01\x42\x13\n\x11_short_channel_idB\r\n\x0b_channel_idB\x08\n\x06_force\"Y\n\x18\x44\x65vforgetchannelResponse\x12\x0e\n\x06\x66orced\x18\x01 \x01(\x08\x12\x17\n\x0f\x66unding_unspent\x18\x02 \x01(\x08\x12\x14\n\x0c\x66unding_txid\x18\x03 \x01(\x0c\"\x19\n\x17\x45mergencyrecoverRequest\")\n\x18\x45mergencyrecoverResponse\x12\r\n\x05stubs\x18\x01 \x03(\x0c\" \n\x1eGetemergencyrecoverdataRequest\"\x8a\x01\n\x1fGetemergencyrecoverdataResponse\x12\x10\n\x08\x66iledata\x18\x01 \x01(\x0c\x12\x1f\n\x12\x63\x61n_create_penalty\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x1d\n\x15\x62\x61\x63ked_up_channel_ids\x18\x03 \x03(\x0c\x42\x15\n\x13_can_create_penalty\"Q\n\x13\x45xposesecretRequest\x12\x12\n\npassphrase\x18\x01 \x01(\t\x12\x17\n\nidentifier\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\r\n\x0b_identifier\"_\n\x14\x45xposesecretResponse\x12\x12\n\nidentifier\x18\x01 \x01(\t\x12\x0f\n\x07\x63odex32\x18\x02 \x01(\t\x12\x15\n\x08mnemonic\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x0b\n\t_mnemonic\"#\n\x0eRecoverRequest\x12\x11\n\thsmsecret\x18\x01 \x01(\t\"x\n\x0fRecoverResponse\x12\x32\n\x06result\x18\x01 \x01(\x0e\x32\".cln.RecoverResponse.RecoverResult\"1\n\rRecoverResult\x12 \n\x1cRECOVERY_RESTART_IN_PROGRESS\x10\x00\"$\n\x15RecoverchannelRequest\x12\x0b\n\x03scb\x18\x01 \x03(\x0c\"\'\n\x16RecoverchannelResponse\x12\r\n\x05stubs\x18\x01 \x03(\t\"\x99\x02\n\x0eInvoiceRequest\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\r\n\x05label\x18\x03 \x01(\t\x12\x11\n\tfallbacks\x18\x04 \x03(\t\x12\x15\n\x08preimage\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x12\x11\n\x04\x63ltv\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06\x65xpiry\x18\x07 \x01(\x04H\x02\x88\x01\x01\x12\x1d\n\x15\x65xposeprivatechannels\x18\x08 \x03(\t\x12\x19\n\x0c\x64\x65schashonly\x18\t \x01(\x08H\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x10.cln.AmountOrAnyB\x0b\n\t_preimageB\x07\n\x05_cltvB\t\n\x07_expiryB\x0f\n\r_deschashonly\"\xfe\x02\n\x0fInvoiceResponse\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x16\n\x0epayment_secret\x18\x03 \x01(\x0c\x12\x12\n\nexpires_at\x18\x04 \x01(\x04\x12\x1d\n\x10warning_capacity\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x1c\n\x0fwarning_offline\x18\x06 \x01(\tH\x01\x88\x01\x01\x12\x1d\n\x10warning_deadends\x18\x07 \x01(\tH\x02\x88\x01\x01\x12#\n\x16warning_private_unused\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x18\n\x0bwarning_mpp\x18\t \x01(\tH\x04\x88\x01\x01\x12\x15\n\rcreated_index\x18\n \x01(\x04\x42\x13\n\x11_warning_capacityB\x12\n\x10_warning_offlineB\x13\n\x11_warning_deadendsB\x19\n\x17_warning_private_unusedB\x0e\n\x0c_warning_mpp\"\xe1\x01\n\x15InvoicerequestRequest\x12\x1b\n\x06\x61mount\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x13\n\x06issuer\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05label\x18\x04 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0f\x61\x62solute_expiry\x18\x05 \x01(\x04H\x02\x88\x01\x01\x12\x17\n\nsingle_use\x18\x06 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_issuerB\x08\n\x06_labelB\x12\n\x10_absolute_expiryB\r\n\x0b_single_use\"\x8b\x01\n\x16InvoicerequestResponse\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"1\n\x1c\x44isableinvoicerequestRequest\x12\x11\n\tinvreq_id\x18\x01 \x01(\t\"\x92\x01\n\x1d\x44isableinvoicerequestResponse\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"l\n\x1aListinvoicerequestsRequest\x12\x16\n\tinvreq_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x61\x63tive_only\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\x0c\n\n_invreq_idB\x0e\n\x0c_active_only\"_\n\x1bListinvoicerequestsResponse\x12@\n\x0finvoicerequests\x18\x01 \x03(\x0b\x32\'.cln.ListinvoicerequestsInvoicerequests\"\x97\x01\n\"ListinvoicerequestsInvoicerequests\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"#\n\x14ListdatastoreRequest\x12\x0b\n\x03key\x18\x02 \x03(\t\"G\n\x15ListdatastoreResponse\x12.\n\tdatastore\x18\x01 \x03(\x0b\x32\x1b.cln.ListdatastoreDatastore\"\x87\x01\n\x16ListdatastoreDatastore\x12\x0b\n\x03key\x18\x01 \x03(\t\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x42\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"\xde\x02\n\x13ListinvoicesRequest\x12\x12\n\x05label\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tinvstring\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x12\x15\n\x08offer_id\x18\x04 \x01(\tH\x03\x88\x01\x01\x12>\n\x05index\x18\x05 \x01(\x0e\x32*.cln.ListinvoicesRequest.ListinvoicesIndexH\x04\x88\x01\x01\x12\x12\n\x05start\x18\x06 \x01(\x04H\x05\x88\x01\x01\x12\x12\n\x05limit\x18\x07 \x01(\rH\x06\x88\x01\x01\"-\n\x11ListinvoicesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x42\x08\n\x06_labelB\x0c\n\n_invstringB\x0f\n\r_payment_hashB\x0b\n\t_offer_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListinvoicesResponse\x12+\n\x08invoices\x18\x01 \x03(\x0b\x32\x19.cln.ListinvoicesInvoices\"\xbc\x06\n\x14ListinvoicesInvoices\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x44\n\x06status\x18\x04 \x01(\x0e\x32\x34.cln.ListinvoicesInvoices.ListinvoicesInvoicesStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x1b\n\x0elocal_offer_id\x18\t \x01(\x0cH\x04\x88\x01\x01\x12\x16\n\tpay_index\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x14\n\x07paid_at\x18\r \x01(\x04H\x07\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0e \x01(\x0cH\x08\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0f \x01(\tH\t\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\n\x88\x01\x01\x12\x41\n\rpaid_outpoint\x18\x12 \x01(\x0b\x32%.cln.ListinvoicesInvoicesPaidOutpointH\x0b\x88\x01\x01\"?\n\x1aListinvoicesInvoicesStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x11\n\x0f_local_offer_idB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\"@\n ListinvoicesInvoicesPaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\xf6\x03\n\x10SendonionRequest\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12)\n\tfirst_hop\x18\x02 \x01(\x0b\x32\x16.cln.SendonionFirstHop\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x12\n\x05label\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x16\n\x0eshared_secrets\x18\x05 \x03(\x0c\x12\x13\n\x06partid\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\t \x01(\x0cH\x03\x88\x01\x01\x12\x14\n\x07groupid\x18\x0b \x01(\x04H\x04\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\r \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0e \x01(\tH\x07\x88\x01\x01\x12+\n\x11total_amount_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x42\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\x0e\n\x0c_destinationB\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x0e\n\x0c_descriptionB\x14\n\x12_total_amount_msat\"\xd0\x04\n\x11SendonionResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x36\n\x06status\x18\x03 \x01(\x0e\x32&.cln.SendonionResponse.SendonionStatus\x12%\n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\ncreated_at\x18\x06 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\x08 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\n \x01(\tH\x04\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0b \x01(\x0cH\x05\x88\x01\x01\x12\x14\n\x07message\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x13\n\x06partid\x18\r \x01(\x04H\x07\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0e \x01(\x04\x12\x1a\n\rupdated_index\x18\x0f \x01(\x04H\x08\x88\x01\x01\",\n\x0fSendonionStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x42\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\n\n\x08_messageB\t\n\x07_partidB\x10\n\x0e_updated_index\"P\n\x11SendonionFirstHop\x12\n\n\x02id\x18\x01 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\r\n\x05\x64\x65lay\x18\x03 \x01(\r\"\xa0\x03\n\x13ListsendpaysRequest\x12\x13\n\x06\x62olt11\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12@\n\x06status\x18\x03 \x01(\x0e\x32+.cln.ListsendpaysRequest.ListsendpaysStatusH\x02\x88\x01\x01\x12>\n\x05index\x18\x04 \x01(\x0e\x32*.cln.ListsendpaysRequest.ListsendpaysIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\"-\n\x11ListsendpaysIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\";\n\x12ListsendpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x42\t\n\x07_bolt11B\x0f\n\r_payment_hashB\t\n\x07_statusB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListsendpaysResponse\x12+\n\x08payments\x18\x01 \x03(\x0b\x32\x19.cln.ListsendpaysPayments\"\xe5\x05\n\x14ListsendpaysPayments\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x0f\n\x07groupid\x18\x02 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x44\n\x06status\x18\x04 \x01(\x0e\x32\x34.cln.ListsendpaysPayments.ListsendpaysPaymentsStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\n \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0b \x01(\tH\x04\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x05\x88\x01\x01\x12\x17\n\nerroronion\x18\r \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0e \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06partid\x18\x0f \x01(\x04H\x08\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\t\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x12 \x01(\x04H\n\x88\x01\x01\"C\n\x1aListsendpaysPaymentsStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\r\n\x0b_erroronionB\x0e\n\x0c_descriptionB\t\n\x07_partidB\x10\n\x0e_updated_indexB\x0f\n\r_completed_at\"\x19\n\x17ListtransactionsRequest\"S\n\x18ListtransactionsResponse\x12\x37\n\x0ctransactions\x18\x01 \x03(\x0b\x32!.cln.ListtransactionsTransactions\"\xf8\x01\n\x1cListtransactionsTransactions\x12\x0c\n\x04hash\x18\x01 \x01(\x0c\x12\r\n\x05rawtx\x18\x02 \x01(\x0c\x12\x13\n\x0b\x62lockheight\x18\x03 \x01(\r\x12\x0f\n\x07txindex\x18\x04 \x01(\r\x12\x10\n\x08locktime\x18\x07 \x01(\r\x12\x0f\n\x07version\x18\x08 \x01(\r\x12\x37\n\x06inputs\x18\t \x03(\x0b\x32\'.cln.ListtransactionsTransactionsInputs\x12\x39\n\x07outputs\x18\n \x03(\x0b\x32(.cln.ListtransactionsTransactionsOutputs\"S\n\"ListtransactionsTransactionsInputs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\r\n\x05index\x18\x02 \x01(\r\x12\x10\n\x08sequence\x18\x03 \x01(\r\"l\n#ListtransactionsTransactionsOutputs\x12\r\n\x05index\x18\x01 \x01(\r\x12\x14\n\x0cscriptPubKey\x18\x03 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\"M\n\x11MakesecretRequest\x12\x10\n\x03hex\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x13\n\x06string\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x06\n\x04_hexB\t\n\x07_string\"$\n\x12MakesecretResponse\x12\x0e\n\x06secret\x18\x01 \x01(\x0c\"\xc7\x04\n\nPayRequest\x12\x12\n\x06\x62olt11\x18\x01 \x01(\tB\x02\x18\x01\x12\x16\n\x05label\x18\x03 \x01(\tB\x02\x18\x01H\x00\x88\x01\x01\x12\x1e\n\rmaxfeepercent\x18\x04 \x01(\x01\x42\x02\x18\x01H\x01\x88\x01\x01\x12\x1a\n\tretry_for\x18\x05 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x19\n\x08maxdelay\x18\x06 \x01(\rB\x02\x18\x01H\x03\x88\x01\x01\x12\'\n\texemptfee\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x04\x88\x01\x01\x12\x1b\n\nriskfactor\x18\x08 \x01(\x01\x42\x02\x18\x01H\x05\x88\x01\x01\x12\x13\n\x07\x65xclude\x18\n \x03(\tB\x02\x18\x01\x12$\n\x06maxfee\x18\x0b \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x06\x88\x01\x01\x12\x1c\n\x0b\x64\x65scription\x18\x0c \x01(\tB\x02\x18\x01H\x07\x88\x01\x01\x12)\n\x0b\x61mount_msat\x18\r \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x08\x88\x01\x01\x12\x1e\n\rlocalinvreqid\x18\x0e \x01(\x0c\x42\x02\x18\x01H\t\x88\x01\x01\x12*\n\x0cpartial_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\n\x88\x01\x01\x42\x08\n\x06_labelB\x10\n\x0e_maxfeepercentB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\x0c\n\n_exemptfeeB\r\n\x0b_riskfactorB\t\n\x07_maxfeeB\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x0f\n\r_partial_msat\"\xab\x03\n\x0bPayResponse\x12\x1c\n\x10payment_preimage\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x1c\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x42\x02\x18\x01H\x00\x88\x01\x01\x12\x18\n\x0cpayment_hash\x18\x03 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\ncreated_at\x18\x04 \x01(\x01\x42\x02\x18\x01\x12\x11\n\x05parts\x18\x05 \x01(\rB\x02\x18\x01\x12$\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12)\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12+\n\x1awarning_partial_completion\x18\x08 \x01(\tB\x02\x18\x01H\x01\x88\x01\x01\x12.\n\x06status\x18\t \x01(\x0e\x32\x1a.cln.PayResponse.PayStatusB\x02\x18\x01\">\n\tPayStatus\x12\x10\n\x08\x43OMPLETE\x10\x00\x1a\x02\x08\x01\x12\x0f\n\x07PENDING\x10\x01\x1a\x02\x08\x01\x12\x0e\n\x06\x46\x41ILED\x10\x02\x1a\x02\x08\x01\x42\x0e\n\x0c_destinationB\x1d\n\x1b_warning_partial_completion\"*\n\x10ListnodesRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x42\x05\n\x03_id\"7\n\x11ListnodesResponse\x12\"\n\x05nodes\x18\x01 \x03(\x0b\x32\x13.cln.ListnodesNodes\"\xb8\x02\n\x0eListnodesNodes\x12\x0e\n\x06nodeid\x18\x01 \x01(\x0c\x12\x1b\n\x0elast_timestamp\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x12\n\x05\x61lias\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x12\n\x05\x63olor\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x12\x15\n\x08\x66\x65\x61tures\x18\x05 \x01(\x0cH\x03\x88\x01\x01\x12/\n\taddresses\x18\x06 \x03(\x0b\x32\x1c.cln.ListnodesNodesAddresses\x12@\n\x10option_will_fund\x18\x07 \x01(\x0b\x32!.cln.ListnodesNodesOptionWillFundH\x04\x88\x01\x01\x42\x11\n\x0f_last_timestampB\x08\n\x06_aliasB\x08\n\x06_colorB\x0b\n\t_featuresB\x13\n\x11_option_will_fund\"\xe8\x01\n\x17ListnodesNodesAddresses\x12K\n\titem_type\x18\x01 \x01(\x0e\x32\x38.cln.ListnodesNodesAddresses.ListnodesNodesAddressesType\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x00\x88\x01\x01\"P\n\x1bListnodesNodesAddressesType\x12\x07\n\x03\x44NS\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x42\n\n\x08_address\"\xf2\x01\n\x1cListnodesNodesOptionWillFund\x12(\n\x13lease_fee_base_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x17\n\x0flease_fee_basis\x18\x02 \x01(\r\x12\x16\n\x0e\x66unding_weight\x18\x03 \x01(\r\x12.\n\x19\x63hannel_fee_max_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x30\n(channel_fee_max_proportional_thousandths\x18\x05 \x01(\r\x12\x15\n\rcompact_lease\x18\x06 \x01(\x0c\"g\n\x15WaitanyinvoiceRequest\x12\x1a\n\rlastpay_index\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x02 \x01(\x04H\x01\x88\x01\x01\x42\x10\n\x0e_lastpay_indexB\n\n\x08_timeout\"\xbc\x05\n\x16WaitanyinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12@\n\x06status\x18\x04 \x01(\x0e\x32\x30.cln.WaitanyinvoiceResponse.WaitanyinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tpay_index\x18\t \x01(\x04H\x04\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x15\n\rcreated_index\x18\r \x01(\x04\x12\x1a\n\rupdated_index\x18\x0e \x01(\x04H\x08\x88\x01\x01\x12;\n\rpaid_outpoint\x18\x0f \x01(\x0b\x32\x1f.cln.WaitanyinvoicePaidOutpointH\t\x88\x01\x01\"-\n\x14WaitanyinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\":\n\x1aWaitanyinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"#\n\x12WaitinvoiceRequest\x12\r\n\x05label\x18\x01 \x01(\t\"\xad\x05\n\x13WaitinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.WaitinvoiceResponse.WaitinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tpay_index\x18\t \x01(\x04H\x04\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x15\n\rcreated_index\x18\r \x01(\x04\x12\x1a\n\rupdated_index\x18\x0e \x01(\x04H\x08\x88\x01\x01\x12\x38\n\rpaid_outpoint\x18\x0f \x01(\x0b\x32\x1c.cln.WaitinvoicePaidOutpointH\t\x88\x01\x01\"*\n\x11WaitinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\"7\n\x17WaitinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\x8e\x01\n\x12WaitsendpayRequest\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x13\n\x06partid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x14\n\x07groupid\x18\x04 \x01(\x04H\x02\x88\x01\x01\x42\t\n\x07_partidB\n\n\x08_timeoutB\n\n\x08_groupid\"\xf7\x04\n\x13WaitsendpayResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x07groupid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.WaitsendpayResponse.WaitsendpayStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06partid\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0e \x01(\x01H\x08\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0f \x01(\x04\x12\x1a\n\rupdated_index\x18\x10 \x01(\x04H\t\x88\x01\x01\"!\n\x11WaitsendpayStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x42\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\x0f\n\r_completed_atB\x10\n\x0e_updated_index\"\x97\x01\n\x0eNewaddrRequest\x12@\n\x0b\x61\x64\x64resstype\x18\x01 \x01(\x0e\x32&.cln.NewaddrRequest.NewaddrAddresstypeH\x00\x88\x01\x01\"3\n\x12NewaddrAddresstype\x12\n\n\x06\x42\x45\x43H32\x10\x00\x12\x07\n\x03\x41LL\x10\x02\x12\x08\n\x04P2TR\x10\x03\x42\x0e\n\x0c_addresstype\"M\n\x0fNewaddrResponse\x12\x13\n\x06\x62\x65\x63h32\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04p2tr\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\t\n\x07_bech32B\x07\n\x05_p2tr\"\xbc\x01\n\x0fWithdrawRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\t\x12$\n\x07satoshi\x18\x02 \x01(\x0b\x32\x13.cln.AmountSatOrAll\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\"\n\x07\x66\x65\x65rate\x18\x05 \x01(\x0b\x32\x0c.cln.FeerateH\x01\x88\x01\x01\x42\n\n\x08_minconfB\n\n\x08_feerate\":\n\x10WithdrawResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x0c\n\x04psbt\x18\x03 \x01(\t\"\xd7\x03\n\x0eKeysendRequest\x12\x17\n\x0b\x64\x65stination\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\x05label\x18\x03 \x01(\tB\x02\x18\x01H\x00\x88\x01\x01\x12\x1e\n\rmaxfeepercent\x18\x04 \x01(\x01\x42\x02\x18\x01H\x01\x88\x01\x01\x12\x1a\n\tretry_for\x18\x05 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x19\n\x08maxdelay\x18\x06 \x01(\rB\x02\x18\x01H\x03\x88\x01\x01\x12\'\n\texemptfee\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x04\x88\x01\x01\x12/\n\nroutehints\x18\x08 \x01(\x0b\x32\x12.cln.RoutehintListB\x02\x18\x01H\x05\x88\x01\x01\x12*\n\textratlvs\x18\t \x01(\x0b\x32\x0e.cln.TlvStreamB\x02\x18\x01H\x06\x88\x01\x01\x12$\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12$\n\x06maxfee\x18\x0b \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x07\x88\x01\x01\x42\x08\n\x06_labelB\x10\n\x0e_maxfeepercentB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\x0c\n\n_exemptfeeB\r\n\x0b_routehintsB\x0c\n\n_extratlvsB\t\n\x07_maxfee\"\x9a\x03\n\x0fKeysendResponse\x12\x1c\n\x10payment_preimage\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x1c\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x42\x02\x18\x01H\x00\x88\x01\x01\x12\x18\n\x0cpayment_hash\x18\x03 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\ncreated_at\x18\x04 \x01(\x01\x42\x02\x18\x01\x12\x11\n\x05parts\x18\x05 \x01(\rB\x02\x18\x01\x12$\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12)\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12+\n\x1awarning_partial_completion\x18\x08 \x01(\tB\x02\x18\x01H\x01\x88\x01\x01\x12\x36\n\x06status\x18\t \x01(\x0e\x32\".cln.KeysendResponse.KeysendStatusB\x02\x18\x01\"!\n\rKeysendStatus\x12\x10\n\x08\x43OMPLETE\x10\x00\x1a\x02\x08\x01\x42\x0e\n\x0c_destinationB\x1d\n\x1b_warning_partial_completion\"\xa7\x03\n\x0f\x46undpsbtRequest\x12$\n\x07satoshi\x18\x01 \x01(\x0b\x32\x13.cln.AmountSatOrAll\x12\x1d\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.Feerate\x12\x13\n\x0bstartweight\x18\x03 \x01(\r\x12\x14\n\x07minconf\x18\x04 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x07reserve\x18\x05 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08locktime\x18\x06 \x01(\rH\x02\x88\x01\x01\x12\x1f\n\x12min_witness_weight\x18\x07 \x01(\rH\x03\x88\x01\x01\x12\x1d\n\x10\x65xcess_as_change\x18\x08 \x01(\x08H\x04\x88\x01\x01\x12\x17\n\nnonwrapped\x18\t \x01(\x08H\x05\x88\x01\x01\x12#\n\x16opening_anchor_channel\x18\n \x01(\x08H\x06\x88\x01\x01\x42\n\n\x08_minconfB\n\n\x08_reserveB\x0b\n\t_locktimeB\x15\n\x13_min_witness_weightB\x13\n\x11_excess_as_changeB\r\n\x0b_nonwrappedB\x19\n\x17_opening_anchor_channel\"\xd9\x01\n\x10\x46undpsbtResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x16\n\x0e\x66\x65\x65rate_per_kw\x18\x02 \x01(\r\x12\x1e\n\x16\x65stimated_final_weight\x18\x03 \x01(\r\x12 \n\x0b\x65xcess_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1a\n\rchange_outnum\x18\x05 \x01(\rH\x00\x88\x01\x01\x12/\n\x0creservations\x18\x06 \x03(\x0b\x32\x19.cln.FundpsbtReservationsB\x10\n\x0e_change_outnum\"u\n\x14\x46undpsbtReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x19\n\x11reserved_to_block\x18\x05 \x01(\r\"A\n\x0fSendpsbtRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x14\n\x07reserve\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_reserve\",\n\x10SendpsbtResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"1\n\x0fSignpsbtRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x10\n\x08signonly\x18\x02 \x03(\r\"\'\n\x10SignpsbtResponse\x12\x13\n\x0bsigned_psbt\x18\x01 \x01(\t\"\xa3\x03\n\x0fUtxopsbtRequest\x12$\n\x07satoshi\x18\x01 \x01(\x0b\x32\x13.cln.AmountSatOrAll\x12\x1d\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.Feerate\x12\x13\n\x0bstartweight\x18\x03 \x01(\r\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\x14\n\x07reserve\x18\x05 \x01(\rH\x00\x88\x01\x01\x12\x15\n\x08locktime\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x1f\n\x12min_witness_weight\x18\x07 \x01(\rH\x02\x88\x01\x01\x12\x17\n\nreservedok\x18\x08 \x01(\x08H\x03\x88\x01\x01\x12\x1d\n\x10\x65xcess_as_change\x18\t \x01(\x08H\x04\x88\x01\x01\x12#\n\x16opening_anchor_channel\x18\n \x01(\x08H\x05\x88\x01\x01\x42\n\n\x08_reserveB\x0b\n\t_locktimeB\x15\n\x13_min_witness_weightB\r\n\x0b_reservedokB\x13\n\x11_excess_as_changeB\x19\n\x17_opening_anchor_channel\"\xd9\x01\n\x10UtxopsbtResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x16\n\x0e\x66\x65\x65rate_per_kw\x18\x02 \x01(\r\x12\x1e\n\x16\x65stimated_final_weight\x18\x03 \x01(\r\x12 \n\x0b\x65xcess_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1a\n\rchange_outnum\x18\x05 \x01(\rH\x00\x88\x01\x01\x12/\n\x0creservations\x18\x06 \x03(\x0b\x32\x19.cln.UtxopsbtReservationsB\x10\n\x0e_change_outnum\"u\n\x14UtxopsbtReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x19\n\x11reserved_to_block\x18\x05 \x01(\r\" \n\x10TxdiscardRequest\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\"6\n\x11TxdiscardResponse\x12\x13\n\x0bunsigned_tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"\xa4\x01\n\x10TxprepareRequest\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12 \n\x07outputs\x18\x05 \x03(\x0b\x32\x0f.cln.OutputDescB\n\n\x08_feerateB\n\n\x08_minconf\"D\n\x11TxprepareResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x13\n\x0bunsigned_tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"\x1d\n\rTxsendRequest\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\"8\n\x0eTxsendResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\n\n\x02tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"\x8d\x01\n\x17ListpeerchannelsRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nchannel_id\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x42\x05\n\x03_idB\x13\n\x11_short_channel_idB\r\n\x0b_channel_id\"K\n\x18ListpeerchannelsResponse\x12/\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x1d.cln.ListpeerchannelsChannels\"\xd1\x1a\n\x18ListpeerchannelsChannels\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x16\n\x0epeer_connected\x18\x02 \x01(\x08\x12 \n\x05state\x18\x03 \x01(\x0e\x32\x11.cln.ChannelState\x12\x19\n\x0cscratch_txid\x18\x04 \x01(\x0cH\x00\x88\x01\x01\x12\x43\n\x0c\x63hannel_type\x18\x05 \x01(\x0b\x32(.cln.ListpeerchannelsChannelsChannelTypeH\x01\x88\x01\x01\x12:\n\x07\x66\x65\x65rate\x18\x06 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsFeerateH\x02\x88\x01\x01\x12\x12\n\x05owner\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x08 \x01(\tH\x04\x88\x01\x01\x12\x17\n\nchannel_id\x18\t \x01(\x0cH\x05\x88\x01\x01\x12\x19\n\x0c\x66unding_txid\x18\n \x01(\x0cH\x06\x88\x01\x01\x12\x1b\n\x0e\x66unding_outnum\x18\x0b \x01(\rH\x07\x88\x01\x01\x12\x1c\n\x0finitial_feerate\x18\x0c \x01(\tH\x08\x88\x01\x01\x12\x19\n\x0clast_feerate\x18\r \x01(\tH\t\x88\x01\x01\x12\x19\n\x0cnext_feerate\x18\x0e \x01(\tH\n\x88\x01\x01\x12\x1a\n\rnext_fee_step\x18\x0f \x01(\rH\x0b\x88\x01\x01\x12\x37\n\x08inflight\x18\x10 \x03(\x0b\x32%.cln.ListpeerchannelsChannelsInflight\x12\x15\n\x08\x63lose_to\x18\x11 \x01(\x0cH\x0c\x88\x01\x01\x12\x14\n\x07private\x18\x12 \x01(\x08H\r\x88\x01\x01\x12 \n\x06opener\x18\x13 \x01(\x0e\x32\x10.cln.ChannelSide\x12%\n\x06\x63loser\x18\x14 \x01(\x0e\x32\x10.cln.ChannelSideH\x0e\x88\x01\x01\x12:\n\x07\x66unding\x18\x16 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsFundingH\x0f\x88\x01\x01\x12$\n\nto_us_msat\x18\x17 \x01(\x0b\x32\x0b.cln.AmountH\x10\x88\x01\x01\x12(\n\x0emin_to_us_msat\x18\x18 \x01(\x0b\x32\x0b.cln.AmountH\x11\x88\x01\x01\x12(\n\x0emax_to_us_msat\x18\x19 \x01(\x0b\x32\x0b.cln.AmountH\x12\x88\x01\x01\x12$\n\ntotal_msat\x18\x1a \x01(\x0b\x32\x0b.cln.AmountH\x13\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x1b \x01(\x0b\x32\x0b.cln.AmountH\x14\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x1c \x01(\rH\x15\x88\x01\x01\x12)\n\x0f\x64ust_limit_msat\x18\x1d \x01(\x0b\x32\x0b.cln.AmountH\x16\x88\x01\x01\x12,\n\x12their_reserve_msat\x18\x1f \x01(\x0b\x32\x0b.cln.AmountH\x17\x88\x01\x01\x12*\n\x10our_reserve_msat\x18 \x01(\x0b\x32\x0b.cln.AmountH\x18\x88\x01\x01\x12(\n\x0espendable_msat\x18! \x01(\x0b\x32\x0b.cln.AmountH\x19\x88\x01\x01\x12)\n\x0freceivable_msat\x18\" \x01(\x0b\x32\x0b.cln.AmountH\x1a\x88\x01\x01\x12.\n\x14minimum_htlc_in_msat\x18# \x01(\x0b\x32\x0b.cln.AmountH\x1b\x88\x01\x01\x12/\n\x15minimum_htlc_out_msat\x18$ \x01(\x0b\x32\x0b.cln.AmountH\x1c\x88\x01\x01\x12/\n\x15maximum_htlc_out_msat\x18% \x01(\x0b\x32\x0b.cln.AmountH\x1d\x88\x01\x01\x12 \n\x13their_to_self_delay\x18& \x01(\rH\x1e\x88\x01\x01\x12\x1e\n\x11our_to_self_delay\x18\' \x01(\rH\x1f\x88\x01\x01\x12\x1f\n\x12max_accepted_htlcs\x18( \x01(\rH \x88\x01\x01\x12\x36\n\x05\x61lias\x18) \x01(\x0b\x32\".cln.ListpeerchannelsChannelsAliasH!\x88\x01\x01\x12@\n\rstate_changes\x18* \x03(\x0b\x32).cln.ListpeerchannelsChannelsStateChanges\x12\x0e\n\x06status\x18+ \x03(\t\x12 \n\x13in_payments_offered\x18, \x01(\x04H\"\x88\x01\x01\x12)\n\x0fin_offered_msat\x18- \x01(\x0b\x32\x0b.cln.AmountH#\x88\x01\x01\x12\"\n\x15in_payments_fulfilled\x18. \x01(\x04H$\x88\x01\x01\x12+\n\x11in_fulfilled_msat\x18/ \x01(\x0b\x32\x0b.cln.AmountH%\x88\x01\x01\x12!\n\x14out_payments_offered\x18\x30 \x01(\x04H&\x88\x01\x01\x12*\n\x10out_offered_msat\x18\x31 \x01(\x0b\x32\x0b.cln.AmountH\'\x88\x01\x01\x12#\n\x16out_payments_fulfilled\x18\x32 \x01(\x04H(\x88\x01\x01\x12,\n\x12out_fulfilled_msat\x18\x33 \x01(\x0b\x32\x0b.cln.AmountH)\x88\x01\x01\x12\x31\n\x05htlcs\x18\x34 \x03(\x0b\x32\".cln.ListpeerchannelsChannelsHtlcs\x12\x1a\n\rclose_to_addr\x18\x35 \x01(\tH*\x88\x01\x01\x12\x1e\n\x11ignore_fee_limits\x18\x36 \x01(\x08H+\x88\x01\x01\x12:\n\x07updates\x18\x37 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsUpdatesH,\x88\x01\x01\x12#\n\x16last_stable_connection\x18\x38 \x01(\x04H-\x88\x01\x01\x12\x17\n\nlost_state\x18\x39 \x01(\x08H.\x88\x01\x01\x12\x1a\n\rreestablished\x18: \x01(\x08H/\x88\x01\x01\x12*\n\x10last_tx_fee_msat\x18; \x01(\x0b\x32\x0b.cln.AmountH0\x88\x01\x01\x12\x16\n\tdirection\x18< \x01(\rH1\x88\x01\x01\x12=\n#their_max_htlc_value_in_flight_msat\x18= \x01(\x0b\x32\x0b.cln.AmountH2\x88\x01\x01\x12;\n!our_max_htlc_value_in_flight_msat\x18> \x01(\x0b\x32\x0b.cln.AmountH3\x88\x01\x01\x12\x10\n\x08\x66\x65\x61tures\x18? \x03(\tB\x0f\n\r_scratch_txidB\x0f\n\r_channel_typeB\n\n\x08_feerateB\x08\n\x06_ownerB\x13\n\x11_short_channel_idB\r\n\x0b_channel_idB\x0f\n\r_funding_txidB\x11\n\x0f_funding_outnumB\x12\n\x10_initial_feerateB\x0f\n\r_last_feerateB\x0f\n\r_next_feerateB\x10\n\x0e_next_fee_stepB\x0b\n\t_close_toB\n\n\x08_privateB\t\n\x07_closerB\n\n\x08_fundingB\r\n\x0b_to_us_msatB\x11\n\x0f_min_to_us_msatB\x11\n\x0f_max_to_us_msatB\r\n\x0b_total_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x12\n\x10_dust_limit_msatB\x15\n\x13_their_reserve_msatB\x13\n\x11_our_reserve_msatB\x11\n\x0f_spendable_msatB\x12\n\x10_receivable_msatB\x17\n\x15_minimum_htlc_in_msatB\x18\n\x16_minimum_htlc_out_msatB\x18\n\x16_maximum_htlc_out_msatB\x16\n\x14_their_to_self_delayB\x14\n\x12_our_to_self_delayB\x15\n\x13_max_accepted_htlcsB\x08\n\x06_aliasB\x16\n\x14_in_payments_offeredB\x12\n\x10_in_offered_msatB\x18\n\x16_in_payments_fulfilledB\x14\n\x12_in_fulfilled_msatB\x17\n\x15_out_payments_offeredB\x13\n\x11_out_offered_msatB\x19\n\x17_out_payments_fulfilledB\x15\n\x13_out_fulfilled_msatB\x10\n\x0e_close_to_addrB\x14\n\x12_ignore_fee_limitsB\n\n\x08_updatesB\x19\n\x17_last_stable_connectionB\r\n\x0b_lost_stateB\x10\n\x0e_reestablishedB\x13\n\x11_last_tx_fee_msatB\x0c\n\n_directionB&\n$_their_max_htlc_value_in_flight_msatB$\n\"_our_max_htlc_value_in_flight_msat\"]\n\x1dListpeerchannelsChannelsAlias\x12\x12\n\x05local\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06remote\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_localB\t\n\x07_remote\"X\n#ListpeerchannelsChannelsChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"?\n\x1fListpeerchannelsChannelsFeerate\x12\r\n\x05perkw\x18\x01 \x01(\r\x12\r\n\x05perkb\x18\x02 \x01(\r\"\xdd\x02\n\x1fListpeerchannelsChannelsFunding\x12%\n\x0bpushed_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12%\n\x10local_funds_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11remote_funds_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\'\n\rfee_paid_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\'\n\rfee_rcvd_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x11\n\x04psbt\x18\x06 \x01(\tH\x03\x88\x01\x01\x12\x15\n\x08withheld\x18\x07 \x01(\x08H\x04\x88\x01\x01\x42\x0e\n\x0c_pushed_msatB\x10\n\x0e_fee_paid_msatB\x10\n\x0e_fee_rcvd_msatB\x07\n\x05_psbtB\x0b\n\t_withheld\"\xf9\x02\n\x1dListpeerchannelsChannelsHtlcs\x12\\\n\tdirection\x18\x01 \x01(\x0e\x32I.cln.ListpeerchannelsChannelsHtlcs.ListpeerchannelsChannelsHtlcsDirection\x12\n\n\x02id\x18\x02 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06\x65xpiry\x18\x04 \x01(\r\x12\x14\n\x0cpayment_hash\x18\x05 \x01(\x0c\x12\x1a\n\rlocal_trimmed\x18\x06 \x01(\x08H\x00\x88\x01\x01\x12\x13\n\x06status\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x1d\n\x05state\x18\x08 \x01(\x0e\x32\x0e.cln.HtlcState\"9\n&ListpeerchannelsChannelsHtlcsDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\x42\x10\n\x0e_local_trimmedB\t\n\x07_status\"\xf4\x01\n ListpeerchannelsChannelsInflight\x12\x14\n\x0c\x66unding_txid\x18\x01 \x01(\x0c\x12\x16\n\x0e\x66unding_outnum\x18\x02 \x01(\r\x12\x0f\n\x07\x66\x65\x65rate\x18\x03 \x01(\t\x12\'\n\x12total_funding_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10our_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x0cscratch_txid\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12\x15\n\rsplice_amount\x18\x07 \x01(\x12\x42\x0f\n\r_scratch_txid\"\xf0\x02\n$ListpeerchannelsChannelsStateChanges\x12\x11\n\ttimestamp\x18\x01 \x01(\t\x12$\n\told_state\x18\x02 \x01(\x0e\x32\x11.cln.ChannelState\x12$\n\tnew_state\x18\x03 \x01(\x0e\x32\x11.cln.ChannelState\x12\x62\n\x05\x63\x61use\x18\x04 \x01(\x0e\x32S.cln.ListpeerchannelsChannelsStateChanges.ListpeerchannelsChannelsStateChangesCause\x12\x0f\n\x07message\x18\x05 \x01(\t\"t\n)ListpeerchannelsChannelsStateChangesCause\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05LOCAL\x10\x01\x12\x08\n\x04USER\x10\x02\x12\n\n\x06REMOTE\x10\x03\x12\x0c\n\x08PROTOCOL\x10\x04\x12\x0b\n\x07ONCHAIN\x10\x05\"\xa7\x01\n\x1fListpeerchannelsChannelsUpdates\x12\x38\n\x05local\x18\x01 \x01(\x0b\x32).cln.ListpeerchannelsChannelsUpdatesLocal\x12?\n\x06remote\x18\x02 \x01(\x0b\x32*.cln.ListpeerchannelsChannelsUpdatesRemoteH\x00\x88\x01\x01\x42\t\n\x07_remote\"\xda\x01\n$ListpeerchannelsChannelsUpdatesLocal\x12&\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x11\x63ltv_expiry_delta\x18\x03 \x01(\r\x12\"\n\rfee_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x05 \x01(\r\"\xdb\x01\n%ListpeerchannelsChannelsUpdatesRemote\x12&\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x11\x63ltv_expiry_delta\x18\x03 \x01(\r\x12\"\n\rfee_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x05 \x01(\r\"3\n\x19ListclosedchannelsRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x42\x05\n\x03_id\"[\n\x1aListclosedchannelsResponse\x12=\n\x0e\x63losedchannels\x18\x01 \x03(\x0b\x32%.cln.ListclosedchannelsClosedchannels\"\xae\x0b\n ListclosedchannelsClosedchannels\x12\x14\n\x07peer_id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x12\n\nchannel_id\x18\x02 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x01\x88\x01\x01\x12>\n\x05\x61lias\x18\x04 \x01(\x0b\x32*.cln.ListclosedchannelsClosedchannelsAliasH\x02\x88\x01\x01\x12 \n\x06opener\x18\x05 \x01(\x0e\x32\x10.cln.ChannelSide\x12%\n\x06\x63loser\x18\x06 \x01(\x0e\x32\x10.cln.ChannelSideH\x03\x88\x01\x01\x12\x0f\n\x07private\x18\x07 \x01(\x08\x12K\n\x0c\x63hannel_type\x18\x08 \x01(\x0b\x32\x30.cln.ListclosedchannelsClosedchannelsChannelTypeH\x04\x88\x01\x01\x12\x1f\n\x17total_local_commitments\x18\t \x01(\x04\x12 \n\x18total_remote_commitments\x18\n \x01(\x04\x12\x18\n\x10total_htlcs_sent\x18\x0b \x01(\x04\x12\x14\n\x0c\x66unding_txid\x18\x0c \x01(\x0c\x12\x16\n\x0e\x66unding_outnum\x18\r \x01(\r\x12\x0e\n\x06leased\x18\x0e \x01(\x08\x12/\n\x15\x66unding_fee_paid_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12/\n\x15\x66unding_fee_rcvd_msat\x18\x10 \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12-\n\x13\x66unding_pushed_msat\x18\x11 \x01(\x0b\x32\x0b.cln.AmountH\x07\x88\x01\x01\x12\x1f\n\ntotal_msat\x18\x12 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x66inal_to_us_msat\x18\x13 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0emin_to_us_msat\x18\x14 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0emax_to_us_msat\x18\x15 \x01(\x0b\x32\x0b.cln.Amount\x12!\n\x14last_commitment_txid\x18\x16 \x01(\x0cH\x08\x88\x01\x01\x12\x32\n\x18last_commitment_fee_msat\x18\x17 \x01(\x0b\x32\x0b.cln.AmountH\t\x88\x01\x01\x12\x65\n\x0b\x63lose_cause\x18\x18 \x01(\x0e\x32P.cln.ListclosedchannelsClosedchannels.ListclosedchannelsClosedchannelsCloseCause\x12#\n\x16last_stable_connection\x18\x19 \x01(\x04H\n\x88\x01\x01\x12\x19\n\x0c\x66unding_psbt\x18\x1a \x01(\tH\x0b\x88\x01\x01\x12\x1d\n\x10\x66unding_withheld\x18\x1b \x01(\x08H\x0c\x88\x01\x01\"u\n*ListclosedchannelsClosedchannelsCloseCause\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05LOCAL\x10\x01\x12\x08\n\x04USER\x10\x02\x12\n\n\x06REMOTE\x10\x03\x12\x0c\n\x08PROTOCOL\x10\x04\x12\x0b\n\x07ONCHAIN\x10\x05\x42\n\n\x08_peer_idB\x13\n\x11_short_channel_idB\x08\n\x06_aliasB\t\n\x07_closerB\x0f\n\r_channel_typeB\x18\n\x16_funding_fee_paid_msatB\x18\n\x16_funding_fee_rcvd_msatB\x16\n\x14_funding_pushed_msatB\x17\n\x15_last_commitment_txidB\x1b\n\x19_last_commitment_fee_msatB\x19\n\x17_last_stable_connectionB\x0f\n\r_funding_psbtB\x13\n\x11_funding_withheld\"e\n%ListclosedchannelsClosedchannelsAlias\x12\x12\n\x05local\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06remote\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_localB\t\n\x07_remote\"`\n+ListclosedchannelsClosedchannelsChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x1f\n\rDecodeRequest\x12\x0e\n\x06string\x18\x01 \x01(\t\"\xbd.\n\x0e\x44\x65\x63odeResponse\x12\x31\n\titem_type\x18\x01 \x01(\x0e\x32\x1e.cln.DecodeResponse.DecodeType\x12\r\n\x05valid\x18\x02 \x01(\x08\x12\x15\n\x08offer_id\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x14\n\x0coffer_chains\x18\x04 \x03(\x0c\x12\x1b\n\x0eoffer_metadata\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12\x1b\n\x0eoffer_currency\x18\x06 \x01(\tH\x02\x88\x01\x01\x12+\n\x1ewarning_unknown_offer_currency\x18\x07 \x01(\tH\x03\x88\x01\x01\x12 \n\x13\x63urrency_minor_unit\x18\x08 \x01(\rH\x04\x88\x01\x01\x12\x19\n\x0coffer_amount\x18\t \x01(\x04H\x05\x88\x01\x01\x12+\n\x11offer_amount_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x1e\n\x11offer_description\x18\x0b \x01(\tH\x07\x88\x01\x01\x12\x19\n\x0coffer_issuer\x18\x0c \x01(\tH\x08\x88\x01\x01\x12\x1b\n\x0eoffer_features\x18\r \x01(\x0cH\t\x88\x01\x01\x12\"\n\x15offer_absolute_expiry\x18\x0e \x01(\x04H\n\x88\x01\x01\x12\x1f\n\x12offer_quantity_max\x18\x0f \x01(\x04H\x0b\x88\x01\x01\x12*\n\x0boffer_paths\x18\x10 \x03(\x0b\x32\x15.cln.DecodeOfferPaths\x12\x39\n\x10offer_recurrence\x18\x12 \x01(\x0b\x32\x1a.cln.DecodeOfferRecurrenceH\x0c\x88\x01\x01\x12\x37\n\x12unknown_offer_tlvs\x18\x13 \x03(\x0b\x32\x1b.cln.DecodeUnknownOfferTlvs\x12.\n!warning_invalid_offer_description\x18\x15 \x01(\tH\r\x88\x01\x01\x12.\n!warning_missing_offer_description\x18\x16 \x01(\tH\x0e\x88\x01\x01\x12+\n\x1ewarning_invalid_offer_currency\x18\x17 \x01(\tH\x0f\x88\x01\x01\x12)\n\x1cwarning_invalid_offer_issuer\x18\x18 \x01(\tH\x10\x88\x01\x01\x12\x1c\n\x0finvreq_metadata\x18\x19 \x01(\x0cH\x11\x88\x01\x01\x12\x1c\n\x0finvreq_payer_id\x18\x1a \x01(\x0cH\x12\x88\x01\x01\x12\x19\n\x0cinvreq_chain\x18\x1b \x01(\x0cH\x13\x88\x01\x01\x12,\n\x12invreq_amount_msat\x18\x1c \x01(\x0b\x32\x0b.cln.AmountH\x14\x88\x01\x01\x12\x1c\n\x0finvreq_features\x18\x1d \x01(\x0cH\x15\x88\x01\x01\x12\x1c\n\x0finvreq_quantity\x18\x1e \x01(\x04H\x16\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x1f \x01(\tH\x17\x88\x01\x01\x12&\n\x19invreq_recurrence_counter\x18 \x01(\rH\x18\x88\x01\x01\x12$\n\x17invreq_recurrence_start\x18! \x01(\rH\x19\x88\x01\x01\x12J\n\x1cunknown_invoice_request_tlvs\x18\" \x03(\x0b\x32$.cln.DecodeUnknownInvoiceRequestTlvs\x12,\n\x1fwarning_missing_invreq_metadata\x18# \x01(\tH\x1a\x88\x01\x01\x12,\n\x1fwarning_missing_invreq_payer_id\x18$ \x01(\tH\x1b\x88\x01\x01\x12.\n!warning_invalid_invreq_payer_note\x18% \x01(\tH\x1c\x88\x01\x01\x12\x36\n)warning_missing_invoice_request_signature\x18& \x01(\tH\x1d\x88\x01\x01\x12\x36\n)warning_invalid_invoice_request_signature\x18\' \x01(\tH\x1e\x88\x01\x01\x12.\n\rinvoice_paths\x18( \x03(\x0b\x32\x17.cln.DecodeInvoicePaths\x12\x1f\n\x12invoice_created_at\x18) \x01(\x04H\x1f\x88\x01\x01\x12$\n\x17invoice_relative_expiry\x18* \x01(\rH \x88\x01\x01\x12!\n\x14invoice_payment_hash\x18+ \x01(\x0cH!\x88\x01\x01\x12-\n\x13invoice_amount_msat\x18, \x01(\x0b\x32\x0b.cln.AmountH\"\x88\x01\x01\x12\x36\n\x11invoice_fallbacks\x18- \x03(\x0b\x32\x1b.cln.DecodeInvoiceFallbacks\x12\x1d\n\x10invoice_features\x18. \x01(\x0cH#\x88\x01\x01\x12\x1c\n\x0finvoice_node_id\x18/ \x01(\x0cH$\x88\x01\x01\x12(\n\x1binvoice_recurrence_basetime\x18\x30 \x01(\x04H%\x88\x01\x01\x12;\n\x14unknown_invoice_tlvs\x18\x31 \x03(\x0b\x32\x1d.cln.DecodeUnknownInvoiceTlvs\x12*\n\x1dwarning_missing_invoice_paths\x18\x32 \x01(\tH&\x88\x01\x01\x12/\n\"warning_missing_invoice_blindedpay\x18\x33 \x01(\tH\'\x88\x01\x01\x12/\n\"warning_missing_invoice_created_at\x18\x34 \x01(\tH(\x88\x01\x01\x12\x31\n$warning_missing_invoice_payment_hash\x18\x35 \x01(\tH)\x88\x01\x01\x12+\n\x1ewarning_missing_invoice_amount\x18\x36 \x01(\tH*\x88\x01\x01\x12\x38\n+warning_missing_invoice_recurrence_basetime\x18\x37 \x01(\tH+\x88\x01\x01\x12,\n\x1fwarning_missing_invoice_node_id\x18\x38 \x01(\tH,\x88\x01\x01\x12.\n!warning_missing_invoice_signature\x18\x39 \x01(\tH-\x88\x01\x01\x12.\n!warning_invalid_invoice_signature\x18: \x01(\tH.\x88\x01\x01\x12\'\n\tfallbacks\x18; \x03(\x0b\x32\x14.cln.DecodeFallbacks\x12\x17\n\ncreated_at\x18< \x01(\x04H/\x88\x01\x01\x12\x13\n\x06\x65xpiry\x18= \x01(\x04H0\x88\x01\x01\x12\x12\n\x05payee\x18> \x01(\x0cH1\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18? \x01(\x0cH2\x88\x01\x01\x12\x1d\n\x10\x64\x65scription_hash\x18@ \x01(\x0cH3\x88\x01\x01\x12\"\n\x15min_final_cltv_expiry\x18\x41 \x01(\rH4\x88\x01\x01\x12\x1b\n\x0epayment_secret\x18\x42 \x01(\x0cH5\x88\x01\x01\x12\x1d\n\x10payment_metadata\x18\x43 \x01(\x0cH6\x88\x01\x01\x12\x1f\n\x05\x65xtra\x18\x45 \x03(\x0b\x32\x10.cln.DecodeExtra\x12\x16\n\tunique_id\x18\x46 \x01(\tH7\x88\x01\x01\x12\x14\n\x07version\x18G \x01(\tH8\x88\x01\x01\x12\x13\n\x06string\x18H \x01(\tH9\x88\x01\x01\x12-\n\x0crestrictions\x18I \x03(\x0b\x32\x17.cln.DecodeRestrictions\x12&\n\x19warning_rune_invalid_utf8\x18J \x01(\tH:\x88\x01\x01\x12\x10\n\x03hex\x18K \x01(\x0cH;\x88\x01\x01\x12\x16\n\tdecrypted\x18L \x01(\x0cH<\x88\x01\x01\x12\x16\n\tsignature\x18M \x01(\tH=\x88\x01\x01\x12\x15\n\x08\x63urrency\x18N \x01(\tH>\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18O \x01(\x0b\x32\x0b.cln.AmountH?\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18P \x01(\tH@\x88\x01\x01\x12\x15\n\x08\x66\x65\x61tures\x18Q \x01(\x0cHA\x88\x01\x01\x12-\n\x06routes\x18R \x01(\x0b\x32\x18.cln.DecodeRoutehintListHB\x88\x01\x01\x12\x1c\n\x0foffer_issuer_id\x18S \x01(\x0cHC\x88\x01\x01\x12,\n\x1fwarning_missing_offer_issuer_id\x18T \x01(\tHD\x88\x01\x01\x12,\n\x0cinvreq_paths\x18U \x03(\x0b\x32\x16.cln.DecodeInvreqPaths\x12\'\n\x1awarning_empty_blinded_path\x18V \x01(\tHE\x88\x01\x01\x12=\n\x13invreq_bip_353_name\x18W \x01(\x0b\x32\x1b.cln.DecodeInvreqBip353NameHF\x88\x01\x01\x12\x35\n(warning_invreq_bip_353_name_name_invalid\x18X \x01(\tHG\x88\x01\x01\x12\x37\n*warning_invreq_bip_353_name_domain_invalid\x18Y \x01(\tHH\x88\x01\x01\x12%\n\x18invreq_recurrence_cancel\x18Z \x01(\x08HI\x88\x01\x01\x12=\n0warning_invreq_recurrence_cancel_without_counter\x18[ \x01(\tHJ\x88\x01\x01\x12?\n2warning_invreq_recurrence_cancel_with_zero_counter\x18\\ \x01(\tHK\x88\x01\x01\x12\x1b\n\x0eproof_preimage\x18] \x01(\x0cHL\x88\x01\x01\x12\x1a\n\x12proof_omitted_tlvs\x18^ \x03(\x04\x12\x1c\n\x14proof_missing_hashes\x18_ \x03(\x0c\x12\x19\n\x11proof_leaf_hashes\x18` \x03(\x0c\x12\x17\n\nproof_note\x18\x61 \x01(\tHM\x88\x01\x01\x12\x1c\n\x0fproof_signature\x18\x62 \x01(\tHN\x88\x01\x01\x12\x42\n\x18unknown_payer_proof_tlvs\x18\x63 \x03(\x0b\x32 .cln.DecodeUnknownPayerProofTlvs\"\x9b\x01\n\nDecodeType\x12\x10\n\x0c\x42OLT12_OFFER\x10\x00\x12\x12\n\x0e\x42OLT12_INVOICE\x10\x01\x12\x1a\n\x16\x42OLT12_INVOICE_REQUEST\x10\x02\x12\x12\n\x0e\x42OLT11_INVOICE\x10\x03\x12\x08\n\x04RUNE\x10\x04\x12\x15\n\x11\x45MERGENCY_RECOVER\x10\x05\x12\x16\n\x12\x42OLT12_PAYER_PROOF\x10\x06\x42\x0b\n\t_offer_idB\x11\n\x0f_offer_metadataB\x11\n\x0f_offer_currencyB!\n\x1f_warning_unknown_offer_currencyB\x16\n\x14_currency_minor_unitB\x0f\n\r_offer_amountB\x14\n\x12_offer_amount_msatB\x14\n\x12_offer_descriptionB\x0f\n\r_offer_issuerB\x11\n\x0f_offer_featuresB\x18\n\x16_offer_absolute_expiryB\x15\n\x13_offer_quantity_maxB\x13\n\x11_offer_recurrenceB$\n\"_warning_invalid_offer_descriptionB$\n\"_warning_missing_offer_descriptionB!\n\x1f_warning_invalid_offer_currencyB\x1f\n\x1d_warning_invalid_offer_issuerB\x12\n\x10_invreq_metadataB\x12\n\x10_invreq_payer_idB\x0f\n\r_invreq_chainB\x15\n\x13_invreq_amount_msatB\x12\n\x10_invreq_featuresB\x12\n\x10_invreq_quantityB\x14\n\x12_invreq_payer_noteB\x1c\n\x1a_invreq_recurrence_counterB\x1a\n\x18_invreq_recurrence_startB\"\n _warning_missing_invreq_metadataB\"\n _warning_missing_invreq_payer_idB$\n\"_warning_invalid_invreq_payer_noteB,\n*_warning_missing_invoice_request_signatureB,\n*_warning_invalid_invoice_request_signatureB\x15\n\x13_invoice_created_atB\x1a\n\x18_invoice_relative_expiryB\x17\n\x15_invoice_payment_hashB\x16\n\x14_invoice_amount_msatB\x13\n\x11_invoice_featuresB\x12\n\x10_invoice_node_idB\x1e\n\x1c_invoice_recurrence_basetimeB \n\x1e_warning_missing_invoice_pathsB%\n#_warning_missing_invoice_blindedpayB%\n#_warning_missing_invoice_created_atB\'\n%_warning_missing_invoice_payment_hashB!\n\x1f_warning_missing_invoice_amountB.\n,_warning_missing_invoice_recurrence_basetimeB\"\n _warning_missing_invoice_node_idB$\n\"_warning_missing_invoice_signatureB$\n\"_warning_invalid_invoice_signatureB\r\n\x0b_created_atB\t\n\x07_expiryB\x08\n\x06_payeeB\x0f\n\r_payment_hashB\x13\n\x11_description_hashB\x18\n\x16_min_final_cltv_expiryB\x11\n\x0f_payment_secretB\x13\n\x11_payment_metadataB\x0c\n\n_unique_idB\n\n\x08_versionB\t\n\x07_stringB\x1c\n\x1a_warning_rune_invalid_utf8B\x06\n\x04_hexB\x0c\n\n_decryptedB\x0c\n\n_signatureB\x0b\n\t_currencyB\x0e\n\x0c_amount_msatB\x0e\n\x0c_descriptionB\x0b\n\t_featuresB\t\n\x07_routesB\x12\n\x10_offer_issuer_idB\"\n _warning_missing_offer_issuer_idB\x1d\n\x1b_warning_empty_blinded_pathB\x16\n\x14_invreq_bip_353_nameB+\n)_warning_invreq_bip_353_name_name_invalidB-\n+_warning_invreq_bip_353_name_domain_invalidB\x1b\n\x19_invreq_recurrence_cancelB3\n1_warning_invreq_recurrence_cancel_without_counterB5\n3_warning_invreq_recurrence_cancel_with_zero_counterB\x11\n\x0f_proof_preimageB\r\n\x0b_proof_noteB\x12\n\x10_proof_signature\"(\n\x0b\x44\x65\x63odeExtra\x12\x0b\n\x03tag\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\t\"\xc4\x01\n\x0f\x44\x65\x63odeFallbacks\x12;\n\titem_type\x18\x02 \x01(\x0e\x32(.cln.DecodeFallbacks.DecodeFallbacksType\x12\x11\n\x04\x61\x64\x64r\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x0b\n\x03hex\x18\x04 \x01(\x0c\"K\n\x13\x44\x65\x63odeFallbacksType\x12\t\n\x05P2PKH\x10\x00\x12\x08\n\x04P2SH\x10\x01\x12\n\n\x06P2WPKH\x10\x02\x12\t\n\x05P2WSH\x10\x03\x12\x08\n\x04P2TR\x10\x04\x42\x07\n\x05_addr\"X\n\x16\x44\x65\x63odeInvoiceFallbacks\x12\x0f\n\x07version\x18\x01 \x01(\r\x12\x0b\n\x03hex\x18\x02 \x01(\x0c\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_address\"\xa6\x02\n\x12\x44\x65\x63odeInvoicePaths\x12)\n\x04path\x18\x01 \x03(\x0b\x32\x1b.cln.DecodeInvoicePathsPath\x12/\n\x07payinfo\x18\x02 \x01(\x0b\x32\x1e.cln.DecodeInvoicePathsPayinfo\x12\x1a\n\rfirst_node_id\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x1b\n\x0e\x66irst_path_key\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x12\x1b\n\x0e\x66irst_scid_dir\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x17\n\nfirst_scid\x18\x06 \x01(\tH\x03\x88\x01\x01\x42\x10\n\x0e_first_node_idB\x11\n\x0f_first_path_keyB\x11\n\x0f_first_scid_dirB\r\n\x0b_first_scid\"S\n\x16\x44\x65\x63odeInvoicePathsPath\x12\x17\n\x0f\x62linded_node_id\x18\x01 \x01(\x0c\x12 \n\x18\x65ncrypted_recipient_data\x18\x02 \x01(\x0c\"\x97\x02\n\x19\x44\x65\x63odeInvoicePathsPayinfo\x12+\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x10\n\x08\x66\x65\x61tures\x18\x02 \x01(\x0c\x12\"\n\rfee_base_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x04 \x01(\r\x12+\n\x11htlc_maximum_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x19\n\x11\x63ltv_expiry_delta\x18\x06 \x01(\rB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msat\"T\n\x16\x44\x65\x63odeInvreqBip353Name\x12\x11\n\x04name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x64omain\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x07\n\x05_nameB\t\n\x07_domain\"\xf3\x01\n\x11\x44\x65\x63odeInvreqPaths\x12\x1b\n\x0e\x66irst_scid_dir\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x1a\n\rfirst_node_id\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x17\n\nfirst_scid\x18\x04 \x01(\tH\x02\x88\x01\x01\x12(\n\x04path\x18\x05 \x03(\x0b\x32\x1a.cln.DecodeInvreqPathsPath\x12\x1b\n\x0e\x66irst_path_key\x18\x06 \x01(\x0cH\x03\x88\x01\x01\x42\x11\n\x0f_first_scid_dirB\x10\n\x0e_first_node_idB\r\n\x0b_first_scidB\x11\n\x0f_first_path_key\"R\n\x15\x44\x65\x63odeInvreqPathsPath\x12\x17\n\x0f\x62linded_node_id\x18\x01 \x01(\x0c\x12 \n\x18\x65ncrypted_recipient_data\x18\x02 \x01(\x0c\"\xf1\x01\n\x10\x44\x65\x63odeOfferPaths\x12\x1a\n\rfirst_node_id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\'\n\x04path\x18\x03 \x03(\x0b\x32\x19.cln.DecodeOfferPathsPath\x12\x1b\n\x0e\x66irst_scid_dir\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x17\n\nfirst_scid\x18\x05 \x01(\tH\x02\x88\x01\x01\x12\x1b\n\x0e\x66irst_path_key\x18\x06 \x01(\x0cH\x03\x88\x01\x01\x42\x10\n\x0e_first_node_idB\x11\n\x0f_first_scid_dirB\r\n\x0b_first_scidB\x11\n\x0f_first_path_key\"Q\n\x14\x44\x65\x63odeOfferPathsPath\x12\x17\n\x0f\x62linded_node_id\x18\x01 \x01(\x0c\x12 \n\x18\x65ncrypted_recipient_data\x18\x02 \x01(\x0c\"\xab\x02\n\x15\x44\x65\x63odeOfferRecurrence\x12\x11\n\ttime_unit\x18\x01 \x01(\r\x12\x1d\n\x10\x63ompulsory_field\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x1b\n\x0etime_unit_name\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0e\n\x06period\x18\x04 \x01(\r\x12\x15\n\x08\x62\x61setime\x18\x05 \x01(\x04H\x02\x88\x01\x01\x12;\n\tpaywindow\x18\x06 \x01(\x0b\x32#.cln.DecodeOfferRecurrencePaywindowH\x03\x88\x01\x01\x12\x12\n\x05limit\x18\x07 \x01(\rH\x04\x88\x01\x01\x42\x13\n\x11_compulsory_fieldB\x11\n\x0f_time_unit_nameB\x0b\n\t_basetimeB\x0c\n\n_paywindowB\x08\n\x06_limit\"\x89\x01\n\x1e\x44\x65\x63odeOfferRecurrencePaywindow\x12\x16\n\x0eseconds_before\x18\x01 \x01(\r\x12\x15\n\rseconds_after\x18\x02 \x01(\r\x12 \n\x13proportional_amount\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\x16\n\x14_proportional_amount\";\n\x12\x44\x65\x63odeRestrictions\x12\x14\n\x0c\x61lternatives\x18\x01 \x03(\t\x12\x0f\n\x07summary\x18\x02 \x01(\t\"S\n\x1f\x44\x65\x63odeUnknownInvoiceRequestTlvs\x12\x11\n\titem_type\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\r\n\x05value\x18\x03 \x01(\x0c\"L\n\x18\x44\x65\x63odeUnknownInvoiceTlvs\x12\x11\n\titem_type\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\r\n\x05value\x18\x03 \x01(\x0c\"J\n\x16\x44\x65\x63odeUnknownOfferTlvs\x12\x11\n\titem_type\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\r\n\x05value\x18\x03 \x01(\x0c\"O\n\x1b\x44\x65\x63odeUnknownPayerProofTlvs\x12\x11\n\titem_type\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\r\n\x05value\x18\x03 \x01(\x0c\"\xc2\x01\n\rDelpayRequest\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12/\n\x06status\x18\x02 \x01(\x0e\x32\x1f.cln.DelpayRequest.DelpayStatus\x12\x13\n\x06partid\x18\x03 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07groupid\x18\x04 \x01(\x04H\x01\x88\x01\x01\"(\n\x0c\x44\x65lpayStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x42\t\n\x07_partidB\n\n\x08_groupid\"7\n\x0e\x44\x65lpayResponse\x12%\n\x08payments\x18\x01 \x03(\x0b\x32\x13.cln.DelpayPayments\"\xb4\x05\n\x0e\x44\x65lpayPayments\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\n\n\x02id\x18\x02 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x38\n\x06status\x18\x04 \x01(\x0e\x32(.cln.DelpayPayments.DelpayPaymentsStatus\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x06partid\x18\x06 \x01(\x04H\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x07 \x01(\x0cH\x01\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x12\n\ncreated_at\x18\t \x01(\x04\x12\x1a\n\rupdated_index\x18\n \x01(\x04H\x03\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0b \x01(\x04H\x04\x88\x01\x01\x12\x14\n\x07groupid\x18\x0c \x01(\x04H\x05\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x06\x88\x01\x01\x12\x12\n\x05label\x18\x0e \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0f \x01(\tH\x08\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x10 \x01(\tH\t\x88\x01\x01\x12\x17\n\nerroronion\x18\x11 \x01(\x0cH\n\x88\x01\x01\"=\n\x14\x44\x65lpayPaymentsStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\t\n\x07_partidB\x0e\n\x0c_destinationB\x0e\n\x0c_amount_msatB\x10\n\x0e_updated_indexB\x0f\n\r_completed_atB\n\n\x08_groupidB\x13\n\x11_payment_preimageB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\r\n\x0b_erroronion\"\xb3\x01\n\x11\x44\x65lforwardRequest\x12\x12\n\nin_channel\x18\x01 \x01(\t\x12\x12\n\nin_htlc_id\x18\x02 \x01(\x04\x12\x37\n\x06status\x18\x03 \x01(\x0e\x32\'.cln.DelforwardRequest.DelforwardStatus\"=\n\x10\x44\x65lforwardStatus\x12\x0b\n\x07SETTLED\x10\x00\x12\x10\n\x0cLOCAL_FAILED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\"\x14\n\x12\x44\x65lforwardResponse\"\'\n\x13\x44isableofferRequest\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\"\xdc\x01\n\x14\x44isableofferResponse\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x66orce_paths\x18\x08 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_descriptionB\x0e\n\x0c_force_paths\"&\n\x12\x45nableofferRequest\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\"\xdb\x01\n\x13\x45nableofferResponse\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x66orce_paths\x18\x08 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_descriptionB\x0e\n\x0c_force_paths\"=\n\x11\x44isconnectRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x12\n\x05\x66orce\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\x08\n\x06_force\"\x14\n\x12\x44isconnectResponse\"k\n\x0f\x46\x65\x65ratesRequest\x12\x31\n\x05style\x18\x01 \x01(\x0e\x32\".cln.FeeratesRequest.FeeratesStyle\"%\n\rFeeratesStyle\x12\t\n\x05PERKB\x10\x00\x12\t\n\x05PERKW\x10\x01\"\x9a\x02\n\x10\x46\x65\x65ratesResponse\x12%\n\x18warning_missing_feerates\x18\x01 \x01(\tH\x00\x88\x01\x01\x12&\n\x05perkb\x18\x02 \x01(\x0b\x32\x12.cln.FeeratesPerkbH\x01\x88\x01\x01\x12&\n\x05perkw\x18\x03 \x01(\x0b\x32\x12.cln.FeeratesPerkwH\x02\x88\x01\x01\x12\x44\n\x15onchain_fee_estimates\x18\x04 \x01(\x0b\x32 .cln.FeeratesOnchainFeeEstimatesH\x03\x88\x01\x01\x42\x1b\n\x19_warning_missing_feeratesB\x08\n\x06_perkbB\x08\n\x06_perkwB\x18\n\x16_onchain_fee_estimates\"\x99\x02\n\x1b\x46\x65\x65ratesOnchainFeeEstimates\x12 \n\x18opening_channel_satoshis\x18\x01 \x01(\x04\x12\x1d\n\x15mutual_close_satoshis\x18\x02 \x01(\x04\x12!\n\x19unilateral_close_satoshis\x18\x03 \x01(\x04\x12\x1d\n\x15htlc_timeout_satoshis\x18\x04 \x01(\x04\x12\x1d\n\x15htlc_success_satoshis\x18\x05 \x01(\x04\x12\x30\n#unilateral_close_nonanchor_satoshis\x18\x06 \x01(\x04H\x00\x88\x01\x01\x42&\n$_unilateral_close_nonanchor_satoshis\"\x84\x03\n\rFeeratesPerkb\x12\x16\n\x0emin_acceptable\x18\x01 \x01(\r\x12\x16\n\x0emax_acceptable\x18\x02 \x01(\r\x12\x14\n\x07opening\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x19\n\x0cmutual_close\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1d\n\x10unilateral_close\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x14\n\x07penalty\x18\x08 \x01(\rH\x03\x88\x01\x01\x12.\n\testimates\x18\t \x03(\x0b\x32\x1b.cln.FeeratesPerkbEstimates\x12\r\n\x05\x66loor\x18\n \x01(\r\x12$\n\x17unilateral_anchor_close\x18\x0b \x01(\rH\x04\x88\x01\x01\x12\x13\n\x06splice\x18\x0c \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_openingB\x0f\n\r_mutual_closeB\x13\n\x11_unilateral_closeB\n\n\x08_penaltyB\x1a\n\x18_unilateral_anchor_closeB\t\n\x07_splice\"W\n\x16\x46\x65\x65ratesPerkbEstimates\x12\x12\n\nblockcount\x18\x01 \x01(\r\x12\x0f\n\x07\x66\x65\x65rate\x18\x02 \x01(\r\x12\x18\n\x10smoothed_feerate\x18\x03 \x01(\r\"\x84\x03\n\rFeeratesPerkw\x12\x16\n\x0emin_acceptable\x18\x01 \x01(\r\x12\x16\n\x0emax_acceptable\x18\x02 \x01(\r\x12\x14\n\x07opening\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x19\n\x0cmutual_close\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1d\n\x10unilateral_close\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x14\n\x07penalty\x18\x08 \x01(\rH\x03\x88\x01\x01\x12.\n\testimates\x18\t \x03(\x0b\x32\x1b.cln.FeeratesPerkwEstimates\x12\r\n\x05\x66loor\x18\n \x01(\r\x12$\n\x17unilateral_anchor_close\x18\x0b \x01(\rH\x04\x88\x01\x01\x12\x13\n\x06splice\x18\x0c \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_openingB\x0f\n\r_mutual_closeB\x13\n\x11_unilateral_closeB\n\n\x08_penaltyB\x1a\n\x18_unilateral_anchor_closeB\t\n\x07_splice\"W\n\x16\x46\x65\x65ratesPerkwEstimates\x12\x12\n\nblockcount\x18\x01 \x01(\r\x12\x0f\n\x07\x66\x65\x65rate\x18\x02 \x01(\r\x12\x18\n\x10smoothed_feerate\x18\x03 \x01(\r\"%\n\x12\x46\x65tchbip353Request\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\"X\n\x13\x46\x65tchbip353Response\x12\r\n\x05proof\x18\x01 \x01(\t\x12\x32\n\x0cinstructions\x18\x02 \x03(\x0b\x32\x1c.cln.Fetchbip353Instructions\"\xf7\x01\n\x17\x46\x65tchbip353Instructions\x12\x18\n\x0b\x64\x65scription\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05offer\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x07onchain\x18\x03 \x01(\tH\x02\x88\x01\x01\x12!\n\x14offchain_amount_msat\x18\x04 \x01(\x04H\x03\x88\x01\x01\x12\x1f\n\x12onchain_amount_sat\x18\x05 \x01(\x04H\x04\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x08\n\x06_offerB\n\n\x08_onchainB\x17\n\x15_offchain_amount_msatB\x15\n\x13_onchain_amount_sat\"\xb9\x03\n\x13\x46\x65tchinvoiceRequest\x12\r\n\x05offer\x18\x01 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x15\n\x08quantity\x18\x03 \x01(\x04H\x01\x88\x01\x01\x12\x1f\n\x12recurrence_counter\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x1d\n\x10recurrence_start\x18\x05 \x01(\x01H\x03\x88\x01\x01\x12\x1d\n\x10recurrence_label\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x14\n\x07timeout\x18\x07 \x01(\x01H\x05\x88\x01\x01\x12\x17\n\npayer_note\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x1b\n\x0epayer_metadata\x18\t \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06\x62ip353\x18\n \x01(\tH\x08\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\x0b\n\t_quantityB\x15\n\x13_recurrence_counterB\x13\n\x11_recurrence_startB\x13\n\x11_recurrence_labelB\n\n\x08_timeoutB\r\n\x0b_payer_noteB\x11\n\x0f_payer_metadataB\t\n\x07_bip353\"\x99\x01\n\x14\x46\x65tchinvoiceResponse\x12\x0f\n\x07invoice\x18\x01 \x01(\t\x12)\n\x07\x63hanges\x18\x02 \x01(\x0b\x32\x18.cln.FetchinvoiceChanges\x12\x35\n\x0bnext_period\x18\x03 \x01(\x0b\x32\x1b.cln.FetchinvoiceNextPeriodH\x00\x88\x01\x01\x42\x0e\n\x0c_next_period\"\x82\x02\n\x13\x46\x65tchinvoiceChanges\x12!\n\x14\x64\x65scription_appended\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1b\n\x0evendor_removed\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06vendor\x18\x04 \x01(\tH\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x42\x17\n\x15_description_appendedB\x0e\n\x0c_descriptionB\x11\n\x0f_vendor_removedB\t\n\x07_vendorB\x0e\n\x0c_amount_msat\"}\n\x16\x46\x65tchinvoiceNextPeriod\x12\x0f\n\x07\x63ounter\x18\x01 \x01(\x04\x12\x11\n\tstarttime\x18\x02 \x01(\x04\x12\x0f\n\x07\x65ndtime\x18\x03 \x01(\x04\x12\x17\n\x0fpaywindow_start\x18\x04 \x01(\x04\x12\x15\n\rpaywindow_end\x18\x05 \x01(\x04\"\xe0\x01\n\x1d\x43\x61ncelrecurringinvoiceRequest\x12\r\n\x05offer\x18\x01 \x01(\t\x12\x1a\n\x12recurrence_counter\x18\x02 \x01(\x04\x12\x18\n\x10recurrence_label\x18\x03 \x01(\t\x12\x1d\n\x10recurrence_start\x18\x04 \x01(\x01H\x00\x88\x01\x01\x12\x17\n\npayer_note\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06\x62ip353\x18\x06 \x01(\tH\x02\x88\x01\x01\x42\x13\n\x11_recurrence_startB\r\n\x0b_payer_noteB\t\n\x07_bip353\"0\n\x1e\x43\x61ncelrecurringinvoiceResponse\x12\x0e\n\x06\x62olt12\x18\x01 \x01(\t\"&\n\x18\x46undchannelCancelRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\".\n\x19\x46undchannelCancelResponse\x12\x11\n\tcancelled\x18\x01 \x01(\t\"Z\n\x1a\x46undchannelCompleteRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\x12\x15\n\x08withhold\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\x0b\n\t_withhold\"N\n\x1b\x46undchannelCompleteResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x1b\n\x13\x63ommitments_secured\x18\x02 \x01(\x08\"\x84\x04\n\x12\x46undchannelRequest\x12#\n\x06\x61mount\x18\x01 \x01(\x0b\x32\x13.cln.AmountSatOrAll\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x15\n\x08\x61nnounce\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12#\n\tpush_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\tH\x03\x88\x01\x01\x12(\n\x0brequest_amt\x18\x07 \x01(\x0b\x32\x0e.cln.AmountSatH\x04\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x08 \x01(\tH\x05\x88\x01\x01\x12\n\n\x02id\x18\t \x01(\x0c\x12\x14\n\x07minconf\x18\n \x01(\rH\x06\x88\x01\x01\x12\x1c\n\x05utxos\x18\x0b \x03(\x0b\x32\r.cln.Outpoint\x12\x15\n\x08mindepth\x18\x0c \x01(\rH\x07\x88\x01\x01\x12$\n\x07reserve\x18\r \x01(\x0b\x32\x0e.cln.AmountSatH\x08\x88\x01\x01\x12\x14\n\x0c\x63hannel_type\x18\x0e \x03(\rB\n\n\x08_feerateB\x0b\n\t_announceB\x0c\n\n_push_msatB\x0b\n\t_close_toB\x0e\n\x0c_request_amtB\x10\n\x0e_compact_leaseB\n\n\x08_minconfB\x0b\n\t_mindepthB\n\n\x08_reserve\"\xce\x01\n\x13\x46undchannelResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x0e\n\x06outnum\x18\x03 \x01(\r\x12\x12\n\nchannel_id\x18\x04 \x01(\x0c\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x12\x15\n\x08mindepth\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x31\n\x0c\x63hannel_type\x18\x07 \x01(\x0b\x32\x1b.cln.FundchannelChannelTypeB\x0b\n\t_close_toB\x0b\n\t_mindepth\"K\n\x16\x46undchannelChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\xdc\x02\n\x17\x46undchannelStartRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x1e\n\x06\x61mount\x18\x02 \x01(\x0b\x32\x0e.cln.AmountSat\x12\"\n\x07\x66\x65\x65rate\x18\x03 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x15\n\x08\x61nnounce\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\tH\x02\x88\x01\x01\x12#\n\tpush_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x15\n\x08mindepth\x18\x07 \x01(\rH\x04\x88\x01\x01\x12$\n\x07reserve\x18\x08 \x01(\x0b\x32\x0e.cln.AmountSatH\x05\x88\x01\x01\x12\x14\n\x0c\x63hannel_type\x18\t \x03(\rB\n\n\x08_feerateB\x0b\n\t_announceB\x0b\n\t_close_toB\x0c\n\n_push_msatB\x0b\n\t_mindepthB\n\n\x08_reserve\"\xf6\x01\n\x18\x46undchannelStartResponse\x12\x17\n\x0f\x66unding_address\x18\x01 \x01(\t\x12\x14\n\x0cscriptpubkey\x18\x02 \x01(\x0c\x12;\n\x0c\x63hannel_type\x18\x03 \x01(\x0b\x32 .cln.FundchannelStartChannelTypeH\x00\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x12\x15\n\rwarning_usage\x18\x05 \x01(\t\x12\x15\n\x08mindepth\x18\x06 \x01(\rH\x02\x88\x01\x01\x42\x0f\n\r_channel_typeB\x0b\n\t_close_toB\x0b\n\t_mindepth\"P\n\x1b\x46undchannelStartChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x9d\x01\n\rGetlogRequest\x12\x32\n\x05level\x18\x01 \x01(\x0e\x32\x1e.cln.GetlogRequest.GetlogLevelH\x00\x88\x01\x01\"N\n\x0bGetlogLevel\x12\n\n\x06\x42ROKEN\x10\x00\x12\x0b\n\x07UNUSUAL\x10\x01\x12\x08\n\x04INFO\x10\x02\x12\t\n\x05\x44\x45\x42UG\x10\x03\x12\x06\n\x02IO\x10\x04\x12\t\n\x05TRACE\x10\x05\x42\x08\n\x06_level\"h\n\x0eGetlogResponse\x12\x12\n\ncreated_at\x18\x01 \x01(\t\x12\x12\n\nbytes_used\x18\x02 \x01(\r\x12\x11\n\tbytes_max\x18\x03 \x01(\r\x12\x1b\n\x03log\x18\x04 \x03(\x0b\x32\x0e.cln.GetlogLog\"\xe8\x02\n\tGetlogLog\x12/\n\titem_type\x18\x01 \x01(\x0e\x32\x1c.cln.GetlogLog.GetlogLogType\x12\x18\n\x0bnum_skipped\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04time\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06source\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x10\n\x03log\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x07node_id\x18\x06 \x01(\x0cH\x04\x88\x01\x01\x12\x11\n\x04\x64\x61ta\x18\x07 \x01(\x0cH\x05\x88\x01\x01\"l\n\rGetlogLogType\x12\x0b\n\x07SKIPPED\x10\x00\x12\n\n\x06\x42ROKEN\x10\x01\x12\x0b\n\x07UNUSUAL\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\t\n\x05\x44\x45\x42UG\x10\x04\x12\t\n\x05IO_IN\x10\x05\x12\n\n\x06IO_OUT\x10\x06\x12\t\n\x05TRACE\x10\x07\x42\x0e\n\x0c_num_skippedB\x07\n\x05_timeB\t\n\x07_sourceB\x06\n\x04_logB\n\n\x08_node_idB\x07\n\x05_data\"\xd9\x08\n\x13\x46underupdateRequest\x12@\n\x06policy\x18\x01 \x01(\x0e\x32+.cln.FunderupdateRequest.FunderupdatePolicyH\x00\x88\x01\x01\x12$\n\npolicy_mod\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0bleases_only\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x30\n\x16min_their_funding_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x30\n\x16max_their_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12.\n\x14per_channel_min_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12.\n\x14per_channel_max_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12+\n\x11reserve_tank_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x07\x88\x01\x01\x12\x19\n\x0c\x66uzz_percent\x18\t \x01(\rH\x08\x88\x01\x01\x12\x1d\n\x10\x66und_probability\x18\n \x01(\rH\t\x88\x01\x01\x12-\n\x13lease_fee_base_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\n\x88\x01\x01\x12\x1c\n\x0flease_fee_basis\x18\x0c \x01(\rH\x0b\x88\x01\x01\x12\x1b\n\x0e\x66unding_weight\x18\r \x01(\rH\x0c\x88\x01\x01\x12\x33\n\x19\x63hannel_fee_max_base_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\r\x88\x01\x01\x12\x35\n(channel_fee_max_proportional_thousandths\x18\x0f \x01(\rH\x0e\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x10 \x01(\x0cH\x0f\x88\x01\x01\"9\n\x12\x46underupdatePolicy\x12\t\n\x05MATCH\x10\x00\x12\r\n\tAVAILABLE\x10\x01\x12\t\n\x05\x46IXED\x10\x02\x42\t\n\x07_policyB\r\n\x0b_policy_modB\x0e\n\x0c_leases_onlyB\x19\n\x17_min_their_funding_msatB\x19\n\x17_max_their_funding_msatB\x17\n\x15_per_channel_min_msatB\x17\n\x15_per_channel_max_msatB\x14\n\x12_reserve_tank_msatB\x0f\n\r_fuzz_percentB\x13\n\x11_fund_probabilityB\x16\n\x14_lease_fee_base_msatB\x12\n\x10_lease_fee_basisB\x11\n\x0f_funding_weightB\x1c\n\x1a_channel_fee_max_base_msatB+\n)_channel_fee_max_proportional_thousandthsB\x10\n\x0e_compact_lease\"\xdf\x06\n\x14\x46underupdateResponse\x12\x0f\n\x07summary\x18\x01 \x01(\t\x12<\n\x06policy\x18\x02 \x01(\x0e\x32,.cln.FunderupdateResponse.FunderupdatePolicy\x12\x12\n\npolicy_mod\x18\x03 \x01(\r\x12\x13\n\x0bleases_only\x18\x04 \x01(\x08\x12+\n\x16min_their_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x16max_their_funding_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12)\n\x14per_channel_min_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12)\n\x14per_channel_max_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11reserve_tank_msat\x18\t \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66uzz_percent\x18\n \x01(\r\x12\x18\n\x10\x66und_probability\x18\x0b \x01(\r\x12-\n\x13lease_fee_base_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x1c\n\x0flease_fee_basis\x18\r \x01(\rH\x01\x88\x01\x01\x12\x1b\n\x0e\x66unding_weight\x18\x0e \x01(\rH\x02\x88\x01\x01\x12\x33\n\x19\x63hannel_fee_max_base_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x35\n(channel_fee_max_proportional_thousandths\x18\x10 \x01(\rH\x04\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x11 \x01(\x0cH\x05\x88\x01\x01\"9\n\x12\x46underupdatePolicy\x12\t\n\x05MATCH\x10\x00\x12\r\n\tAVAILABLE\x10\x01\x12\t\n\x05\x46IXED\x10\x02\x42\x16\n\x14_lease_fee_base_msatB\x12\n\x10_lease_fee_basisB\x11\n\x0f_funding_weightB\x1c\n\x1a_channel_fee_max_base_msatB+\n)_channel_fee_max_proportional_thousandthsB\x10\n\x0e_compact_lease\"\x8c\x02\n\x0fGetrouteRequest\x12\x0e\n\x02id\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\nriskfactor\x18\x03 \x01(\x04\x42\x02\x18\x01\x12\x15\n\x04\x63ltv\x18\x04 \x01(\rB\x02\x18\x01H\x00\x88\x01\x01\x12\x17\n\x06\x66romid\x18\x05 \x01(\x0c\x42\x02\x18\x01H\x01\x88\x01\x01\x12\x1c\n\x0b\x66uzzpercent\x18\x06 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x13\n\x07\x65xclude\x18\x07 \x03(\tB\x02\x18\x01\x12\x18\n\x07maxhops\x18\x08 \x01(\rB\x02\x18\x01H\x03\x88\x01\x01\x12$\n\x0b\x61mount_msat\x18\t \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x42\x07\n\x05_cltvB\t\n\x07_fromidB\x0e\n\x0c_fuzzpercentB\n\n\x08_maxhops\"9\n\x10GetrouteResponse\x12%\n\x05route\x18\x01 \x03(\x0b\x32\x12.cln.GetrouteRouteB\x02\x18\x01\"\xe1\x01\n\rGetrouteRoute\x12\x0e\n\x02id\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x13\n\x07\x63hannel\x18\x02 \x01(\tB\x02\x18\x01\x12\x15\n\tdirection\x18\x03 \x01(\rB\x02\x18\x01\x12$\n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12\x11\n\x05\x64\x65lay\x18\x05 \x01(\rB\x02\x18\x01\x12\x38\n\x05style\x18\x06 \x01(\x0e\x32%.cln.GetrouteRoute.GetrouteRouteStyleB\x02\x18\x01\"!\n\x12GetrouteRouteStyle\x12\x0b\n\x03TLV\x10\x00\x1a\x02\x08\x01\"t\n\x14ListaddressesRequest\x12\x14\n\x07\x61\x64\x64ress\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05start\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x03 \x01(\rH\x02\x88\x01\x01\x42\n\n\x08_addressB\x08\n\x06_startB\x08\n\x06_limit\"G\n\x15ListaddressesResponse\x12.\n\taddresses\x18\x01 \x03(\x0b\x32\x1b.cln.ListaddressesAddresses\"d\n\x16ListaddressesAddresses\x12\x0e\n\x06keyidx\x18\x01 \x01(\x04\x12\x13\n\x06\x62\x65\x63h32\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04p2tr\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\t\n\x07_bech32B\x07\n\x05_p2tr\"\xb7\x03\n\x13ListforwardsRequest\x12@\n\x06status\x18\x01 \x01(\x0e\x32+.cln.ListforwardsRequest.ListforwardsStatusH\x00\x88\x01\x01\x12\x17\n\nin_channel\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0bout_channel\x18\x03 \x01(\tH\x02\x88\x01\x01\x12>\n\x05index\x18\x04 \x01(\x0e\x32*.cln.ListforwardsRequest.ListforwardsIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\"-\n\x11ListforwardsIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\"L\n\x12ListforwardsStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\x10\n\x0cLOCAL_FAILED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x42\t\n\x07_statusB\r\n\x0b_in_channelB\x0e\n\x0c_out_channelB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListforwardsResponse\x12+\n\x08\x66orwards\x18\x01 \x03(\x0b\x32\x19.cln.ListforwardsForwards\"\x9d\x06\n\x14ListforwardsForwards\x12\x12\n\nin_channel\x18\x01 \x01(\t\x12\x1c\n\x07in_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x44\n\x06status\x18\x03 \x01(\x0e\x32\x34.cln.ListforwardsForwards.ListforwardsForwardsStatus\x12\x15\n\rreceived_time\x18\x04 \x01(\x01\x12\x18\n\x0bout_channel\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\"\n\x08\x66\x65\x65_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\"\n\x08out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12G\n\x05style\x18\t \x01(\x0e\x32\x33.cln.ListforwardsForwards.ListforwardsForwardsStyleH\x03\x88\x01\x01\x12\x17\n\nin_htlc_id\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x18\n\x0bout_htlc_id\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0c \x01(\x04\x12\x1a\n\rupdated_index\x18\r \x01(\x04H\x06\x88\x01\x01\x12\x1a\n\rresolved_time\x18\x0e \x01(\x01H\x07\x88\x01\x01\x12\x15\n\x08\x66\x61ilcode\x18\x0f \x01(\rH\x08\x88\x01\x01\x12\x17\n\nfailreason\x18\x10 \x01(\tH\t\x88\x01\x01\"T\n\x1aListforwardsForwardsStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\x10\n\x0cLOCAL_FAILED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\"0\n\x19ListforwardsForwardsStyle\x12\n\n\x06LEGACY\x10\x00\x12\x07\n\x03TLV\x10\x01\x42\x0e\n\x0c_out_channelB\x0b\n\t_fee_msatB\x0b\n\t_out_msatB\x08\n\x06_styleB\r\n\x0b_in_htlc_idB\x0e\n\x0c_out_htlc_idB\x10\n\x0e_updated_indexB\x10\n\x0e_resolved_timeB\x0b\n\t_failcodeB\r\n\x0b_failreason\"a\n\x11ListoffersRequest\x12\x15\n\x08offer_id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x18\n\x0b\x61\x63tive_only\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\x0b\n\t_offer_idB\x0e\n\x0c_active_only\";\n\x12ListoffersResponse\x12%\n\x06offers\x18\x01 \x03(\x0b\x32\x15.cln.ListoffersOffers\"\xd8\x01\n\x10ListoffersOffers\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x66orce_paths\x18\x08 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_descriptionB\x0e\n\x0c_force_paths\"\x84\x03\n\x0fListpaysRequest\x12\x13\n\x06\x62olt11\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12\x38\n\x06status\x18\x03 \x01(\x0e\x32#.cln.ListpaysRequest.ListpaysStatusH\x02\x88\x01\x01\x12\x36\n\x05index\x18\x04 \x01(\x0e\x32\".cln.ListpaysRequest.ListpaysIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\")\n\rListpaysIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\"7\n\x0eListpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x42\t\n\x07_bolt11B\x0f\n\r_payment_hashB\t\n\x07_statusB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"3\n\x10ListpaysResponse\x12\x1f\n\x04pays\x18\x01 \x03(\x0b\x32\x11.cln.ListpaysPays\"\xdb\x05\n\x0cListpaysPays\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x34\n\x06status\x18\x02 \x01(\x0e\x32$.cln.ListpaysPays.ListpaysPaysStatus\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x12\n\ncreated_at\x18\x04 \x01(\x04\x12\x12\n\x05label\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x06 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x07 \x01(\tH\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12*\n\x10\x61mount_sent_msat\x18\t \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x17\n\nerroronion\x18\n \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0b \x01(\tH\x07\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0c \x01(\x04H\x08\x88\x01\x01\x12\x15\n\x08preimage\x18\r \x01(\x0cH\t\x88\x01\x01\x12\x1c\n\x0fnumber_of_parts\x18\x0e \x01(\x04H\n\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x0f \x01(\x04H\x0b\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x10 \x01(\x04H\x0c\x88\x01\x01\";\n\x12ListpaysPaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x13\n\x11_amount_sent_msatB\r\n\x0b_erroronionB\x0e\n\x0c_descriptionB\x0f\n\r_completed_atB\x0b\n\t_preimageB\x12\n\x10_number_of_partsB\x10\n\x0e_created_indexB\x10\n\x0e_updated_index\"\xd6\x01\n\x10ListhtlcsRequest\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x38\n\x05index\x18\x02 \x01(\x0e\x32$.cln.ListhtlcsRequest.ListhtlcsIndexH\x01\x88\x01\x01\x12\x12\n\x05start\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\rH\x03\x88\x01\x01\"*\n\x0eListhtlcsIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x42\x05\n\x03_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"7\n\x11ListhtlcsResponse\x12\"\n\x05htlcs\x18\x01 \x03(\x0b\x32\x13.cln.ListhtlcsHtlcs\"\xe5\x02\n\x0eListhtlcsHtlcs\x12\x18\n\x10short_channel_id\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\x04\x12\x0e\n\x06\x65xpiry\x18\x03 \x01(\r\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12>\n\tdirection\x18\x05 \x01(\x0e\x32+.cln.ListhtlcsHtlcs.ListhtlcsHtlcsDirection\x12\x14\n\x0cpayment_hash\x18\x06 \x01(\x0c\x12\x1d\n\x05state\x18\x07 \x01(\x0e\x32\x0e.cln.HtlcState\x12\x1a\n\rcreated_index\x18\x08 \x01(\x04H\x00\x88\x01\x01\x12\x1a\n\rupdated_index\x18\t \x01(\x04H\x01\x88\x01\x01\"*\n\x17ListhtlcsHtlcsDirection\x12\x07\n\x03OUT\x10\x00\x12\x06\n\x02IN\x10\x01\x42\x10\n\x0e_created_indexB\x10\n\x0e_updated_index\"\xb2\x02\n\x17MultifundchannelRequest\x12\x37\n\x0c\x64\x65stinations\x18\x01 \x03(\x0b\x32!.cln.MultifundchannelDestinations\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\x12H\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\x18\n\x0bminchannels\x18\x05 \x01(\x12H\x02\x88\x01\x01\x12-\n\x12\x63ommitment_feerate\x18\x06 \x01(\x0b\x32\x0c.cln.FeerateH\x03\x88\x01\x01\x42\n\n\x08_feerateB\n\n\x08_minconfB\x0e\n\x0c_minchannelsB\x15\n\x13_commitment_feerate\"\x97\x01\n\x18MultifundchannelResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x34\n\x0b\x63hannel_ids\x18\x03 \x03(\x0b\x32\x1f.cln.MultifundchannelChannelIds\x12+\n\x06\x66\x61iled\x18\x04 \x03(\x0b\x32\x1b.cln.MultifundchannelFailed\"\x88\x03\n\x1cMultifundchannelDestinations\x12\n\n\x02id\x18\x01 \x01(\t\x12#\n\x06\x61mount\x18\x02 \x01(\x0b\x32\x13.cln.AmountSatOrAll\x12\x15\n\x08\x61nnounce\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12#\n\tpush_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\tH\x02\x88\x01\x01\x12(\n\x0brequest_amt\x18\x06 \x01(\x0b\x32\x0e.cln.AmountSatH\x03\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x07 \x01(\tH\x04\x88\x01\x01\x12\x15\n\x08mindepth\x18\x08 \x01(\rH\x05\x88\x01\x01\x12$\n\x07reserve\x18\t \x01(\x0b\x32\x0e.cln.AmountSatH\x06\x88\x01\x01\x42\x0b\n\t_announceB\x0c\n\n_push_msatB\x0b\n\t_close_toB\x0e\n\x0c_request_amtB\x10\n\x0e_compact_leaseB\x0b\n\t_mindepthB\n\n\x08_reserve\"\xb2\x01\n\x1aMultifundchannelChannelIds\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\x12\x12\n\nchannel_id\x18\x03 \x01(\x0c\x12@\n\x0c\x63hannel_type\x18\x04 \x01(\x0b\x32*.cln.MultifundchannelChannelIdsChannelType\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x42\x0b\n\t_close_to\"Z\n%MultifundchannelChannelIdsChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x93\x02\n\x16MultifundchannelFailed\x12\n\n\x02id\x18\x01 \x01(\x0c\x12H\n\x06method\x18\x02 \x01(\x0e\x32\x38.cln.MultifundchannelFailed.MultifundchannelFailedMethod\x12/\n\x05\x65rror\x18\x03 \x01(\x0b\x32 .cln.MultifundchannelFailedError\"r\n\x1cMultifundchannelFailedMethod\x12\x0b\n\x07\x43ONNECT\x10\x00\x12\x14\n\x10OPENCHANNEL_INIT\x10\x01\x12\x15\n\x11\x46UNDCHANNEL_START\x10\x02\x12\x18\n\x14\x46UNDCHANNEL_COMPLETE\x10\x03\"<\n\x1bMultifundchannelFailedError\x12\x0c\n\x04\x63ode\x18\x01 \x01(\x12\x12\x0f\n\x07message\x18\x02 \x01(\t\"\xa8\x01\n\x14MultiwithdrawRequest\x12 \n\x07outputs\x18\x01 \x03(\x0b\x32\x0f.cln.OutputDesc\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.OutpointB\n\n\x08_feerateB\n\n\x08_minconf\"1\n\x15MultiwithdrawResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"\xe2\x04\n\x0cOfferRequest\x12\x0e\n\x06\x61mount\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06issuer\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x12\n\x05label\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0cquantity_max\x18\x05 \x01(\x04H\x03\x88\x01\x01\x12\x1c\n\x0f\x61\x62solute_expiry\x18\x06 \x01(\x04H\x04\x88\x01\x01\x12\x17\n\nrecurrence\x18\x07 \x01(\tH\x05\x88\x01\x01\x12\x1c\n\x0frecurrence_base\x18\x08 \x01(\tH\x06\x88\x01\x01\x12!\n\x14recurrence_paywindow\x18\t \x01(\tH\x07\x88\x01\x01\x12\x1d\n\x10recurrence_limit\x18\n \x01(\rH\x08\x88\x01\x01\x12\x17\n\nsingle_use\x18\x0b \x01(\x08H\t\x88\x01\x01\x12 \n\x13proportional_amount\x18\r \x01(\x08H\n\x88\x01\x01\x12 \n\x13optional_recurrence\x18\x0e \x01(\x08H\x0b\x88\x01\x01\x12\x16\n\x0e\x66ronting_nodes\x18\x0f \x03(\x0c\x42\x0e\n\x0c_descriptionB\t\n\x07_issuerB\x08\n\x06_labelB\x0f\n\r_quantity_maxB\x12\n\x10_absolute_expiryB\r\n\x0b_recurrenceB\x12\n\x10_recurrence_baseB\x17\n\x15_recurrence_paywindowB\x13\n\x11_recurrence_limitB\r\n\x0b_single_useB\x16\n\x14_proportional_amountB\x16\n\x14_optional_recurrence\"\xbc\x01\n\rOfferResponse\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x0f\n\x07\x63reated\x18\x06 \x01(\x08\x12\x12\n\x05label\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x66orce_paths\x18\x08 \x01(\x08H\x01\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_force_paths\"-\n\x17OpenchannelAbortRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\"X\n\x18OpenchannelAbortResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x18\n\x10\x63hannel_canceled\x18\x02 \x01(\x08\x12\x0e\n\x06reason\x18\x03 \x01(\t\"\xa1\x01\n\x16OpenchannelBumpRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x13\n\x0binitialpsbt\x18\x02 \x01(\t\x12*\n\x0f\x66unding_feerate\x18\x03 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x1e\n\x06\x61mount\x18\x04 \x01(\x0b\x32\x0e.cln.AmountSatB\x12\n\x10_funding_feerate\"\xed\x01\n\x17OpenchannelBumpResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x35\n\x0c\x63hannel_type\x18\x02 \x01(\x0b\x32\x1f.cln.OpenchannelBumpChannelType\x12\x0c\n\x04psbt\x18\x03 \x01(\t\x12\x1b\n\x13\x63ommitments_secured\x18\x04 \x01(\x08\x12\x16\n\x0e\x66unding_serial\x18\x05 \x01(\x04\x12&\n\x19requires_confirmed_inputs\x18\x06 \x01(\x08H\x00\x88\x01\x01\x42\x1c\n\x1a_requires_confirmed_inputs\"O\n\x1aOpenchannelBumpChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\xa5\x03\n\x16OpenchannelInitRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x13\n\x0binitialpsbt\x18\x02 \x01(\t\x12-\n\x12\x63ommitment_feerate\x18\x03 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12*\n\x0f\x66unding_feerate\x18\x04 \x01(\x0b\x32\x0c.cln.FeerateH\x01\x88\x01\x01\x12\x15\n\x08\x61nnounce\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\tH\x03\x88\x01\x01\x12(\n\x0brequest_amt\x18\x07 \x01(\x0b\x32\x0e.cln.AmountSatH\x04\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x08 \x01(\x0cH\x05\x88\x01\x01\x12\x14\n\x0c\x63hannel_type\x18\t \x03(\r\x12\x1e\n\x06\x61mount\x18\n \x01(\x0b\x32\x0e.cln.AmountSatB\x15\n\x13_commitment_feerateB\x12\n\x10_funding_feerateB\x0b\n\t_announceB\x0b\n\t_close_toB\x0e\n\x0c_request_amtB\x10\n\x0e_compact_lease\"\xed\x01\n\x17OpenchannelInitResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\x12\x35\n\x0c\x63hannel_type\x18\x03 \x01(\x0b\x32\x1f.cln.OpenchannelInitChannelType\x12\x1b\n\x13\x63ommitments_secured\x18\x04 \x01(\x08\x12\x16\n\x0e\x66unding_serial\x18\x05 \x01(\x04\x12&\n\x19requires_confirmed_inputs\x18\x06 \x01(\x08H\x00\x88\x01\x01\x42\x1c\n\x1a_requires_confirmed_inputs\"O\n\x1aOpenchannelInitChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"C\n\x18OpenchannelSignedRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x13\n\x0bsigned_psbt\x18\x02 \x01(\t\"I\n\x19OpenchannelSignedResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\n\n\x02tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"<\n\x18OpenchannelUpdateRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\"\x95\x02\n\x19OpenchannelUpdateResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x37\n\x0c\x63hannel_type\x18\x02 \x01(\x0b\x32!.cln.OpenchannelUpdateChannelType\x12\x0c\n\x04psbt\x18\x03 \x01(\t\x12\x1b\n\x13\x63ommitments_secured\x18\x04 \x01(\x08\x12\x16\n\x0e\x66unding_outnum\x18\x05 \x01(\r\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12&\n\x19requires_confirmed_inputs\x18\x07 \x01(\x08H\x01\x88\x01\x01\x42\x0b\n\t_close_toB\x1c\n\x1a_requires_confirmed_inputs\"Q\n\x1cOpenchannelUpdateChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"Y\n\x0bPingRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x10\n\x03len\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x16\n\tpongbytes\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x06\n\x04_lenB\x0c\n\n_pongbytes\"\x1e\n\x0cPingResponse\x12\x0e\n\x06totlen\x18\x01 \x01(\r\"\x91\x01\n\rPluginRequest\x12)\n\nsubcommand\x18\x01 \x01(\x0e\x32\x15.cln.PluginSubcommand\x12\x13\n\x06plugin\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tdirectory\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0f\n\x07options\x18\x04 \x03(\tB\t\n\x07_pluginB\x0c\n\n_directory\"}\n\x0ePluginResponse\x12&\n\x07\x63ommand\x18\x01 \x01(\x0e\x32\x15.cln.PluginSubcommand\x12#\n\x07plugins\x18\x02 \x03(\x0b\x32\x12.cln.PluginPlugins\x12\x13\n\x06result\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_result\">\n\rPluginPlugins\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x0f\n\x07\x64ynamic\x18\x03 \x01(\x08\"@\n\x14RenepaystatusRequest\x12\x1a\n\tinvstring\x18\x01 \x01(\tB\x02\x18\x01H\x00\x88\x01\x01\x42\x0c\n\n_invstring\"K\n\x15RenepaystatusResponse\x12\x32\n\tpaystatus\x18\x01 \x03(\x0b\x32\x1b.cln.RenepaystatusPaystatusB\x02\x18\x01\"\x9a\x04\n\x16RenepaystatusPaystatus\x12\x12\n\x06\x62olt11\x18\x01 \x01(\tB\x02\x18\x01\x12!\n\x10payment_preimage\x18\x02 \x01(\x0c\x42\x02\x18\x01H\x00\x88\x01\x01\x12\x18\n\x0cpayment_hash\x18\x03 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\ncreated_at\x18\x04 \x01(\x01\x42\x02\x18\x01\x12\x13\n\x07groupid\x18\x05 \x01(\rB\x02\x18\x01\x12\x16\n\x05parts\x18\x06 \x01(\rB\x02\x18\x01H\x01\x88\x01\x01\x12$\n\x0b\x61mount_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12.\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x02\x88\x01\x01\x12L\n\x06status\x18\t \x01(\x0e\x32\x38.cln.RenepaystatusPaystatus.RenepaystatusPaystatusStatusB\x02\x18\x01\x12\x1c\n\x0b\x64\x65stination\x18\n \x01(\x0c\x42\x02\x18\x01H\x03\x88\x01\x01\x12\x11\n\x05notes\x18\x0b \x03(\tB\x02\x18\x01\"Q\n\x1cRenepaystatusPaystatusStatus\x12\x10\n\x08\x43OMPLETE\x10\x00\x1a\x02\x08\x01\x12\x0f\n\x07PENDING\x10\x01\x1a\x02\x08\x01\x12\x0e\n\x06\x46\x41ILED\x10\x02\x1a\x02\x08\x01\x42\x13\n\x11_payment_preimageB\x08\n\x06_partsB\x13\n\x11_amount_sent_msatB\x0e\n\x0c_destination\"\xfe\x02\n\x0eRenepayRequest\x12\x15\n\tinvstring\x18\x01 \x01(\tB\x02\x18\x01\x12)\n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x00\x88\x01\x01\x12$\n\x06maxfee\x18\x03 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x01\x88\x01\x01\x12\x19\n\x08maxdelay\x18\x04 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x1a\n\tretry_for\x18\x05 \x01(\rB\x02\x18\x01H\x03\x88\x01\x01\x12\x1c\n\x0b\x64\x65scription\x18\x06 \x01(\tB\x02\x18\x01H\x04\x88\x01\x01\x12\x16\n\x05label\x18\x07 \x01(\tB\x02\x18\x01H\x05\x88\x01\x01\x12\x1f\n\x0e\x64\x65v_use_shadow\x18\x08 \x01(\x08\x42\x02\x18\x01H\x06\x88\x01\x01\x12\x13\n\x07\x65xclude\x18\t \x03(\tB\x02\x18\x01\x42\x0e\n\x0c_amount_msatB\t\n\x07_maxfeeB\x0b\n\t_maxdelayB\x0c\n\n_retry_forB\x0e\n\x0c_descriptionB\x08\n\x06_labelB\x11\n\x0f_dev_use_shadow\"\xdd\x03\n\x0fRenepayResponse\x12\x1c\n\x10payment_preimage\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x18\n\x0cpayment_hash\x18\x02 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\ncreated_at\x18\x03 \x01(\x01\x42\x02\x18\x01\x12\x11\n\x05parts\x18\x04 \x01(\rB\x02\x18\x01\x12$\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12)\n\x10\x61mount_sent_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12\x36\n\x06status\x18\x07 \x01(\x0e\x32\".cln.RenepayResponse.RenepayStatusB\x02\x18\x01\x12\x1c\n\x0b\x64\x65stination\x18\x08 \x01(\x0c\x42\x02\x18\x01H\x00\x88\x01\x01\x12\x17\n\x06\x62olt11\x18\t \x01(\tB\x02\x18\x01H\x01\x88\x01\x01\x12\x17\n\x06\x62olt12\x18\n \x01(\tB\x02\x18\x01H\x02\x88\x01\x01\x12\x18\n\x07groupid\x18\x0b \x01(\x04\x42\x02\x18\x01H\x03\x88\x01\x01\"B\n\rRenepayStatus\x12\x10\n\x08\x43OMPLETE\x10\x00\x1a\x02\x08\x01\x12\x0f\n\x07PENDING\x10\x01\x1a\x02\x08\x01\x12\x0e\n\x06\x46\x41ILED\x10\x02\x1a\x02\x08\x01\x42\x0e\n\x0c_destinationB\t\n\x07_bolt11B\t\n\x07_bolt12B\n\n\x08_groupid\"l\n\x14ReserveinputsRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x16\n\texclusive\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x14\n\x07reserve\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x0c\n\n_exclusiveB\n\n\x08_reserve\"M\n\x15ReserveinputsResponse\x12\x34\n\x0creservations\x18\x01 \x03(\x0b\x32\x1e.cln.ReserveinputsReservations\"z\n\x19ReserveinputsReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x19\n\x11reserved_to_block\x18\x05 \x01(\r\"4\n\x14SendcustommsgRequest\x12\x0f\n\x07node_id\x18\x01 \x01(\x0c\x12\x0b\n\x03msg\x18\x02 \x01(\x0c\"\'\n\x15SendcustommsgResponse\x12\x0e\n\x06status\x18\x01 \x01(\t\"\xb0\x01\n\x12SendinvoiceRequest\x12\x0e\n\x06invreq\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08quantity\x18\x05 \x01(\x04H\x02\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\n\n\x08_timeoutB\x0b\n\t_quantity\"\xb8\x04\n\x13SendinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.SendinvoiceResponse.SendinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x15\n\rcreated_index\x18\x08 \x01(\x04\x12\x1a\n\rupdated_index\x18\t \x01(\x04H\x02\x88\x01\x01\x12\x16\n\tpay_index\x18\n \x01(\x04H\x03\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0c \x01(\x04H\x05\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x06\x88\x01\x01\"6\n\x11SendinvoiceStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\x0e\n\x0c_amount_msatB\t\n\x07_bolt12B\x10\n\x0e_updated_indexB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimage\"\xaa\x02\n\x11SetchannelRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12!\n\x07\x66\x65\x65\x62\x61se\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x13\n\x06\x66\x65\x65ppm\x18\x03 \x01(\rH\x01\x88\x01\x01\x12!\n\x07htlcmin\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12!\n\x07htlcmax\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x19\n\x0c\x65nforcedelay\x18\x06 \x01(\rH\x04\x88\x01\x01\x12\x1c\n\x0fignorefeelimits\x18\x07 \x01(\x08H\x05\x88\x01\x01\x42\n\n\x08_feebaseB\t\n\x07_feeppmB\n\n\x08_htlcminB\n\n\x08_htlcmaxB\x0f\n\r_enforcedelayB\x12\n\x10_ignorefeelimits\"?\n\x12SetchannelResponse\x12)\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x17.cln.SetchannelChannels\"\xaf\x03\n\x12SetchannelChannels\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x12\n\nchannel_id\x18\x02 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\"\n\rfee_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x05 \x01(\r\x12*\n\x15minimum_htlc_out_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12$\n\x17warning_htlcmin_too_low\x18\x07 \x01(\tH\x01\x88\x01\x01\x12*\n\x15maximum_htlc_out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x18warning_htlcmax_too_high\x18\t \x01(\tH\x02\x88\x01\x01\x12\x19\n\x11ignore_fee_limits\x18\n \x01(\x08\x42\x13\n\x11_short_channel_idB\x1a\n\x18_warning_htlcmin_too_lowB\x1b\n\x19_warning_htlcmax_too_high\"b\n\x10SetconfigRequest\x12\x0e\n\x06\x63onfig\x18\x01 \x01(\t\x12\x10\n\x03val\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttransient\x18\x03 \x01(\x08H\x01\x88\x01\x01\x42\x06\n\x04_valB\x0c\n\n_transient\"9\n\x11SetconfigResponse\x12$\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x14.cln.SetconfigConfig\"\xda\x02\n\x0fSetconfigConfig\x12\x0e\n\x06\x63onfig\x18\x01 \x01(\t\x12\x13\n\x06source\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0f\n\x07\x64ynamic\x18\x04 \x01(\x08\x12\x10\n\x03set\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x16\n\tvalue_str\x18\x06 \x01(\tH\x03\x88\x01\x01\x12$\n\nvalue_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x16\n\tvalue_int\x18\x08 \x01(\x12H\x05\x88\x01\x01\x12\x17\n\nvalue_bool\x18\t \x01(\x08H\x06\x88\x01\x01\x12\x0f\n\x07sources\x18\n \x03(\t\x12\x12\n\nvalues_str\x18\x0b \x03(\tB\t\n\x07_sourceB\t\n\x07_pluginB\x06\n\x04_setB\x0c\n\n_value_strB\r\n\x0b_value_msatB\x0c\n\n_value_intB\r\n\x0b_value_bool\"6\n\x15SetpsbtversionRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\r\"&\n\x16SetpsbtversionResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\"\'\n\x12SigninvoiceRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\"%\n\x13SigninvoiceResponse\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\"%\n\x12SignmessageRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\"F\n\x13SignmessageResponse\x12\x11\n\tsignature\x18\x01 \x01(\x0c\x12\r\n\x05recid\x18\x02 \x01(\x0c\x12\r\n\x05zbase\x18\x03 \x01(\t\"\xc8\x01\n\x11SpliceInitRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x17\n\x0frelative_amount\x18\x02 \x01(\x12\x12\x18\n\x0binitialpsbt\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1b\n\x0e\x66\x65\x65rate_per_kw\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1a\n\rforce_feerate\x18\x05 \x01(\x08H\x02\x88\x01\x01\x42\x0e\n\x0c_initialpsbtB\x11\n\x0f_feerate_per_kwB\x10\n\x0e_force_feerate\"\"\n\x12SpliceInitResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\"_\n\x13SpliceSignedRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\x12\x17\n\nsign_first\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\r\n\x0b_sign_first\"^\n\x14SpliceSignedResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x13\n\x06outnum\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x0c\n\x04psbt\x18\x04 \x01(\tB\t\n\x07_outnum\"7\n\x13SpliceUpdateRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\"y\n\x14SpliceUpdateResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x1b\n\x13\x63ommitments_secured\x18\x02 \x01(\x08\x12\x1f\n\x12signatures_secured\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\x15\n\x13_signatures_secured\"2\n\x0fSpliceinRequest\x12\x0f\n\x07\x63hannel\x18\x01 \x01(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\t\"b\n\x10SpliceinResponse\x12\x11\n\x04psbt\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x03 \x01(\tH\x02\x88\x01\x01\x42\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"\x8b\x01\n\x10SpliceoutRequest\x12\x0f\n\x07\x63hannel\x18\x01 \x01(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\t\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rforce_feerate\x18\x04 \x01(\x08H\x01\x88\x01\x01\x42\x0e\n\x0c_destinationB\x10\n\x0e_force_feerate\"c\n\x11SpliceoutResponse\x12\x11\n\x04psbt\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x03 \x01(\tH\x02\x88\x01\x01\x42\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"\xc6\x01\n\x10\x44\x65vspliceRequest\x12\x16\n\x0escript_or_json\x18\x01 \x01(\t\x12\x13\n\x06\x64ryrun\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x1a\n\rforce_feerate\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x16\n\tdebug_log\x18\x04 \x01(\x08H\x02\x88\x01\x01\x12\x17\n\ndev_wetrun\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_dryrunB\x10\n\x0e_force_feerateB\x0c\n\n_debug_logB\r\n\x0b_dev_wetrun\"\x80\x01\n\x11\x44\x65vspliceResponse\x12\x0e\n\x06\x64ryrun\x18\x01 \x03(\t\x12\x11\n\x04psbt\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03log\x18\x05 \x03(\tB\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"H\n\x16UnreserveinputsRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x14\n\x07reserve\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_reserve\"Q\n\x17UnreserveinputsResponse\x12\x36\n\x0creservations\x18\x01 \x03(\x0b\x32 .cln.UnreserveinputsReservations\"\x97\x01\n\x1bUnreserveinputsReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x1e\n\x11reserved_to_block\x18\x05 \x01(\rH\x00\x88\x01\x01\x42\x14\n\x12_reserved_to_block\"n\n\x14UpgradewalletRequest\x12\"\n\x07\x66\x65\x65rate\x18\x01 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x17\n\nreservedok\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\n\n\x08_feerateB\r\n\x0b_reservedok\"~\n\x15UpgradewalletResponse\x12\x15\n\rupgraded_outs\x18\x01 \x01(\x04\x12\x11\n\x04psbt\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"O\n\x16WaitblockheightRequest\x12\x13\n\x0b\x62lockheight\x18\x01 \x01(\r\x12\x14\n\x07timeout\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_timeout\".\n\x17WaitblockheightResponse\x12\x13\n\x0b\x62lockheight\x18\x01 \x01(\r\"\xb9\x02\n\x0bWaitRequest\x12\x31\n\tsubsystem\x18\x01 \x01(\x0e\x32\x1e.cln.WaitRequest.WaitSubsystem\x12\x31\n\tindexname\x18\x02 \x01(\x0e\x32\x1e.cln.WaitRequest.WaitIndexname\x12\x11\n\tnextvalue\x18\x03 \x01(\x04\"6\n\rWaitIndexname\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x12\x0b\n\x07\x44\x45LETED\x10\x02\"y\n\rWaitSubsystem\x12\x0c\n\x08INVOICES\x10\x00\x12\x0c\n\x08\x46ORWARDS\x10\x01\x12\x0c\n\x08SENDPAYS\x10\x02\x12\t\n\x05HTLCS\x10\x03\x12\x0e\n\nCHAINMOVES\x10\x04\x12\x10\n\x0c\x43HANNELMOVES\x10\x05\x12\x11\n\rNETWORKEVENTS\x10\x06\"\xf4\x05\n\x0cWaitResponse\x12\x32\n\tsubsystem\x18\x01 \x01(\x0e\x32\x1f.cln.WaitResponse.WaitSubsystem\x12\x14\n\x07\x63reated\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07updated\x18\x03 \x01(\x04H\x01\x88\x01\x01\x12\x14\n\x07\x64\x65leted\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12*\n\x07\x64\x65tails\x18\x05 \x01(\x0b\x32\x10.cln.WaitDetailsB\x02\x18\x01H\x03\x88\x01\x01\x12(\n\x08\x66orwards\x18\x06 \x01(\x0b\x32\x11.cln.WaitForwardsH\x04\x88\x01\x01\x12(\n\x08invoices\x18\x07 \x01(\x0b\x32\x11.cln.WaitInvoicesH\x05\x88\x01\x01\x12(\n\x08sendpays\x18\x08 \x01(\x0b\x32\x11.cln.WaitSendpaysH\x06\x88\x01\x01\x12\"\n\x05htlcs\x18\t \x01(\x0b\x32\x0e.cln.WaitHtlcsH\x07\x88\x01\x01\x12,\n\nchainmoves\x18\n \x01(\x0b\x32\x13.cln.WaitChainmovesH\x08\x88\x01\x01\x12\x30\n\x0c\x63hannelmoves\x18\x0b \x01(\x0b\x32\x15.cln.WaitChannelmovesH\t\x88\x01\x01\x12\x32\n\rnetworkevents\x18\x0c \x01(\x0b\x32\x16.cln.WaitNetworkeventsH\n\x88\x01\x01\"y\n\rWaitSubsystem\x12\x0c\n\x08INVOICES\x10\x00\x12\x0c\n\x08\x46ORWARDS\x10\x01\x12\x0c\n\x08SENDPAYS\x10\x02\x12\t\n\x05HTLCS\x10\x03\x12\x0e\n\nCHAINMOVES\x10\x04\x12\x10\n\x0c\x43HANNELMOVES\x10\x05\x12\x11\n\rNETWORKEVENTS\x10\x06\x42\n\n\x08_createdB\n\n\x08_updatedB\n\n\x08_deletedB\n\n\x08_detailsB\x0b\n\t_forwardsB\x0b\n\t_invoicesB\x0b\n\t_sendpaysB\x08\n\x06_htlcsB\r\n\x0b_chainmovesB\x0f\n\r_channelmovesB\x10\n\x0e_networkevents\"d\n\x0eWaitChainmoves\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\"f\n\x10WaitChannelmoves\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\"\xd0\x05\n\x0bWaitDetails\x12;\n\x06status\x18\x01 \x01(\x0e\x32\".cln.WaitDetails.WaitDetailsStatusB\x02\x18\x01H\x00\x88\x01\x01\x12\x16\n\x05label\x18\x02 \x01(\tB\x02\x18\x01H\x01\x88\x01\x01\x12\x1c\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x02\x18\x01H\x02\x88\x01\x01\x12\x17\n\x06\x62olt11\x18\x04 \x01(\tB\x02\x18\x01H\x03\x88\x01\x01\x12\x17\n\x06\x62olt12\x18\x05 \x01(\tB\x02\x18\x01H\x04\x88\x01\x01\x12\x17\n\x06partid\x18\x06 \x01(\x04\x42\x02\x18\x01H\x05\x88\x01\x01\x12\x18\n\x07groupid\x18\x07 \x01(\x04\x42\x02\x18\x01H\x06\x88\x01\x01\x12\x1d\n\x0cpayment_hash\x18\x08 \x01(\x0c\x42\x02\x18\x01H\x07\x88\x01\x01\x12\x1b\n\nin_channel\x18\t \x01(\tB\x02\x18\x01H\x08\x88\x01\x01\x12\x1b\n\nin_htlc_id\x18\n \x01(\x04\x42\x02\x18\x01H\t\x88\x01\x01\x12%\n\x07in_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\n\x88\x01\x01\x12\x1c\n\x0bout_channel\x18\x0c \x01(\tB\x02\x18\x01H\x0b\x88\x01\x01\"\xad\x01\n\x11WaitDetailsStatus\x12\x0e\n\x06UNPAID\x10\x00\x1a\x02\x08\x01\x12\x0c\n\x04PAID\x10\x01\x1a\x02\x08\x01\x12\x0f\n\x07\x45XPIRED\x10\x02\x1a\x02\x08\x01\x12\x0f\n\x07PENDING\x10\x03\x1a\x02\x08\x01\x12\x0e\n\x06\x46\x41ILED\x10\x04\x1a\x02\x08\x01\x12\x10\n\x08\x43OMPLETE\x10\x05\x1a\x02\x08\x01\x12\x0f\n\x07OFFERED\x10\x06\x1a\x02\x08\x01\x12\x0f\n\x07SETTLED\x10\x07\x1a\x02\x08\x01\x12\x14\n\x0cLOCAL_FAILED\x10\x08\x1a\x02\x08\x01\x42\t\n\x07_statusB\x08\n\x06_labelB\x0e\n\x0c_descriptionB\t\n\x07_bolt11B\t\n\x07_bolt12B\t\n\x07_partidB\n\n\x08_groupidB\x0f\n\r_payment_hashB\r\n\x0b_in_channelB\r\n\x0b_in_htlc_idB\n\n\x08_in_msatB\x0e\n\x0c_out_channel\"\xcb\x02\n\x0cWaitForwards\x12\x39\n\x06status\x18\x01 \x01(\x0e\x32$.cln.WaitForwards.WaitForwardsStatusH\x00\x88\x01\x01\x12\x17\n\nin_channel\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nin_htlc_id\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12!\n\x07in_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x18\n\x0bout_channel\x18\x05 \x01(\tH\x04\x88\x01\x01\"L\n\x12WaitForwardsStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x12\x10\n\x0cLOCAL_FAILED\x10\x03\x42\t\n\x07_statusB\r\n\x0b_in_channelB\r\n\x0b_in_htlc_idB\n\n\x08_in_msatB\x0e\n\x0c_out_channel\"\x8c\x03\n\tWaitHtlcs\x12\"\n\x05state\x18\x01 \x01(\x0e\x32\x0e.cln.HtlcStateH\x00\x88\x01\x01\x12\x14\n\x07htlc_id\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0b\x63ltv_expiry\x18\x04 \x01(\rH\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x39\n\tdirection\x18\x06 \x01(\x0e\x32!.cln.WaitHtlcs.WaitHtlcsDirectionH\x05\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x07 \x01(\x0cH\x06\x88\x01\x01\"%\n\x12WaitHtlcsDirection\x12\x07\n\x03OUT\x10\x00\x12\x06\n\x02IN\x10\x01\x42\x08\n\x06_stateB\n\n\x08_htlc_idB\x13\n\x11_short_channel_idB\x0e\n\x0c_cltv_expiryB\x0e\n\x0c_amount_msatB\x0c\n\n_directionB\x0f\n\r_payment_hash\"\x95\x02\n\x0cWaitInvoices\x12\x39\n\x06status\x18\x01 \x01(\x0e\x32$.cln.WaitInvoices.WaitInvoicesStatusH\x00\x88\x01\x01\x12\x12\n\x05label\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x05 \x01(\tH\x04\x88\x01\x01\"7\n\x12WaitInvoicesStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\t\n\x07_statusB\x08\n\x06_labelB\x0e\n\x0c_descriptionB\t\n\x07_bolt11B\t\n\x07_bolt12\"\x89\x02\n\x11WaitNetworkevents\x12\x1a\n\rcreated_index\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x44\n\titem_type\x18\x02 \x01(\x0e\x32,.cln.WaitNetworkevents.WaitNetworkeventsTypeH\x01\x88\x01\x01\x12\x14\n\x07peer_id\x18\x03 \x01(\x0cH\x02\x88\x01\x01\"P\n\x15WaitNetworkeventsType\x12\x0b\n\x07\x43ONNECT\x10\x00\x12\x10\n\x0c\x43ONNECT_FAIL\x10\x01\x12\x08\n\x04PING\x10\x02\x12\x0e\n\nDISCONNECT\x10\x03\x42\x10\n\x0e_created_indexB\x0c\n\n_item_typeB\n\n\x08_peer_id\"\xff\x01\n\x0cWaitSendpays\x12\x39\n\x06status\x18\x01 \x01(\x0e\x32$.cln.WaitSendpays.WaitSendpaysStatusH\x00\x88\x01\x01\x12\x13\n\x06partid\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x14\n\x07groupid\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x04 \x01(\x0cH\x03\x88\x01\x01\";\n\x12WaitSendpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\t\n\x07_statusB\t\n\x07_partidB\n\n\x08_groupidB\x0f\n\r_payment_hash\"4\n\x12ListconfigsRequest\x12\x13\n\x06\x63onfig\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_config\"P\n\x13ListconfigsResponse\x12-\n\x07\x63onfigs\x18\x01 \x01(\x0b\x32\x17.cln.ListconfigsConfigsH\x00\x88\x01\x01\x42\n\n\x08_configs\"\x9d\x36\n\x12ListconfigsConfigs\x12.\n\x04\x63onf\x18\x01 \x01(\x0b\x32\x1b.cln.ListconfigsConfigsConfH\x00\x88\x01\x01\x12\x38\n\tdeveloper\x18\x02 \x01(\x0b\x32 .cln.ListconfigsConfigsDeveloperH\x01\x88\x01\x01\x12?\n\rclear_plugins\x18\x03 \x01(\x0b\x32#.cln.ListconfigsConfigsClearpluginsH\x02\x88\x01\x01\x12;\n\x0b\x64isable_mpp\x18\x04 \x01(\x0b\x32!.cln.ListconfigsConfigsDisablemppH\x03\x88\x01\x01\x12\x34\n\x07mainnet\x18\x05 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsMainnetH\x04\x88\x01\x01\x12\x34\n\x07regtest\x18\x06 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsRegtestH\x05\x88\x01\x01\x12\x32\n\x06signet\x18\x07 \x01(\x0b\x32\x1d.cln.ListconfigsConfigsSignetH\x06\x88\x01\x01\x12\x34\n\x07testnet\x18\x08 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsTestnetH\x07\x88\x01\x01\x12\x45\n\x10important_plugin\x18\t \x01(\x0b\x32&.cln.ListconfigsConfigsImportantpluginH\x08\x88\x01\x01\x12\x32\n\x06plugin\x18\n \x01(\x0b\x32\x1d.cln.ListconfigsConfigsPluginH\t\x88\x01\x01\x12\x39\n\nplugin_dir\x18\x0b \x01(\x0b\x32 .cln.ListconfigsConfigsPlugindirH\n\x88\x01\x01\x12?\n\rlightning_dir\x18\x0c \x01(\x0b\x32#.cln.ListconfigsConfigsLightningdirH\x0b\x88\x01\x01\x12\x34\n\x07network\x18\r \x01(\x0b\x32\x1e.cln.ListconfigsConfigsNetworkH\x0c\x88\x01\x01\x12N\n\x15\x61llow_deprecated_apis\x18\x0e \x01(\x0b\x32*.cln.ListconfigsConfigsAllowdeprecatedapisH\r\x88\x01\x01\x12\x35\n\x08rpc_file\x18\x0f \x01(\x0b\x32\x1e.cln.ListconfigsConfigsRpcfileH\x0e\x88\x01\x01\x12\x41\n\x0e\x64isable_plugin\x18\x10 \x01(\x0b\x32$.cln.ListconfigsConfigsDisablepluginH\x0f\x88\x01\x01\x12\x44\n\x10\x61lways_use_proxy\x18\x11 \x01(\x0b\x32%.cln.ListconfigsConfigsAlwaysuseproxyH\x10\x88\x01\x01\x12\x32\n\x06\x64\x61\x65mon\x18\x12 \x01(\x0b\x32\x1d.cln.ListconfigsConfigsDaemonH\x11\x88\x01\x01\x12\x32\n\x06wallet\x18\x13 \x01(\x0b\x32\x1d.cln.ListconfigsConfigsWalletH\x12\x88\x01\x01\x12\x41\n\x0elarge_channels\x18\x14 \x01(\x0b\x32$.cln.ListconfigsConfigsLargechannelsH\x13\x88\x01\x01\x12P\n\x16\x65xperimental_dual_fund\x18\x15 \x01(\x0b\x32+.cln.ListconfigsConfigsExperimentaldualfundH\x14\x88\x01\x01\x12S\n\x15\x65xperimental_splicing\x18\x16 \x01(\x0b\x32+.cln.ListconfigsConfigsExperimentalsplicingB\x02\x18\x01H\x15\x88\x01\x01\x12i\n#experimental_shutdown_wrong_funding\x18\x19 \x01(\x0b\x32\x37.cln.ListconfigsConfigsExperimentalshutdownwrongfundingH\x16\x88\x01\x01\x12Z\n\x19\x65xperimental_peer_storage\x18\x1a \x01(\x0b\x32..cln.ListconfigsConfigsExperimentalpeerstorageB\x02\x18\x01H\x17\x88\x01\x01\x12Q\n\x14\x65xperimental_anchors\x18\x1b \x01(\x0b\x32*.cln.ListconfigsConfigsExperimentalanchorsB\x02\x18\x01H\x18\x88\x01\x01\x12\x45\n\x10\x64\x61tabase_upgrade\x18\x1c \x01(\x0b\x32&.cln.ListconfigsConfigsDatabaseupgradeH\x19\x88\x01\x01\x12,\n\x03rgb\x18\x1d \x01(\x0b\x32\x1a.cln.ListconfigsConfigsRgbH\x1a\x88\x01\x01\x12\x30\n\x05\x61lias\x18\x1e \x01(\x0b\x32\x1c.cln.ListconfigsConfigsAliasH\x1b\x88\x01\x01\x12\x35\n\x08pid_file\x18\x1f \x01(\x0b\x32\x1e.cln.ListconfigsConfigsPidfileH\x1c\x88\x01\x01\x12\x46\n\x11ignore_fee_limits\x18 \x01(\x0b\x32&.cln.ListconfigsConfigsIgnorefeelimitsH\x1d\x88\x01\x01\x12\x45\n\x10watchtime_blocks\x18! \x01(\x0b\x32&.cln.ListconfigsConfigsWatchtimeblocksH\x1e\x88\x01\x01\x12N\n\x13max_locktime_blocks\x18\" \x01(\x0b\x32(.cln.ListconfigsConfigsMaxlocktimeblocksB\x02\x18\x01H\x1f\x88\x01\x01\x12\x45\n\x10\x66unding_confirms\x18# \x01(\x0b\x32&.cln.ListconfigsConfigsFundingconfirmsH \x88\x01\x01\x12\x39\n\ncltv_delta\x18$ \x01(\x0b\x32 .cln.ListconfigsConfigsCltvdeltaH!\x88\x01\x01\x12\x39\n\ncltv_final\x18% \x01(\x0b\x32 .cln.ListconfigsConfigsCltvfinalH\"\x88\x01\x01\x12;\n\x0b\x63ommit_time\x18& \x01(\x0b\x32!.cln.ListconfigsConfigsCommittimeH#\x88\x01\x01\x12\x35\n\x08\x66\x65\x65_base\x18\' \x01(\x0b\x32\x1e.cln.ListconfigsConfigsFeebaseH$\x88\x01\x01\x12\x32\n\x06rescan\x18( \x01(\x0b\x32\x1d.cln.ListconfigsConfigsRescanH%\x88\x01\x01\x12\x42\n\x0f\x66\x65\x65_per_satoshi\x18) \x01(\x0b\x32$.cln.ListconfigsConfigsFeepersatoshiH&\x88\x01\x01\x12L\n\x14max_concurrent_htlcs\x18* \x01(\x0b\x32).cln.ListconfigsConfigsMaxconcurrenthtlcsH\'\x88\x01\x01\x12\x46\n\x11htlc_minimum_msat\x18+ \x01(\x0b\x32&.cln.ListconfigsConfigsHtlcminimummsatH(\x88\x01\x01\x12\x46\n\x11htlc_maximum_msat\x18, \x01(\x0b\x32&.cln.ListconfigsConfigsHtlcmaximummsatH)\x88\x01\x01\x12X\n\x1bmax_dust_htlc_exposure_msat\x18- \x01(\x0b\x32..cln.ListconfigsConfigsMaxdusthtlcexposuremsatH*\x88\x01\x01\x12\x44\n\x10min_capacity_sat\x18. \x01(\x0b\x32%.cln.ListconfigsConfigsMincapacitysatH+\x88\x01\x01\x12.\n\x04\x61\x64\x64r\x18/ \x01(\x0b\x32\x1b.cln.ListconfigsConfigsAddrH,\x88\x01\x01\x12?\n\rannounce_addr\x18\x30 \x01(\x0b\x32#.cln.ListconfigsConfigsAnnounceaddrH-\x88\x01\x01\x12\x37\n\tbind_addr\x18\x31 \x01(\x0b\x32\x1f.cln.ListconfigsConfigsBindaddrH.\x88\x01\x01\x12\x34\n\x07offline\x18\x32 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsOfflineH/\x88\x01\x01\x12:\n\nautolisten\x18\x33 \x01(\x0b\x32!.cln.ListconfigsConfigsAutolistenH0\x88\x01\x01\x12\x30\n\x05proxy\x18\x34 \x01(\x0b\x32\x1c.cln.ListconfigsConfigsProxyH1\x88\x01\x01\x12;\n\x0b\x64isable_dns\x18\x35 \x01(\x0b\x32!.cln.ListconfigsConfigsDisablednsH2\x88\x01\x01\x12T\n\x18\x61nnounce_addr_discovered\x18\x36 \x01(\x0b\x32-.cln.ListconfigsConfigsAnnounceaddrdiscoveredH3\x88\x01\x01\x12]\n\x1d\x61nnounce_addr_discovered_port\x18\x37 \x01(\x0b\x32\x31.cln.ListconfigsConfigsAnnounceaddrdiscoveredportH4\x88\x01\x01\x12\x43\n\rencrypted_hsm\x18\x38 \x01(\x0b\x32#.cln.ListconfigsConfigsEncryptedhsmB\x02\x18\x01H5\x88\x01\x01\x12>\n\rrpc_file_mode\x18\x39 \x01(\x0b\x32\".cln.ListconfigsConfigsRpcfilemodeH6\x88\x01\x01\x12\x37\n\tlog_level\x18: \x01(\x0b\x32\x1f.cln.ListconfigsConfigsLoglevelH7\x88\x01\x01\x12\x39\n\nlog_prefix\x18; \x01(\x0b\x32 .cln.ListconfigsConfigsLogprefixH8\x88\x01\x01\x12\x35\n\x08log_file\x18< \x01(\x0b\x32\x1e.cln.ListconfigsConfigsLogfileH9\x88\x01\x01\x12\x41\n\x0elog_timestamps\x18= \x01(\x0b\x32$.cln.ListconfigsConfigsLogtimestampsH:\x88\x01\x01\x12\x41\n\x0e\x66orce_feerates\x18> \x01(\x0b\x32$.cln.ListconfigsConfigsForcefeeratesH;\x88\x01\x01\x12\x38\n\tsubdaemon\x18? \x01(\x0b\x32 .cln.ListconfigsConfigsSubdaemonH<\x88\x01\x01\x12Q\n\x16\x66\x65tchinvoice_noconnect\x18@ \x01(\x0b\x32,.cln.ListconfigsConfigsFetchinvoicenoconnectH=\x88\x01\x01\x12L\n\x14tor_service_password\x18\x42 \x01(\x0b\x32).cln.ListconfigsConfigsTorservicepasswordH>\x88\x01\x01\x12\x46\n\x11\x61nnounce_addr_dns\x18\x43 \x01(\x0b\x32&.cln.ListconfigsConfigsAnnounceaddrdnsH?\x88\x01\x01\x12T\n\x18require_confirmed_inputs\x18\x44 \x01(\x0b\x32-.cln.ListconfigsConfigsRequireconfirmedinputsH@\x88\x01\x01\x12\x39\n\ncommit_fee\x18\x45 \x01(\x0b\x32 .cln.ListconfigsConfigsCommitfeeHA\x88\x01\x01\x12N\n\x15\x63ommit_feerate_offset\x18\x46 \x01(\x0b\x32*.cln.ListconfigsConfigsCommitfeerateoffsetHB\x88\x01\x01\x12T\n\x18\x61utoconnect_seeker_peers\x18G \x01(\x0b\x32-.cln.ListconfigsConfigsAutoconnectseekerpeersHC\x88\x01\x01\x12R\n\x17\x63urrencyrate_add_source\x18J \x01(\x0b\x32,.cln.ListconfigsConfigsCurrencyrateaddsourceHD\x88\x01\x01\x12Z\n\x1b\x63urrencyrate_disable_source\x18K \x01(\x0b\x32\x30.cln.ListconfigsConfigsCurrencyratedisablesourceHE\x88\x01\x01\x12V\n\x19\x65xperimental_simple_close\x18L \x01(\x0b\x32..cln.ListconfigsConfigsExperimentalsimplecloseHF\x88\x01\x01\x12K\n\x14\x61\x63\x63\x65pt_htlc_tlv_type\x18M \x01(\x0b\x32(.cln.ListconfigsConfigsAccepthtlctlvtypeHG\x88\x01\x01\x12\x41\n\x0ehsm_passphrase\x18N \x01(\x0b\x32$.cln.ListconfigsConfigsHsmpassphraseHH\x88\x01\x01\x12`\n i_promise_to_fix_broken_api_user\x18O \x01(\x0b\x32\x31.cln.ListconfigsConfigsIpromisetofixbrokenapiuserHI\x88\x01\x01\x12V\n\x19invoices_onchain_fallback\x18P \x01(\x0b\x32..cln.ListconfigsConfigsInvoicesonchainfallbackHJ\x88\x01\x01\x12\x43\n\x0fmessage_padding\x18Q \x01(\x0b\x32%.cln.ListconfigsConfigsMessagepaddingHK\x88\x01\x01\x12H\n\x12min_emergency_msat\x18R \x01(\x0b\x32\'.cln.ListconfigsConfigsMinemergencymsatHL\x88\x01\x01\x12N\n\x15payment_fronting_node\x18S \x01(\x0b\x32*.cln.ListconfigsConfigsPaymentfrontingnodeHM\x88\x01\x01\x12\x34\n\x07recover\x18T \x01(\x0b\x32\x1e.cln.ListconfigsConfigsRecoverHN\x88\x01\x01\x42\x07\n\x05_confB\x0c\n\n_developerB\x10\n\x0e_clear_pluginsB\x0e\n\x0c_disable_mppB\n\n\x08_mainnetB\n\n\x08_regtestB\t\n\x07_signetB\n\n\x08_testnetB\x13\n\x11_important_pluginB\t\n\x07_pluginB\r\n\x0b_plugin_dirB\x10\n\x0e_lightning_dirB\n\n\x08_networkB\x18\n\x16_allow_deprecated_apisB\x0b\n\t_rpc_fileB\x11\n\x0f_disable_pluginB\x13\n\x11_always_use_proxyB\t\n\x07_daemonB\t\n\x07_walletB\x11\n\x0f_large_channelsB\x19\n\x17_experimental_dual_fundB\x18\n\x16_experimental_splicingB&\n$_experimental_shutdown_wrong_fundingB\x1c\n\x1a_experimental_peer_storageB\x17\n\x15_experimental_anchorsB\x13\n\x11_database_upgradeB\x06\n\x04_rgbB\x08\n\x06_aliasB\x0b\n\t_pid_fileB\x14\n\x12_ignore_fee_limitsB\x13\n\x11_watchtime_blocksB\x16\n\x14_max_locktime_blocksB\x13\n\x11_funding_confirmsB\r\n\x0b_cltv_deltaB\r\n\x0b_cltv_finalB\x0e\n\x0c_commit_timeB\x0b\n\t_fee_baseB\t\n\x07_rescanB\x12\n\x10_fee_per_satoshiB\x17\n\x15_max_concurrent_htlcsB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x1e\n\x1c_max_dust_htlc_exposure_msatB\x13\n\x11_min_capacity_satB\x07\n\x05_addrB\x10\n\x0e_announce_addrB\x0c\n\n_bind_addrB\n\n\x08_offlineB\r\n\x0b_autolistenB\x08\n\x06_proxyB\x0e\n\x0c_disable_dnsB\x1b\n\x19_announce_addr_discoveredB \n\x1e_announce_addr_discovered_portB\x10\n\x0e_encrypted_hsmB\x10\n\x0e_rpc_file_modeB\x0c\n\n_log_levelB\r\n\x0b_log_prefixB\x0b\n\t_log_fileB\x11\n\x0f_log_timestampsB\x11\n\x0f_force_feeratesB\x0c\n\n_subdaemonB\x19\n\x17_fetchinvoice_noconnectB\x17\n\x15_tor_service_passwordB\x14\n\x12_announce_addr_dnsB\x1b\n\x19_require_confirmed_inputsB\r\n\x0b_commit_feeB\x18\n\x16_commit_feerate_offsetB\x1b\n\x19_autoconnect_seeker_peersB\x1a\n\x18_currencyrate_add_sourceB\x1e\n\x1c_currencyrate_disable_sourceB\x1c\n\x1a_experimental_simple_closeB\x17\n\x15_accept_htlc_tlv_typeB\x11\n\x0f_hsm_passphraseB#\n!_i_promise_to_fix_broken_api_userB\x1c\n\x1a_invoices_onchain_fallbackB\x12\n\x10_message_paddingB\x15\n\x13_min_emergency_msatB\x18\n\x16_payment_fronting_nodeB\n\n\x08_recover\"J\n#ListconfigsConfigsAccepthtlctlvtype\x12\x0f\n\x07sources\x18\x01 \x03(\t\x12\x12\n\nvalues_int\x18\x02 \x03(\r\"=\n\x16ListconfigsConfigsAddr\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"<\n\x17ListconfigsConfigsAlias\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"K\n%ListconfigsConfigsAllowdeprecatedapis\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"F\n ListconfigsConfigsAlwaysuseproxy\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"E\n\x1eListconfigsConfigsAnnounceaddr\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"\x80\x02\n(ListconfigsConfigsAnnounceaddrdiscovered\x12q\n\tvalue_str\x18\x01 \x01(\x0e\x32^.cln.ListconfigsConfigsAnnounceaddrdiscovered.ListconfigsConfigsAnnounceaddrdiscoveredValueStr\x12\x0e\n\x06source\x18\x02 \x01(\t\"Q\n0ListconfigsConfigsAnnounceaddrdiscoveredValueStr\x12\x08\n\x04TRUE\x10\x00\x12\t\n\x05\x46\x41LSE\x10\x01\x12\x08\n\x04\x41UTO\x10\x02\"Q\n,ListconfigsConfigsAnnounceaddrdiscoveredport\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"G\n!ListconfigsConfigsAnnounceaddrdns\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"M\n(ListconfigsConfigsAutoconnectseekerpeers\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1cListconfigsConfigsAutolisten\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"A\n\x1aListconfigsConfigsBindaddr\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"=\n\x1eListconfigsConfigsClearplugins\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsCltvdelta\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsCltvfinal\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsCommitfee\x12\x11\n\tvalue_int\x18\x01 \x01(\x04\x12\x0e\n\x06source\x18\x02 \x01(\t\"J\n%ListconfigsConfigsCommitfeerateoffset\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"A\n\x1cListconfigsConfigsCommittime\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"\xa2\x01\n\x16ListconfigsConfigsConf\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12H\n\x06source\x18\x02 \x01(\x0e\x32\x38.cln.ListconfigsConfigsConf.ListconfigsConfigsConfSource\"+\n\x1cListconfigsConfigsConfSource\x12\x0b\n\x07\x43MDLINE\x10\x00\"n\n\'ListconfigsConfigsCurrencyrateaddsource\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"r\n+ListconfigsConfigsCurrencyratedisablesource\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"7\n\x18ListconfigsConfigsDaemon\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"G\n!ListconfigsConfigsDatabaseupgrade\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\":\n\x1bListconfigsConfigsDeveloper\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\";\n\x1cListconfigsConfigsDisabledns\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"[\n\x1cListconfigsConfigsDisablempp\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"F\n\x1fListconfigsConfigsDisableplugin\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"E\n\x1eListconfigsConfigsEncryptedhsm\x12\x0f\n\x03set\x18\x01 \x01(\x08\x42\x02\x18\x01\x12\x12\n\x06source\x18\x02 \x01(\tB\x02\x18\x01\"L\n%ListconfigsConfigsExperimentalanchors\x12\x0f\n\x03set\x18\x01 \x01(\x08\x42\x02\x18\x01\x12\x12\n\x06source\x18\x02 \x01(\tB\x02\x18\x01\"E\n&ListconfigsConfigsExperimentaldualfund\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"P\n)ListconfigsConfigsExperimentalpeerstorage\x12\x0f\n\x03set\x18\x01 \x01(\x08\x42\x02\x18\x01\x12\x12\n\x06source\x18\x02 \x01(\tB\x02\x18\x01\"Q\n2ListconfigsConfigsExperimentalshutdownwrongfunding\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"H\n)ListconfigsConfigsExperimentalsimpleclose\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"M\n&ListconfigsConfigsExperimentalsplicing\x12\x0f\n\x03set\x18\x01 \x01(\x08\x42\x02\x18\x01\x12\x12\n\x06source\x18\x02 \x01(\tB\x02\x18\x01\">\n\x19ListconfigsConfigsFeebase\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"D\n\x1fListconfigsConfigsFeepersatoshi\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"f\n\'ListconfigsConfigsFetchinvoicenoconnect\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"D\n\x1fListconfigsConfigsForcefeerates\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"F\n!ListconfigsConfigsFundingconfirms\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x1fListconfigsConfigsHsmpassphrase\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"T\n!ListconfigsConfigsHtlcmaximummsat\x12\x1f\n\nvalue_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06source\x18\x02 \x01(\t\"T\n!ListconfigsConfigsHtlcminimummsat\x12\x1f\n\nvalue_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06source\x18\x02 \x01(\t\"S\n,ListconfigsConfigsIpromisetofixbrokenapiuser\x12\x0f\n\x07sources\x18\x01 \x03(\t\x12\x12\n\nvalues_str\x18\x02 \x03(\t\"G\n!ListconfigsConfigsIgnorefeelimits\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"H\n!ListconfigsConfigsImportantplugin\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"H\n)ListconfigsConfigsInvoicesonchainfallback\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x1fListconfigsConfigsLargechannels\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"C\n\x1eListconfigsConfigsLightningdir\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x19ListconfigsConfigsLogfile\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"?\n\x1aListconfigsConfigsLoglevel\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsLogprefix\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"E\n\x1fListconfigsConfigsLogtimestamps\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"8\n\x19ListconfigsConfigsMainnet\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"I\n$ListconfigsConfigsMaxconcurrenthtlcs\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"\\\n)ListconfigsConfigsMaxdusthtlcexposuremsat\x12\x1f\n\nvalue_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06source\x18\x02 \x01(\t\"P\n#ListconfigsConfigsMaxlocktimeblocks\x12\x15\n\tvalue_int\x18\x01 \x01(\rB\x02\x18\x01\x12\x12\n\x06source\x18\x02 \x01(\tB\x02\x18\x01\"F\n ListconfigsConfigsMessagepadding\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x12\n\nvalue_bool\x18\x02 \x01(\x08\"g\n ListconfigsConfigsMincapacitysat\x12\x11\n\tvalue_int\x18\x01 \x01(\x04\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x14\n\x07\x64ynamic\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\n\n\x08_dynamic\"U\n\"ListconfigsConfigsMinemergencymsat\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x1f\n\nvalue_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\">\n\x19ListconfigsConfigsNetwork\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"8\n\x19ListconfigsConfigsOffline\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"L\n%ListconfigsConfigsPaymentfrontingnode\x12\x0f\n\x07sources\x18\x01 \x03(\t\x12\x12\n\nvalues_str\x18\x02 \x03(\t\">\n\x19ListconfigsConfigsPidfile\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"?\n\x18ListconfigsConfigsPlugin\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"B\n\x1bListconfigsConfigsPlugindir\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"<\n\x17ListconfigsConfigsProxy\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x19ListconfigsConfigsRecover\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x11\n\tvalue_str\x18\x02 \x01(\t\"8\n\x19ListconfigsConfigsRegtest\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"N\n(ListconfigsConfigsRequireconfirmedinputs\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"=\n\x18ListconfigsConfigsRescan\x12\x11\n\tvalue_int\x18\x01 \x01(\x12\x12\x0e\n\x06source\x18\x02 \x01(\t\":\n\x15ListconfigsConfigsRgb\x12\x11\n\tvalue_str\x18\x01 \x01(\x0c\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x19ListconfigsConfigsRpcfile\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1dListconfigsConfigsRpcfilemode\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"7\n\x18ListconfigsConfigsSignet\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1bListconfigsConfigsSubdaemon\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"8\n\x19ListconfigsConfigsTestnet\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"I\n$ListconfigsConfigsTorservicepassword\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"=\n\x18ListconfigsConfigsWallet\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"F\n!ListconfigsConfigsWatchtimeblocks\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"\r\n\x0bStopRequest\"a\n\x0cStopResponse\x12,\n\x06result\x18\x01 \x01(\x0e\x32\x1c.cln.StopResponse.StopResult\"#\n\nStopResult\x12\x15\n\x11SHUTDOWN_COMPLETE\x10\x00\"/\n\x0bHelpRequest\x12\x14\n\x07\x63ommand\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_command\"\x95\x01\n\x0cHelpResponse\x12\x1b\n\x04help\x18\x01 \x03(\x0b\x32\r.cln.HelpHelp\x12:\n\x0b\x66ormat_hint\x18\x02 \x01(\x0e\x32 .cln.HelpResponse.HelpFormathintH\x00\x88\x01\x01\"\x1c\n\x0eHelpFormathint\x12\n\n\x06SIMPLE\x10\x00\x42\x0e\n\x0c_format_hint\"\x1b\n\x08HelpHelp\x12\x0f\n\x07\x63ommand\x18\x01 \x01(\t\"g\n\x18PreapprovekeysendRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\x0c\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\"\x1b\n\x19PreapprovekeysendResponse\"*\n\x18PreapproveinvoiceRequest\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\"\x1b\n\x19PreapproveinvoiceResponse\"\x15\n\x13StaticbackupRequest\"#\n\x14StaticbackupResponse\x12\x0b\n\x03scb\x18\x01 \x03(\x0c\"d\n\x16\x42kprchannelsapyRequest\x12\x17\n\nstart_time\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x02 \x01(\x04H\x01\x88\x01\x01\x42\r\n\x0b_start_timeB\x0b\n\t_end_time\"P\n\x17\x42kprchannelsapyResponse\x12\x35\n\x0c\x63hannels_apy\x18\x01 \x03(\x0b\x32\x1f.cln.BkprchannelsapyChannelsApy\"\xf9\x06\n\x1a\x42kprchannelsapyChannelsApy\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12$\n\x0frouted_out_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0erouted_in_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12(\n\x13lease_fee_paid_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12*\n\x15lease_fee_earned_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12$\n\x0fpushed_out_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0epushed_in_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x16our_start_balance_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12/\n\x1a\x63hannel_start_balance_msat\x18\t \x01(\x0b\x32\x0b.cln.Amount\x12\"\n\rfees_out_msat\x18\n \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x0c\x66\x65\x65s_in_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x17\n\x0futilization_out\x18\x0c \x01(\t\x12$\n\x17utilization_out_initial\x18\r \x01(\tH\x01\x88\x01\x01\x12\x16\n\x0eutilization_in\x18\x0e \x01(\t\x12#\n\x16utilization_in_initial\x18\x0f \x01(\tH\x02\x88\x01\x01\x12\x0f\n\x07\x61py_out\x18\x10 \x01(\t\x12\x1c\n\x0f\x61py_out_initial\x18\x11 \x01(\tH\x03\x88\x01\x01\x12\x0e\n\x06\x61py_in\x18\x12 \x01(\t\x12\x1b\n\x0e\x61py_in_initial\x18\x13 \x01(\tH\x04\x88\x01\x01\x12\x11\n\tapy_total\x18\x14 \x01(\t\x12\x1e\n\x11\x61py_total_initial\x18\x15 \x01(\tH\x05\x88\x01\x01\x12\x16\n\tapy_lease\x18\x16 \x01(\tH\x06\x88\x01\x01\x42\x0f\n\r_fees_in_msatB\x1a\n\x18_utilization_out_initialB\x19\n\x17_utilization_in_initialB\x12\n\x10_apy_out_initialB\x11\n\x0f_apy_in_initialB\x14\n\x12_apy_total_initialB\x0c\n\n_apy_lease\"\xd2\x01\n\x18\x42kprdumpincomecsvRequest\x12\x12\n\ncsv_format\x18\x01 \x01(\t\x12\x15\n\x08\x63sv_file\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x1d\n\x10\x63onsolidate_fees\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x17\n\nstart_time\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x05 \x01(\x04H\x03\x88\x01\x01\x42\x0b\n\t_csv_fileB\x13\n\x11_consolidate_feesB\r\n\x0b_start_timeB\x0b\n\t_end_time\"\xd4\x01\n\x19\x42kprdumpincomecsvResponse\x12\x10\n\x08\x63sv_file\x18\x01 \x01(\t\x12M\n\ncsv_format\x18\x02 \x01(\x0e\x32\x39.cln.BkprdumpincomecsvResponse.BkprdumpincomecsvCsvFormat\"V\n\x1a\x42kprdumpincomecsvCsvFormat\x12\x0f\n\x0b\x43OINTRACKER\x10\x00\x12\n\n\x06KOINLY\x10\x01\x12\x0b\n\x07HARMONY\x10\x02\x12\x0e\n\nQUICKBOOKS\x10\x03\"%\n\x12\x42kprinspectRequest\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\"7\n\x13\x42kprinspectResponse\x12 \n\x03txs\x18\x01 \x03(\x0b\x32\x13.cln.BkprinspectTxs\"\x9a\x01\n\x0e\x42kprinspectTxs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x18\n\x0b\x62lockheight\x18\x02 \x01(\rH\x00\x88\x01\x01\x12#\n\x0e\x66\x65\x65s_paid_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x07outputs\x18\x04 \x03(\x0b\x32\x1a.cln.BkprinspectTxsOutputsB\x0e\n\x0c_blockheight\"\xbc\x03\n\x15\x42kprinspectTxsOutputs\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x0e\n\x06outnum\x18\x02 \x01(\r\x12&\n\x11output_value_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x04 \x01(\t\x12%\n\x0b\x63redit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12$\n\ndebit_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12 \n\x13originating_account\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x17\n\noutput_tag\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tspend_tag\x18\t \x01(\tH\x04\x88\x01\x01\x12\x1a\n\rspending_txid\x18\n \x01(\x0cH\x05\x88\x01\x01\x12\x17\n\npayment_id\x18\x0b \x01(\x0cH\x06\x88\x01\x01\x42\x0e\n\x0c_credit_msatB\r\n\x0b_debit_msatB\x16\n\x14_originating_accountB\r\n\x0b_output_tagB\x0c\n\n_spend_tagB\x10\n\x0e_spending_txidB\r\n\x0b_payment_id\"h\n\x1c\x42kprlistaccounteventsRequest\x12\x14\n\x07\x61\x63\x63ount\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x17\n\npayment_id\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\n\n\x08_accountB\r\n\x0b_payment_id\"Q\n\x1d\x42kprlistaccounteventsResponse\x12\x30\n\x06\x65vents\x18\x01 \x03(\x0b\x32 .cln.BkprlistaccounteventsEvents\"\xcd\x05\n\x1b\x42kprlistaccounteventsEvents\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12S\n\titem_type\x18\x02 \x01(\x0e\x32@.cln.BkprlistaccounteventsEvents.BkprlistaccounteventsEventsType\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x06 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\r\x12\x15\n\x08outpoint\x18\x08 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\t \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06origin\x18\n \x01(\tH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\x0b \x01(\x0cH\x03\x88\x01\x01\x12\x11\n\x04txid\x18\x0c \x01(\x0cH\x04\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\r \x01(\tH\x05\x88\x01\x01\x12#\n\tfees_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x19\n\x0cis_rebalance\x18\x0f \x01(\x08H\x07\x88\x01\x01\x12\x14\n\x07part_id\x18\x10 \x01(\rH\x08\x88\x01\x01\x12\x19\n\x0c\x63urrencyrate\x18\x11 \x01(\x01H\t\x88\x01\x01\"J\n\x1f\x42kprlistaccounteventsEventsType\x12\x0f\n\x0bONCHAIN_FEE\x10\x00\x12\t\n\x05\x43HAIN\x10\x01\x12\x0b\n\x07\x43HANNEL\x10\x02\x42\x0b\n\t_outpointB\x0e\n\x0c_blockheightB\t\n\x07_originB\r\n\x0b_payment_idB\x07\n\x05_txidB\x0e\n\x0c_descriptionB\x0c\n\n_fees_msatB\x0f\n\r_is_rebalanceB\n\n\x08_part_idB\x0f\n\r_currencyrate\"\x19\n\x17\x42kprlistbalancesRequest\"K\n\x18\x42kprlistbalancesResponse\x12/\n\x08\x61\x63\x63ounts\x18\x01 \x03(\x0b\x32\x1d.cln.BkprlistbalancesAccounts\"\xc6\x02\n\x18\x42kprlistbalancesAccounts\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x37\n\x08\x62\x61lances\x18\x02 \x03(\x0b\x32%.cln.BkprlistbalancesAccountsBalances\x12\x14\n\x07peer_id\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x16\n\twe_opened\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x1b\n\x0e\x61\x63\x63ount_closed\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x1d\n\x10\x61\x63\x63ount_resolved\x18\x06 \x01(\x08H\x03\x88\x01\x01\x12\x1e\n\x11resolved_at_block\x18\x07 \x01(\rH\x04\x88\x01\x01\x42\n\n\x08_peer_idB\x0c\n\n_we_openedB\x11\n\x0f_account_closedB\x13\n\x11_account_resolvedB\x14\n\x12_resolved_at_block\"X\n BkprlistbalancesAccountsBalances\x12!\n\x0c\x62\x61lance_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\tcoin_type\x18\x02 \x01(\t\"\x97\x01\n\x15\x42kprlistincomeRequest\x12\x1d\n\x10\x63onsolidate_fees\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x17\n\nstart_time\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x03 \x01(\rH\x02\x88\x01\x01\x42\x13\n\x11_consolidate_feesB\r\n\x0b_start_timeB\x0b\n\t_end_time\"P\n\x16\x42kprlistincomeResponse\x12\x36\n\rincome_events\x18\x01 \x03(\x0b\x32\x1f.cln.BkprlistincomeIncomeEvents\"\xb4\x02\n\x1a\x42kprlistincomeIncomeEvents\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x0b\n\x03tag\x18\x02 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\r\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08outpoint\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\t \x01(\x0cH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\n \x01(\x0cH\x03\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0b\n\t_outpointB\x07\n\x05_txidB\r\n\x0b_payment_id\"P\n%BkpreditdescriptionbypaymentidRequest\x12\x12\n\npayment_id\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"e\n&BkpreditdescriptionbypaymentidResponse\x12;\n\x07updated\x18\x01 \x03(\x0b\x32*.cln.BkpreditdescriptionbypaymentidUpdated\"\xa3\x05\n%BkpreditdescriptionbypaymentidUpdated\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12g\n\titem_type\x18\x02 \x01(\x0e\x32T.cln.BkpreditdescriptionbypaymentidUpdated.BkpreditdescriptionbypaymentidUpdatedType\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x06 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\r\x12\x13\n\x0b\x64\x65scription\x18\x08 \x01(\t\x12\x15\n\x08outpoint\x18\t \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\n \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06origin\x18\x0b \x01(\tH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\x0c \x01(\x0cH\x03\x88\x01\x01\x12\x11\n\x04txid\x18\r \x01(\x0cH\x04\x88\x01\x01\x12#\n\tfees_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x19\n\x0cis_rebalance\x18\x0f \x01(\x08H\x06\x88\x01\x01\x12\x14\n\x07part_id\x18\x10 \x01(\rH\x07\x88\x01\x01\"C\n)BkpreditdescriptionbypaymentidUpdatedType\x12\t\n\x05\x43HAIN\x10\x00\x12\x0b\n\x07\x43HANNEL\x10\x01\x42\x0b\n\t_outpointB\x0e\n\x0c_blockheightB\t\n\x07_originB\r\n\x0b_payment_idB\x07\n\x05_txidB\x0c\n\n_fees_msatB\x0f\n\r_is_rebalanceB\n\n\x08_part_id\"M\n$BkpreditdescriptionbyoutpointRequest\x12\x10\n\x08outpoint\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"c\n%BkpreditdescriptionbyoutpointResponse\x12:\n\x07updated\x18\x01 \x03(\x0b\x32).cln.BkpreditdescriptionbyoutpointUpdated\"\x9f\x05\n$BkpreditdescriptionbyoutpointUpdated\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x65\n\titem_type\x18\x02 \x01(\x0e\x32R.cln.BkpreditdescriptionbyoutpointUpdated.BkpreditdescriptionbyoutpointUpdatedType\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x06 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\r\x12\x13\n\x0b\x64\x65scription\x18\x08 \x01(\t\x12\x15\n\x08outpoint\x18\t \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\n \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06origin\x18\x0b \x01(\tH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\x0c \x01(\x0cH\x03\x88\x01\x01\x12\x11\n\x04txid\x18\r \x01(\x0cH\x04\x88\x01\x01\x12#\n\tfees_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x19\n\x0cis_rebalance\x18\x0f \x01(\x08H\x06\x88\x01\x01\x12\x14\n\x07part_id\x18\x10 \x01(\rH\x07\x88\x01\x01\"B\n(BkpreditdescriptionbyoutpointUpdatedType\x12\t\n\x05\x43HAIN\x10\x00\x12\x0b\n\x07\x43HANNEL\x10\x01\x42\x0b\n\t_outpointB\x0e\n\x0c_blockheightB\t\n\x07_originB\r\n\x0b_payment_idB\x07\n\x05_txidB\x0c\n\n_fees_msatB\x0f\n\r_is_rebalanceB\n\n\x08_part_id\"\xb0\x01\n\x11\x42kprreportRequest\x12\x13\n\x06\x66ormat\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x07headers\x18\x02 \x03(\t\x12\x13\n\x06\x65scape\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nstart_time\x18\x04 \x01(\rH\x02\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x05 \x01(\rH\x03\x88\x01\x01\x42\t\n\x07_formatB\t\n\x07_escapeB\r\n\x0b_start_timeB\x0b\n\t_end_time\"$\n\x12\x42kprreportResponse\x12\x0e\n\x06report\x18\x01 \x03(\t\"n\n\x14\x42lacklistruneRequest\x12\x12\n\x05start\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03\x65nd\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x13\n\x06relist\x18\x03 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_startB\x06\n\x04_endB\t\n\x07_relist\"G\n\x15\x42lacklistruneResponse\x12.\n\tblacklist\x18\x01 \x03(\x0b\x32\x1b.cln.BlacklistruneBlacklist\"4\n\x16\x42lacklistruneBlacklist\x12\r\n\x05start\x18\x01 \x01(\x04\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x04\"p\n\x10\x43heckruneRequest\x12\x0c\n\x04rune\x18\x01 \x01(\t\x12\x13\n\x06nodeid\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06method\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0e\n\x06params\x18\x04 \x03(\tB\t\n\x07_nodeidB\t\n\x07_method\"\"\n\x11\x43heckruneResponse\x12\r\n\x05valid\x18\x01 \x01(\x08\"E\n\x11\x43reateruneRequest\x12\x11\n\x04rune\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0crestrictions\x18\x02 \x03(\tB\x07\n\x05_rune\"{\n\x12\x43reateruneResponse\x12\x0c\n\x04rune\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12&\n\x19warning_unrestricted_rune\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x1c\n\x1a_warning_unrestricted_rune\".\n\x10ShowrunesRequest\x12\x11\n\x04rune\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x07\n\x05_rune\"7\n\x11ShowrunesResponse\x12\"\n\x05runes\x18\x01 \x03(\x0b\x32\x13.cln.ShowrunesRunes\"\x9d\x02\n\x0eShowrunesRunes\x12\x0c\n\x04rune\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12\x35\n\x0crestrictions\x18\x03 \x03(\x0b\x32\x1f.cln.ShowrunesRunesRestrictions\x12\x1f\n\x17restrictions_as_english\x18\x04 \x01(\t\x12\x13\n\x06stored\x18\x05 \x01(\x08H\x00\x88\x01\x01\x12\x18\n\x0b\x62lacklisted\x18\x06 \x01(\x08H\x01\x88\x01\x01\x12\x16\n\tlast_used\x18\x07 \x01(\x01H\x02\x88\x01\x01\x12\x15\n\x08our_rune\x18\x08 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_storedB\x0e\n\x0c_blacklistedB\x0c\n\n_last_usedB\x0b\n\t_our_rune\"p\n\x1aShowrunesRunesRestrictions\x12\x41\n\x0c\x61lternatives\x18\x01 \x03(\x0b\x32+.cln.ShowrunesRunesRestrictionsAlternatives\x12\x0f\n\x07\x65nglish\x18\x02 \x01(\t\"n\n&ShowrunesRunesRestrictionsAlternatives\x12\x11\n\tfieldname\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\x12\x11\n\tcondition\x18\x03 \x01(\t\x12\x0f\n\x07\x65nglish\x18\x04 \x01(\t\"r\n\x17\x41skreneunreserveRequest\x12\'\n\x04path\x18\x01 \x03(\x0b\x32\x19.cln.AskreneunreservePath\x12\x1b\n\x0e\x64\x65v_remove_all\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\x11\n\x0f_dev_remove_all\"\x1a\n\x18\x41skreneunreserveResponse\"t\n\x14\x41skreneunreservePath\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1c\n\x14short_channel_id_dir\x18\x04 \x01(\t\x12\x12\n\x05layer\x18\x05 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_layer\"8\n\x18\x41skrenelistlayersRequest\x12\x12\n\x05layer\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_layer\"I\n\x19\x41skrenelistlayersResponse\x12,\n\x06layers\x18\x01 \x03(\x0b\x32\x1c.cln.AskrenelistlayersLayers\"\xe8\x03\n\x17\x41skrenelistlayersLayers\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x16\n\x0e\x64isabled_nodes\x18\x02 \x03(\x0c\x12\x45\n\x10\x63reated_channels\x18\x03 \x03(\x0b\x32+.cln.AskrenelistlayersLayersCreatedChannels\x12<\n\x0b\x63onstraints\x18\x04 \x03(\x0b\x32\'.cln.AskrenelistlayersLayersConstraints\x12\x12\n\npersistent\x18\x05 \x01(\x08\x12\x19\n\x11\x64isabled_channels\x18\x06 \x03(\t\x12\x43\n\x0f\x63hannel_updates\x18\x07 \x03(\x0b\x32*.cln.AskrenelistlayersLayersChannelUpdates\x12\x32\n\x06\x62iases\x18\x08 \x03(\x0b\x32\".cln.AskrenelistlayersLayersBiases\x12;\n\x0bnode_biases\x18\t \x03(\x0b\x32&.cln.AskrenelistlayersLayersNodeBiases\x12<\n\x0bimpressions\x18\n \x03(\x0b\x32\'.cln.AskrenelistlayersLayersImpressions\"\x9b\x01\n\x1d\x41skrenelistlayersLayersBiases\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\x0c\n\x04\x62ias\x18\x02 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttimestamp\x18\x04 \x01(\x04H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0c\n\n_timestamp\"\xa8\x03\n%AskrenelistlayersLayersChannelUpdates\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\x14\n\x07\x65nabled\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12+\n\x11htlc_minimum_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12+\n\x11htlc_maximum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x06 \x01(\rH\x04\x88\x01\x01\x12\x1e\n\x11\x63ltv_expiry_delta\x18\x07 \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_enabledB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x14\n\x12_cltv_expiry_delta\"\xda\x01\n\"AskrenelistlayersLayersConstraints\x12&\n\x0cmaximum_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12&\n\x0cminimum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x1c\n\x14short_channel_id_dir\x18\x05 \x01(\t\x12\x16\n\ttimestamp\x18\x06 \x01(\x04H\x02\x88\x01\x01\x42\x0f\n\r_maximum_msatB\x0f\n\r_minimum_msatB\x0c\n\n_timestamp\"\x8b\x01\n&AskrenelistlayersLayersCreatedChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\"\n\rcapacity_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\"w\n\"AskrenelistlayersLayersImpressions\x12 \n\x0b\x61mount_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\x04\"\x91\x01\n!AskrenelistlayersLayersNodeBiases\x12\x0c\n\x04node\x18\x01 \x01(\x0c\x12\x0f\n\x07in_bias\x18\x02 \x01(\x12\x12\x10\n\x08out_bias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x42\x0e\n\x0c_description\"R\n\x19\x41skrenecreatelayerRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x17\n\npersistent\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\r\n\x0b_persistent\"K\n\x1a\x41skrenecreatelayerResponse\x12-\n\x06layers\x18\x01 \x03(\x0b\x32\x1d.cln.AskrenecreatelayerLayers\"\xef\x03\n\x18\x41skrenecreatelayerLayers\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x12\n\npersistent\x18\x02 \x01(\x08\x12\x16\n\x0e\x64isabled_nodes\x18\x03 \x03(\x0c\x12\x19\n\x11\x64isabled_channels\x18\x04 \x03(\t\x12\x46\n\x10\x63reated_channels\x18\x05 \x03(\x0b\x32,.cln.AskrenecreatelayerLayersCreatedChannels\x12\x44\n\x0f\x63hannel_updates\x18\x06 \x03(\x0b\x32+.cln.AskrenecreatelayerLayersChannelUpdates\x12=\n\x0b\x63onstraints\x18\x07 \x03(\x0b\x32(.cln.AskrenecreatelayerLayersConstraints\x12\x33\n\x06\x62iases\x18\x08 \x03(\x0b\x32#.cln.AskrenecreatelayerLayersBiases\x12<\n\x0bnode_biases\x18\t \x03(\x0b\x32\'.cln.AskrenecreatelayerLayersNodeBiases\x12=\n\x0bimpressions\x18\n \x03(\x0b\x32(.cln.AskrenecreatelayerLayersImpressions\"\x9c\x01\n\x1e\x41skrenecreatelayerLayersBiases\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\x0c\n\x04\x62ias\x18\x02 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttimestamp\x18\x04 \x01(\x04H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0c\n\n_timestamp\"\xd1\x02\n&AskrenecreatelayerLayersChannelUpdates\x12+\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12+\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x04 \x01(\rH\x03\x88\x01\x01\x12\x12\n\x05\x64\x65lay\x18\x05 \x01(\rH\x04\x88\x01\x01\x42\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x08\n\x06_delay\"\xc4\x01\n#AskrenecreatelayerLayersConstraints\x12\x18\n\x10short_channel_id\x18\x01 \x01(\t\x12\x11\n\tdirection\x18\x02 \x01(\r\x12&\n\x0cmaximum_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12&\n\x0cminimum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x42\x0f\n\r_maximum_msatB\x0f\n\r_minimum_msat\"\x8c\x01\n\'AskrenecreatelayerLayersCreatedChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\"\n\rcapacity_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\"x\n#AskrenecreatelayerLayersImpressions\x12 \n\x0b\x61mount_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\x04\"\x92\x01\n\"AskrenecreatelayerLayersNodeBiases\x12\x0c\n\x04node\x18\x01 \x01(\x0c\x12\x0f\n\x07in_bias\x18\x02 \x01(\x12\x12\x10\n\x08out_bias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x42\x0e\n\x0c_description\"*\n\x19\x41skreneremovelayerRequest\x12\r\n\x05layer\x18\x01 \x01(\t\"\x1c\n\x1a\x41skreneremovelayerResponse\"P\n!AskreneremovechannelupdateRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\"$\n\"AskreneremovechannelupdateResponse\">\n\x15\x41skrenereserveRequest\x12%\n\x04path\x18\x01 \x03(\x0b\x32\x17.cln.AskrenereservePath\"\x18\n\x16\x41skrenereserveResponse\"r\n\x12\x41skrenereservePath\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1c\n\x14short_channel_id_dir\x18\x04 \x01(\t\x12\x12\n\x05layer\x18\x05 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_layer\"2\n\x11\x41skreneageRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0e\n\x06\x63utoff\x18\x02 \x01(\x04\"8\n\x12\x41skreneageResponse\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x13\n\x0bnum_removed\x18\x02 \x01(\x04\"\xe7\x01\n\x10GetroutesRequest\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06layers\x18\x04 \x03(\t\x12 \n\x0bmaxfee_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\nfinal_cltv\x18\x07 \x01(\r\x12\x15\n\x08maxdelay\x18\x08 \x01(\rH\x00\x88\x01\x01\x12\x15\n\x08maxparts\x18\t \x01(\rH\x01\x88\x01\x01\x42\x0b\n\t_maxdelayB\x0b\n\t_maxparts\"R\n\x11GetroutesResponse\x12\x17\n\x0fprobability_ppm\x18\x01 \x01(\x04\x12$\n\x06routes\x18\x02 \x03(\x0b\x32\x14.cln.GetroutesRoutes\"\x88\x01\n\x0fGetroutesRoutes\x12\x17\n\x0fprobability_ppm\x18\x01 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x04path\x18\x03 \x03(\x0b\x32\x18.cln.GetroutesRoutesPath\x12\x12\n\nfinal_cltv\x18\x04 \x01(\r\"\xd4\x03\n\x13GetroutesRoutesPath\x12)\n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x00\x88\x01\x01\x12\x1d\n\x0cnext_node_id\x18\x04 \x01(\x0c\x42\x02\x18\x01H\x01\x88\x01\x01\x12\x16\n\x05\x64\x65lay\x18\x05 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x1c\n\x14short_channel_id_dir\x18\x06 \x01(\t\x12(\n\x0e\x61mount_in_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12)\n\x0f\x61mount_out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x17\n\nnode_id_in\x18\t \x01(\x0cH\x05\x88\x01\x01\x12\x18\n\x0bnode_id_out\x18\n \x01(\x0cH\x06\x88\x01\x01\x12\x14\n\x07\x63ltv_in\x18\x0b \x01(\rH\x07\x88\x01\x01\x12\x15\n\x08\x63ltv_out\x18\x0c \x01(\rH\x08\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\x0f\n\r_next_node_idB\x08\n\x06_delayB\x11\n\x0f_amount_in_msatB\x12\n\x10_amount_out_msatB\r\n\x0b_node_id_inB\x0e\n\x0c_node_id_outB\n\n\x08_cltv_inB\x0b\n\t_cltv_out\"8\n\x19\x41skrenedisablenodeRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\x0c\"\x1c\n\x1a\x41skrenedisablenodeResponse\"\x8a\x02\n\x1b\x41skreneinformchannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x06 \x01(\t\x12 \n\x0b\x61mount_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12K\n\x06inform\x18\x08 \x01(\x0e\x32;.cln.AskreneinformchannelRequest.AskreneinformchannelInform\"O\n\x1a\x41skreneinformchannelInform\x12\x0f\n\x0b\x43ONSTRAINED\x10\x00\x12\x11\n\rUNCONSTRAINED\x10\x01\x12\r\n\tSUCCEEDED\x10\x02\"\x94\x01\n\x1c\x41skreneinformchannelResponse\x12\x39\n\x0b\x63onstraints\x18\x02 \x03(\x0b\x32$.cln.AskreneinformchannelConstraints\x12\x39\n\x0bimpressions\x18\x03 \x03(\x0b\x32$.cln.AskreneinformchannelImpressions\"\xd3\x01\n\x1f\x41skreneinformchannelConstraints\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\r\n\x05layer\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\x04\x12&\n\x0cmaximum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12&\n\x0cminimum_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x42\x0f\n\r_maximum_msatB\x0f\n\r_minimum_msat\"\x83\x01\n\x1f\x41skreneinformchannelImpressions\x12 \n\x0b\x61mount_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\r\n\x05layer\x18\x02 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x03 \x01(\t\x12\x11\n\ttimestamp\x18\x04 \x01(\x04\"\x8f\x01\n\x1b\x41skrenecreatechannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x03 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x04 \x01(\t\x12\"\n\rcapacity_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"\x1e\n\x1c\x41skrenecreatechannelResponse\"\xad\x03\n\x1b\x41skreneupdatechannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x14\n\x07\x65nabled\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12+\n\x11htlc_minimum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12+\n\x11htlc_maximum_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x07 \x01(\rH\x04\x88\x01\x01\x12\x1e\n\x11\x63ltv_expiry_delta\x18\x08 \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_enabledB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x14\n\x12_cltv_expiry_delta\"\x1e\n\x1c\x41skreneupdatechannelResponse\"\xa4\x01\n\x19\x41skrenebiaschannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x0c\n\x04\x62ias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08relative\x18\x05 \x01(\x08H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0b\n\t_relative\"K\n\x1a\x41skrenebiaschannelResponse\x12-\n\x06\x62iases\x18\x01 \x03(\x0b\x32\x1d.cln.AskrenebiaschannelBiases\"\xa5\x01\n\x18\x41skrenebiaschannelBiases\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x0c\n\x04\x62ias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttimestamp\x18\x05 \x01(\x04H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0c\n\n_timestamp\"\xa4\x01\n\x16\x41skrenebiasnodeRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x11\n\tdirection\x18\x03 \x01(\t\x12\x0c\n\x04\x62ias\x18\x04 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08relative\x18\x06 \x01(\x08H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0b\n\t_relative\"N\n\x17\x41skrenebiasnodeResponse\x12\x33\n\x0bnode_biases\x18\x01 \x03(\x0b\x32\x1e.cln.AskrenebiasnodeNodeBiases\"\x98\x01\n\x19\x41skrenebiasnodeNodeBiases\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x0f\n\x07in_bias\x18\x03 \x01(\x12\x12\x10\n\x08out_bias\x18\x04 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x06 \x01(\x04\x42\x0e\n\x0c_description\" \n\x1e\x41skrenelistreservationsRequest\"a\n\x1f\x41skrenelistreservationsResponse\x12>\n\x0creservations\x18\x01 \x03(\x0b\x32(.cln.AskrenelistreservationsReservations\"\x91\x01\n#AskrenelistreservationsReservations\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x16\n\x0e\x61ge_in_seconds\x18\x03 \x01(\x04\x12\x12\n\ncommand_id\x18\x04 \x01(\t\"\xf5\x02\n\x19InjectpaymentonionRequest\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x0b\x63ltv_expiry\x18\x04 \x01(\r\x12\x0e\n\x06partid\x18\x05 \x01(\x04\x12\x0f\n\x07groupid\x18\x06 \x01(\x04\x12\x12\n\x05label\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tinvstring\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\t \x01(\x0cH\x02\x88\x01\x01\x12*\n\x10\x64\x65stination_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x0b \x01(\x0cH\x04\x88\x01\x01\x42\x08\n\x06_labelB\x0c\n\n_invstringB\x10\n\x0e_localinvreqidB\x13\n\x11_destination_msatB\x0e\n\x0c_destination\"w\n\x1aInjectpaymentonionResponse\x12\x12\n\ncreated_at\x18\x01 \x01(\x04\x12\x14\n\x0c\x63ompleted_at\x18\x02 \x01(\x04\x12\x15\n\rcreated_index\x18\x03 \x01(\x04\x12\x18\n\x10payment_preimage\x18\x04 \x01(\x0c\">\n\x19InjectonionmessageRequest\x12\x10\n\x08path_key\x18\x01 \x01(\x0c\x12\x0f\n\x07message\x18\x02 \x01(\x0c\"\x1c\n\x1aInjectonionmessageResponse\"\xbb\x03\n\x0bXpayRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12 \n\x06maxfee\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x0e\n\x06layers\x18\x04 \x03(\t\x12\x16\n\tretry_for\x18\x05 \x01(\rH\x02\x88\x01\x01\x12&\n\x0cpartial_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x07 \x01(\rH\x04\x88\x01\x01\x12\x17\n\npayer_note\x18\x08 \x01(\tH\x05\x88\x01\x01\x12\x12\n\x05label\x18\t \x01(\tH\x06\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\n \x01(\x0cH\x07\x88\x01\x01\x12\x1b\n\x0e\x64\x65v_use_shadow\x18\x0b \x01(\x08H\x08\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\t\n\x07_maxfeeB\x0c\n\n_retry_forB\x0f\n\r_partial_msatB\x0b\n\t_maxdelayB\r\n\x0b_payer_noteB\x08\n\x06_labelB\x10\n\x0e_localinvreqidB\x11\n\x0f_dev_use_shadow\"\xa1\x01\n\x0cXpayResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x14\n\x0c\x66\x61iled_parts\x18\x02 \x01(\x04\x12\x18\n\x10successful_parts\x18\x03 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"=\n\x19SignmessagewithkeyRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t\"`\n\x1aSignmessagewithkeyResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x0e\n\x06pubkey\x18\x02 \x01(\x0c\x12\x11\n\tsignature\x18\x03 \x01(\x0c\x12\x0e\n\x06\x62\x61se64\x18\x04 \x01(\t\"\xcd\x01\n\x17ListchannelmovesRequest\x12\x46\n\x05index\x18\x01 \x01(\x0e\x32\x32.cln.ListchannelmovesRequest.ListchannelmovesIndexH\x00\x88\x01\x01\x12\x12\n\x05start\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x03 \x01(\rH\x02\x88\x01\x01\"$\n\x15ListchannelmovesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x42\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"S\n\x18ListchannelmovesResponse\x12\x37\n\x0c\x63hannelmoves\x18\x01 \x03(\x0b\x32!.cln.ListchannelmovesChannelmoves\"\xa9\x04\n\x1cListchannelmovesChannelmoves\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\x12\n\naccount_id\x18\x02 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x12]\n\x0bprimary_tag\x18\x06 \x01(\x0e\x32H.cln.ListchannelmovesChannelmoves.ListchannelmovesChannelmovesPrimaryTag\x12\x19\n\x0cpayment_hash\x18\x07 \x01(\x0cH\x00\x88\x01\x01\x12\x14\n\x07part_id\x18\x08 \x01(\x04H\x01\x88\x01\x01\x12\x15\n\x08group_id\x18\t \x01(\x04H\x02\x88\x01\x01\x12\x1e\n\tfees_msat\x18\n \x01(\x0b\x32\x0b.cln.Amount\"\x96\x01\n&ListchannelmovesChannelmovesPrimaryTag\x12\x0b\n\x07INVOICE\x10\x00\x12\n\n\x06ROUTED\x10\x01\x12\n\n\x06PUSHED\x10\x02\x12\r\n\tLEASE_FEE\x10\x03\x12\x14\n\x10\x43HANNEL_PROPOSED\x10\x04\x12\x0f\n\x0bPENALTY_ADJ\x10\x05\x12\x11\n\rJOURNAL_ENTRY\x10\x06\x42\x0f\n\r_payment_hashB\n\n\x08_part_idB\x0b\n\t_group_id\"\xc5\x01\n\x15ListchainmovesRequest\x12\x42\n\x05index\x18\x01 \x01(\x0e\x32..cln.ListchainmovesRequest.ListchainmovesIndexH\x00\x88\x01\x01\x12\x12\n\x05start\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x03 \x01(\rH\x02\x88\x01\x01\"\"\n\x13ListchainmovesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x42\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"K\n\x16ListchainmovesResponse\x12\x31\n\nchainmoves\x18\x01 \x03(\x0b\x32\x1d.cln.ListchainmovesChainmoves\"\xd4\x06\n\x18ListchainmovesChainmoves\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\x12\n\naccount_id\x18\x02 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x12U\n\x0bprimary_tag\x18\x06 \x01(\x0e\x32@.cln.ListchainmovesChainmoves.ListchainmovesChainmovesPrimaryTag\x12\x14\n\x07peer_id\x18\x08 \x01(\x0cH\x00\x88\x01\x01\x12 \n\x13originating_account\x18\t \x01(\tH\x01\x88\x01\x01\x12\x1a\n\rspending_txid\x18\n \x01(\x0cH\x02\x88\x01\x01\x12\x1b\n\x04utxo\x18\x0b \x01(\x0b\x32\r.cln.Outpoint\x12\x19\n\x0cpayment_hash\x18\x0c \x01(\x0cH\x03\x88\x01\x01\x12 \n\x0boutput_msat\x18\r \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x0coutput_count\x18\x0e \x01(\rH\x04\x88\x01\x01\x12\x13\n\x0b\x62lockheight\x18\x0f \x01(\r\x12\x12\n\nextra_tags\x18\x10 \x03(\t\"\x95\x02\n\"ListchainmovesChainmovesPrimaryTag\x12\x0b\n\x07\x44\x45POSIT\x10\x00\x12\x0e\n\nWITHDRAWAL\x10\x01\x12\x0b\n\x07PENALTY\x10\x02\x12\x10\n\x0c\x43HANNEL_OPEN\x10\x03\x12\x11\n\rCHANNEL_CLOSE\x10\x04\x12\x11\n\rDELAYED_TO_US\x10\x05\x12\x0b\n\x07HTLC_TX\x10\x06\x12\x10\n\x0cHTLC_TIMEOUT\x10\x07\x12\x10\n\x0cHTLC_FULFILL\x10\x08\x12\r\n\tTO_WALLET\x10\t\x12\n\n\x06\x41NCHOR\x10\n\x12\x0b\n\x07TO_THEM\x10\x0b\x12\r\n\tPENALIZED\x10\x0c\x12\n\n\x06STOLEN\x10\r\x12\x0b\n\x07IGNORED\x10\x0e\x12\x0c\n\x08TO_MINER\x10\x0f\x42\n\n\x08_peer_idB\x16\n\x14_originating_accountB\x10\n\x0e_spending_txidB\x0f\n\r_payment_hashB\x0f\n\r_output_count\"\xe9\x01\n\x18ListnetworkeventsRequest\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12H\n\x05index\x18\x02 \x01(\x0e\x32\x34.cln.ListnetworkeventsRequest.ListnetworkeventsIndexH\x01\x88\x01\x01\x12\x12\n\x05start\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\rH\x03\x88\x01\x01\"%\n\x16ListnetworkeventsIndex\x12\x0b\n\x07\x43REATED\x10\x00\x42\x05\n\x03_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"W\n\x19ListnetworkeventsResponse\x12:\n\rnetworkevents\x18\x01 \x03(\x0b\x32#.cln.ListnetworkeventsNetworkevents\"\xf2\x01\n\x1eListnetworkeventsNetworkevents\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\x11\n\ttimestamp\x18\x02 \x01(\x04\x12\x0f\n\x07peer_id\x18\x03 \x01(\x0c\x12\x11\n\titem_type\x18\x04 \x01(\t\x12\x13\n\x06reason\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rduration_nsec\x18\x06 \x01(\x04H\x01\x88\x01\x01\x12\x1e\n\x11\x63onnect_attempted\x18\x07 \x01(\x08H\x02\x88\x01\x01\x42\t\n\x07_reasonB\x10\n\x0e_duration_nsecB\x14\n\x12_connect_attempted\"/\n\x16\x44\x65lnetworkeventRequest\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\"\x19\n\x17\x44\x65lnetworkeventResponse\"\xf6\x01\n\x1a\x43lnrestregisterpathRequest\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x12\n\nrpc_method\x18\x02 \x01(\t\x12H\n\x11rune_restrictions\x18\x03 \x01(\x0b\x32(.cln.ClnrestregisterpathRuneRestrictionsH\x00\x88\x01\x01\x12\x1a\n\rrune_required\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x18\n\x0bhttp_method\x18\x05 \x01(\tH\x02\x88\x01\x01\x42\x14\n\x12_rune_restrictionsB\x10\n\x0e_rune_requiredB\x0e\n\x0c_http_method\"\x1d\n\x1b\x43lnrestregisterpathResponse\"\xda\x01\n#ClnrestregisterpathRuneRestrictions\x12\x13\n\x06nodeid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06method\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x44\n\x06params\x18\x03 \x03(\x0b\x32\x34.cln.ClnrestregisterpathRuneRestrictions.ParamsEntry\x1a-\n\x0bParamsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\t\n\x07_nodeidB\t\n\x07_method\",\n\x18ListcurrencyratesRequest\x12\x10\n\x08\x63urrency\x18\x01 \x01(\t\"W\n\x19ListcurrencyratesResponse\x12:\n\rcurrencyrates\x18\x01 \x03(\x0b\x32#.cln.ListcurrencyratesCurrencyrates\"@\n\x1eListcurrencyratesCurrencyrates\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\x01\":\n\x16\x43urrencyconvertRequest\x12\x0e\n\x06\x61mount\x18\x01 \x01(\x01\x12\x10\n\x08\x63urrency\x18\x02 \x01(\t\"4\n\x17\x43urrencyconvertResponse\x12\x19\n\x04msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\"G\n\x13\x43urrencyrateRequest\x12\x10\n\x08\x63urrency\x18\x01 \x01(\t\x12\x13\n\x06source\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_source\"$\n\x14\x43urrencyrateResponse\x12\x0c\n\x04rate\x18\x01 \x01(\x01\"\x95\x02\n\x11SendamountRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12 \n\x06maxfee\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x0e\n\x06layers\x18\x04 \x03(\t\x12\x16\n\tretry_for\x18\x05 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x06 \x01(\rH\x02\x88\x01\x01\x12\x17\n\npayer_note\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x12\n\x05label\x18\x08 \x01(\tH\x04\x88\x01\x01\x42\t\n\x07_maxfeeB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\r\n\x0b_payer_noteB\x08\n\x06_label\"\xa7\x01\n\x12SendamountResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x14\n\x0c\x66\x61iled_parts\x18\x02 \x01(\x04\x12\x18\n\x10successful_parts\x18\x03 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"e\n\x12\x43reateproofRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12\x11\n\x04note\x18\x02 \x01(\tH\x00\x88\x01\x01\x12 \n\x07include\x18\x03 \x03(\x0b\x32\x0f.cln.ProofFieldB\x07\n\x05_note\"=\n\x13\x43reateproofResponse\x12&\n\x06proofs\x18\x01 \x03(\x0b\x32\x16.cln.CreateproofProofs\"\xb6\x01\n\x11\x43reateproofProofs\x12\x0e\n\x06\x62olt12\x18\x01 \x01(\t\x12.\n\x15offer_fields_included\x18\x02 \x03(\x0b\x32\x0f.cln.ProofField\x12/\n\x16invreq_fields_included\x18\x03 \x03(\x0b\x32\x0f.cln.ProofField\x12\x30\n\x17invoice_fields_included\x18\x04 \x03(\x0b\x32\x0f.cln.ProofField\"\xd7\x02\n\x0fXkeysendRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\x03 \x01(\tH\x00\x88\x01\x01\x12 \n\x06maxfee\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x0e\n\x06layers\x18\x05 \x03(\t\x12\x16\n\tretry_for\x18\x06 \x01(\rH\x02\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x07 \x01(\rH\x03\x88\x01\x01\x12\x36\n\textratlvs\x18\x08 \x03(\x0b\x32#.cln.XkeysendRequest.ExtratlvsEntry\x1a\x30\n\x0e\x45xtratlvsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x08\n\x06_labelB\t\n\x07_maxfeeB\x0c\n\n_retry_forB\x0b\n\t_maxdelay\"\xa5\x01\n\x10XkeysendResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x14\n\x0c\x66\x61iled_parts\x18\x02 \x01(\x04\x12\x18\n\x10successful_parts\x18\x03 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"3\n\x0fGracefulRequest\x12\x14\n\x07timeout\x18\x01 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_timeout\"H\n\x10GracefulResponse\x12\x1d\n\x15pending_htlc_expiries\x18\x01 \x03(\r\x12\x15\n\rpending_peers\x18\x02 \x03(\x0c\"\x1e\n\x1cStreamBalanceSnapshotRequest\"\x86\x01\n\x1b\x42\x61lanceSnapshotNotification\x12\x0f\n\x07node_id\x18\x01 \x01(\x0c\x12\x13\n\x0b\x62lockheight\x18\x02 \x01(\r\x12\x11\n\ttimestamp\x18\x03 \x01(\r\x12.\n\x08\x61\x63\x63ounts\x18\x04 \x03(\x0b\x32\x1c.cln.BalanceSnapshotAccounts\"c\n\x17\x42\x61lanceSnapshotAccounts\x12\x12\n\naccount_id\x18\x01 \x01(\t\x12!\n\x0c\x62\x61lance_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\tcoin_type\x18\x03 \x01(\t\"\x19\n\x17StreamBlockAddedRequest\"6\n\x16\x42lockAddedNotification\x12\x0c\n\x04hash\x18\x01 \x01(\x0c\x12\x0e\n\x06height\x18\x02 \x01(\r\" \n\x1eStreamChannelOpenFailedRequest\"3\n\x1d\x43hannelOpenFailedNotification\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\"\x1c\n\x1aStreamChannelOpenedRequest\"w\n\x19\x43hannelOpenedNotification\x12\n\n\x02id\x18\x01 \x01(\x0c\x12!\n\x0c\x66unding_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66unding_txid\x18\x03 \x01(\x0c\x12\x15\n\rchannel_ready\x18\x04 \x01(\x08\"\"\n StreamChannelStateChangedRequest\"\xc1\x03\n\x1f\x43hannelStateChangedNotification\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x12\n\nchannel_id\x18\x02 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x04 \x01(\t\x12)\n\told_state\x18\x05 \x01(\x0e\x32\x11.cln.ChannelStateH\x01\x88\x01\x01\x12$\n\tnew_state\x18\x06 \x01(\x0e\x32\x11.cln.ChannelState\x12L\n\x05\x63\x61use\x18\x07 \x01(\x0e\x32=.cln.ChannelStateChangedNotification.ChannelStateChangedCause\x12\x14\n\x07message\x18\x08 \x01(\tH\x02\x88\x01\x01\"c\n\x18\x43hannelStateChangedCause\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05LOCAL\x10\x01\x12\x08\n\x04USER\x10\x02\x12\n\n\x06REMOTE\x10\x03\x12\x0c\n\x08PROTOCOL\x10\x04\x12\x0b\n\x07ONCHAIN\x10\x05\x42\x13\n\x11_short_channel_idB\x0c\n\n_old_stateB\n\n\x08_message\"\x16\n\x14StreamConnectRequest\"\xbe\x01\n\x17PeerConnectNotification\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x44\n\tdirection\x18\x02 \x01(\x0e\x32\x31.cln.PeerConnectNotification.PeerConnectDirection\x12(\n\x07\x61\x64\x64ress\x18\x03 \x01(\x0b\x32\x17.cln.PeerConnectAddress\"\'\n\x14PeerConnectDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\"\x9a\x02\n\x12PeerConnectAddress\x12\x41\n\titem_type\x18\x01 \x01(\x0e\x32..cln.PeerConnectAddress.PeerConnectAddressType\x12\x13\n\x06socket\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04port\x18\x04 \x01(\rH\x02\x88\x01\x01\"c\n\x16PeerConnectAddressType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x12\r\n\tWEBSOCKET\x10\x05\x42\t\n\x07_socketB\n\n\x08_addressB\x07\n\x05_port\"\x1b\n\x19StreamCoinMovementRequest\"\xaf\x0b\n\x18\x43oinMovementNotification\x12\x0f\n\x07version\x18\x01 \x01(\r\x12\x11\n\tcoin_type\x18\x02 \x01(\t\x12\x0f\n\x07node_id\x18\x03 \x01(\x0c\x12\x41\n\titem_type\x18\x04 \x01(\x0e\x32..cln.CoinMovementNotification.CoinMovementType\x12\x1a\n\rcreated_index\x18\x05 \x01(\x04H\x00\x88\x01\x01\x12\x12\n\naccount_id\x18\x06 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\ttimestamp\x18\t \x01(\x04\x12\x10\n\x04tags\x18\n \x03(\tB\x02\x18\x01\x12N\n\x0bprimary_tag\x18\x0b \x01(\x0e\x32\x34.cln.CoinMovementNotification.CoinMovementPrimaryTagH\x01\x88\x01\x01\x12\x12\n\nextra_tags\x18\x0c \x03(\t\x12\x19\n\x0cpayment_hash\x18\r \x01(\x0cH\x02\x88\x01\x01\x12\x14\n\x07part_id\x18\x0e \x01(\x04H\x03\x88\x01\x01\x12\x15\n\x08group_id\x18\x0f \x01(\x04H\x04\x88\x01\x01\x12#\n\tfees_msat\x18\x10 \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12 \n\x04utxo\x18\x11 \x01(\x0b\x32\r.cln.OutpointH\x06\x88\x01\x01\x12\x14\n\x07peer_id\x18\x12 \x01(\x0cH\x07\x88\x01\x01\x12 \n\x13originating_account\x18\x13 \x01(\tH\x08\x88\x01\x01\x12\x15\n\x04txid\x18\x14 \x01(\x0c\x42\x02\x18\x01H\t\x88\x01\x01\x12\x1a\n\rspending_txid\x18\x15 \x01(\x0cH\n\x88\x01\x01\x12\x1a\n\tutxo_txid\x18\x16 \x01(\x0c\x42\x02\x18\x01H\x0b\x88\x01\x01\x12\x15\n\x04vout\x18\x17 \x01(\rB\x02\x18\x01H\x0c\x88\x01\x01\x12%\n\x0boutput_msat\x18\x18 \x01(\x0b\x32\x0b.cln.AmountH\r\x88\x01\x01\x12\x19\n\x0coutput_count\x18\x19 \x01(\rH\x0e\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\x1a \x01(\rH\x0f\x88\x01\x01\"\xf7\x02\n\x16\x43oinMovementPrimaryTag\x12\x0b\n\x07\x44\x45POSIT\x10\x00\x12\x0e\n\nWITHDRAWAL\x10\x01\x12\x0b\n\x07PENALTY\x10\x02\x12\x10\n\x0c\x43HANNEL_OPEN\x10\x03\x12\x11\n\rCHANNEL_CLOSE\x10\x04\x12\x11\n\rDELAYED_TO_US\x10\x05\x12\x0b\n\x07HTLC_TX\x10\x06\x12\x10\n\x0cHTLC_TIMEOUT\x10\x07\x12\x10\n\x0cHTLC_FULFILL\x10\x08\x12\r\n\tTO_WALLET\x10\t\x12\n\n\x06\x41NCHOR\x10\n\x12\x0b\n\x07TO_THEM\x10\x0b\x12\r\n\tPENALIZED\x10\x0c\x12\n\n\x06STOLEN\x10\r\x12\x0b\n\x07IGNORED\x10\x0e\x12\x0c\n\x08TO_MINER\x10\x0f\x12\x0b\n\x07INVOICE\x10\x10\x12\n\n\x06ROUTED\x10\x11\x12\n\n\x06PUSHED\x10\x12\x12\r\n\tLEASE_FEE\x10\x13\x12\x14\n\x10\x43HANNEL_PROPOSED\x10\x14\x12\x0f\n\x0bPENALTY_ADJ\x10\x15\x12\x11\n\rJOURNAL_ENTRY\x10\x16\"2\n\x10\x43oinMovementType\x12\x0f\n\x0b\x43HANNEL_MVT\x10\x00\x12\r\n\tCHAIN_MVT\x10\x01\x42\x10\n\x0e_created_indexB\x0e\n\x0c_primary_tagB\x0f\n\r_payment_hashB\n\n\x08_part_idB\x0b\n\t_group_idB\x0c\n\n_fees_msatB\x07\n\x05_utxoB\n\n\x08_peer_idB\x16\n\x14_originating_accountB\x07\n\x05_txidB\x10\n\x0e_spending_txidB\x0c\n\n_utxo_txidB\x07\n\x05_voutB\x0e\n\x0c_output_msatB\x0f\n\r_output_countB\x0e\n\x0c_blockheight\"\x18\n\x16StreamCustomMsgRequest\"9\n\x15\x43ustomMsgNotification\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\" \n\x1eStreamDeprecatedOneshotRequest\"6\n\x1d\x44\x65precatedOneshotNotification\x12\x15\n\rdeprecated_ok\x18\x01 \x01(\x08\"\x19\n\x17StreamDisconnectRequest\"$\n\x16\x44isconnectNotification\x12\n\n\x02id\x18\x01 \x01(\x0c\"\x1b\n\x19StreamForwardEventRequest\"\x88\x05\n\x18\x46orwardEventNotification\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x12\n\nin_channel\x18\x02 \x01(\t\x12\x18\n\x0bout_channel\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1c\n\x07in_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\"\n\x08out_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\"\n\x08\x66\x65\x65_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12@\n\x06status\x18\x07 \x01(\x0e\x32\x30.cln.ForwardEventNotification.ForwardEventStatus\x12\x15\n\x08\x66\x61ilcode\x18\x08 \x01(\rH\x03\x88\x01\x01\x12\x17\n\nfailreason\x18\t \x01(\tH\x04\x88\x01\x01\x12\x43\n\x05style\x18\n \x01(\x0e\x32/.cln.ForwardEventNotification.ForwardEventStyleH\x05\x88\x01\x01\x12\x15\n\rreceived_time\x18\x0b \x01(\x01\x12\x1a\n\rresolved_time\x18\x0c \x01(\x01H\x06\x88\x01\x01\"L\n\x12\x46orwardEventStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\x10\n\x0cLOCAL_FAILED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\"(\n\x11\x46orwardEventStyle\x12\n\n\x06LEGACY\x10\x00\x12\x07\n\x03TLV\x10\x01\x42\x0e\n\x0c_out_channelB\x0b\n\t_out_msatB\x0b\n\t_fee_msatB\x0b\n\t_failcodeB\r\n\x0b_failreasonB\x08\n\x06_styleB\x10\n\x0e_resolved_time\"\x1e\n\x1cStreamInvoiceCreationRequest\"\x8b\x01\n\x1bInvoiceCreationNotification\x12\x1e\n\x04msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x10\n\x08preimage\x18\x02 \x01(\x0c\x12\r\n\x05label\x18\x03 \x01(\t\x12\x15\n\x08offer_id\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x42\x07\n\x05_msatB\x0b\n\t_offer_id\"\x1d\n\x1bStreamInvoicePaymentRequest\"\x8b\x01\n\x1aInvoicePaymentNotification\x12\x19\n\x04msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08preimage\x18\x02 \x01(\x0c\x12$\n\x08outpoint\x18\x03 \x01(\x0b\x32\r.cln.OutpointH\x00\x88\x01\x01\x12\r\n\x05label\x18\x04 \x01(\tB\x0b\n\t_outpoint\"\x12\n\x10StreamLogRequest\"\xca\x01\n\x0fLogNotification\x12,\n\x05level\x18\x01 \x01(\x0e\x32\x1d.cln.LogNotification.LogLevel\x12\x0c\n\x04time\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\t\x12\x0e\n\x06source\x18\x04 \x01(\t\x12\x0b\n\x03log\x18\x05 \x01(\t\"K\n\x08LogLevel\x12\x06\n\x02IO\x10\x00\x12\t\n\x05TRACE\x10\x01\x12\t\n\x05\x44\x45\x42UG\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\x0b\n\x07UNUSUAL\x10\x04\x12\n\n\x06\x42ROKEN\x10\x05\"&\n$StreamOnionMessageForwardFailRequest\"\xef\x01\n#OnionMessageForwardFailNotification\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x10\n\x08incoming\x18\x02 \x01(\x0c\x12\x10\n\x08path_key\x18\x03 \x01(\x0c\x12\x15\n\x08outgoing\x18\x04 \x01(\x0cH\x00\x88\x01\x01\x12\x19\n\x0cnext_node_id\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12&\n\x19next_short_channel_id_dir\x18\x06 \x01(\tH\x02\x88\x01\x01\x42\x0b\n\t_outgoingB\x0f\n\r_next_node_idB\x1c\n\x1a_next_short_channel_id_dir\"\"\n StreamOpenChannelPeerSigsRequest\"J\n\x1fOpenChannelPeerSigsNotification\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x13\n\x0bsigned_psbt\x18\x02 \x01(\t\"\x1c\n\x1aStreamPluginStartedRequest\"V\n\x19PluginStartedNotification\x12\x13\n\x0bplugin_name\x18\x01 \x01(\t\x12\x13\n\x0bplugin_path\x18\x02 \x01(\t\x12\x0f\n\x07methods\x18\x03 \x03(\t\"\x1c\n\x1aStreamPluginStoppedRequest\"V\n\x19PluginStoppedNotification\x12\x13\n\x0bplugin_name\x18\x01 \x01(\t\x12\x13\n\x0bplugin_path\x18\x02 \x01(\t\x12\x0f\n\x07methods\x18\x03 \x03(\t\"\x1d\n\x1bStreamSendPayFailureRequest\"b\n\x1aSendPayFailureNotification\x12\x0c\n\x04\x63ode\x18\x01 \x01(\x12\x12\x0f\n\x07message\x18\x02 \x01(\t\x12%\n\x04\x64\x61ta\x18\x03 \x01(\x0b\x32\x17.cln.SendpayFailureData\"\xc1\t\n\x12SendpayFailureData\x12\x1a\n\rcreated_index\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x0f\n\x02id\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x12\x14\n\x07groupid\x18\x04 \x01(\x04H\x03\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x13\n\x06partid\x18\x06 \x01(\x04H\x05\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x07 \x01(\x0cH\x06\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x07\x88\x01\x01\x12*\n\x10\x61mount_sent_msat\x18\t \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x12\x17\n\ncreated_at\x18\n \x01(\x04H\t\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0b \x01(\x04H\n\x88\x01\x01\x12\x45\n\x06status\x18\x0c \x01(\x0e\x32\x30.cln.SendpayFailureData.SendpayFailureDataStatusH\x0b\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x0c\x88\x01\x01\x12\x12\n\x05label\x18\x0e \x01(\tH\r\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0f \x01(\tH\x0e\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x10 \x01(\tH\x0f\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x11 \x01(\tH\x10\x88\x01\x01\x12\x17\n\nerroronion\x18\x12 \x01(\x0cH\x11\x88\x01\x01\x12\x17\n\nonionreply\x18\x13 \x01(\x0cH\x12\x88\x01\x01\x12\x19\n\x0c\x65rring_index\x18\x14 \x01(\rH\x13\x88\x01\x01\x12\x15\n\x08\x66\x61ilcode\x18\x15 \x01(\rH\x14\x88\x01\x01\x12\x19\n\x0c\x66\x61ilcodename\x18\x16 \x01(\tH\x15\x88\x01\x01\x12\x18\n\x0b\x65rring_node\x18\x17 \x01(\x0cH\x16\x88\x01\x01\x12\x1b\n\x0e\x65rring_channel\x18\x18 \x01(\tH\x17\x88\x01\x01\x12\x1d\n\x10\x65rring_direction\x18\x19 \x01(\rH\x18\x88\x01\x01\x12\x18\n\x0braw_message\x18\x1a \x01(\x0cH\x19\x88\x01\x01\"A\n\x18SendpayFailureDataStatus\x12\n\n\x06\x46\x41ILED\x10\x00\x12\x0b\n\x07PENDING\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x10\n\x0e_created_indexB\x05\n\x03_idB\x0f\n\r_payment_hashB\n\n\x08_groupidB\x10\n\x0e_updated_indexB\t\n\x07_partidB\x0e\n\x0c_destinationB\x0e\n\x0c_amount_msatB\x13\n\x11_amount_sent_msatB\r\n\x0b_created_atB\x0f\n\r_completed_atB\t\n\x07_statusB\x13\n\x11_payment_preimageB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_descriptionB\r\n\x0b_erroronionB\r\n\x0b_onionreplyB\x0f\n\r_erring_indexB\x0b\n\t_failcodeB\x0f\n\r_failcodenameB\x0e\n\x0c_erring_nodeB\x11\n\x0f_erring_channelB\x13\n\x11_erring_directionB\x0e\n\x0c_raw_message\"\x1d\n\x1bStreamSendPaySuccessRequest\"\xcc\x05\n\x1aSendPaySuccessNotification\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\n\n\x02id\x18\x02 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x0f\n\x07groupid\x18\x04 \x01(\x04\x12\x1a\n\rupdated_index\x18\x05 \x01(\x04H\x00\x88\x01\x01\x12\x13\n\x06partid\x18\x06 \x01(\x04H\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x07 \x01(\x0cH\x02\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12%\n\x10\x61mount_sent_msat\x18\t \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\ncreated_at\x18\n \x01(\x04\x12\x19\n\x0c\x63ompleted_at\x18\x0b \x01(\x04H\x04\x88\x01\x01\x12\x44\n\x06status\x18\x0c \x01(\x0e\x32\x34.cln.SendPaySuccessNotification.SendpaySuccessStatus\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x05\x88\x01\x01\x12\x12\n\x05label\x18\x0e \x01(\tH\x06\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0f \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x10 \x01(\tH\x08\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x11 \x01(\tH\t\x88\x01\x01\x12\x17\n\nerroronion\x18\x12 \x01(\x0cH\n\x88\x01\x01\"$\n\x14SendpaySuccessStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x42\x10\n\x0e_updated_indexB\t\n\x07_partidB\x0e\n\x0c_destinationB\x0e\n\x0c_amount_msatB\x0f\n\r_completed_atB\x13\n\x11_payment_preimageB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_descriptionB\r\n\x0b_erroronion\"\x17\n\x15StreamShutdownRequest\"\x16\n\x14ShutdownNotification\"\x16\n\x14StreamWarningRequest\"\xae\x01\n\x13WarningNotification\x12\x34\n\x05level\x18\x01 \x01(\x0e\x32%.cln.WarningNotification.WarningLevel\x12\x0c\n\x04time\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\t\x12\x0e\n\x06source\x18\x04 \x01(\t\x12\x0b\n\x03log\x18\x05 \x01(\t\"#\n\x0cWarningLevel\x12\x08\n\x04WARN\x10\x00\x12\t\n\x05\x45RROR\x10\x01\"\x19\n\x17StreamPayPartEndRequest\"\xf1\x03\n\x16PayPartEndNotification\x12<\n\x06status\x18\x01 \x01(\x0e\x32,.cln.PayPartEndNotification.PayPartEndStatus\x12\x10\n\x08\x64uration\x18\x02 \x01(\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x0f\n\x07groupid\x18\x04 \x01(\x04\x12\x0e\n\x06partid\x18\x05 \x01(\x04\x12\x17\n\nfailed_msg\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12\x1b\n\x0e\x66\x61iled_node_id\x18\x07 \x01(\x0cH\x01\x88\x01\x01\x12$\n\x17\x66\x61iled_short_channel_id\x18\x08 \x01(\tH\x02\x88\x01\x01\x12\x1d\n\x10\x66\x61iled_direction\x18\t \x01(\rH\x03\x88\x01\x01\x12\x17\n\nerror_code\x18\n \x01(\rH\x04\x88\x01\x01\x12\x1a\n\rerror_message\x18\x0b \x01(\tH\x05\x88\x01\x01\",\n\x10PayPartEndStatus\x12\x0b\n\x07SUCCESS\x10\x00\x12\x0b\n\x07\x46\x41ILURE\x10\x01\x42\r\n\x0b_failed_msgB\x11\n\x0f_failed_node_idB\x1a\n\x18_failed_short_channel_idB\x13\n\x11_failed_directionB\r\n\x0b_error_codeB\x10\n\x0e_error_message\"\x1b\n\x19StreamPayPartStartRequest\"\xc2\x01\n\x18PayPartStartNotification\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x0f\n\x07groupid\x18\x02 \x01(\x04\x12\x0e\n\x06partid\x18\x03 \x01(\x04\x12\'\n\x12total_payment_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12!\n\x0c\x61ttempt_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x04hops\x18\x06 \x03(\x0b\x32\x15.cln.PayPartStartHops\"\x9f\x01\n\x10PayPartStartHops\x12\x11\n\tnext_node\x18\x01 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x02 \x01(\t\x12\x11\n\tdirection\x18\x03 \x01(\r\x12$\n\x0f\x63hannel_in_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x63hannel_out_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount2\xbah\n\x04Node\x12\x36\n\x07Getinfo\x12\x13.cln.GetinfoRequest\x1a\x14.cln.GetinfoResponse\"\x00\x12<\n\tListPeers\x12\x15.cln.ListpeersRequest\x1a\x16.cln.ListpeersResponse\"\x00\x12<\n\tListFunds\x12\x15.cln.ListfundsRequest\x1a\x16.cln.ListfundsResponse\"\x00\x12\x36\n\x07SendPay\x12\x13.cln.SendpayRequest\x1a\x14.cln.SendpayResponse\"\x00\x12\x45\n\x0cListChannels\x12\x18.cln.ListchannelsRequest\x1a\x19.cln.ListchannelsResponse\"\x00\x12<\n\tAddGossip\x12\x15.cln.AddgossipRequest\x1a\x16.cln.AddgossipResponse\"\x00\x12H\n\rAddPsbtOutput\x12\x19.cln.AddpsbtoutputRequest\x1a\x1a.cln.AddpsbtoutputResponse\"\x00\x12H\n\rAutoCleanOnce\x12\x19.cln.AutocleanonceRequest\x1a\x1a.cln.AutocleanonceResponse\"\x00\x12N\n\x0f\x41utoCleanStatus\x12\x1b.cln.AutocleanstatusRequest\x1a\x1c.cln.AutocleanstatusResponse\"\x00\x12\x45\n\x0c\x43heckMessage\x12\x18.cln.CheckmessageRequest\x1a\x19.cln.CheckmessageResponse\"\x00\x12\x30\n\x05\x43lose\x12\x11.cln.CloseRequest\x1a\x12.cln.CloseResponse\"\x00\x12:\n\x0b\x43onnectPeer\x12\x13.cln.ConnectRequest\x1a\x14.cln.ConnectResponse\"\x00\x12H\n\rCreateInvoice\x12\x19.cln.CreateinvoiceRequest\x1a\x1a.cln.CreateinvoiceResponse\"\x00\x12<\n\tDatastore\x12\x15.cln.DatastoreRequest\x1a\x16.cln.DatastoreResponse\"\x00\x12K\n\x0e\x44\x61tastoreUsage\x12\x1a.cln.DatastoreusageRequest\x1a\x1b.cln.DatastoreusageResponse\"\x00\x12\x42\n\x0b\x43reateOnion\x12\x17.cln.CreateonionRequest\x1a\x18.cln.CreateonionResponse\"\x00\x12\x45\n\x0c\x44\x65lDatastore\x12\x18.cln.DeldatastoreRequest\x1a\x19.cln.DeldatastoreResponse\"\x00\x12?\n\nDelInvoice\x12\x16.cln.DelinvoiceRequest\x1a\x17.cln.DelinvoiceResponse\"\x00\x12Q\n\x10\x44\x65vForgetChannel\x12\x1c.cln.DevforgetchannelRequest\x1a\x1d.cln.DevforgetchannelResponse\"\x00\x12Q\n\x10\x45mergencyRecover\x12\x1c.cln.EmergencyrecoverRequest\x1a\x1d.cln.EmergencyrecoverResponse\"\x00\x12\x66\n\x17GetEmergencyRecoverData\x12#.cln.GetemergencyrecoverdataRequest\x1a$.cln.GetemergencyrecoverdataResponse\"\x00\x12\x45\n\x0c\x45xposeSecret\x12\x18.cln.ExposesecretRequest\x1a\x19.cln.ExposesecretResponse\"\x00\x12\x36\n\x07Recover\x12\x13.cln.RecoverRequest\x1a\x14.cln.RecoverResponse\"\x00\x12K\n\x0eRecoverChannel\x12\x1a.cln.RecoverchannelRequest\x1a\x1b.cln.RecoverchannelResponse\"\x00\x12\x36\n\x07Invoice\x12\x13.cln.InvoiceRequest\x1a\x14.cln.InvoiceResponse\"\x00\x12Q\n\x14\x43reateInvoiceRequest\x12\x1a.cln.InvoicerequestRequest\x1a\x1b.cln.InvoicerequestResponse\"\x00\x12`\n\x15\x44isableInvoiceRequest\x12!.cln.DisableinvoicerequestRequest\x1a\".cln.DisableinvoicerequestResponse\"\x00\x12Z\n\x13ListInvoiceRequests\x12\x1f.cln.ListinvoicerequestsRequest\x1a .cln.ListinvoicerequestsResponse\"\x00\x12H\n\rListDatastore\x12\x19.cln.ListdatastoreRequest\x1a\x1a.cln.ListdatastoreResponse\"\x00\x12\x45\n\x0cListInvoices\x12\x18.cln.ListinvoicesRequest\x1a\x19.cln.ListinvoicesResponse\"\x00\x12<\n\tSendOnion\x12\x15.cln.SendonionRequest\x1a\x16.cln.SendonionResponse\"\x00\x12\x45\n\x0cListSendPays\x12\x18.cln.ListsendpaysRequest\x1a\x19.cln.ListsendpaysResponse\"\x00\x12Q\n\x10ListTransactions\x12\x1c.cln.ListtransactionsRequest\x1a\x1d.cln.ListtransactionsResponse\"\x00\x12?\n\nMakeSecret\x12\x16.cln.MakesecretRequest\x1a\x17.cln.MakesecretResponse\"\x00\x12*\n\x03Pay\x12\x0f.cln.PayRequest\x1a\x10.cln.PayResponse\"\x00\x12<\n\tListNodes\x12\x15.cln.ListnodesRequest\x1a\x16.cln.ListnodesResponse\"\x00\x12K\n\x0eWaitAnyInvoice\x12\x1a.cln.WaitanyinvoiceRequest\x1a\x1b.cln.WaitanyinvoiceResponse\"\x00\x12\x42\n\x0bWaitInvoice\x12\x17.cln.WaitinvoiceRequest\x1a\x18.cln.WaitinvoiceResponse\"\x00\x12\x42\n\x0bWaitSendPay\x12\x17.cln.WaitsendpayRequest\x1a\x18.cln.WaitsendpayResponse\"\x00\x12\x36\n\x07NewAddr\x12\x13.cln.NewaddrRequest\x1a\x14.cln.NewaddrResponse\"\x00\x12\x39\n\x08Withdraw\x12\x14.cln.WithdrawRequest\x1a\x15.cln.WithdrawResponse\"\x00\x12\x36\n\x07KeySend\x12\x13.cln.KeysendRequest\x1a\x14.cln.KeysendResponse\"\x00\x12\x39\n\x08\x46undPsbt\x12\x14.cln.FundpsbtRequest\x1a\x15.cln.FundpsbtResponse\"\x00\x12\x39\n\x08SendPsbt\x12\x14.cln.SendpsbtRequest\x1a\x15.cln.SendpsbtResponse\"\x00\x12\x39\n\x08SignPsbt\x12\x14.cln.SignpsbtRequest\x1a\x15.cln.SignpsbtResponse\"\x00\x12\x39\n\x08UtxoPsbt\x12\x14.cln.UtxopsbtRequest\x1a\x15.cln.UtxopsbtResponse\"\x00\x12<\n\tTxDiscard\x12\x15.cln.TxdiscardRequest\x1a\x16.cln.TxdiscardResponse\"\x00\x12<\n\tTxPrepare\x12\x15.cln.TxprepareRequest\x1a\x16.cln.TxprepareResponse\"\x00\x12\x33\n\x06TxSend\x12\x12.cln.TxsendRequest\x1a\x13.cln.TxsendResponse\"\x00\x12Q\n\x10ListPeerChannels\x12\x1c.cln.ListpeerchannelsRequest\x1a\x1d.cln.ListpeerchannelsResponse\"\x00\x12W\n\x12ListClosedChannels\x12\x1e.cln.ListclosedchannelsRequest\x1a\x1f.cln.ListclosedchannelsResponse\"\x00\x12\x33\n\x06\x44\x65\x63ode\x12\x12.cln.DecodeRequest\x1a\x13.cln.DecodeResponse\"\x00\x12\x33\n\x06\x44\x65lPay\x12\x12.cln.DelpayRequest\x1a\x13.cln.DelpayResponse\"\x00\x12?\n\nDelForward\x12\x16.cln.DelforwardRequest\x1a\x17.cln.DelforwardResponse\"\x00\x12\x45\n\x0c\x44isableOffer\x12\x18.cln.DisableofferRequest\x1a\x19.cln.DisableofferResponse\"\x00\x12\x42\n\x0b\x45nableOffer\x12\x17.cln.EnableofferRequest\x1a\x18.cln.EnableofferResponse\"\x00\x12?\n\nDisconnect\x12\x16.cln.DisconnectRequest\x1a\x17.cln.DisconnectResponse\"\x00\x12\x39\n\x08\x46\x65\x65rates\x12\x14.cln.FeeratesRequest\x1a\x15.cln.FeeratesResponse\"\x00\x12\x42\n\x0b\x46\x65tchBip353\x12\x17.cln.Fetchbip353Request\x1a\x18.cln.Fetchbip353Response\"\x00\x12\x45\n\x0c\x46\x65tchInvoice\x12\x18.cln.FetchinvoiceRequest\x1a\x19.cln.FetchinvoiceResponse\"\x00\x12\x63\n\x16\x43\x61ncelRecurringInvoice\x12\".cln.CancelrecurringinvoiceRequest\x1a#.cln.CancelrecurringinvoiceResponse\"\x00\x12T\n\x11\x46undChannelCancel\x12\x1d.cln.FundchannelCancelRequest\x1a\x1e.cln.FundchannelCancelResponse\"\x00\x12Z\n\x13\x46undChannelComplete\x12\x1f.cln.FundchannelCompleteRequest\x1a .cln.FundchannelCompleteResponse\"\x00\x12\x42\n\x0b\x46undChannel\x12\x17.cln.FundchannelRequest\x1a\x18.cln.FundchannelResponse\"\x00\x12Q\n\x10\x46undChannelStart\x12\x1c.cln.FundchannelStartRequest\x1a\x1d.cln.FundchannelStartResponse\"\x00\x12\x33\n\x06GetLog\x12\x12.cln.GetlogRequest\x1a\x13.cln.GetlogResponse\"\x00\x12\x45\n\x0c\x46underUpdate\x12\x18.cln.FunderupdateRequest\x1a\x19.cln.FunderupdateResponse\"\x00\x12\x39\n\x08GetRoute\x12\x14.cln.GetrouteRequest\x1a\x15.cln.GetrouteResponse\"\x00\x12H\n\rListAddresses\x12\x19.cln.ListaddressesRequest\x1a\x1a.cln.ListaddressesResponse\"\x00\x12\x45\n\x0cListForwards\x12\x18.cln.ListforwardsRequest\x1a\x19.cln.ListforwardsResponse\"\x00\x12?\n\nListOffers\x12\x16.cln.ListoffersRequest\x1a\x17.cln.ListoffersResponse\"\x00\x12\x39\n\x08ListPays\x12\x14.cln.ListpaysRequest\x1a\x15.cln.ListpaysResponse\"\x00\x12<\n\tListHtlcs\x12\x15.cln.ListhtlcsRequest\x1a\x16.cln.ListhtlcsResponse\"\x00\x12Q\n\x10MultiFundChannel\x12\x1c.cln.MultifundchannelRequest\x1a\x1d.cln.MultifundchannelResponse\"\x00\x12H\n\rMultiWithdraw\x12\x19.cln.MultiwithdrawRequest\x1a\x1a.cln.MultiwithdrawResponse\"\x00\x12\x30\n\x05Offer\x12\x11.cln.OfferRequest\x1a\x12.cln.OfferResponse\"\x00\x12Q\n\x10OpenChannelAbort\x12\x1c.cln.OpenchannelAbortRequest\x1a\x1d.cln.OpenchannelAbortResponse\"\x00\x12N\n\x0fOpenChannelBump\x12\x1b.cln.OpenchannelBumpRequest\x1a\x1c.cln.OpenchannelBumpResponse\"\x00\x12N\n\x0fOpenChannelInit\x12\x1b.cln.OpenchannelInitRequest\x1a\x1c.cln.OpenchannelInitResponse\"\x00\x12T\n\x11OpenChannelSigned\x12\x1d.cln.OpenchannelSignedRequest\x1a\x1e.cln.OpenchannelSignedResponse\"\x00\x12T\n\x11OpenChannelUpdate\x12\x1d.cln.OpenchannelUpdateRequest\x1a\x1e.cln.OpenchannelUpdateResponse\"\x00\x12-\n\x04Ping\x12\x10.cln.PingRequest\x1a\x11.cln.PingResponse\"\x00\x12\x33\n\x06Plugin\x12\x12.cln.PluginRequest\x1a\x13.cln.PluginResponse\"\x00\x12H\n\rRenePayStatus\x12\x19.cln.RenepaystatusRequest\x1a\x1a.cln.RenepaystatusResponse\"\x00\x12\x36\n\x07RenePay\x12\x13.cln.RenepayRequest\x1a\x14.cln.RenepayResponse\"\x00\x12H\n\rReserveInputs\x12\x19.cln.ReserveinputsRequest\x1a\x1a.cln.ReserveinputsResponse\"\x00\x12H\n\rSendCustomMsg\x12\x19.cln.SendcustommsgRequest\x1a\x1a.cln.SendcustommsgResponse\"\x00\x12\x42\n\x0bSendInvoice\x12\x17.cln.SendinvoiceRequest\x1a\x18.cln.SendinvoiceResponse\"\x00\x12?\n\nSetChannel\x12\x16.cln.SetchannelRequest\x1a\x17.cln.SetchannelResponse\"\x00\x12<\n\tSetConfig\x12\x15.cln.SetconfigRequest\x1a\x16.cln.SetconfigResponse\"\x00\x12K\n\x0eSetPsbtVersion\x12\x1a.cln.SetpsbtversionRequest\x1a\x1b.cln.SetpsbtversionResponse\"\x00\x12\x42\n\x0bSignInvoice\x12\x17.cln.SigninvoiceRequest\x1a\x18.cln.SigninvoiceResponse\"\x00\x12\x42\n\x0bSignMessage\x12\x17.cln.SignmessageRequest\x1a\x18.cln.SignmessageResponse\"\x00\x12?\n\nSpliceInit\x12\x16.cln.SpliceInitRequest\x1a\x17.cln.SpliceInitResponse\"\x00\x12\x45\n\x0cSpliceSigned\x12\x18.cln.SpliceSignedRequest\x1a\x19.cln.SpliceSignedResponse\"\x00\x12\x45\n\x0cSpliceUpdate\x12\x18.cln.SpliceUpdateRequest\x1a\x19.cln.SpliceUpdateResponse\"\x00\x12\x39\n\x08SpliceIn\x12\x14.cln.SpliceinRequest\x1a\x15.cln.SpliceinResponse\"\x00\x12<\n\tSpliceOut\x12\x15.cln.SpliceoutRequest\x1a\x16.cln.SpliceoutResponse\"\x00\x12<\n\tDevSplice\x12\x15.cln.DevspliceRequest\x1a\x16.cln.DevspliceResponse\"\x00\x12N\n\x0fUnreserveInputs\x12\x1b.cln.UnreserveinputsRequest\x1a\x1c.cln.UnreserveinputsResponse\"\x00\x12H\n\rUpgradeWallet\x12\x19.cln.UpgradewalletRequest\x1a\x1a.cln.UpgradewalletResponse\"\x00\x12N\n\x0fWaitBlockHeight\x12\x1b.cln.WaitblockheightRequest\x1a\x1c.cln.WaitblockheightResponse\"\x00\x12-\n\x04Wait\x12\x10.cln.WaitRequest\x1a\x11.cln.WaitResponse\"\x00\x12\x42\n\x0bListConfigs\x12\x17.cln.ListconfigsRequest\x1a\x18.cln.ListconfigsResponse\"\x00\x12-\n\x04Stop\x12\x10.cln.StopRequest\x1a\x11.cln.StopResponse\"\x00\x12-\n\x04Help\x12\x10.cln.HelpRequest\x1a\x11.cln.HelpResponse\"\x00\x12T\n\x11PreApproveKeysend\x12\x1d.cln.PreapprovekeysendRequest\x1a\x1e.cln.PreapprovekeysendResponse\"\x00\x12T\n\x11PreApproveInvoice\x12\x1d.cln.PreapproveinvoiceRequest\x1a\x1e.cln.PreapproveinvoiceResponse\"\x00\x12\x45\n\x0cStaticBackup\x12\x18.cln.StaticbackupRequest\x1a\x19.cln.StaticbackupResponse\"\x00\x12N\n\x0f\x42kprChannelsApy\x12\x1b.cln.BkprchannelsapyRequest\x1a\x1c.cln.BkprchannelsapyResponse\"\x00\x12T\n\x11\x42kprDumpIncomeCsv\x12\x1d.cln.BkprdumpincomecsvRequest\x1a\x1e.cln.BkprdumpincomecsvResponse\"\x00\x12\x42\n\x0b\x42kprInspect\x12\x17.cln.BkprinspectRequest\x1a\x18.cln.BkprinspectResponse\"\x00\x12`\n\x15\x42kprListAccountEvents\x12!.cln.BkprlistaccounteventsRequest\x1a\".cln.BkprlistaccounteventsResponse\"\x00\x12Q\n\x10\x42kprListBalances\x12\x1c.cln.BkprlistbalancesRequest\x1a\x1d.cln.BkprlistbalancesResponse\"\x00\x12K\n\x0e\x42kprListIncome\x12\x1a.cln.BkprlistincomeRequest\x1a\x1b.cln.BkprlistincomeResponse\"\x00\x12{\n\x1e\x42kprEditDescriptionByPaymentId\x12*.cln.BkpreditdescriptionbypaymentidRequest\x1a+.cln.BkpreditdescriptionbypaymentidResponse\"\x00\x12x\n\x1d\x42kprEditDescriptionByOutpoint\x12).cln.BkpreditdescriptionbyoutpointRequest\x1a*.cln.BkpreditdescriptionbyoutpointResponse\"\x00\x12?\n\nBkprReport\x12\x16.cln.BkprreportRequest\x1a\x17.cln.BkprreportResponse\"\x00\x12H\n\rBlacklistRune\x12\x19.cln.BlacklistruneRequest\x1a\x1a.cln.BlacklistruneResponse\"\x00\x12<\n\tCheckRune\x12\x15.cln.CheckruneRequest\x1a\x16.cln.CheckruneResponse\"\x00\x12?\n\nCreateRune\x12\x16.cln.CreateruneRequest\x1a\x17.cln.CreateruneResponse\"\x00\x12<\n\tShowRunes\x12\x15.cln.ShowrunesRequest\x1a\x16.cln.ShowrunesResponse\"\x00\x12Q\n\x10\x41skReneUnreserve\x12\x1c.cln.AskreneunreserveRequest\x1a\x1d.cln.AskreneunreserveResponse\"\x00\x12T\n\x11\x41skReneListLayers\x12\x1d.cln.AskrenelistlayersRequest\x1a\x1e.cln.AskrenelistlayersResponse\"\x00\x12W\n\x12\x41skReneCreateLayer\x12\x1e.cln.AskrenecreatelayerRequest\x1a\x1f.cln.AskrenecreatelayerResponse\"\x00\x12W\n\x12\x41skReneRemoveLayer\x12\x1e.cln.AskreneremovelayerRequest\x1a\x1f.cln.AskreneremovelayerResponse\"\x00\x12o\n\x1a\x41skReneRemoveChannelUpdate\x12&.cln.AskreneremovechannelupdateRequest\x1a\'.cln.AskreneremovechannelupdateResponse\"\x00\x12K\n\x0e\x41skReneReserve\x12\x1a.cln.AskrenereserveRequest\x1a\x1b.cln.AskrenereserveResponse\"\x00\x12?\n\nAskReneAge\x12\x16.cln.AskreneageRequest\x1a\x17.cln.AskreneageResponse\"\x00\x12<\n\tGetRoutes\x12\x15.cln.GetroutesRequest\x1a\x16.cln.GetroutesResponse\"\x00\x12W\n\x12\x41skReneDisableNode\x12\x1e.cln.AskrenedisablenodeRequest\x1a\x1f.cln.AskrenedisablenodeResponse\"\x00\x12]\n\x14\x41skReneInformChannel\x12 .cln.AskreneinformchannelRequest\x1a!.cln.AskreneinformchannelResponse\"\x00\x12]\n\x14\x41skReneCreateChannel\x12 .cln.AskrenecreatechannelRequest\x1a!.cln.AskrenecreatechannelResponse\"\x00\x12]\n\x14\x41skReneUpdateChannel\x12 .cln.AskreneupdatechannelRequest\x1a!.cln.AskreneupdatechannelResponse\"\x00\x12W\n\x12\x41skReneBiasChannel\x12\x1e.cln.AskrenebiaschannelRequest\x1a\x1f.cln.AskrenebiaschannelResponse\"\x00\x12N\n\x0f\x41skreneBiasNode\x12\x1b.cln.AskrenebiasnodeRequest\x1a\x1c.cln.AskrenebiasnodeResponse\"\x00\x12\x66\n\x17\x41skReneListReservations\x12#.cln.AskrenelistreservationsRequest\x1a$.cln.AskrenelistreservationsResponse\"\x00\x12W\n\x12InjectPaymentOnion\x12\x1e.cln.InjectpaymentonionRequest\x1a\x1f.cln.InjectpaymentonionResponse\"\x00\x12W\n\x12InjectOnionMessage\x12\x1e.cln.InjectonionmessageRequest\x1a\x1f.cln.InjectonionmessageResponse\"\x00\x12-\n\x04Xpay\x12\x10.cln.XpayRequest\x1a\x11.cln.XpayResponse\"\x00\x12W\n\x12SignMessageWithKey\x12\x1e.cln.SignmessagewithkeyRequest\x1a\x1f.cln.SignmessagewithkeyResponse\"\x00\x12Q\n\x10ListChannelMoves\x12\x1c.cln.ListchannelmovesRequest\x1a\x1d.cln.ListchannelmovesResponse\"\x00\x12K\n\x0eListChainMoves\x12\x1a.cln.ListchainmovesRequest\x1a\x1b.cln.ListchainmovesResponse\"\x00\x12T\n\x11ListNetworkEvents\x12\x1d.cln.ListnetworkeventsRequest\x1a\x1e.cln.ListnetworkeventsResponse\"\x00\x12N\n\x0f\x44\x65lNetworkEvent\x12\x1b.cln.DelnetworkeventRequest\x1a\x1c.cln.DelnetworkeventResponse\"\x00\x12Z\n\x13\x43lnrestRegisterPath\x12\x1f.cln.ClnrestregisterpathRequest\x1a .cln.ClnrestregisterpathResponse\"\x00\x12T\n\x11ListCurrencyRates\x12\x1d.cln.ListcurrencyratesRequest\x1a\x1e.cln.ListcurrencyratesResponse\"\x00\x12N\n\x0f\x43urrencyConvert\x12\x1b.cln.CurrencyconvertRequest\x1a\x1c.cln.CurrencyconvertResponse\"\x00\x12\x45\n\x0c\x43urrencyRate\x12\x18.cln.CurrencyrateRequest\x1a\x19.cln.CurrencyrateResponse\"\x00\x12?\n\nSendAmount\x12\x16.cln.SendamountRequest\x1a\x17.cln.SendamountResponse\"\x00\x12\x42\n\x0b\x43reateProof\x12\x17.cln.CreateproofRequest\x1a\x18.cln.CreateproofResponse\"\x00\x12\x39\n\x08Xkeysend\x12\x14.cln.XkeysendRequest\x1a\x15.cln.XkeysendResponse\"\x00\x12\x39\n\x08Graceful\x12\x14.cln.GracefulRequest\x1a\x15.cln.GracefulResponse\"\x00\x12\x63\n\x18SubscribeBalanceSnapshot\x12!.cln.StreamBalanceSnapshotRequest\x1a .cln.BalanceSnapshotNotification\"\x00\x30\x01\x12T\n\x13SubscribeBlockAdded\x12\x1c.cln.StreamBlockAddedRequest\x1a\x1b.cln.BlockAddedNotification\"\x00\x30\x01\x12i\n\x1aSubscribeChannelOpenFailed\x12#.cln.StreamChannelOpenFailedRequest\x1a\".cln.ChannelOpenFailedNotification\"\x00\x30\x01\x12]\n\x16SubscribeChannelOpened\x12\x1f.cln.StreamChannelOpenedRequest\x1a\x1e.cln.ChannelOpenedNotification\"\x00\x30\x01\x12o\n\x1cSubscribeChannelStateChanged\x12%.cln.StreamChannelStateChangedRequest\x1a$.cln.ChannelStateChangedNotification\"\x00\x30\x01\x12O\n\x10SubscribeConnect\x12\x19.cln.StreamConnectRequest\x1a\x1c.cln.PeerConnectNotification\"\x00\x30\x01\x12Z\n\x15SubscribeCoinMovement\x12\x1e.cln.StreamCoinMovementRequest\x1a\x1d.cln.CoinMovementNotification\"\x00\x30\x01\x12Q\n\x12SubscribeCustomMsg\x12\x1b.cln.StreamCustomMsgRequest\x1a\x1a.cln.CustomMsgNotification\"\x00\x30\x01\x12i\n\x1aSubscribeDeprecatedOneshot\x12#.cln.StreamDeprecatedOneshotRequest\x1a\".cln.DeprecatedOneshotNotification\"\x00\x30\x01\x12T\n\x13SubscribeDisconnect\x12\x1c.cln.StreamDisconnectRequest\x1a\x1b.cln.DisconnectNotification\"\x00\x30\x01\x12Z\n\x15SubscribeForwardEvent\x12\x1e.cln.StreamForwardEventRequest\x1a\x1d.cln.ForwardEventNotification\"\x00\x30\x01\x12\x63\n\x18SubscribeInvoiceCreation\x12!.cln.StreamInvoiceCreationRequest\x1a .cln.InvoiceCreationNotification\"\x00\x30\x01\x12`\n\x17SubscribeInvoicePayment\x12 .cln.StreamInvoicePaymentRequest\x1a\x1f.cln.InvoicePaymentNotification\"\x00\x30\x01\x12?\n\x0cSubscribeLog\x12\x15.cln.StreamLogRequest\x1a\x14.cln.LogNotification\"\x00\x30\x01\x12{\n SubscribeOnionMessageForwardFail\x12).cln.StreamOnionMessageForwardFailRequest\x1a(.cln.OnionMessageForwardFailNotification\"\x00\x30\x01\x12o\n\x1cSubscribeOpenChannelPeerSigs\x12%.cln.StreamOpenChannelPeerSigsRequest\x1a$.cln.OpenChannelPeerSigsNotification\"\x00\x30\x01\x12]\n\x16SubscribePluginStarted\x12\x1f.cln.StreamPluginStartedRequest\x1a\x1e.cln.PluginStartedNotification\"\x00\x30\x01\x12]\n\x16SubscribePluginStopped\x12\x1f.cln.StreamPluginStoppedRequest\x1a\x1e.cln.PluginStoppedNotification\"\x00\x30\x01\x12`\n\x17SubscribeSendPayFailure\x12 .cln.StreamSendPayFailureRequest\x1a\x1f.cln.SendPayFailureNotification\"\x00\x30\x01\x12`\n\x17SubscribeSendPaySuccess\x12 .cln.StreamSendPaySuccessRequest\x1a\x1f.cln.SendPaySuccessNotification\"\x00\x30\x01\x12N\n\x11SubscribeShutdown\x12\x1a.cln.StreamShutdownRequest\x1a\x19.cln.ShutdownNotification\"\x00\x30\x01\x12K\n\x10SubscribeWarning\x12\x19.cln.StreamWarningRequest\x1a\x18.cln.WarningNotification\"\x00\x30\x01\x12T\n\x13SubscribePayPartEnd\x12\x1c.cln.StreamPayPartEndRequest\x1a\x1b.cln.PayPartEndNotification\"\x00\x30\x01\x12Z\n\x15SubscribePayPartStart\x12\x1e.cln.StreamPayPartStartRequest\x1a\x1d.cln.PayPartStartNotification\"\x00\x30\x01\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\nnode.proto\x12\x03\x63ln\x1a\x10primitives.proto\"\x10\n\x0eGetinfoRequest\"\xb1\x04\n\x0fGetinfoResponse\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\r\n\x05\x61lias\x18\x02 \x01(\t\x12\r\n\x05\x63olor\x18\x03 \x01(\x0c\x12\x11\n\tnum_peers\x18\x04 \x01(\r\x12\x1c\n\x14num_pending_channels\x18\x05 \x01(\r\x12\x1b\n\x13num_active_channels\x18\x06 \x01(\r\x12\x1d\n\x15num_inactive_channels\x18\x07 \x01(\r\x12\x0f\n\x07version\x18\x08 \x01(\t\x12\x15\n\rlightning_dir\x18\t \x01(\t\x12\x32\n\x0cour_features\x18\n \x01(\x0b\x32\x17.cln.GetinfoOurFeaturesH\x00\x88\x01\x01\x12\x13\n\x0b\x62lockheight\x18\x0b \x01(\r\x12\x0f\n\x07network\x18\x0c \x01(\t\x12(\n\x13\x66\x65\x65s_collected_msat\x18\r \x01(\x0b\x32\x0b.cln.Amount\x12$\n\x07\x61\x64\x64ress\x18\x0e \x03(\x0b\x32\x13.cln.GetinfoAddress\x12$\n\x07\x62inding\x18\x0f \x03(\x0b\x32\x13.cln.GetinfoBinding\x12\"\n\x15warning_bitcoind_sync\x18\x10 \x01(\tH\x01\x88\x01\x01\x12$\n\x17warning_lightningd_sync\x18\x11 \x01(\tH\x02\x88\x01\x01\x42\x0f\n\r_our_featuresB\x18\n\x16_warning_bitcoind_syncB\x1a\n\x18_warning_lightningd_sync\"\xc4\x01\n\x0eGetinfoAddress\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.GetinfoAddress.GetinfoAddressType\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x00\x88\x01\x01\"G\n\x12GetinfoAddressType\x12\x07\n\x03\x44NS\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x42\n\n\x08_address\"\xac\x02\n\x0eGetinfoBinding\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.GetinfoBinding.GetinfoBindingType\x12\x14\n\x07\x61\x64\x64ress\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04port\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06socket\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x14\n\x07subtype\x18\x05 \x01(\tH\x03\x88\x01\x01\"_\n\x12GetinfoBindingType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x12\r\n\tWEBSOCKET\x10\x05\x42\n\n\x08_addressB\x07\n\x05_portB\t\n\x07_socketB\n\n\x08_subtype\"R\n\x12GetinfoOurFeatures\x12\x0c\n\x04init\x18\x01 \x01(\x0c\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x0f\n\x07\x63hannel\x18\x03 \x01(\x0c\x12\x0f\n\x07invoice\x18\x04 \x01(\x0c\"\xb5\x01\n\x10ListpeersRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x38\n\x05level\x18\x02 \x01(\x0e\x32$.cln.ListpeersRequest.ListpeersLevelH\x01\x88\x01\x01\"E\n\x0eListpeersLevel\x12\x06\n\x02IO\x10\x00\x12\t\n\x05\x44\x45\x42UG\x10\x01\x12\x08\n\x04INFO\x10\x02\x12\x0b\n\x07UNUSUAL\x10\x03\x12\t\n\x05TRACE\x10\x04\x42\x05\n\x03_idB\x08\n\x06_level\"7\n\x11ListpeersResponse\x12\"\n\x05peers\x18\x01 \x03(\x0b\x32\x13.cln.ListpeersPeers\"\xc9\x01\n\x0eListpeersPeers\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x11\n\tconnected\x18\x02 \x01(\x08\x12#\n\x03log\x18\x03 \x03(\x0b\x32\x16.cln.ListpeersPeersLog\x12\x0f\n\x07netaddr\x18\x05 \x03(\t\x12\x15\n\x08\x66\x65\x61tures\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12\x18\n\x0bremote_addr\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x0cnum_channels\x18\x08 \x01(\rB\x0b\n\t_featuresB\x0e\n\x0c_remote_addr\"\x88\x03\n\x11ListpeersPeersLog\x12?\n\titem_type\x18\x01 \x01(\x0e\x32,.cln.ListpeersPeersLog.ListpeersPeersLogType\x12\x18\n\x0bnum_skipped\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04time\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06source\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x10\n\x03log\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x07node_id\x18\x06 \x01(\x0cH\x04\x88\x01\x01\x12\x11\n\x04\x64\x61ta\x18\x07 \x01(\x0cH\x05\x88\x01\x01\"t\n\x15ListpeersPeersLogType\x12\x0b\n\x07SKIPPED\x10\x00\x12\n\n\x06\x42ROKEN\x10\x01\x12\x0b\n\x07UNUSUAL\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\t\n\x05\x44\x45\x42UG\x10\x04\x12\t\n\x05IO_IN\x10\x05\x12\n\n\x06IO_OUT\x10\x06\x12\t\n\x05TRACE\x10\x07\x42\x0e\n\x0c_num_skippedB\x07\n\x05_timeB\t\n\x07_sourceB\x06\n\x04_logB\n\n\x08_node_idB\x07\n\x05_data\"0\n\x10ListfundsRequest\x12\x12\n\x05spent\x18\x01 \x01(\x08H\x00\x88\x01\x01\x42\x08\n\x06_spent\"e\n\x11ListfundsResponse\x12&\n\x07outputs\x18\x01 \x03(\x0b\x32\x15.cln.ListfundsOutputs\x12(\n\x08\x63hannels\x18\x02 \x03(\x0b\x32\x16.cln.ListfundsChannels\"\x97\x02\n\x11ListfundsChannels\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12$\n\x0four_amount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66unding_txid\x18\x04 \x01(\x0c\x12\x16\n\x0e\x66unding_output\x18\x05 \x01(\r\x12\x11\n\tconnected\x18\x06 \x01(\x08\x12 \n\x05state\x18\x07 \x01(\x0e\x32\x11.cln.ChannelState\x12\x1d\n\x10short_channel_id\x18\x08 \x01(\tH\x00\x88\x01\x01\x12\x12\n\nchannel_id\x18\t \x01(\x0c\x42\x13\n\x11_short_channel_id\"\xb9\x03\n\x10ListfundsOutputs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06output\x18\x02 \x01(\r\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0cscriptpubkey\x18\x04 \x01(\x0c\x12\x14\n\x07\x61\x64\x64ress\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0credeemscript\x18\x06 \x01(\x0cH\x01\x88\x01\x01\x12<\n\x06status\x18\x07 \x01(\x0e\x32,.cln.ListfundsOutputs.ListfundsOutputsStatus\x12\x18\n\x0b\x62lockheight\x18\x08 \x01(\rH\x02\x88\x01\x01\x12\x10\n\x08reserved\x18\t \x01(\x08\x12\x1e\n\x11reserved_to_block\x18\n \x01(\rH\x03\x88\x01\x01\"Q\n\x16ListfundsOutputsStatus\x12\x0f\n\x0bUNCONFIRMED\x10\x00\x12\r\n\tCONFIRMED\x10\x01\x12\t\n\x05SPENT\x10\x02\x12\x0c\n\x08IMMATURE\x10\x03\x42\n\n\x08_addressB\x0f\n\r_redeemscriptB\x0e\n\x0c_blockheightB\x14\n\x12_reserved_to_block\"\xbb\x03\n\x0eSendpayRequest\x12 \n\x05route\x18\x01 \x03(\x0b\x32\x11.cln.SendpayRoute\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x12\n\x05label\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x1b\n\x0epayment_secret\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x13\n\x06partid\x18\x07 \x01(\x04H\x03\x88\x01\x01\x12\x14\n\x07groupid\x18\t \x01(\x04H\x04\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\x0b \x01(\x0cH\x06\x88\x01\x01\x12\x1d\n\x10payment_metadata\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\r \x01(\tH\x08\x88\x01\x01\x42\x08\n\x06_labelB\t\n\x07_bolt11B\x11\n\x0f_payment_secretB\t\n\x07_partidB\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x13\n\x11_payment_metadataB\x0e\n\x0c_description\"\x96\x05\n\x0fSendpayResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x07groupid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x32\n\x06status\x18\x04 \x01(\x0e\x32\".cln.SendpayResponse.SendpayStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06partid\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x14\n\x07message\x18\x0e \x01(\tH\x08\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0f \x01(\x04H\t\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\n\x88\x01\x01\"*\n\rSendpayStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x42\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\n\n\x08_messageB\x0f\n\r_completed_atB\x10\n\x0e_updated_index\"\xe6\x02\n\x0cSendpayRoute\x12\x0f\n\x02id\x18\x02 \x01(\x0cH\x00\x88\x01\x01\x12\x12\n\x05\x64\x65lay\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x14\n\x07\x63hannel\x18\x04 \x01(\tH\x02\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12!\n\x14short_channel_id_dir\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x18\n\x0bnode_id_out\x18\x07 \x01(\x0cH\x05\x88\x01\x01\x12)\n\x0f\x61mount_out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x15\n\x08\x63ltv_out\x18\t \x01(\rH\x07\x88\x01\x01\x42\x05\n\x03_idB\x08\n\x06_delayB\n\n\x08_channelB\x0e\n\x0c_amount_msatB\x17\n\x15_short_channel_id_dirB\x0e\n\x0c_node_id_outB\x12\n\x10_amount_out_msatB\x0b\n\t_cltv_out\"\x93\x01\n\x13ListchannelsRequest\x12\x1d\n\x10short_channel_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06source\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x42\x13\n\x11_short_channel_idB\t\n\x07_sourceB\x0e\n\x0c_destination\"C\n\x14ListchannelsResponse\x12+\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x19.cln.ListchannelsChannels\"\xb3\x03\n\x14ListchannelsChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\x0e\n\x06public\x18\x04 \x01(\x08\x12 \n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x15\n\rmessage_flags\x18\x06 \x01(\r\x12\x15\n\rchannel_flags\x18\x07 \x01(\r\x12\x0e\n\x06\x61\x63tive\x18\x08 \x01(\x08\x12\x13\n\x0blast_update\x18\t \x01(\r\x12\x1d\n\x15\x62\x61se_fee_millisatoshi\x18\n \x01(\r\x12\x19\n\x11\x66\x65\x65_per_millionth\x18\x0b \x01(\r\x12\r\n\x05\x64\x65lay\x18\x0c \x01(\r\x12&\n\x11htlc_minimum_msat\x18\r \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x11htlc_maximum_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x10\n\x08\x66\x65\x61tures\x18\x0f \x01(\x0c\x12\x11\n\tdirection\x18\x10 \x01(\rB\x14\n\x12_htlc_maximum_msat\"#\n\x10\x41\x64\x64gossipRequest\x12\x0f\n\x07message\x18\x01 \x01(\x0c\"\x13\n\x11\x41\x64\x64gossipResponse\"\xaf\x01\n\x14\x41\x64\x64psbtoutputRequest\x12\x1f\n\x07satoshi\x18\x01 \x01(\x0b\x32\x0e.cln.AmountSat\x12\x15\n\x08locktime\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x18\n\x0binitialpsbt\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x04 \x01(\tH\x02\x88\x01\x01\x42\x0b\n\t_locktimeB\x0e\n\x0c_initialpsbtB\x0e\n\x0c_destination\"U\n\x15\x41\x64\x64psbtoutputResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x1e\n\x16\x65stimated_added_weight\x18\x02 \x01(\r\x12\x0e\n\x06outnum\x18\x03 \x01(\r\"O\n\x14\x41utocleanonceRequest\x12*\n\tsubsystem\x18\x01 \x01(\x0e\x32\x17.cln.AutocleanSubsystem\x12\x0b\n\x03\x61ge\x18\x02 \x01(\x04\"G\n\x15\x41utocleanonceResponse\x12.\n\tautoclean\x18\x01 \x01(\x0b\x32\x1b.cln.AutocleanonceAutoclean\"\x89\x05\n\x16\x41utocleanonceAutoclean\x12L\n\x11succeededforwards\x18\x01 \x01(\x0b\x32,.cln.AutocleanonceAutocleanSucceededforwardsH\x00\x88\x01\x01\x12\x46\n\x0e\x66\x61iledforwards\x18\x02 \x01(\x0b\x32).cln.AutocleanonceAutocleanFailedforwardsH\x01\x88\x01\x01\x12\x44\n\rsucceededpays\x18\x03 \x01(\x0b\x32(.cln.AutocleanonceAutocleanSucceededpaysH\x02\x88\x01\x01\x12>\n\nfailedpays\x18\x04 \x01(\x0b\x32%.cln.AutocleanonceAutocleanFailedpaysH\x03\x88\x01\x01\x12\x42\n\x0cpaidinvoices\x18\x05 \x01(\x0b\x32\'.cln.AutocleanonceAutocleanPaidinvoicesH\x04\x88\x01\x01\x12H\n\x0f\x65xpiredinvoices\x18\x06 \x01(\x0b\x32*.cln.AutocleanonceAutocleanExpiredinvoicesH\x05\x88\x01\x01\x12\x44\n\rnetworkevents\x18\x07 \x01(\x0b\x32(.cln.AutocleanonceAutocleanNetworkeventsH\x06\x88\x01\x01\x42\x14\n\x12_succeededforwardsB\x11\n\x0f_failedforwardsB\x10\n\x0e_succeededpaysB\r\n\x0b_failedpaysB\x0f\n\r_paidinvoicesB\x12\n\x10_expiredinvoicesB\x10\n\x0e_networkevents\"K\n%AutocleanonceAutocleanExpiredinvoices\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"J\n$AutocleanonceAutocleanFailedforwards\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"F\n AutocleanonceAutocleanFailedpays\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"I\n#AutocleanonceAutocleanNetworkevents\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"H\n\"AutocleanonceAutocleanPaidinvoices\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"M\n\'AutocleanonceAutocleanSucceededforwards\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"I\n#AutocleanonceAutocleanSucceededpays\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"W\n\x16\x41utocleanstatusRequest\x12/\n\tsubsystem\x18\x01 \x01(\x0e\x32\x17.cln.AutocleanSubsystemH\x00\x88\x01\x01\x42\x0c\n\n_subsystem\"K\n\x17\x41utocleanstatusResponse\x12\x30\n\tautoclean\x18\x01 \x01(\x0b\x32\x1d.cln.AutocleanstatusAutoclean\"\x99\x05\n\x18\x41utocleanstatusAutoclean\x12N\n\x11succeededforwards\x18\x01 \x01(\x0b\x32..cln.AutocleanstatusAutocleanSucceededforwardsH\x00\x88\x01\x01\x12H\n\x0e\x66\x61iledforwards\x18\x02 \x01(\x0b\x32+.cln.AutocleanstatusAutocleanFailedforwardsH\x01\x88\x01\x01\x12\x46\n\rsucceededpays\x18\x03 \x01(\x0b\x32*.cln.AutocleanstatusAutocleanSucceededpaysH\x02\x88\x01\x01\x12@\n\nfailedpays\x18\x04 \x01(\x0b\x32\'.cln.AutocleanstatusAutocleanFailedpaysH\x03\x88\x01\x01\x12\x44\n\x0cpaidinvoices\x18\x05 \x01(\x0b\x32).cln.AutocleanstatusAutocleanPaidinvoicesH\x04\x88\x01\x01\x12J\n\x0f\x65xpiredinvoices\x18\x06 \x01(\x0b\x32,.cln.AutocleanstatusAutocleanExpiredinvoicesH\x05\x88\x01\x01\x12\x46\n\rnetworkevents\x18\x07 \x01(\x0b\x32*.cln.AutocleanstatusAutocleanNetworkeventsH\x06\x88\x01\x01\x42\x14\n\x12_succeededforwardsB\x11\n\x0f_failedforwardsB\x10\n\x0e_succeededpaysB\r\n\x0b_failedpaysB\x0f\n\r_paidinvoicesB\x12\n\x10_expiredinvoicesB\x10\n\x0e_networkevents\"e\n\'AutocleanstatusAutocleanExpiredinvoices\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"d\n&AutocleanstatusAutocleanFailedforwards\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"`\n\"AutocleanstatusAutocleanFailedpays\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"c\n%AutocleanstatusAutocleanNetworkevents\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"b\n$AutocleanstatusAutocleanPaidinvoices\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"g\n)AutocleanstatusAutocleanSucceededforwards\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"c\n%AutocleanstatusAutocleanSucceededpays\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"U\n\x13\x43heckmessageRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\r\n\x05zbase\x18\x02 \x01(\t\x12\x13\n\x06pubkey\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x42\t\n\x07_pubkey\"8\n\x14\x43heckmessageResponse\x12\x10\n\x08verified\x18\x01 \x01(\x08\x12\x0e\n\x06pubkey\x18\x02 \x01(\x0c\"\xcb\x02\n\x0c\x43loseRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x1e\n\x11unilateraltimeout\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\tH\x01\x88\x01\x01\x12!\n\x14\x66\x65\x65_negotiation_step\x18\x04 \x01(\tH\x02\x88\x01\x01\x12)\n\rwrong_funding\x18\x05 \x01(\x0b\x32\r.cln.OutpointH\x03\x88\x01\x01\x12\x1f\n\x12\x66orce_lease_closed\x18\x06 \x01(\x08H\x04\x88\x01\x01\x12\x1e\n\x08\x66\x65\x65range\x18\x07 \x03(\x0b\x32\x0c.cln.FeerateB\x14\n\x12_unilateraltimeoutB\x0e\n\x0c_destinationB\x17\n\x15_fee_negotiation_stepB\x10\n\x0e_wrong_fundingB\x15\n\x13_force_lease_closed\"\x93\x01\n\rCloseResponse\x12/\n\titem_type\x18\x01 \x01(\x0e\x32\x1c.cln.CloseResponse.CloseType\x12\x0b\n\x03txs\x18\x04 \x03(\x0c\x12\r\n\x05txids\x18\x05 \x03(\x0c\"5\n\tCloseType\x12\n\n\x06MUTUAL\x10\x00\x12\x0e\n\nUNILATERAL\x10\x01\x12\x0c\n\x08UNOPENED\x10\x02\"T\n\x0e\x43onnectRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\x04host\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04port\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x07\n\x05_hostB\x07\n\x05_port\"\xb4\x01\n\x0f\x43onnectResponse\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x10\n\x08\x66\x65\x61tures\x18\x02 \x01(\x0c\x12\x38\n\tdirection\x18\x03 \x01(\x0e\x32%.cln.ConnectResponse.ConnectDirection\x12$\n\x07\x61\x64\x64ress\x18\x04 \x01(\x0b\x32\x13.cln.ConnectAddress\"#\n\x10\x43onnectDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\"\xfb\x01\n\x0e\x43onnectAddress\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.ConnectAddress.ConnectAddressType\x12\x13\n\x06socket\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04port\x18\x04 \x01(\rH\x02\x88\x01\x01\"P\n\x12\x43onnectAddressType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x42\t\n\x07_socketB\n\n\x08_addressB\x07\n\x05_port\"J\n\x14\x43reateinvoiceRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12\x10\n\x08preimage\x18\x03 \x01(\x0c\"\xe6\x05\n\x15\x43reateinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x06\x62olt11\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x04 \x01(\x0c\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12>\n\x06status\x18\x06 \x01(\x0e\x32..cln.CreateinvoiceResponse.CreateinvoiceStatus\x12\x13\n\x0b\x64\x65scription\x18\x07 \x01(\t\x12\x12\n\nexpires_at\x18\x08 \x01(\x04\x12\x16\n\tpay_index\x18\t \x01(\x04H\x03\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x06\x88\x01\x01\x12\x1b\n\x0elocal_offer_id\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0f \x01(\tH\x08\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12:\n\rpaid_outpoint\x18\x11 \x01(\x0b\x32\x1e.cln.CreateinvoicePaidOutpointH\t\x88\x01\x01\"8\n\x13\x43reateinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x11\n\x0f_local_offer_idB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_paid_outpoint\"9\n\x19\x43reateinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\xb4\x02\n\x10\x44\x61tastoreRequest\x12\x10\n\x03hex\x18\x02 \x01(\x0cH\x00\x88\x01\x01\x12\x36\n\x04mode\x18\x03 \x01(\x0e\x32#.cln.DatastoreRequest.DatastoreModeH\x01\x88\x01\x01\x12\x17\n\ngeneration\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\t\x12\x13\n\x06string\x18\x06 \x01(\tH\x03\x88\x01\x01\"p\n\rDatastoreMode\x12\x0f\n\x0bMUST_CREATE\x10\x00\x12\x10\n\x0cMUST_REPLACE\x10\x01\x12\x15\n\x11\x43REATE_OR_REPLACE\x10\x02\x12\x0f\n\x0bMUST_APPEND\x10\x03\x12\x14\n\x10\x43REATE_OR_APPEND\x10\x04\x42\x06\n\x04_hexB\x07\n\x05_modeB\r\n\x0b_generationB\t\n\x07_string\"\x82\x01\n\x11\x44\x61tastoreResponse\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\tB\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"$\n\x15\x44\x61tastoreusageRequest\x12\x0b\n\x03key\x18\x01 \x03(\t\"S\n\x16\x44\x61tastoreusageResponse\x12\x39\n\x0e\x64\x61tastoreusage\x18\x01 \x01(\x0b\x32!.cln.DatastoreusageDatastoreusage\"@\n\x1c\x44\x61tastoreusageDatastoreusage\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x13\n\x0btotal_bytes\x18\x02 \x01(\x04\"\x9d\x01\n\x12\x43reateonionRequest\x12\"\n\x04hops\x18\x01 \x03(\x0b\x32\x14.cln.CreateonionHops\x12\x11\n\tassocdata\x18\x02 \x01(\x0c\x12\x18\n\x0bsession_key\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x17\n\nonion_size\x18\x04 \x01(\rH\x01\x88\x01\x01\x42\x0e\n\x0c_session_keyB\r\n\x0b_onion_size\"<\n\x13\x43reateonionResponse\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12\x16\n\x0eshared_secrets\x18\x02 \x03(\x0c\"2\n\x0f\x43reateonionHops\x12\x0e\n\x06pubkey\x18\x01 \x01(\x0c\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\"J\n\x13\x44\x65ldatastoreRequest\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x0b\n\x03key\x18\x03 \x03(\tB\r\n\x0b_generation\"\x85\x01\n\x14\x44\x65ldatastoreResponse\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\tB\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"\xb6\x01\n\x11\x44\x65linvoiceRequest\x12\r\n\x05label\x18\x01 \x01(\t\x12\x37\n\x06status\x18\x02 \x01(\x0e\x32\'.cln.DelinvoiceRequest.DelinvoiceStatus\x12\x15\n\x08\x64\x65sconly\x18\x03 \x01(\x08H\x00\x88\x01\x01\"5\n\x10\x44\x65linvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\x0b\n\t_desconly\"\xcf\x05\n\x12\x44\x65linvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x06\x62olt11\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x03 \x01(\tH\x01\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x06 \x01(\x0c\x12\x38\n\x06status\x18\x07 \x01(\x0e\x32(.cln.DelinvoiceResponse.DelinvoiceStatus\x12\x12\n\nexpires_at\x18\x08 \x01(\x04\x12\x1b\n\x0elocal_offer_id\x18\t \x01(\x0cH\x04\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0c \x01(\x04\x12\x1a\n\rupdated_index\x18\r \x01(\x04H\x06\x88\x01\x01\x12\x16\n\tpay_index\x18\x0e \x01(\x04H\x07\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x12\x14\n\x07paid_at\x18\x10 \x01(\x04H\t\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x11 \x01(\x0cH\n\x88\x01\x01\"5\n\x10\x44\x65linvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x0e\n\x0c_descriptionB\x11\n\x0f_local_offer_idB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_updated_indexB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimage\"\x9f\x01\n\x17\x44\x65vforgetchannelRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x17\n\nchannel_id\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\x05\x66orce\x18\x04 \x01(\x08H\x02\x88\x01\x01\x42\x13\n\x11_short_channel_idB\r\n\x0b_channel_idB\x08\n\x06_force\"Y\n\x18\x44\x65vforgetchannelResponse\x12\x0e\n\x06\x66orced\x18\x01 \x01(\x08\x12\x17\n\x0f\x66unding_unspent\x18\x02 \x01(\x08\x12\x14\n\x0c\x66unding_txid\x18\x03 \x01(\x0c\"\x19\n\x17\x45mergencyrecoverRequest\")\n\x18\x45mergencyrecoverResponse\x12\r\n\x05stubs\x18\x01 \x03(\x0c\" \n\x1eGetemergencyrecoverdataRequest\"\x8a\x01\n\x1fGetemergencyrecoverdataResponse\x12\x10\n\x08\x66iledata\x18\x01 \x01(\x0c\x12\x1f\n\x12\x63\x61n_create_penalty\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x1d\n\x15\x62\x61\x63ked_up_channel_ids\x18\x03 \x03(\x0c\x42\x15\n\x13_can_create_penalty\"Q\n\x13\x45xposesecretRequest\x12\x12\n\npassphrase\x18\x01 \x01(\t\x12\x17\n\nidentifier\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\r\n\x0b_identifier\"_\n\x14\x45xposesecretResponse\x12\x12\n\nidentifier\x18\x01 \x01(\t\x12\x0f\n\x07\x63odex32\x18\x02 \x01(\t\x12\x15\n\x08mnemonic\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x0b\n\t_mnemonic\"#\n\x0eRecoverRequest\x12\x11\n\thsmsecret\x18\x01 \x01(\t\"x\n\x0fRecoverResponse\x12\x32\n\x06result\x18\x01 \x01(\x0e\x32\".cln.RecoverResponse.RecoverResult\"1\n\rRecoverResult\x12 \n\x1cRECOVERY_RESTART_IN_PROGRESS\x10\x00\"$\n\x15RecoverchannelRequest\x12\x0b\n\x03scb\x18\x01 \x03(\x0c\"\'\n\x16RecoverchannelResponse\x12\r\n\x05stubs\x18\x01 \x03(\t\"\x99\x02\n\x0eInvoiceRequest\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\r\n\x05label\x18\x03 \x01(\t\x12\x11\n\tfallbacks\x18\x04 \x03(\t\x12\x15\n\x08preimage\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x12\x11\n\x04\x63ltv\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06\x65xpiry\x18\x07 \x01(\x04H\x02\x88\x01\x01\x12\x1d\n\x15\x65xposeprivatechannels\x18\x08 \x03(\t\x12\x19\n\x0c\x64\x65schashonly\x18\t \x01(\x08H\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x10.cln.AmountOrAnyB\x0b\n\t_preimageB\x07\n\x05_cltvB\t\n\x07_expiryB\x0f\n\r_deschashonly\"\xfe\x02\n\x0fInvoiceResponse\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x16\n\x0epayment_secret\x18\x03 \x01(\x0c\x12\x12\n\nexpires_at\x18\x04 \x01(\x04\x12\x1d\n\x10warning_capacity\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x1c\n\x0fwarning_offline\x18\x06 \x01(\tH\x01\x88\x01\x01\x12\x1d\n\x10warning_deadends\x18\x07 \x01(\tH\x02\x88\x01\x01\x12#\n\x16warning_private_unused\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x18\n\x0bwarning_mpp\x18\t \x01(\tH\x04\x88\x01\x01\x12\x15\n\rcreated_index\x18\n \x01(\x04\x42\x13\n\x11_warning_capacityB\x12\n\x10_warning_offlineB\x13\n\x11_warning_deadendsB\x19\n\x17_warning_private_unusedB\x0e\n\x0c_warning_mpp\"\xe1\x01\n\x15InvoicerequestRequest\x12\x1b\n\x06\x61mount\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x13\n\x06issuer\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05label\x18\x04 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0f\x61\x62solute_expiry\x18\x05 \x01(\x04H\x02\x88\x01\x01\x12\x17\n\nsingle_use\x18\x06 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_issuerB\x08\n\x06_labelB\x12\n\x10_absolute_expiryB\r\n\x0b_single_use\"\x8b\x01\n\x16InvoicerequestResponse\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"1\n\x1c\x44isableinvoicerequestRequest\x12\x11\n\tinvreq_id\x18\x01 \x01(\t\"\x92\x01\n\x1d\x44isableinvoicerequestResponse\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"l\n\x1aListinvoicerequestsRequest\x12\x16\n\tinvreq_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x61\x63tive_only\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\x0c\n\n_invreq_idB\x0e\n\x0c_active_only\"_\n\x1bListinvoicerequestsResponse\x12@\n\x0finvoicerequests\x18\x01 \x03(\x0b\x32\'.cln.ListinvoicerequestsInvoicerequests\"\x97\x01\n\"ListinvoicerequestsInvoicerequests\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"#\n\x14ListdatastoreRequest\x12\x0b\n\x03key\x18\x02 \x03(\t\"G\n\x15ListdatastoreResponse\x12.\n\tdatastore\x18\x01 \x03(\x0b\x32\x1b.cln.ListdatastoreDatastore\"\x87\x01\n\x16ListdatastoreDatastore\x12\x0b\n\x03key\x18\x01 \x03(\t\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x42\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"\xde\x02\n\x13ListinvoicesRequest\x12\x12\n\x05label\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tinvstring\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x12\x15\n\x08offer_id\x18\x04 \x01(\tH\x03\x88\x01\x01\x12>\n\x05index\x18\x05 \x01(\x0e\x32*.cln.ListinvoicesRequest.ListinvoicesIndexH\x04\x88\x01\x01\x12\x12\n\x05start\x18\x06 \x01(\x04H\x05\x88\x01\x01\x12\x12\n\x05limit\x18\x07 \x01(\rH\x06\x88\x01\x01\"-\n\x11ListinvoicesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x42\x08\n\x06_labelB\x0c\n\n_invstringB\x0f\n\r_payment_hashB\x0b\n\t_offer_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListinvoicesResponse\x12+\n\x08invoices\x18\x01 \x03(\x0b\x32\x19.cln.ListinvoicesInvoices\"\xbc\x06\n\x14ListinvoicesInvoices\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x44\n\x06status\x18\x04 \x01(\x0e\x32\x34.cln.ListinvoicesInvoices.ListinvoicesInvoicesStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x1b\n\x0elocal_offer_id\x18\t \x01(\x0cH\x04\x88\x01\x01\x12\x16\n\tpay_index\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x14\n\x07paid_at\x18\r \x01(\x04H\x07\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0e \x01(\x0cH\x08\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0f \x01(\tH\t\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\n\x88\x01\x01\x12\x41\n\rpaid_outpoint\x18\x12 \x01(\x0b\x32%.cln.ListinvoicesInvoicesPaidOutpointH\x0b\x88\x01\x01\"?\n\x1aListinvoicesInvoicesStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x11\n\x0f_local_offer_idB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\"@\n ListinvoicesInvoicesPaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\xf6\x03\n\x10SendonionRequest\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12)\n\tfirst_hop\x18\x02 \x01(\x0b\x32\x16.cln.SendonionFirstHop\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x12\n\x05label\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x16\n\x0eshared_secrets\x18\x05 \x03(\x0c\x12\x13\n\x06partid\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\t \x01(\x0cH\x03\x88\x01\x01\x12\x14\n\x07groupid\x18\x0b \x01(\x04H\x04\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\r \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0e \x01(\tH\x07\x88\x01\x01\x12+\n\x11total_amount_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x42\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\x0e\n\x0c_destinationB\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x0e\n\x0c_descriptionB\x14\n\x12_total_amount_msat\"\xd0\x04\n\x11SendonionResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x36\n\x06status\x18\x03 \x01(\x0e\x32&.cln.SendonionResponse.SendonionStatus\x12%\n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\ncreated_at\x18\x06 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\x08 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\n \x01(\tH\x04\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0b \x01(\x0cH\x05\x88\x01\x01\x12\x14\n\x07message\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x13\n\x06partid\x18\r \x01(\x04H\x07\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0e \x01(\x04\x12\x1a\n\rupdated_index\x18\x0f \x01(\x04H\x08\x88\x01\x01\",\n\x0fSendonionStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x42\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\n\n\x08_messageB\t\n\x07_partidB\x10\n\x0e_updated_index\"P\n\x11SendonionFirstHop\x12\n\n\x02id\x18\x01 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\r\n\x05\x64\x65lay\x18\x03 \x01(\r\"\xa0\x03\n\x13ListsendpaysRequest\x12\x13\n\x06\x62olt11\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12@\n\x06status\x18\x03 \x01(\x0e\x32+.cln.ListsendpaysRequest.ListsendpaysStatusH\x02\x88\x01\x01\x12>\n\x05index\x18\x04 \x01(\x0e\x32*.cln.ListsendpaysRequest.ListsendpaysIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\"-\n\x11ListsendpaysIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\";\n\x12ListsendpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x42\t\n\x07_bolt11B\x0f\n\r_payment_hashB\t\n\x07_statusB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListsendpaysResponse\x12+\n\x08payments\x18\x01 \x03(\x0b\x32\x19.cln.ListsendpaysPayments\"\xe5\x05\n\x14ListsendpaysPayments\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x0f\n\x07groupid\x18\x02 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x44\n\x06status\x18\x04 \x01(\x0e\x32\x34.cln.ListsendpaysPayments.ListsendpaysPaymentsStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\n \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0b \x01(\tH\x04\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x05\x88\x01\x01\x12\x17\n\nerroronion\x18\r \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0e \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06partid\x18\x0f \x01(\x04H\x08\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\t\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x12 \x01(\x04H\n\x88\x01\x01\"C\n\x1aListsendpaysPaymentsStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\r\n\x0b_erroronionB\x0e\n\x0c_descriptionB\t\n\x07_partidB\x10\n\x0e_updated_indexB\x0f\n\r_completed_at\"\x19\n\x17ListtransactionsRequest\"S\n\x18ListtransactionsResponse\x12\x37\n\x0ctransactions\x18\x01 \x03(\x0b\x32!.cln.ListtransactionsTransactions\"\xf8\x01\n\x1cListtransactionsTransactions\x12\x0c\n\x04hash\x18\x01 \x01(\x0c\x12\r\n\x05rawtx\x18\x02 \x01(\x0c\x12\x13\n\x0b\x62lockheight\x18\x03 \x01(\r\x12\x0f\n\x07txindex\x18\x04 \x01(\r\x12\x10\n\x08locktime\x18\x07 \x01(\r\x12\x0f\n\x07version\x18\x08 \x01(\r\x12\x37\n\x06inputs\x18\t \x03(\x0b\x32\'.cln.ListtransactionsTransactionsInputs\x12\x39\n\x07outputs\x18\n \x03(\x0b\x32(.cln.ListtransactionsTransactionsOutputs\"S\n\"ListtransactionsTransactionsInputs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\r\n\x05index\x18\x02 \x01(\r\x12\x10\n\x08sequence\x18\x03 \x01(\r\"l\n#ListtransactionsTransactionsOutputs\x12\r\n\x05index\x18\x01 \x01(\r\x12\x14\n\x0cscriptPubKey\x18\x03 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\"M\n\x11MakesecretRequest\x12\x10\n\x03hex\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x13\n\x06string\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x06\n\x04_hexB\t\n\x07_string\"$\n\x12MakesecretResponse\x12\x0e\n\x06secret\x18\x01 \x01(\x0c\"\xc7\x04\n\nPayRequest\x12\x12\n\x06\x62olt11\x18\x01 \x01(\tB\x02\x18\x01\x12\x16\n\x05label\x18\x03 \x01(\tB\x02\x18\x01H\x00\x88\x01\x01\x12\x1e\n\rmaxfeepercent\x18\x04 \x01(\x01\x42\x02\x18\x01H\x01\x88\x01\x01\x12\x1a\n\tretry_for\x18\x05 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x19\n\x08maxdelay\x18\x06 \x01(\rB\x02\x18\x01H\x03\x88\x01\x01\x12\'\n\texemptfee\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x04\x88\x01\x01\x12\x1b\n\nriskfactor\x18\x08 \x01(\x01\x42\x02\x18\x01H\x05\x88\x01\x01\x12\x13\n\x07\x65xclude\x18\n \x03(\tB\x02\x18\x01\x12$\n\x06maxfee\x18\x0b \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x06\x88\x01\x01\x12\x1c\n\x0b\x64\x65scription\x18\x0c \x01(\tB\x02\x18\x01H\x07\x88\x01\x01\x12)\n\x0b\x61mount_msat\x18\r \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x08\x88\x01\x01\x12\x1e\n\rlocalinvreqid\x18\x0e \x01(\x0c\x42\x02\x18\x01H\t\x88\x01\x01\x12*\n\x0cpartial_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\n\x88\x01\x01\x42\x08\n\x06_labelB\x10\n\x0e_maxfeepercentB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\x0c\n\n_exemptfeeB\r\n\x0b_riskfactorB\t\n\x07_maxfeeB\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x0f\n\r_partial_msat\"\xab\x03\n\x0bPayResponse\x12\x1c\n\x10payment_preimage\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x1c\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x42\x02\x18\x01H\x00\x88\x01\x01\x12\x18\n\x0cpayment_hash\x18\x03 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\ncreated_at\x18\x04 \x01(\x01\x42\x02\x18\x01\x12\x11\n\x05parts\x18\x05 \x01(\rB\x02\x18\x01\x12$\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12)\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12+\n\x1awarning_partial_completion\x18\x08 \x01(\tB\x02\x18\x01H\x01\x88\x01\x01\x12.\n\x06status\x18\t \x01(\x0e\x32\x1a.cln.PayResponse.PayStatusB\x02\x18\x01\">\n\tPayStatus\x12\x10\n\x08\x43OMPLETE\x10\x00\x1a\x02\x08\x01\x12\x0f\n\x07PENDING\x10\x01\x1a\x02\x08\x01\x12\x0e\n\x06\x46\x41ILED\x10\x02\x1a\x02\x08\x01\x42\x0e\n\x0c_destinationB\x1d\n\x1b_warning_partial_completion\"*\n\x10ListnodesRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x42\x05\n\x03_id\"7\n\x11ListnodesResponse\x12\"\n\x05nodes\x18\x01 \x03(\x0b\x32\x13.cln.ListnodesNodes\"\xb8\x02\n\x0eListnodesNodes\x12\x0e\n\x06nodeid\x18\x01 \x01(\x0c\x12\x1b\n\x0elast_timestamp\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x12\n\x05\x61lias\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x12\n\x05\x63olor\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x12\x15\n\x08\x66\x65\x61tures\x18\x05 \x01(\x0cH\x03\x88\x01\x01\x12/\n\taddresses\x18\x06 \x03(\x0b\x32\x1c.cln.ListnodesNodesAddresses\x12@\n\x10option_will_fund\x18\x07 \x01(\x0b\x32!.cln.ListnodesNodesOptionWillFundH\x04\x88\x01\x01\x42\x11\n\x0f_last_timestampB\x08\n\x06_aliasB\x08\n\x06_colorB\x0b\n\t_featuresB\x13\n\x11_option_will_fund\"\xe8\x01\n\x17ListnodesNodesAddresses\x12K\n\titem_type\x18\x01 \x01(\x0e\x32\x38.cln.ListnodesNodesAddresses.ListnodesNodesAddressesType\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x00\x88\x01\x01\"P\n\x1bListnodesNodesAddressesType\x12\x07\n\x03\x44NS\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x42\n\n\x08_address\"\xf2\x01\n\x1cListnodesNodesOptionWillFund\x12(\n\x13lease_fee_base_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x17\n\x0flease_fee_basis\x18\x02 \x01(\r\x12\x16\n\x0e\x66unding_weight\x18\x03 \x01(\r\x12.\n\x19\x63hannel_fee_max_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x30\n(channel_fee_max_proportional_thousandths\x18\x05 \x01(\r\x12\x15\n\rcompact_lease\x18\x06 \x01(\x0c\"g\n\x15WaitanyinvoiceRequest\x12\x1a\n\rlastpay_index\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x02 \x01(\x04H\x01\x88\x01\x01\x42\x10\n\x0e_lastpay_indexB\n\n\x08_timeout\"\xbc\x05\n\x16WaitanyinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12@\n\x06status\x18\x04 \x01(\x0e\x32\x30.cln.WaitanyinvoiceResponse.WaitanyinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tpay_index\x18\t \x01(\x04H\x04\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x15\n\rcreated_index\x18\r \x01(\x04\x12\x1a\n\rupdated_index\x18\x0e \x01(\x04H\x08\x88\x01\x01\x12;\n\rpaid_outpoint\x18\x0f \x01(\x0b\x32\x1f.cln.WaitanyinvoicePaidOutpointH\t\x88\x01\x01\"-\n\x14WaitanyinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\":\n\x1aWaitanyinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"#\n\x12WaitinvoiceRequest\x12\r\n\x05label\x18\x01 \x01(\t\"\xad\x05\n\x13WaitinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.WaitinvoiceResponse.WaitinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tpay_index\x18\t \x01(\x04H\x04\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x15\n\rcreated_index\x18\r \x01(\x04\x12\x1a\n\rupdated_index\x18\x0e \x01(\x04H\x08\x88\x01\x01\x12\x38\n\rpaid_outpoint\x18\x0f \x01(\x0b\x32\x1c.cln.WaitinvoicePaidOutpointH\t\x88\x01\x01\"*\n\x11WaitinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\"7\n\x17WaitinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\x8e\x01\n\x12WaitsendpayRequest\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x13\n\x06partid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x14\n\x07groupid\x18\x04 \x01(\x04H\x02\x88\x01\x01\x42\t\n\x07_partidB\n\n\x08_timeoutB\n\n\x08_groupid\"\xf7\x04\n\x13WaitsendpayResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x07groupid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.WaitsendpayResponse.WaitsendpayStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06partid\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0e \x01(\x01H\x08\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0f \x01(\x04\x12\x1a\n\rupdated_index\x18\x10 \x01(\x04H\t\x88\x01\x01\"!\n\x11WaitsendpayStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x42\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\x0f\n\r_completed_atB\x10\n\x0e_updated_index\"\x97\x01\n\x0eNewaddrRequest\x12@\n\x0b\x61\x64\x64resstype\x18\x01 \x01(\x0e\x32&.cln.NewaddrRequest.NewaddrAddresstypeH\x00\x88\x01\x01\"3\n\x12NewaddrAddresstype\x12\n\n\x06\x42\x45\x43H32\x10\x00\x12\x07\n\x03\x41LL\x10\x02\x12\x08\n\x04P2TR\x10\x03\x42\x0e\n\x0c_addresstype\"M\n\x0fNewaddrResponse\x12\x13\n\x06\x62\x65\x63h32\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04p2tr\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\t\n\x07_bech32B\x07\n\x05_p2tr\"\xbc\x01\n\x0fWithdrawRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\t\x12$\n\x07satoshi\x18\x02 \x01(\x0b\x32\x13.cln.AmountSatOrAll\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\"\n\x07\x66\x65\x65rate\x18\x05 \x01(\x0b\x32\x0c.cln.FeerateH\x01\x88\x01\x01\x42\n\n\x08_minconfB\n\n\x08_feerate\":\n\x10WithdrawResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x0c\n\x04psbt\x18\x03 \x01(\t\"\xd7\x03\n\x0eKeysendRequest\x12\x17\n\x0b\x64\x65stination\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\x05label\x18\x03 \x01(\tB\x02\x18\x01H\x00\x88\x01\x01\x12\x1e\n\rmaxfeepercent\x18\x04 \x01(\x01\x42\x02\x18\x01H\x01\x88\x01\x01\x12\x1a\n\tretry_for\x18\x05 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x19\n\x08maxdelay\x18\x06 \x01(\rB\x02\x18\x01H\x03\x88\x01\x01\x12\'\n\texemptfee\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x04\x88\x01\x01\x12/\n\nroutehints\x18\x08 \x01(\x0b\x32\x12.cln.RoutehintListB\x02\x18\x01H\x05\x88\x01\x01\x12*\n\textratlvs\x18\t \x01(\x0b\x32\x0e.cln.TlvStreamB\x02\x18\x01H\x06\x88\x01\x01\x12$\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12$\n\x06maxfee\x18\x0b \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x07\x88\x01\x01\x42\x08\n\x06_labelB\x10\n\x0e_maxfeepercentB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\x0c\n\n_exemptfeeB\r\n\x0b_routehintsB\x0c\n\n_extratlvsB\t\n\x07_maxfee\"\x9a\x03\n\x0fKeysendResponse\x12\x1c\n\x10payment_preimage\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x1c\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x42\x02\x18\x01H\x00\x88\x01\x01\x12\x18\n\x0cpayment_hash\x18\x03 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\ncreated_at\x18\x04 \x01(\x01\x42\x02\x18\x01\x12\x11\n\x05parts\x18\x05 \x01(\rB\x02\x18\x01\x12$\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12)\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12+\n\x1awarning_partial_completion\x18\x08 \x01(\tB\x02\x18\x01H\x01\x88\x01\x01\x12\x36\n\x06status\x18\t \x01(\x0e\x32\".cln.KeysendResponse.KeysendStatusB\x02\x18\x01\"!\n\rKeysendStatus\x12\x10\n\x08\x43OMPLETE\x10\x00\x1a\x02\x08\x01\x42\x0e\n\x0c_destinationB\x1d\n\x1b_warning_partial_completion\"\xa7\x03\n\x0f\x46undpsbtRequest\x12$\n\x07satoshi\x18\x01 \x01(\x0b\x32\x13.cln.AmountSatOrAll\x12\x1d\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.Feerate\x12\x13\n\x0bstartweight\x18\x03 \x01(\r\x12\x14\n\x07minconf\x18\x04 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x07reserve\x18\x05 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08locktime\x18\x06 \x01(\rH\x02\x88\x01\x01\x12\x1f\n\x12min_witness_weight\x18\x07 \x01(\rH\x03\x88\x01\x01\x12\x1d\n\x10\x65xcess_as_change\x18\x08 \x01(\x08H\x04\x88\x01\x01\x12\x17\n\nnonwrapped\x18\t \x01(\x08H\x05\x88\x01\x01\x12#\n\x16opening_anchor_channel\x18\n \x01(\x08H\x06\x88\x01\x01\x42\n\n\x08_minconfB\n\n\x08_reserveB\x0b\n\t_locktimeB\x15\n\x13_min_witness_weightB\x13\n\x11_excess_as_changeB\r\n\x0b_nonwrappedB\x19\n\x17_opening_anchor_channel\"\xd9\x01\n\x10\x46undpsbtResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x16\n\x0e\x66\x65\x65rate_per_kw\x18\x02 \x01(\r\x12\x1e\n\x16\x65stimated_final_weight\x18\x03 \x01(\r\x12 \n\x0b\x65xcess_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1a\n\rchange_outnum\x18\x05 \x01(\rH\x00\x88\x01\x01\x12/\n\x0creservations\x18\x06 \x03(\x0b\x32\x19.cln.FundpsbtReservationsB\x10\n\x0e_change_outnum\"u\n\x14\x46undpsbtReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x19\n\x11reserved_to_block\x18\x05 \x01(\r\"A\n\x0fSendpsbtRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x14\n\x07reserve\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_reserve\",\n\x10SendpsbtResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"1\n\x0fSignpsbtRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x10\n\x08signonly\x18\x02 \x03(\r\"\'\n\x10SignpsbtResponse\x12\x13\n\x0bsigned_psbt\x18\x01 \x01(\t\"\xa3\x03\n\x0fUtxopsbtRequest\x12$\n\x07satoshi\x18\x01 \x01(\x0b\x32\x13.cln.AmountSatOrAll\x12\x1d\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.Feerate\x12\x13\n\x0bstartweight\x18\x03 \x01(\r\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\x14\n\x07reserve\x18\x05 \x01(\rH\x00\x88\x01\x01\x12\x15\n\x08locktime\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x1f\n\x12min_witness_weight\x18\x07 \x01(\rH\x02\x88\x01\x01\x12\x17\n\nreservedok\x18\x08 \x01(\x08H\x03\x88\x01\x01\x12\x1d\n\x10\x65xcess_as_change\x18\t \x01(\x08H\x04\x88\x01\x01\x12#\n\x16opening_anchor_channel\x18\n \x01(\x08H\x05\x88\x01\x01\x42\n\n\x08_reserveB\x0b\n\t_locktimeB\x15\n\x13_min_witness_weightB\r\n\x0b_reservedokB\x13\n\x11_excess_as_changeB\x19\n\x17_opening_anchor_channel\"\xd9\x01\n\x10UtxopsbtResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x16\n\x0e\x66\x65\x65rate_per_kw\x18\x02 \x01(\r\x12\x1e\n\x16\x65stimated_final_weight\x18\x03 \x01(\r\x12 \n\x0b\x65xcess_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1a\n\rchange_outnum\x18\x05 \x01(\rH\x00\x88\x01\x01\x12/\n\x0creservations\x18\x06 \x03(\x0b\x32\x19.cln.UtxopsbtReservationsB\x10\n\x0e_change_outnum\"u\n\x14UtxopsbtReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x19\n\x11reserved_to_block\x18\x05 \x01(\r\" \n\x10TxdiscardRequest\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\"6\n\x11TxdiscardResponse\x12\x13\n\x0bunsigned_tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"\xa4\x01\n\x10TxprepareRequest\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12 \n\x07outputs\x18\x05 \x03(\x0b\x32\x0f.cln.OutputDescB\n\n\x08_feerateB\n\n\x08_minconf\"D\n\x11TxprepareResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x13\n\x0bunsigned_tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"\x1d\n\rTxsendRequest\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\"8\n\x0eTxsendResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\n\n\x02tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"\x8d\x01\n\x17ListpeerchannelsRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nchannel_id\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x42\x05\n\x03_idB\x13\n\x11_short_channel_idB\r\n\x0b_channel_id\"K\n\x18ListpeerchannelsResponse\x12/\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x1d.cln.ListpeerchannelsChannels\"\xd1\x1a\n\x18ListpeerchannelsChannels\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x16\n\x0epeer_connected\x18\x02 \x01(\x08\x12 \n\x05state\x18\x03 \x01(\x0e\x32\x11.cln.ChannelState\x12\x19\n\x0cscratch_txid\x18\x04 \x01(\x0cH\x00\x88\x01\x01\x12\x43\n\x0c\x63hannel_type\x18\x05 \x01(\x0b\x32(.cln.ListpeerchannelsChannelsChannelTypeH\x01\x88\x01\x01\x12:\n\x07\x66\x65\x65rate\x18\x06 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsFeerateH\x02\x88\x01\x01\x12\x12\n\x05owner\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x08 \x01(\tH\x04\x88\x01\x01\x12\x17\n\nchannel_id\x18\t \x01(\x0cH\x05\x88\x01\x01\x12\x19\n\x0c\x66unding_txid\x18\n \x01(\x0cH\x06\x88\x01\x01\x12\x1b\n\x0e\x66unding_outnum\x18\x0b \x01(\rH\x07\x88\x01\x01\x12\x1c\n\x0finitial_feerate\x18\x0c \x01(\tH\x08\x88\x01\x01\x12\x19\n\x0clast_feerate\x18\r \x01(\tH\t\x88\x01\x01\x12\x19\n\x0cnext_feerate\x18\x0e \x01(\tH\n\x88\x01\x01\x12\x1a\n\rnext_fee_step\x18\x0f \x01(\rH\x0b\x88\x01\x01\x12\x37\n\x08inflight\x18\x10 \x03(\x0b\x32%.cln.ListpeerchannelsChannelsInflight\x12\x15\n\x08\x63lose_to\x18\x11 \x01(\x0cH\x0c\x88\x01\x01\x12\x14\n\x07private\x18\x12 \x01(\x08H\r\x88\x01\x01\x12 \n\x06opener\x18\x13 \x01(\x0e\x32\x10.cln.ChannelSide\x12%\n\x06\x63loser\x18\x14 \x01(\x0e\x32\x10.cln.ChannelSideH\x0e\x88\x01\x01\x12:\n\x07\x66unding\x18\x16 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsFundingH\x0f\x88\x01\x01\x12$\n\nto_us_msat\x18\x17 \x01(\x0b\x32\x0b.cln.AmountH\x10\x88\x01\x01\x12(\n\x0emin_to_us_msat\x18\x18 \x01(\x0b\x32\x0b.cln.AmountH\x11\x88\x01\x01\x12(\n\x0emax_to_us_msat\x18\x19 \x01(\x0b\x32\x0b.cln.AmountH\x12\x88\x01\x01\x12$\n\ntotal_msat\x18\x1a \x01(\x0b\x32\x0b.cln.AmountH\x13\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x1b \x01(\x0b\x32\x0b.cln.AmountH\x14\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x1c \x01(\rH\x15\x88\x01\x01\x12)\n\x0f\x64ust_limit_msat\x18\x1d \x01(\x0b\x32\x0b.cln.AmountH\x16\x88\x01\x01\x12,\n\x12their_reserve_msat\x18\x1f \x01(\x0b\x32\x0b.cln.AmountH\x17\x88\x01\x01\x12*\n\x10our_reserve_msat\x18 \x01(\x0b\x32\x0b.cln.AmountH\x18\x88\x01\x01\x12(\n\x0espendable_msat\x18! \x01(\x0b\x32\x0b.cln.AmountH\x19\x88\x01\x01\x12)\n\x0freceivable_msat\x18\" \x01(\x0b\x32\x0b.cln.AmountH\x1a\x88\x01\x01\x12.\n\x14minimum_htlc_in_msat\x18# \x01(\x0b\x32\x0b.cln.AmountH\x1b\x88\x01\x01\x12/\n\x15minimum_htlc_out_msat\x18$ \x01(\x0b\x32\x0b.cln.AmountH\x1c\x88\x01\x01\x12/\n\x15maximum_htlc_out_msat\x18% \x01(\x0b\x32\x0b.cln.AmountH\x1d\x88\x01\x01\x12 \n\x13their_to_self_delay\x18& \x01(\rH\x1e\x88\x01\x01\x12\x1e\n\x11our_to_self_delay\x18\' \x01(\rH\x1f\x88\x01\x01\x12\x1f\n\x12max_accepted_htlcs\x18( \x01(\rH \x88\x01\x01\x12\x36\n\x05\x61lias\x18) \x01(\x0b\x32\".cln.ListpeerchannelsChannelsAliasH!\x88\x01\x01\x12@\n\rstate_changes\x18* \x03(\x0b\x32).cln.ListpeerchannelsChannelsStateChanges\x12\x0e\n\x06status\x18+ \x03(\t\x12 \n\x13in_payments_offered\x18, \x01(\x04H\"\x88\x01\x01\x12)\n\x0fin_offered_msat\x18- \x01(\x0b\x32\x0b.cln.AmountH#\x88\x01\x01\x12\"\n\x15in_payments_fulfilled\x18. \x01(\x04H$\x88\x01\x01\x12+\n\x11in_fulfilled_msat\x18/ \x01(\x0b\x32\x0b.cln.AmountH%\x88\x01\x01\x12!\n\x14out_payments_offered\x18\x30 \x01(\x04H&\x88\x01\x01\x12*\n\x10out_offered_msat\x18\x31 \x01(\x0b\x32\x0b.cln.AmountH\'\x88\x01\x01\x12#\n\x16out_payments_fulfilled\x18\x32 \x01(\x04H(\x88\x01\x01\x12,\n\x12out_fulfilled_msat\x18\x33 \x01(\x0b\x32\x0b.cln.AmountH)\x88\x01\x01\x12\x31\n\x05htlcs\x18\x34 \x03(\x0b\x32\".cln.ListpeerchannelsChannelsHtlcs\x12\x1a\n\rclose_to_addr\x18\x35 \x01(\tH*\x88\x01\x01\x12\x1e\n\x11ignore_fee_limits\x18\x36 \x01(\x08H+\x88\x01\x01\x12:\n\x07updates\x18\x37 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsUpdatesH,\x88\x01\x01\x12#\n\x16last_stable_connection\x18\x38 \x01(\x04H-\x88\x01\x01\x12\x17\n\nlost_state\x18\x39 \x01(\x08H.\x88\x01\x01\x12\x1a\n\rreestablished\x18: \x01(\x08H/\x88\x01\x01\x12*\n\x10last_tx_fee_msat\x18; \x01(\x0b\x32\x0b.cln.AmountH0\x88\x01\x01\x12\x16\n\tdirection\x18< \x01(\rH1\x88\x01\x01\x12=\n#their_max_htlc_value_in_flight_msat\x18= \x01(\x0b\x32\x0b.cln.AmountH2\x88\x01\x01\x12;\n!our_max_htlc_value_in_flight_msat\x18> \x01(\x0b\x32\x0b.cln.AmountH3\x88\x01\x01\x12\x10\n\x08\x66\x65\x61tures\x18? \x03(\tB\x0f\n\r_scratch_txidB\x0f\n\r_channel_typeB\n\n\x08_feerateB\x08\n\x06_ownerB\x13\n\x11_short_channel_idB\r\n\x0b_channel_idB\x0f\n\r_funding_txidB\x11\n\x0f_funding_outnumB\x12\n\x10_initial_feerateB\x0f\n\r_last_feerateB\x0f\n\r_next_feerateB\x10\n\x0e_next_fee_stepB\x0b\n\t_close_toB\n\n\x08_privateB\t\n\x07_closerB\n\n\x08_fundingB\r\n\x0b_to_us_msatB\x11\n\x0f_min_to_us_msatB\x11\n\x0f_max_to_us_msatB\r\n\x0b_total_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x12\n\x10_dust_limit_msatB\x15\n\x13_their_reserve_msatB\x13\n\x11_our_reserve_msatB\x11\n\x0f_spendable_msatB\x12\n\x10_receivable_msatB\x17\n\x15_minimum_htlc_in_msatB\x18\n\x16_minimum_htlc_out_msatB\x18\n\x16_maximum_htlc_out_msatB\x16\n\x14_their_to_self_delayB\x14\n\x12_our_to_self_delayB\x15\n\x13_max_accepted_htlcsB\x08\n\x06_aliasB\x16\n\x14_in_payments_offeredB\x12\n\x10_in_offered_msatB\x18\n\x16_in_payments_fulfilledB\x14\n\x12_in_fulfilled_msatB\x17\n\x15_out_payments_offeredB\x13\n\x11_out_offered_msatB\x19\n\x17_out_payments_fulfilledB\x15\n\x13_out_fulfilled_msatB\x10\n\x0e_close_to_addrB\x14\n\x12_ignore_fee_limitsB\n\n\x08_updatesB\x19\n\x17_last_stable_connectionB\r\n\x0b_lost_stateB\x10\n\x0e_reestablishedB\x13\n\x11_last_tx_fee_msatB\x0c\n\n_directionB&\n$_their_max_htlc_value_in_flight_msatB$\n\"_our_max_htlc_value_in_flight_msat\"]\n\x1dListpeerchannelsChannelsAlias\x12\x12\n\x05local\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06remote\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_localB\t\n\x07_remote\"X\n#ListpeerchannelsChannelsChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"?\n\x1fListpeerchannelsChannelsFeerate\x12\r\n\x05perkw\x18\x01 \x01(\r\x12\r\n\x05perkb\x18\x02 \x01(\r\"\xdd\x02\n\x1fListpeerchannelsChannelsFunding\x12%\n\x0bpushed_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12%\n\x10local_funds_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11remote_funds_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\'\n\rfee_paid_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\'\n\rfee_rcvd_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x11\n\x04psbt\x18\x06 \x01(\tH\x03\x88\x01\x01\x12\x15\n\x08withheld\x18\x07 \x01(\x08H\x04\x88\x01\x01\x42\x0e\n\x0c_pushed_msatB\x10\n\x0e_fee_paid_msatB\x10\n\x0e_fee_rcvd_msatB\x07\n\x05_psbtB\x0b\n\t_withheld\"\xf9\x02\n\x1dListpeerchannelsChannelsHtlcs\x12\\\n\tdirection\x18\x01 \x01(\x0e\x32I.cln.ListpeerchannelsChannelsHtlcs.ListpeerchannelsChannelsHtlcsDirection\x12\n\n\x02id\x18\x02 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06\x65xpiry\x18\x04 \x01(\r\x12\x14\n\x0cpayment_hash\x18\x05 \x01(\x0c\x12\x1a\n\rlocal_trimmed\x18\x06 \x01(\x08H\x00\x88\x01\x01\x12\x13\n\x06status\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x1d\n\x05state\x18\x08 \x01(\x0e\x32\x0e.cln.HtlcState\"9\n&ListpeerchannelsChannelsHtlcsDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\x42\x10\n\x0e_local_trimmedB\t\n\x07_status\"\xf4\x01\n ListpeerchannelsChannelsInflight\x12\x14\n\x0c\x66unding_txid\x18\x01 \x01(\x0c\x12\x16\n\x0e\x66unding_outnum\x18\x02 \x01(\r\x12\x0f\n\x07\x66\x65\x65rate\x18\x03 \x01(\t\x12\'\n\x12total_funding_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10our_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x0cscratch_txid\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12\x15\n\rsplice_amount\x18\x07 \x01(\x12\x42\x0f\n\r_scratch_txid\"\xf0\x02\n$ListpeerchannelsChannelsStateChanges\x12\x11\n\ttimestamp\x18\x01 \x01(\t\x12$\n\told_state\x18\x02 \x01(\x0e\x32\x11.cln.ChannelState\x12$\n\tnew_state\x18\x03 \x01(\x0e\x32\x11.cln.ChannelState\x12\x62\n\x05\x63\x61use\x18\x04 \x01(\x0e\x32S.cln.ListpeerchannelsChannelsStateChanges.ListpeerchannelsChannelsStateChangesCause\x12\x0f\n\x07message\x18\x05 \x01(\t\"t\n)ListpeerchannelsChannelsStateChangesCause\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05LOCAL\x10\x01\x12\x08\n\x04USER\x10\x02\x12\n\n\x06REMOTE\x10\x03\x12\x0c\n\x08PROTOCOL\x10\x04\x12\x0b\n\x07ONCHAIN\x10\x05\"\xa7\x01\n\x1fListpeerchannelsChannelsUpdates\x12\x38\n\x05local\x18\x01 \x01(\x0b\x32).cln.ListpeerchannelsChannelsUpdatesLocal\x12?\n\x06remote\x18\x02 \x01(\x0b\x32*.cln.ListpeerchannelsChannelsUpdatesRemoteH\x00\x88\x01\x01\x42\t\n\x07_remote\"\xda\x01\n$ListpeerchannelsChannelsUpdatesLocal\x12&\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x11\x63ltv_expiry_delta\x18\x03 \x01(\r\x12\"\n\rfee_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x05 \x01(\r\"\xdb\x01\n%ListpeerchannelsChannelsUpdatesRemote\x12&\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x11\x63ltv_expiry_delta\x18\x03 \x01(\r\x12\"\n\rfee_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x05 \x01(\r\"3\n\x19ListclosedchannelsRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x42\x05\n\x03_id\"[\n\x1aListclosedchannelsResponse\x12=\n\x0e\x63losedchannels\x18\x01 \x03(\x0b\x32%.cln.ListclosedchannelsClosedchannels\"\xae\x0b\n ListclosedchannelsClosedchannels\x12\x14\n\x07peer_id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x12\n\nchannel_id\x18\x02 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x01\x88\x01\x01\x12>\n\x05\x61lias\x18\x04 \x01(\x0b\x32*.cln.ListclosedchannelsClosedchannelsAliasH\x02\x88\x01\x01\x12 \n\x06opener\x18\x05 \x01(\x0e\x32\x10.cln.ChannelSide\x12%\n\x06\x63loser\x18\x06 \x01(\x0e\x32\x10.cln.ChannelSideH\x03\x88\x01\x01\x12\x0f\n\x07private\x18\x07 \x01(\x08\x12K\n\x0c\x63hannel_type\x18\x08 \x01(\x0b\x32\x30.cln.ListclosedchannelsClosedchannelsChannelTypeH\x04\x88\x01\x01\x12\x1f\n\x17total_local_commitments\x18\t \x01(\x04\x12 \n\x18total_remote_commitments\x18\n \x01(\x04\x12\x18\n\x10total_htlcs_sent\x18\x0b \x01(\x04\x12\x14\n\x0c\x66unding_txid\x18\x0c \x01(\x0c\x12\x16\n\x0e\x66unding_outnum\x18\r \x01(\r\x12\x0e\n\x06leased\x18\x0e \x01(\x08\x12/\n\x15\x66unding_fee_paid_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12/\n\x15\x66unding_fee_rcvd_msat\x18\x10 \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12-\n\x13\x66unding_pushed_msat\x18\x11 \x01(\x0b\x32\x0b.cln.AmountH\x07\x88\x01\x01\x12\x1f\n\ntotal_msat\x18\x12 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x66inal_to_us_msat\x18\x13 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0emin_to_us_msat\x18\x14 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0emax_to_us_msat\x18\x15 \x01(\x0b\x32\x0b.cln.Amount\x12!\n\x14last_commitment_txid\x18\x16 \x01(\x0cH\x08\x88\x01\x01\x12\x32\n\x18last_commitment_fee_msat\x18\x17 \x01(\x0b\x32\x0b.cln.AmountH\t\x88\x01\x01\x12\x65\n\x0b\x63lose_cause\x18\x18 \x01(\x0e\x32P.cln.ListclosedchannelsClosedchannels.ListclosedchannelsClosedchannelsCloseCause\x12#\n\x16last_stable_connection\x18\x19 \x01(\x04H\n\x88\x01\x01\x12\x19\n\x0c\x66unding_psbt\x18\x1a \x01(\tH\x0b\x88\x01\x01\x12\x1d\n\x10\x66unding_withheld\x18\x1b \x01(\x08H\x0c\x88\x01\x01\"u\n*ListclosedchannelsClosedchannelsCloseCause\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05LOCAL\x10\x01\x12\x08\n\x04USER\x10\x02\x12\n\n\x06REMOTE\x10\x03\x12\x0c\n\x08PROTOCOL\x10\x04\x12\x0b\n\x07ONCHAIN\x10\x05\x42\n\n\x08_peer_idB\x13\n\x11_short_channel_idB\x08\n\x06_aliasB\t\n\x07_closerB\x0f\n\r_channel_typeB\x18\n\x16_funding_fee_paid_msatB\x18\n\x16_funding_fee_rcvd_msatB\x16\n\x14_funding_pushed_msatB\x17\n\x15_last_commitment_txidB\x1b\n\x19_last_commitment_fee_msatB\x19\n\x17_last_stable_connectionB\x0f\n\r_funding_psbtB\x13\n\x11_funding_withheld\"e\n%ListclosedchannelsClosedchannelsAlias\x12\x12\n\x05local\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06remote\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_localB\t\n\x07_remote\"`\n+ListclosedchannelsClosedchannelsChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x1f\n\rDecodeRequest\x12\x0e\n\x06string\x18\x01 \x01(\t\"\xbd.\n\x0e\x44\x65\x63odeResponse\x12\x31\n\titem_type\x18\x01 \x01(\x0e\x32\x1e.cln.DecodeResponse.DecodeType\x12\r\n\x05valid\x18\x02 \x01(\x08\x12\x15\n\x08offer_id\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x14\n\x0coffer_chains\x18\x04 \x03(\x0c\x12\x1b\n\x0eoffer_metadata\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12\x1b\n\x0eoffer_currency\x18\x06 \x01(\tH\x02\x88\x01\x01\x12+\n\x1ewarning_unknown_offer_currency\x18\x07 \x01(\tH\x03\x88\x01\x01\x12 \n\x13\x63urrency_minor_unit\x18\x08 \x01(\rH\x04\x88\x01\x01\x12\x19\n\x0coffer_amount\x18\t \x01(\x04H\x05\x88\x01\x01\x12+\n\x11offer_amount_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x1e\n\x11offer_description\x18\x0b \x01(\tH\x07\x88\x01\x01\x12\x19\n\x0coffer_issuer\x18\x0c \x01(\tH\x08\x88\x01\x01\x12\x1b\n\x0eoffer_features\x18\r \x01(\x0cH\t\x88\x01\x01\x12\"\n\x15offer_absolute_expiry\x18\x0e \x01(\x04H\n\x88\x01\x01\x12\x1f\n\x12offer_quantity_max\x18\x0f \x01(\x04H\x0b\x88\x01\x01\x12*\n\x0boffer_paths\x18\x10 \x03(\x0b\x32\x15.cln.DecodeOfferPaths\x12\x39\n\x10offer_recurrence\x18\x12 \x01(\x0b\x32\x1a.cln.DecodeOfferRecurrenceH\x0c\x88\x01\x01\x12\x37\n\x12unknown_offer_tlvs\x18\x13 \x03(\x0b\x32\x1b.cln.DecodeUnknownOfferTlvs\x12.\n!warning_invalid_offer_description\x18\x15 \x01(\tH\r\x88\x01\x01\x12.\n!warning_missing_offer_description\x18\x16 \x01(\tH\x0e\x88\x01\x01\x12+\n\x1ewarning_invalid_offer_currency\x18\x17 \x01(\tH\x0f\x88\x01\x01\x12)\n\x1cwarning_invalid_offer_issuer\x18\x18 \x01(\tH\x10\x88\x01\x01\x12\x1c\n\x0finvreq_metadata\x18\x19 \x01(\x0cH\x11\x88\x01\x01\x12\x1c\n\x0finvreq_payer_id\x18\x1a \x01(\x0cH\x12\x88\x01\x01\x12\x19\n\x0cinvreq_chain\x18\x1b \x01(\x0cH\x13\x88\x01\x01\x12,\n\x12invreq_amount_msat\x18\x1c \x01(\x0b\x32\x0b.cln.AmountH\x14\x88\x01\x01\x12\x1c\n\x0finvreq_features\x18\x1d \x01(\x0cH\x15\x88\x01\x01\x12\x1c\n\x0finvreq_quantity\x18\x1e \x01(\x04H\x16\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x1f \x01(\tH\x17\x88\x01\x01\x12&\n\x19invreq_recurrence_counter\x18 \x01(\rH\x18\x88\x01\x01\x12$\n\x17invreq_recurrence_start\x18! \x01(\rH\x19\x88\x01\x01\x12J\n\x1cunknown_invoice_request_tlvs\x18\" \x03(\x0b\x32$.cln.DecodeUnknownInvoiceRequestTlvs\x12,\n\x1fwarning_missing_invreq_metadata\x18# \x01(\tH\x1a\x88\x01\x01\x12,\n\x1fwarning_missing_invreq_payer_id\x18$ \x01(\tH\x1b\x88\x01\x01\x12.\n!warning_invalid_invreq_payer_note\x18% \x01(\tH\x1c\x88\x01\x01\x12\x36\n)warning_missing_invoice_request_signature\x18& \x01(\tH\x1d\x88\x01\x01\x12\x36\n)warning_invalid_invoice_request_signature\x18\' \x01(\tH\x1e\x88\x01\x01\x12.\n\rinvoice_paths\x18( \x03(\x0b\x32\x17.cln.DecodeInvoicePaths\x12\x1f\n\x12invoice_created_at\x18) \x01(\x04H\x1f\x88\x01\x01\x12$\n\x17invoice_relative_expiry\x18* \x01(\rH \x88\x01\x01\x12!\n\x14invoice_payment_hash\x18+ \x01(\x0cH!\x88\x01\x01\x12-\n\x13invoice_amount_msat\x18, \x01(\x0b\x32\x0b.cln.AmountH\"\x88\x01\x01\x12\x36\n\x11invoice_fallbacks\x18- \x03(\x0b\x32\x1b.cln.DecodeInvoiceFallbacks\x12\x1d\n\x10invoice_features\x18. \x01(\x0cH#\x88\x01\x01\x12\x1c\n\x0finvoice_node_id\x18/ \x01(\x0cH$\x88\x01\x01\x12(\n\x1binvoice_recurrence_basetime\x18\x30 \x01(\x04H%\x88\x01\x01\x12;\n\x14unknown_invoice_tlvs\x18\x31 \x03(\x0b\x32\x1d.cln.DecodeUnknownInvoiceTlvs\x12*\n\x1dwarning_missing_invoice_paths\x18\x32 \x01(\tH&\x88\x01\x01\x12/\n\"warning_missing_invoice_blindedpay\x18\x33 \x01(\tH\'\x88\x01\x01\x12/\n\"warning_missing_invoice_created_at\x18\x34 \x01(\tH(\x88\x01\x01\x12\x31\n$warning_missing_invoice_payment_hash\x18\x35 \x01(\tH)\x88\x01\x01\x12+\n\x1ewarning_missing_invoice_amount\x18\x36 \x01(\tH*\x88\x01\x01\x12\x38\n+warning_missing_invoice_recurrence_basetime\x18\x37 \x01(\tH+\x88\x01\x01\x12,\n\x1fwarning_missing_invoice_node_id\x18\x38 \x01(\tH,\x88\x01\x01\x12.\n!warning_missing_invoice_signature\x18\x39 \x01(\tH-\x88\x01\x01\x12.\n!warning_invalid_invoice_signature\x18: \x01(\tH.\x88\x01\x01\x12\'\n\tfallbacks\x18; \x03(\x0b\x32\x14.cln.DecodeFallbacks\x12\x17\n\ncreated_at\x18< \x01(\x04H/\x88\x01\x01\x12\x13\n\x06\x65xpiry\x18= \x01(\x04H0\x88\x01\x01\x12\x12\n\x05payee\x18> \x01(\x0cH1\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18? \x01(\x0cH2\x88\x01\x01\x12\x1d\n\x10\x64\x65scription_hash\x18@ \x01(\x0cH3\x88\x01\x01\x12\"\n\x15min_final_cltv_expiry\x18\x41 \x01(\rH4\x88\x01\x01\x12\x1b\n\x0epayment_secret\x18\x42 \x01(\x0cH5\x88\x01\x01\x12\x1d\n\x10payment_metadata\x18\x43 \x01(\x0cH6\x88\x01\x01\x12\x1f\n\x05\x65xtra\x18\x45 \x03(\x0b\x32\x10.cln.DecodeExtra\x12\x16\n\tunique_id\x18\x46 \x01(\tH7\x88\x01\x01\x12\x14\n\x07version\x18G \x01(\tH8\x88\x01\x01\x12\x13\n\x06string\x18H \x01(\tH9\x88\x01\x01\x12-\n\x0crestrictions\x18I \x03(\x0b\x32\x17.cln.DecodeRestrictions\x12&\n\x19warning_rune_invalid_utf8\x18J \x01(\tH:\x88\x01\x01\x12\x10\n\x03hex\x18K \x01(\x0cH;\x88\x01\x01\x12\x16\n\tdecrypted\x18L \x01(\x0cH<\x88\x01\x01\x12\x16\n\tsignature\x18M \x01(\tH=\x88\x01\x01\x12\x15\n\x08\x63urrency\x18N \x01(\tH>\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18O \x01(\x0b\x32\x0b.cln.AmountH?\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18P \x01(\tH@\x88\x01\x01\x12\x15\n\x08\x66\x65\x61tures\x18Q \x01(\x0cHA\x88\x01\x01\x12-\n\x06routes\x18R \x01(\x0b\x32\x18.cln.DecodeRoutehintListHB\x88\x01\x01\x12\x1c\n\x0foffer_issuer_id\x18S \x01(\x0cHC\x88\x01\x01\x12,\n\x1fwarning_missing_offer_issuer_id\x18T \x01(\tHD\x88\x01\x01\x12,\n\x0cinvreq_paths\x18U \x03(\x0b\x32\x16.cln.DecodeInvreqPaths\x12\'\n\x1awarning_empty_blinded_path\x18V \x01(\tHE\x88\x01\x01\x12=\n\x13invreq_bip_353_name\x18W \x01(\x0b\x32\x1b.cln.DecodeInvreqBip353NameHF\x88\x01\x01\x12\x35\n(warning_invreq_bip_353_name_name_invalid\x18X \x01(\tHG\x88\x01\x01\x12\x37\n*warning_invreq_bip_353_name_domain_invalid\x18Y \x01(\tHH\x88\x01\x01\x12%\n\x18invreq_recurrence_cancel\x18Z \x01(\x08HI\x88\x01\x01\x12=\n0warning_invreq_recurrence_cancel_without_counter\x18[ \x01(\tHJ\x88\x01\x01\x12?\n2warning_invreq_recurrence_cancel_with_zero_counter\x18\\ \x01(\tHK\x88\x01\x01\x12\x1b\n\x0eproof_preimage\x18] \x01(\x0cHL\x88\x01\x01\x12\x1a\n\x12proof_omitted_tlvs\x18^ \x03(\x04\x12\x1c\n\x14proof_missing_hashes\x18_ \x03(\x0c\x12\x19\n\x11proof_leaf_hashes\x18` \x03(\x0c\x12\x17\n\nproof_note\x18\x61 \x01(\tHM\x88\x01\x01\x12\x1c\n\x0fproof_signature\x18\x62 \x01(\tHN\x88\x01\x01\x12\x42\n\x18unknown_payer_proof_tlvs\x18\x63 \x03(\x0b\x32 .cln.DecodeUnknownPayerProofTlvs\"\x9b\x01\n\nDecodeType\x12\x10\n\x0c\x42OLT12_OFFER\x10\x00\x12\x12\n\x0e\x42OLT12_INVOICE\x10\x01\x12\x1a\n\x16\x42OLT12_INVOICE_REQUEST\x10\x02\x12\x12\n\x0e\x42OLT11_INVOICE\x10\x03\x12\x08\n\x04RUNE\x10\x04\x12\x15\n\x11\x45MERGENCY_RECOVER\x10\x05\x12\x16\n\x12\x42OLT12_PAYER_PROOF\x10\x06\x42\x0b\n\t_offer_idB\x11\n\x0f_offer_metadataB\x11\n\x0f_offer_currencyB!\n\x1f_warning_unknown_offer_currencyB\x16\n\x14_currency_minor_unitB\x0f\n\r_offer_amountB\x14\n\x12_offer_amount_msatB\x14\n\x12_offer_descriptionB\x0f\n\r_offer_issuerB\x11\n\x0f_offer_featuresB\x18\n\x16_offer_absolute_expiryB\x15\n\x13_offer_quantity_maxB\x13\n\x11_offer_recurrenceB$\n\"_warning_invalid_offer_descriptionB$\n\"_warning_missing_offer_descriptionB!\n\x1f_warning_invalid_offer_currencyB\x1f\n\x1d_warning_invalid_offer_issuerB\x12\n\x10_invreq_metadataB\x12\n\x10_invreq_payer_idB\x0f\n\r_invreq_chainB\x15\n\x13_invreq_amount_msatB\x12\n\x10_invreq_featuresB\x12\n\x10_invreq_quantityB\x14\n\x12_invreq_payer_noteB\x1c\n\x1a_invreq_recurrence_counterB\x1a\n\x18_invreq_recurrence_startB\"\n _warning_missing_invreq_metadataB\"\n _warning_missing_invreq_payer_idB$\n\"_warning_invalid_invreq_payer_noteB,\n*_warning_missing_invoice_request_signatureB,\n*_warning_invalid_invoice_request_signatureB\x15\n\x13_invoice_created_atB\x1a\n\x18_invoice_relative_expiryB\x17\n\x15_invoice_payment_hashB\x16\n\x14_invoice_amount_msatB\x13\n\x11_invoice_featuresB\x12\n\x10_invoice_node_idB\x1e\n\x1c_invoice_recurrence_basetimeB \n\x1e_warning_missing_invoice_pathsB%\n#_warning_missing_invoice_blindedpayB%\n#_warning_missing_invoice_created_atB\'\n%_warning_missing_invoice_payment_hashB!\n\x1f_warning_missing_invoice_amountB.\n,_warning_missing_invoice_recurrence_basetimeB\"\n _warning_missing_invoice_node_idB$\n\"_warning_missing_invoice_signatureB$\n\"_warning_invalid_invoice_signatureB\r\n\x0b_created_atB\t\n\x07_expiryB\x08\n\x06_payeeB\x0f\n\r_payment_hashB\x13\n\x11_description_hashB\x18\n\x16_min_final_cltv_expiryB\x11\n\x0f_payment_secretB\x13\n\x11_payment_metadataB\x0c\n\n_unique_idB\n\n\x08_versionB\t\n\x07_stringB\x1c\n\x1a_warning_rune_invalid_utf8B\x06\n\x04_hexB\x0c\n\n_decryptedB\x0c\n\n_signatureB\x0b\n\t_currencyB\x0e\n\x0c_amount_msatB\x0e\n\x0c_descriptionB\x0b\n\t_featuresB\t\n\x07_routesB\x12\n\x10_offer_issuer_idB\"\n _warning_missing_offer_issuer_idB\x1d\n\x1b_warning_empty_blinded_pathB\x16\n\x14_invreq_bip_353_nameB+\n)_warning_invreq_bip_353_name_name_invalidB-\n+_warning_invreq_bip_353_name_domain_invalidB\x1b\n\x19_invreq_recurrence_cancelB3\n1_warning_invreq_recurrence_cancel_without_counterB5\n3_warning_invreq_recurrence_cancel_with_zero_counterB\x11\n\x0f_proof_preimageB\r\n\x0b_proof_noteB\x12\n\x10_proof_signature\"(\n\x0b\x44\x65\x63odeExtra\x12\x0b\n\x03tag\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\t\"\xc4\x01\n\x0f\x44\x65\x63odeFallbacks\x12;\n\titem_type\x18\x02 \x01(\x0e\x32(.cln.DecodeFallbacks.DecodeFallbacksType\x12\x11\n\x04\x61\x64\x64r\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x0b\n\x03hex\x18\x04 \x01(\x0c\"K\n\x13\x44\x65\x63odeFallbacksType\x12\t\n\x05P2PKH\x10\x00\x12\x08\n\x04P2SH\x10\x01\x12\n\n\x06P2WPKH\x10\x02\x12\t\n\x05P2WSH\x10\x03\x12\x08\n\x04P2TR\x10\x04\x42\x07\n\x05_addr\"X\n\x16\x44\x65\x63odeInvoiceFallbacks\x12\x0f\n\x07version\x18\x01 \x01(\r\x12\x0b\n\x03hex\x18\x02 \x01(\x0c\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_address\"\xa6\x02\n\x12\x44\x65\x63odeInvoicePaths\x12)\n\x04path\x18\x01 \x03(\x0b\x32\x1b.cln.DecodeInvoicePathsPath\x12/\n\x07payinfo\x18\x02 \x01(\x0b\x32\x1e.cln.DecodeInvoicePathsPayinfo\x12\x1a\n\rfirst_node_id\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x1b\n\x0e\x66irst_path_key\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x12\x1b\n\x0e\x66irst_scid_dir\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x17\n\nfirst_scid\x18\x06 \x01(\tH\x03\x88\x01\x01\x42\x10\n\x0e_first_node_idB\x11\n\x0f_first_path_keyB\x11\n\x0f_first_scid_dirB\r\n\x0b_first_scid\"S\n\x16\x44\x65\x63odeInvoicePathsPath\x12\x17\n\x0f\x62linded_node_id\x18\x01 \x01(\x0c\x12 \n\x18\x65ncrypted_recipient_data\x18\x02 \x01(\x0c\"\x97\x02\n\x19\x44\x65\x63odeInvoicePathsPayinfo\x12+\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x10\n\x08\x66\x65\x61tures\x18\x02 \x01(\x0c\x12\"\n\rfee_base_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x04 \x01(\r\x12+\n\x11htlc_maximum_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x19\n\x11\x63ltv_expiry_delta\x18\x06 \x01(\rB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msat\"T\n\x16\x44\x65\x63odeInvreqBip353Name\x12\x11\n\x04name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x64omain\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x07\n\x05_nameB\t\n\x07_domain\"\xf3\x01\n\x11\x44\x65\x63odeInvreqPaths\x12\x1b\n\x0e\x66irst_scid_dir\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x1a\n\rfirst_node_id\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x17\n\nfirst_scid\x18\x04 \x01(\tH\x02\x88\x01\x01\x12(\n\x04path\x18\x05 \x03(\x0b\x32\x1a.cln.DecodeInvreqPathsPath\x12\x1b\n\x0e\x66irst_path_key\x18\x06 \x01(\x0cH\x03\x88\x01\x01\x42\x11\n\x0f_first_scid_dirB\x10\n\x0e_first_node_idB\r\n\x0b_first_scidB\x11\n\x0f_first_path_key\"R\n\x15\x44\x65\x63odeInvreqPathsPath\x12\x17\n\x0f\x62linded_node_id\x18\x01 \x01(\x0c\x12 \n\x18\x65ncrypted_recipient_data\x18\x02 \x01(\x0c\"\xf1\x01\n\x10\x44\x65\x63odeOfferPaths\x12\x1a\n\rfirst_node_id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\'\n\x04path\x18\x03 \x03(\x0b\x32\x19.cln.DecodeOfferPathsPath\x12\x1b\n\x0e\x66irst_scid_dir\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x17\n\nfirst_scid\x18\x05 \x01(\tH\x02\x88\x01\x01\x12\x1b\n\x0e\x66irst_path_key\x18\x06 \x01(\x0cH\x03\x88\x01\x01\x42\x10\n\x0e_first_node_idB\x11\n\x0f_first_scid_dirB\r\n\x0b_first_scidB\x11\n\x0f_first_path_key\"Q\n\x14\x44\x65\x63odeOfferPathsPath\x12\x17\n\x0f\x62linded_node_id\x18\x01 \x01(\x0c\x12 \n\x18\x65ncrypted_recipient_data\x18\x02 \x01(\x0c\"\xab\x02\n\x15\x44\x65\x63odeOfferRecurrence\x12\x11\n\ttime_unit\x18\x01 \x01(\r\x12\x1d\n\x10\x63ompulsory_field\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x1b\n\x0etime_unit_name\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0e\n\x06period\x18\x04 \x01(\r\x12\x15\n\x08\x62\x61setime\x18\x05 \x01(\x04H\x02\x88\x01\x01\x12;\n\tpaywindow\x18\x06 \x01(\x0b\x32#.cln.DecodeOfferRecurrencePaywindowH\x03\x88\x01\x01\x12\x12\n\x05limit\x18\x07 \x01(\rH\x04\x88\x01\x01\x42\x13\n\x11_compulsory_fieldB\x11\n\x0f_time_unit_nameB\x0b\n\t_basetimeB\x0c\n\n_paywindowB\x08\n\x06_limit\"\x89\x01\n\x1e\x44\x65\x63odeOfferRecurrencePaywindow\x12\x16\n\x0eseconds_before\x18\x01 \x01(\r\x12\x15\n\rseconds_after\x18\x02 \x01(\r\x12 \n\x13proportional_amount\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\x16\n\x14_proportional_amount\";\n\x12\x44\x65\x63odeRestrictions\x12\x14\n\x0c\x61lternatives\x18\x01 \x03(\t\x12\x0f\n\x07summary\x18\x02 \x01(\t\"S\n\x1f\x44\x65\x63odeUnknownInvoiceRequestTlvs\x12\x11\n\titem_type\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\r\n\x05value\x18\x03 \x01(\x0c\"L\n\x18\x44\x65\x63odeUnknownInvoiceTlvs\x12\x11\n\titem_type\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\r\n\x05value\x18\x03 \x01(\x0c\"J\n\x16\x44\x65\x63odeUnknownOfferTlvs\x12\x11\n\titem_type\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\r\n\x05value\x18\x03 \x01(\x0c\"O\n\x1b\x44\x65\x63odeUnknownPayerProofTlvs\x12\x11\n\titem_type\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\r\n\x05value\x18\x03 \x01(\x0c\"\xc2\x01\n\rDelpayRequest\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12/\n\x06status\x18\x02 \x01(\x0e\x32\x1f.cln.DelpayRequest.DelpayStatus\x12\x13\n\x06partid\x18\x03 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07groupid\x18\x04 \x01(\x04H\x01\x88\x01\x01\"(\n\x0c\x44\x65lpayStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x42\t\n\x07_partidB\n\n\x08_groupid\"7\n\x0e\x44\x65lpayResponse\x12%\n\x08payments\x18\x01 \x03(\x0b\x32\x13.cln.DelpayPayments\"\xb4\x05\n\x0e\x44\x65lpayPayments\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\n\n\x02id\x18\x02 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x38\n\x06status\x18\x04 \x01(\x0e\x32(.cln.DelpayPayments.DelpayPaymentsStatus\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x06partid\x18\x06 \x01(\x04H\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x07 \x01(\x0cH\x01\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x12\n\ncreated_at\x18\t \x01(\x04\x12\x1a\n\rupdated_index\x18\n \x01(\x04H\x03\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0b \x01(\x04H\x04\x88\x01\x01\x12\x14\n\x07groupid\x18\x0c \x01(\x04H\x05\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x06\x88\x01\x01\x12\x12\n\x05label\x18\x0e \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0f \x01(\tH\x08\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x10 \x01(\tH\t\x88\x01\x01\x12\x17\n\nerroronion\x18\x11 \x01(\x0cH\n\x88\x01\x01\"=\n\x14\x44\x65lpayPaymentsStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\t\n\x07_partidB\x0e\n\x0c_destinationB\x0e\n\x0c_amount_msatB\x10\n\x0e_updated_indexB\x0f\n\r_completed_atB\n\n\x08_groupidB\x13\n\x11_payment_preimageB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\r\n\x0b_erroronion\"\xb3\x01\n\x11\x44\x65lforwardRequest\x12\x12\n\nin_channel\x18\x01 \x01(\t\x12\x12\n\nin_htlc_id\x18\x02 \x01(\x04\x12\x37\n\x06status\x18\x03 \x01(\x0e\x32\'.cln.DelforwardRequest.DelforwardStatus\"=\n\x10\x44\x65lforwardStatus\x12\x0b\n\x07SETTLED\x10\x00\x12\x10\n\x0cLOCAL_FAILED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\"\x14\n\x12\x44\x65lforwardResponse\"\'\n\x13\x44isableofferRequest\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\"\xdc\x01\n\x14\x44isableofferResponse\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x66orce_paths\x18\x08 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_descriptionB\x0e\n\x0c_force_paths\"&\n\x12\x45nableofferRequest\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\"\xdb\x01\n\x13\x45nableofferResponse\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x66orce_paths\x18\x08 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_descriptionB\x0e\n\x0c_force_paths\"=\n\x11\x44isconnectRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x12\n\x05\x66orce\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\x08\n\x06_force\"\x14\n\x12\x44isconnectResponse\"k\n\x0f\x46\x65\x65ratesRequest\x12\x31\n\x05style\x18\x01 \x01(\x0e\x32\".cln.FeeratesRequest.FeeratesStyle\"%\n\rFeeratesStyle\x12\t\n\x05PERKB\x10\x00\x12\t\n\x05PERKW\x10\x01\"\x9a\x02\n\x10\x46\x65\x65ratesResponse\x12%\n\x18warning_missing_feerates\x18\x01 \x01(\tH\x00\x88\x01\x01\x12&\n\x05perkb\x18\x02 \x01(\x0b\x32\x12.cln.FeeratesPerkbH\x01\x88\x01\x01\x12&\n\x05perkw\x18\x03 \x01(\x0b\x32\x12.cln.FeeratesPerkwH\x02\x88\x01\x01\x12\x44\n\x15onchain_fee_estimates\x18\x04 \x01(\x0b\x32 .cln.FeeratesOnchainFeeEstimatesH\x03\x88\x01\x01\x42\x1b\n\x19_warning_missing_feeratesB\x08\n\x06_perkbB\x08\n\x06_perkwB\x18\n\x16_onchain_fee_estimates\"\x99\x02\n\x1b\x46\x65\x65ratesOnchainFeeEstimates\x12 \n\x18opening_channel_satoshis\x18\x01 \x01(\x04\x12\x1d\n\x15mutual_close_satoshis\x18\x02 \x01(\x04\x12!\n\x19unilateral_close_satoshis\x18\x03 \x01(\x04\x12\x1d\n\x15htlc_timeout_satoshis\x18\x04 \x01(\x04\x12\x1d\n\x15htlc_success_satoshis\x18\x05 \x01(\x04\x12\x30\n#unilateral_close_nonanchor_satoshis\x18\x06 \x01(\x04H\x00\x88\x01\x01\x42&\n$_unilateral_close_nonanchor_satoshis\"\x84\x03\n\rFeeratesPerkb\x12\x16\n\x0emin_acceptable\x18\x01 \x01(\r\x12\x16\n\x0emax_acceptable\x18\x02 \x01(\r\x12\x14\n\x07opening\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x19\n\x0cmutual_close\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1d\n\x10unilateral_close\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x14\n\x07penalty\x18\x08 \x01(\rH\x03\x88\x01\x01\x12.\n\testimates\x18\t \x03(\x0b\x32\x1b.cln.FeeratesPerkbEstimates\x12\r\n\x05\x66loor\x18\n \x01(\r\x12$\n\x17unilateral_anchor_close\x18\x0b \x01(\rH\x04\x88\x01\x01\x12\x13\n\x06splice\x18\x0c \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_openingB\x0f\n\r_mutual_closeB\x13\n\x11_unilateral_closeB\n\n\x08_penaltyB\x1a\n\x18_unilateral_anchor_closeB\t\n\x07_splice\"W\n\x16\x46\x65\x65ratesPerkbEstimates\x12\x12\n\nblockcount\x18\x01 \x01(\r\x12\x0f\n\x07\x66\x65\x65rate\x18\x02 \x01(\r\x12\x18\n\x10smoothed_feerate\x18\x03 \x01(\r\"\x84\x03\n\rFeeratesPerkw\x12\x16\n\x0emin_acceptable\x18\x01 \x01(\r\x12\x16\n\x0emax_acceptable\x18\x02 \x01(\r\x12\x14\n\x07opening\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x19\n\x0cmutual_close\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1d\n\x10unilateral_close\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x14\n\x07penalty\x18\x08 \x01(\rH\x03\x88\x01\x01\x12.\n\testimates\x18\t \x03(\x0b\x32\x1b.cln.FeeratesPerkwEstimates\x12\r\n\x05\x66loor\x18\n \x01(\r\x12$\n\x17unilateral_anchor_close\x18\x0b \x01(\rH\x04\x88\x01\x01\x12\x13\n\x06splice\x18\x0c \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_openingB\x0f\n\r_mutual_closeB\x13\n\x11_unilateral_closeB\n\n\x08_penaltyB\x1a\n\x18_unilateral_anchor_closeB\t\n\x07_splice\"W\n\x16\x46\x65\x65ratesPerkwEstimates\x12\x12\n\nblockcount\x18\x01 \x01(\r\x12\x0f\n\x07\x66\x65\x65rate\x18\x02 \x01(\r\x12\x18\n\x10smoothed_feerate\x18\x03 \x01(\r\"%\n\x12\x46\x65tchbip353Request\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\"X\n\x13\x46\x65tchbip353Response\x12\r\n\x05proof\x18\x01 \x01(\t\x12\x32\n\x0cinstructions\x18\x02 \x03(\x0b\x32\x1c.cln.Fetchbip353Instructions\"\xf7\x01\n\x17\x46\x65tchbip353Instructions\x12\x18\n\x0b\x64\x65scription\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05offer\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x07onchain\x18\x03 \x01(\tH\x02\x88\x01\x01\x12!\n\x14offchain_amount_msat\x18\x04 \x01(\x04H\x03\x88\x01\x01\x12\x1f\n\x12onchain_amount_sat\x18\x05 \x01(\x04H\x04\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x08\n\x06_offerB\n\n\x08_onchainB\x17\n\x15_offchain_amount_msatB\x15\n\x13_onchain_amount_sat\"\xb9\x03\n\x13\x46\x65tchinvoiceRequest\x12\r\n\x05offer\x18\x01 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x15\n\x08quantity\x18\x03 \x01(\x04H\x01\x88\x01\x01\x12\x1f\n\x12recurrence_counter\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x1d\n\x10recurrence_start\x18\x05 \x01(\x01H\x03\x88\x01\x01\x12\x1d\n\x10recurrence_label\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x14\n\x07timeout\x18\x07 \x01(\x01H\x05\x88\x01\x01\x12\x17\n\npayer_note\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x1b\n\x0epayer_metadata\x18\t \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06\x62ip353\x18\n \x01(\tH\x08\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\x0b\n\t_quantityB\x15\n\x13_recurrence_counterB\x13\n\x11_recurrence_startB\x13\n\x11_recurrence_labelB\n\n\x08_timeoutB\r\n\x0b_payer_noteB\x11\n\x0f_payer_metadataB\t\n\x07_bip353\"\x99\x01\n\x14\x46\x65tchinvoiceResponse\x12\x0f\n\x07invoice\x18\x01 \x01(\t\x12)\n\x07\x63hanges\x18\x02 \x01(\x0b\x32\x18.cln.FetchinvoiceChanges\x12\x35\n\x0bnext_period\x18\x03 \x01(\x0b\x32\x1b.cln.FetchinvoiceNextPeriodH\x00\x88\x01\x01\x42\x0e\n\x0c_next_period\"\x82\x02\n\x13\x46\x65tchinvoiceChanges\x12!\n\x14\x64\x65scription_appended\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1b\n\x0evendor_removed\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06vendor\x18\x04 \x01(\tH\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x42\x17\n\x15_description_appendedB\x0e\n\x0c_descriptionB\x11\n\x0f_vendor_removedB\t\n\x07_vendorB\x0e\n\x0c_amount_msat\"}\n\x16\x46\x65tchinvoiceNextPeriod\x12\x0f\n\x07\x63ounter\x18\x01 \x01(\x04\x12\x11\n\tstarttime\x18\x02 \x01(\x04\x12\x0f\n\x07\x65ndtime\x18\x03 \x01(\x04\x12\x17\n\x0fpaywindow_start\x18\x04 \x01(\x04\x12\x15\n\rpaywindow_end\x18\x05 \x01(\x04\"\xe0\x01\n\x1d\x43\x61ncelrecurringinvoiceRequest\x12\r\n\x05offer\x18\x01 \x01(\t\x12\x1a\n\x12recurrence_counter\x18\x02 \x01(\x04\x12\x18\n\x10recurrence_label\x18\x03 \x01(\t\x12\x1d\n\x10recurrence_start\x18\x04 \x01(\x01H\x00\x88\x01\x01\x12\x17\n\npayer_note\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06\x62ip353\x18\x06 \x01(\tH\x02\x88\x01\x01\x42\x13\n\x11_recurrence_startB\r\n\x0b_payer_noteB\t\n\x07_bip353\"0\n\x1e\x43\x61ncelrecurringinvoiceResponse\x12\x0e\n\x06\x62olt12\x18\x01 \x01(\t\"&\n\x18\x46undchannelCancelRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\".\n\x19\x46undchannelCancelResponse\x12\x11\n\tcancelled\x18\x01 \x01(\t\"Z\n\x1a\x46undchannelCompleteRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\x12\x15\n\x08withhold\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\x0b\n\t_withhold\"N\n\x1b\x46undchannelCompleteResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x1b\n\x13\x63ommitments_secured\x18\x02 \x01(\x08\"\x84\x04\n\x12\x46undchannelRequest\x12#\n\x06\x61mount\x18\x01 \x01(\x0b\x32\x13.cln.AmountSatOrAll\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x15\n\x08\x61nnounce\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12#\n\tpush_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\tH\x03\x88\x01\x01\x12(\n\x0brequest_amt\x18\x07 \x01(\x0b\x32\x0e.cln.AmountSatH\x04\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x08 \x01(\tH\x05\x88\x01\x01\x12\n\n\x02id\x18\t \x01(\x0c\x12\x14\n\x07minconf\x18\n \x01(\rH\x06\x88\x01\x01\x12\x1c\n\x05utxos\x18\x0b \x03(\x0b\x32\r.cln.Outpoint\x12\x15\n\x08mindepth\x18\x0c \x01(\rH\x07\x88\x01\x01\x12$\n\x07reserve\x18\r \x01(\x0b\x32\x0e.cln.AmountSatH\x08\x88\x01\x01\x12\x14\n\x0c\x63hannel_type\x18\x0e \x03(\rB\n\n\x08_feerateB\x0b\n\t_announceB\x0c\n\n_push_msatB\x0b\n\t_close_toB\x0e\n\x0c_request_amtB\x10\n\x0e_compact_leaseB\n\n\x08_minconfB\x0b\n\t_mindepthB\n\n\x08_reserve\"\xce\x01\n\x13\x46undchannelResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x0e\n\x06outnum\x18\x03 \x01(\r\x12\x12\n\nchannel_id\x18\x04 \x01(\x0c\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x12\x15\n\x08mindepth\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x31\n\x0c\x63hannel_type\x18\x07 \x01(\x0b\x32\x1b.cln.FundchannelChannelTypeB\x0b\n\t_close_toB\x0b\n\t_mindepth\"K\n\x16\x46undchannelChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\xdc\x02\n\x17\x46undchannelStartRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x1e\n\x06\x61mount\x18\x02 \x01(\x0b\x32\x0e.cln.AmountSat\x12\"\n\x07\x66\x65\x65rate\x18\x03 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x15\n\x08\x61nnounce\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\tH\x02\x88\x01\x01\x12#\n\tpush_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x15\n\x08mindepth\x18\x07 \x01(\rH\x04\x88\x01\x01\x12$\n\x07reserve\x18\x08 \x01(\x0b\x32\x0e.cln.AmountSatH\x05\x88\x01\x01\x12\x14\n\x0c\x63hannel_type\x18\t \x03(\rB\n\n\x08_feerateB\x0b\n\t_announceB\x0b\n\t_close_toB\x0c\n\n_push_msatB\x0b\n\t_mindepthB\n\n\x08_reserve\"\xf6\x01\n\x18\x46undchannelStartResponse\x12\x17\n\x0f\x66unding_address\x18\x01 \x01(\t\x12\x14\n\x0cscriptpubkey\x18\x02 \x01(\x0c\x12;\n\x0c\x63hannel_type\x18\x03 \x01(\x0b\x32 .cln.FundchannelStartChannelTypeH\x00\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x12\x15\n\rwarning_usage\x18\x05 \x01(\t\x12\x15\n\x08mindepth\x18\x06 \x01(\rH\x02\x88\x01\x01\x42\x0f\n\r_channel_typeB\x0b\n\t_close_toB\x0b\n\t_mindepth\"P\n\x1b\x46undchannelStartChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x9d\x01\n\rGetlogRequest\x12\x32\n\x05level\x18\x01 \x01(\x0e\x32\x1e.cln.GetlogRequest.GetlogLevelH\x00\x88\x01\x01\"N\n\x0bGetlogLevel\x12\n\n\x06\x42ROKEN\x10\x00\x12\x0b\n\x07UNUSUAL\x10\x01\x12\x08\n\x04INFO\x10\x02\x12\t\n\x05\x44\x45\x42UG\x10\x03\x12\x06\n\x02IO\x10\x04\x12\t\n\x05TRACE\x10\x05\x42\x08\n\x06_level\"h\n\x0eGetlogResponse\x12\x12\n\ncreated_at\x18\x01 \x01(\t\x12\x12\n\nbytes_used\x18\x02 \x01(\r\x12\x11\n\tbytes_max\x18\x03 \x01(\r\x12\x1b\n\x03log\x18\x04 \x03(\x0b\x32\x0e.cln.GetlogLog\"\xe8\x02\n\tGetlogLog\x12/\n\titem_type\x18\x01 \x01(\x0e\x32\x1c.cln.GetlogLog.GetlogLogType\x12\x18\n\x0bnum_skipped\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04time\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06source\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x10\n\x03log\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x07node_id\x18\x06 \x01(\x0cH\x04\x88\x01\x01\x12\x11\n\x04\x64\x61ta\x18\x07 \x01(\x0cH\x05\x88\x01\x01\"l\n\rGetlogLogType\x12\x0b\n\x07SKIPPED\x10\x00\x12\n\n\x06\x42ROKEN\x10\x01\x12\x0b\n\x07UNUSUAL\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\t\n\x05\x44\x45\x42UG\x10\x04\x12\t\n\x05IO_IN\x10\x05\x12\n\n\x06IO_OUT\x10\x06\x12\t\n\x05TRACE\x10\x07\x42\x0e\n\x0c_num_skippedB\x07\n\x05_timeB\t\n\x07_sourceB\x06\n\x04_logB\n\n\x08_node_idB\x07\n\x05_data\"\xd9\x08\n\x13\x46underupdateRequest\x12@\n\x06policy\x18\x01 \x01(\x0e\x32+.cln.FunderupdateRequest.FunderupdatePolicyH\x00\x88\x01\x01\x12$\n\npolicy_mod\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0bleases_only\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x30\n\x16min_their_funding_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x30\n\x16max_their_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12.\n\x14per_channel_min_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12.\n\x14per_channel_max_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12+\n\x11reserve_tank_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x07\x88\x01\x01\x12\x19\n\x0c\x66uzz_percent\x18\t \x01(\rH\x08\x88\x01\x01\x12\x1d\n\x10\x66und_probability\x18\n \x01(\rH\t\x88\x01\x01\x12-\n\x13lease_fee_base_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\n\x88\x01\x01\x12\x1c\n\x0flease_fee_basis\x18\x0c \x01(\rH\x0b\x88\x01\x01\x12\x1b\n\x0e\x66unding_weight\x18\r \x01(\rH\x0c\x88\x01\x01\x12\x33\n\x19\x63hannel_fee_max_base_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\r\x88\x01\x01\x12\x35\n(channel_fee_max_proportional_thousandths\x18\x0f \x01(\rH\x0e\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x10 \x01(\x0cH\x0f\x88\x01\x01\"9\n\x12\x46underupdatePolicy\x12\t\n\x05MATCH\x10\x00\x12\r\n\tAVAILABLE\x10\x01\x12\t\n\x05\x46IXED\x10\x02\x42\t\n\x07_policyB\r\n\x0b_policy_modB\x0e\n\x0c_leases_onlyB\x19\n\x17_min_their_funding_msatB\x19\n\x17_max_their_funding_msatB\x17\n\x15_per_channel_min_msatB\x17\n\x15_per_channel_max_msatB\x14\n\x12_reserve_tank_msatB\x0f\n\r_fuzz_percentB\x13\n\x11_fund_probabilityB\x16\n\x14_lease_fee_base_msatB\x12\n\x10_lease_fee_basisB\x11\n\x0f_funding_weightB\x1c\n\x1a_channel_fee_max_base_msatB+\n)_channel_fee_max_proportional_thousandthsB\x10\n\x0e_compact_lease\"\xdf\x06\n\x14\x46underupdateResponse\x12\x0f\n\x07summary\x18\x01 \x01(\t\x12<\n\x06policy\x18\x02 \x01(\x0e\x32,.cln.FunderupdateResponse.FunderupdatePolicy\x12\x12\n\npolicy_mod\x18\x03 \x01(\r\x12\x13\n\x0bleases_only\x18\x04 \x01(\x08\x12+\n\x16min_their_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x16max_their_funding_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12)\n\x14per_channel_min_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12)\n\x14per_channel_max_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11reserve_tank_msat\x18\t \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66uzz_percent\x18\n \x01(\r\x12\x18\n\x10\x66und_probability\x18\x0b \x01(\r\x12-\n\x13lease_fee_base_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x1c\n\x0flease_fee_basis\x18\r \x01(\rH\x01\x88\x01\x01\x12\x1b\n\x0e\x66unding_weight\x18\x0e \x01(\rH\x02\x88\x01\x01\x12\x33\n\x19\x63hannel_fee_max_base_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x35\n(channel_fee_max_proportional_thousandths\x18\x10 \x01(\rH\x04\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x11 \x01(\x0cH\x05\x88\x01\x01\"9\n\x12\x46underupdatePolicy\x12\t\n\x05MATCH\x10\x00\x12\r\n\tAVAILABLE\x10\x01\x12\t\n\x05\x46IXED\x10\x02\x42\x16\n\x14_lease_fee_base_msatB\x12\n\x10_lease_fee_basisB\x11\n\x0f_funding_weightB\x1c\n\x1a_channel_fee_max_base_msatB+\n)_channel_fee_max_proportional_thousandthsB\x10\n\x0e_compact_lease\"\x8c\x02\n\x0fGetrouteRequest\x12\x0e\n\x02id\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\nriskfactor\x18\x03 \x01(\x04\x42\x02\x18\x01\x12\x15\n\x04\x63ltv\x18\x04 \x01(\rB\x02\x18\x01H\x00\x88\x01\x01\x12\x17\n\x06\x66romid\x18\x05 \x01(\x0c\x42\x02\x18\x01H\x01\x88\x01\x01\x12\x1c\n\x0b\x66uzzpercent\x18\x06 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x13\n\x07\x65xclude\x18\x07 \x03(\tB\x02\x18\x01\x12\x18\n\x07maxhops\x18\x08 \x01(\rB\x02\x18\x01H\x03\x88\x01\x01\x12$\n\x0b\x61mount_msat\x18\t \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x42\x07\n\x05_cltvB\t\n\x07_fromidB\x0e\n\x0c_fuzzpercentB\n\n\x08_maxhops\"9\n\x10GetrouteResponse\x12%\n\x05route\x18\x01 \x03(\x0b\x32\x12.cln.GetrouteRouteB\x02\x18\x01\"\xe1\x01\n\rGetrouteRoute\x12\x0e\n\x02id\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x13\n\x07\x63hannel\x18\x02 \x01(\tB\x02\x18\x01\x12\x15\n\tdirection\x18\x03 \x01(\rB\x02\x18\x01\x12$\n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12\x11\n\x05\x64\x65lay\x18\x05 \x01(\rB\x02\x18\x01\x12\x38\n\x05style\x18\x06 \x01(\x0e\x32%.cln.GetrouteRoute.GetrouteRouteStyleB\x02\x18\x01\"!\n\x12GetrouteRouteStyle\x12\x0b\n\x03TLV\x10\x00\x1a\x02\x08\x01\"t\n\x14ListaddressesRequest\x12\x14\n\x07\x61\x64\x64ress\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05start\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x03 \x01(\rH\x02\x88\x01\x01\x42\n\n\x08_addressB\x08\n\x06_startB\x08\n\x06_limit\"G\n\x15ListaddressesResponse\x12.\n\taddresses\x18\x01 \x03(\x0b\x32\x1b.cln.ListaddressesAddresses\"d\n\x16ListaddressesAddresses\x12\x0e\n\x06keyidx\x18\x01 \x01(\x04\x12\x13\n\x06\x62\x65\x63h32\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04p2tr\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\t\n\x07_bech32B\x07\n\x05_p2tr\"\xb7\x03\n\x13ListforwardsRequest\x12@\n\x06status\x18\x01 \x01(\x0e\x32+.cln.ListforwardsRequest.ListforwardsStatusH\x00\x88\x01\x01\x12\x17\n\nin_channel\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0bout_channel\x18\x03 \x01(\tH\x02\x88\x01\x01\x12>\n\x05index\x18\x04 \x01(\x0e\x32*.cln.ListforwardsRequest.ListforwardsIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\"-\n\x11ListforwardsIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\"L\n\x12ListforwardsStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\x10\n\x0cLOCAL_FAILED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x42\t\n\x07_statusB\r\n\x0b_in_channelB\x0e\n\x0c_out_channelB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListforwardsResponse\x12+\n\x08\x66orwards\x18\x01 \x03(\x0b\x32\x19.cln.ListforwardsForwards\"\x9d\x06\n\x14ListforwardsForwards\x12\x12\n\nin_channel\x18\x01 \x01(\t\x12\x1c\n\x07in_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x44\n\x06status\x18\x03 \x01(\x0e\x32\x34.cln.ListforwardsForwards.ListforwardsForwardsStatus\x12\x15\n\rreceived_time\x18\x04 \x01(\x01\x12\x18\n\x0bout_channel\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\"\n\x08\x66\x65\x65_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\"\n\x08out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12G\n\x05style\x18\t \x01(\x0e\x32\x33.cln.ListforwardsForwards.ListforwardsForwardsStyleH\x03\x88\x01\x01\x12\x17\n\nin_htlc_id\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x18\n\x0bout_htlc_id\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0c \x01(\x04\x12\x1a\n\rupdated_index\x18\r \x01(\x04H\x06\x88\x01\x01\x12\x1a\n\rresolved_time\x18\x0e \x01(\x01H\x07\x88\x01\x01\x12\x15\n\x08\x66\x61ilcode\x18\x0f \x01(\rH\x08\x88\x01\x01\x12\x17\n\nfailreason\x18\x10 \x01(\tH\t\x88\x01\x01\"T\n\x1aListforwardsForwardsStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\x10\n\x0cLOCAL_FAILED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\"0\n\x19ListforwardsForwardsStyle\x12\n\n\x06LEGACY\x10\x00\x12\x07\n\x03TLV\x10\x01\x42\x0e\n\x0c_out_channelB\x0b\n\t_fee_msatB\x0b\n\t_out_msatB\x08\n\x06_styleB\r\n\x0b_in_htlc_idB\x0e\n\x0c_out_htlc_idB\x10\n\x0e_updated_indexB\x10\n\x0e_resolved_timeB\x0b\n\t_failcodeB\r\n\x0b_failreason\"a\n\x11ListoffersRequest\x12\x15\n\x08offer_id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x18\n\x0b\x61\x63tive_only\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\x0b\n\t_offer_idB\x0e\n\x0c_active_only\";\n\x12ListoffersResponse\x12%\n\x06offers\x18\x01 \x03(\x0b\x32\x15.cln.ListoffersOffers\"\xd8\x01\n\x10ListoffersOffers\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x66orce_paths\x18\x08 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_descriptionB\x0e\n\x0c_force_paths\"\x84\x03\n\x0fListpaysRequest\x12\x13\n\x06\x62olt11\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12\x38\n\x06status\x18\x03 \x01(\x0e\x32#.cln.ListpaysRequest.ListpaysStatusH\x02\x88\x01\x01\x12\x36\n\x05index\x18\x04 \x01(\x0e\x32\".cln.ListpaysRequest.ListpaysIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\")\n\rListpaysIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\"7\n\x0eListpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x42\t\n\x07_bolt11B\x0f\n\r_payment_hashB\t\n\x07_statusB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"3\n\x10ListpaysResponse\x12\x1f\n\x04pays\x18\x01 \x03(\x0b\x32\x11.cln.ListpaysPays\"\xdb\x05\n\x0cListpaysPays\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x34\n\x06status\x18\x02 \x01(\x0e\x32$.cln.ListpaysPays.ListpaysPaysStatus\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x12\n\ncreated_at\x18\x04 \x01(\x04\x12\x12\n\x05label\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x06 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x07 \x01(\tH\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12*\n\x10\x61mount_sent_msat\x18\t \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x17\n\nerroronion\x18\n \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0b \x01(\tH\x07\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0c \x01(\x04H\x08\x88\x01\x01\x12\x15\n\x08preimage\x18\r \x01(\x0cH\t\x88\x01\x01\x12\x1c\n\x0fnumber_of_parts\x18\x0e \x01(\x04H\n\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x0f \x01(\x04H\x0b\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x10 \x01(\x04H\x0c\x88\x01\x01\";\n\x12ListpaysPaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x13\n\x11_amount_sent_msatB\r\n\x0b_erroronionB\x0e\n\x0c_descriptionB\x0f\n\r_completed_atB\x0b\n\t_preimageB\x12\n\x10_number_of_partsB\x10\n\x0e_created_indexB\x10\n\x0e_updated_index\"\xd6\x01\n\x10ListhtlcsRequest\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x38\n\x05index\x18\x02 \x01(\x0e\x32$.cln.ListhtlcsRequest.ListhtlcsIndexH\x01\x88\x01\x01\x12\x12\n\x05start\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\rH\x03\x88\x01\x01\"*\n\x0eListhtlcsIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x42\x05\n\x03_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"7\n\x11ListhtlcsResponse\x12\"\n\x05htlcs\x18\x01 \x03(\x0b\x32\x13.cln.ListhtlcsHtlcs\"\xe5\x02\n\x0eListhtlcsHtlcs\x12\x18\n\x10short_channel_id\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\x04\x12\x0e\n\x06\x65xpiry\x18\x03 \x01(\r\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12>\n\tdirection\x18\x05 \x01(\x0e\x32+.cln.ListhtlcsHtlcs.ListhtlcsHtlcsDirection\x12\x14\n\x0cpayment_hash\x18\x06 \x01(\x0c\x12\x1d\n\x05state\x18\x07 \x01(\x0e\x32\x0e.cln.HtlcState\x12\x1a\n\rcreated_index\x18\x08 \x01(\x04H\x00\x88\x01\x01\x12\x1a\n\rupdated_index\x18\t \x01(\x04H\x01\x88\x01\x01\"*\n\x17ListhtlcsHtlcsDirection\x12\x07\n\x03OUT\x10\x00\x12\x06\n\x02IN\x10\x01\x42\x10\n\x0e_created_indexB\x10\n\x0e_updated_index\"\xb2\x02\n\x17MultifundchannelRequest\x12\x37\n\x0c\x64\x65stinations\x18\x01 \x03(\x0b\x32!.cln.MultifundchannelDestinations\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\x12H\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\x18\n\x0bminchannels\x18\x05 \x01(\x12H\x02\x88\x01\x01\x12-\n\x12\x63ommitment_feerate\x18\x06 \x01(\x0b\x32\x0c.cln.FeerateH\x03\x88\x01\x01\x42\n\n\x08_feerateB\n\n\x08_minconfB\x0e\n\x0c_minchannelsB\x15\n\x13_commitment_feerate\"\x97\x01\n\x18MultifundchannelResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x34\n\x0b\x63hannel_ids\x18\x03 \x03(\x0b\x32\x1f.cln.MultifundchannelChannelIds\x12+\n\x06\x66\x61iled\x18\x04 \x03(\x0b\x32\x1b.cln.MultifundchannelFailed\"\x88\x03\n\x1cMultifundchannelDestinations\x12\n\n\x02id\x18\x01 \x01(\t\x12#\n\x06\x61mount\x18\x02 \x01(\x0b\x32\x13.cln.AmountSatOrAll\x12\x15\n\x08\x61nnounce\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12#\n\tpush_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\tH\x02\x88\x01\x01\x12(\n\x0brequest_amt\x18\x06 \x01(\x0b\x32\x0e.cln.AmountSatH\x03\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x07 \x01(\tH\x04\x88\x01\x01\x12\x15\n\x08mindepth\x18\x08 \x01(\rH\x05\x88\x01\x01\x12$\n\x07reserve\x18\t \x01(\x0b\x32\x0e.cln.AmountSatH\x06\x88\x01\x01\x42\x0b\n\t_announceB\x0c\n\n_push_msatB\x0b\n\t_close_toB\x0e\n\x0c_request_amtB\x10\n\x0e_compact_leaseB\x0b\n\t_mindepthB\n\n\x08_reserve\"\xb2\x01\n\x1aMultifundchannelChannelIds\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\x12\x12\n\nchannel_id\x18\x03 \x01(\x0c\x12@\n\x0c\x63hannel_type\x18\x04 \x01(\x0b\x32*.cln.MultifundchannelChannelIdsChannelType\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x42\x0b\n\t_close_to\"Z\n%MultifundchannelChannelIdsChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x93\x02\n\x16MultifundchannelFailed\x12\n\n\x02id\x18\x01 \x01(\x0c\x12H\n\x06method\x18\x02 \x01(\x0e\x32\x38.cln.MultifundchannelFailed.MultifundchannelFailedMethod\x12/\n\x05\x65rror\x18\x03 \x01(\x0b\x32 .cln.MultifundchannelFailedError\"r\n\x1cMultifundchannelFailedMethod\x12\x0b\n\x07\x43ONNECT\x10\x00\x12\x14\n\x10OPENCHANNEL_INIT\x10\x01\x12\x15\n\x11\x46UNDCHANNEL_START\x10\x02\x12\x18\n\x14\x46UNDCHANNEL_COMPLETE\x10\x03\"<\n\x1bMultifundchannelFailedError\x12\x0c\n\x04\x63ode\x18\x01 \x01(\x12\x12\x0f\n\x07message\x18\x02 \x01(\t\"\xa8\x01\n\x14MultiwithdrawRequest\x12 \n\x07outputs\x18\x01 \x03(\x0b\x32\x0f.cln.OutputDesc\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.OutpointB\n\n\x08_feerateB\n\n\x08_minconf\"1\n\x15MultiwithdrawResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"\xe2\x04\n\x0cOfferRequest\x12\x0e\n\x06\x61mount\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06issuer\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x12\n\x05label\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0cquantity_max\x18\x05 \x01(\x04H\x03\x88\x01\x01\x12\x1c\n\x0f\x61\x62solute_expiry\x18\x06 \x01(\x04H\x04\x88\x01\x01\x12\x17\n\nrecurrence\x18\x07 \x01(\tH\x05\x88\x01\x01\x12\x1c\n\x0frecurrence_base\x18\x08 \x01(\tH\x06\x88\x01\x01\x12!\n\x14recurrence_paywindow\x18\t \x01(\tH\x07\x88\x01\x01\x12\x1d\n\x10recurrence_limit\x18\n \x01(\rH\x08\x88\x01\x01\x12\x17\n\nsingle_use\x18\x0b \x01(\x08H\t\x88\x01\x01\x12 \n\x13proportional_amount\x18\r \x01(\x08H\n\x88\x01\x01\x12 \n\x13optional_recurrence\x18\x0e \x01(\x08H\x0b\x88\x01\x01\x12\x16\n\x0e\x66ronting_nodes\x18\x0f \x03(\x0c\x42\x0e\n\x0c_descriptionB\t\n\x07_issuerB\x08\n\x06_labelB\x0f\n\r_quantity_maxB\x12\n\x10_absolute_expiryB\r\n\x0b_recurrenceB\x12\n\x10_recurrence_baseB\x17\n\x15_recurrence_paywindowB\x13\n\x11_recurrence_limitB\r\n\x0b_single_useB\x16\n\x14_proportional_amountB\x16\n\x14_optional_recurrence\"\xbc\x01\n\rOfferResponse\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x0f\n\x07\x63reated\x18\x06 \x01(\x08\x12\x12\n\x05label\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x66orce_paths\x18\x08 \x01(\x08H\x01\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_force_paths\"-\n\x17OpenchannelAbortRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\"X\n\x18OpenchannelAbortResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x18\n\x10\x63hannel_canceled\x18\x02 \x01(\x08\x12\x0e\n\x06reason\x18\x03 \x01(\t\"\xa1\x01\n\x16OpenchannelBumpRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x13\n\x0binitialpsbt\x18\x02 \x01(\t\x12*\n\x0f\x66unding_feerate\x18\x03 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x1e\n\x06\x61mount\x18\x04 \x01(\x0b\x32\x0e.cln.AmountSatB\x12\n\x10_funding_feerate\"\xed\x01\n\x17OpenchannelBumpResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x35\n\x0c\x63hannel_type\x18\x02 \x01(\x0b\x32\x1f.cln.OpenchannelBumpChannelType\x12\x0c\n\x04psbt\x18\x03 \x01(\t\x12\x1b\n\x13\x63ommitments_secured\x18\x04 \x01(\x08\x12\x16\n\x0e\x66unding_serial\x18\x05 \x01(\x04\x12&\n\x19requires_confirmed_inputs\x18\x06 \x01(\x08H\x00\x88\x01\x01\x42\x1c\n\x1a_requires_confirmed_inputs\"O\n\x1aOpenchannelBumpChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\xa5\x03\n\x16OpenchannelInitRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x13\n\x0binitialpsbt\x18\x02 \x01(\t\x12-\n\x12\x63ommitment_feerate\x18\x03 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12*\n\x0f\x66unding_feerate\x18\x04 \x01(\x0b\x32\x0c.cln.FeerateH\x01\x88\x01\x01\x12\x15\n\x08\x61nnounce\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\tH\x03\x88\x01\x01\x12(\n\x0brequest_amt\x18\x07 \x01(\x0b\x32\x0e.cln.AmountSatH\x04\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x08 \x01(\x0cH\x05\x88\x01\x01\x12\x14\n\x0c\x63hannel_type\x18\t \x03(\r\x12\x1e\n\x06\x61mount\x18\n \x01(\x0b\x32\x0e.cln.AmountSatB\x15\n\x13_commitment_feerateB\x12\n\x10_funding_feerateB\x0b\n\t_announceB\x0b\n\t_close_toB\x0e\n\x0c_request_amtB\x10\n\x0e_compact_lease\"\xed\x01\n\x17OpenchannelInitResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\x12\x35\n\x0c\x63hannel_type\x18\x03 \x01(\x0b\x32\x1f.cln.OpenchannelInitChannelType\x12\x1b\n\x13\x63ommitments_secured\x18\x04 \x01(\x08\x12\x16\n\x0e\x66unding_serial\x18\x05 \x01(\x04\x12&\n\x19requires_confirmed_inputs\x18\x06 \x01(\x08H\x00\x88\x01\x01\x42\x1c\n\x1a_requires_confirmed_inputs\"O\n\x1aOpenchannelInitChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"C\n\x18OpenchannelSignedRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x13\n\x0bsigned_psbt\x18\x02 \x01(\t\"I\n\x19OpenchannelSignedResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\n\n\x02tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"<\n\x18OpenchannelUpdateRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\"\x95\x02\n\x19OpenchannelUpdateResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x37\n\x0c\x63hannel_type\x18\x02 \x01(\x0b\x32!.cln.OpenchannelUpdateChannelType\x12\x0c\n\x04psbt\x18\x03 \x01(\t\x12\x1b\n\x13\x63ommitments_secured\x18\x04 \x01(\x08\x12\x16\n\x0e\x66unding_outnum\x18\x05 \x01(\r\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12&\n\x19requires_confirmed_inputs\x18\x07 \x01(\x08H\x01\x88\x01\x01\x42\x0b\n\t_close_toB\x1c\n\x1a_requires_confirmed_inputs\"Q\n\x1cOpenchannelUpdateChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"Y\n\x0bPingRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x10\n\x03len\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x16\n\tpongbytes\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x06\n\x04_lenB\x0c\n\n_pongbytes\"\x1e\n\x0cPingResponse\x12\x0e\n\x06totlen\x18\x01 \x01(\r\"\x91\x01\n\rPluginRequest\x12)\n\nsubcommand\x18\x01 \x01(\x0e\x32\x15.cln.PluginSubcommand\x12\x13\n\x06plugin\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tdirectory\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0f\n\x07options\x18\x04 \x03(\tB\t\n\x07_pluginB\x0c\n\n_directory\"}\n\x0ePluginResponse\x12&\n\x07\x63ommand\x18\x01 \x01(\x0e\x32\x15.cln.PluginSubcommand\x12#\n\x07plugins\x18\x02 \x03(\x0b\x32\x12.cln.PluginPlugins\x12\x13\n\x06result\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_result\">\n\rPluginPlugins\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x0f\n\x07\x64ynamic\x18\x03 \x01(\x08\"@\n\x14RenepaystatusRequest\x12\x1a\n\tinvstring\x18\x01 \x01(\tB\x02\x18\x01H\x00\x88\x01\x01\x42\x0c\n\n_invstring\"K\n\x15RenepaystatusResponse\x12\x32\n\tpaystatus\x18\x01 \x03(\x0b\x32\x1b.cln.RenepaystatusPaystatusB\x02\x18\x01\"\x9a\x04\n\x16RenepaystatusPaystatus\x12\x12\n\x06\x62olt11\x18\x01 \x01(\tB\x02\x18\x01\x12!\n\x10payment_preimage\x18\x02 \x01(\x0c\x42\x02\x18\x01H\x00\x88\x01\x01\x12\x18\n\x0cpayment_hash\x18\x03 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\ncreated_at\x18\x04 \x01(\x01\x42\x02\x18\x01\x12\x13\n\x07groupid\x18\x05 \x01(\rB\x02\x18\x01\x12\x16\n\x05parts\x18\x06 \x01(\rB\x02\x18\x01H\x01\x88\x01\x01\x12$\n\x0b\x61mount_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12.\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x02\x88\x01\x01\x12L\n\x06status\x18\t \x01(\x0e\x32\x38.cln.RenepaystatusPaystatus.RenepaystatusPaystatusStatusB\x02\x18\x01\x12\x1c\n\x0b\x64\x65stination\x18\n \x01(\x0c\x42\x02\x18\x01H\x03\x88\x01\x01\x12\x11\n\x05notes\x18\x0b \x03(\tB\x02\x18\x01\"Q\n\x1cRenepaystatusPaystatusStatus\x12\x10\n\x08\x43OMPLETE\x10\x00\x1a\x02\x08\x01\x12\x0f\n\x07PENDING\x10\x01\x1a\x02\x08\x01\x12\x0e\n\x06\x46\x41ILED\x10\x02\x1a\x02\x08\x01\x42\x13\n\x11_payment_preimageB\x08\n\x06_partsB\x13\n\x11_amount_sent_msatB\x0e\n\x0c_destination\"\xfe\x02\n\x0eRenepayRequest\x12\x15\n\tinvstring\x18\x01 \x01(\tB\x02\x18\x01\x12)\n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x00\x88\x01\x01\x12$\n\x06maxfee\x18\x03 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x01\x88\x01\x01\x12\x19\n\x08maxdelay\x18\x04 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x1a\n\tretry_for\x18\x05 \x01(\rB\x02\x18\x01H\x03\x88\x01\x01\x12\x1c\n\x0b\x64\x65scription\x18\x06 \x01(\tB\x02\x18\x01H\x04\x88\x01\x01\x12\x16\n\x05label\x18\x07 \x01(\tB\x02\x18\x01H\x05\x88\x01\x01\x12\x1f\n\x0e\x64\x65v_use_shadow\x18\x08 \x01(\x08\x42\x02\x18\x01H\x06\x88\x01\x01\x12\x13\n\x07\x65xclude\x18\t \x03(\tB\x02\x18\x01\x42\x0e\n\x0c_amount_msatB\t\n\x07_maxfeeB\x0b\n\t_maxdelayB\x0c\n\n_retry_forB\x0e\n\x0c_descriptionB\x08\n\x06_labelB\x11\n\x0f_dev_use_shadow\"\xdd\x03\n\x0fRenepayResponse\x12\x1c\n\x10payment_preimage\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x18\n\x0cpayment_hash\x18\x02 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\ncreated_at\x18\x03 \x01(\x01\x42\x02\x18\x01\x12\x11\n\x05parts\x18\x04 \x01(\rB\x02\x18\x01\x12$\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12)\n\x10\x61mount_sent_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12\x36\n\x06status\x18\x07 \x01(\x0e\x32\".cln.RenepayResponse.RenepayStatusB\x02\x18\x01\x12\x1c\n\x0b\x64\x65stination\x18\x08 \x01(\x0c\x42\x02\x18\x01H\x00\x88\x01\x01\x12\x17\n\x06\x62olt11\x18\t \x01(\tB\x02\x18\x01H\x01\x88\x01\x01\x12\x17\n\x06\x62olt12\x18\n \x01(\tB\x02\x18\x01H\x02\x88\x01\x01\x12\x18\n\x07groupid\x18\x0b \x01(\x04\x42\x02\x18\x01H\x03\x88\x01\x01\"B\n\rRenepayStatus\x12\x10\n\x08\x43OMPLETE\x10\x00\x1a\x02\x08\x01\x12\x0f\n\x07PENDING\x10\x01\x1a\x02\x08\x01\x12\x0e\n\x06\x46\x41ILED\x10\x02\x1a\x02\x08\x01\x42\x0e\n\x0c_destinationB\t\n\x07_bolt11B\t\n\x07_bolt12B\n\n\x08_groupid\"l\n\x14ReserveinputsRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x16\n\texclusive\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x14\n\x07reserve\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x0c\n\n_exclusiveB\n\n\x08_reserve\"M\n\x15ReserveinputsResponse\x12\x34\n\x0creservations\x18\x01 \x03(\x0b\x32\x1e.cln.ReserveinputsReservations\"z\n\x19ReserveinputsReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x19\n\x11reserved_to_block\x18\x05 \x01(\r\"4\n\x14SendcustommsgRequest\x12\x0f\n\x07node_id\x18\x01 \x01(\x0c\x12\x0b\n\x03msg\x18\x02 \x01(\x0c\"\'\n\x15SendcustommsgResponse\x12\x0e\n\x06status\x18\x01 \x01(\t\"\xb0\x01\n\x12SendinvoiceRequest\x12\x0e\n\x06invreq\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08quantity\x18\x05 \x01(\x04H\x02\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\n\n\x08_timeoutB\x0b\n\t_quantity\"\xb8\x04\n\x13SendinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.SendinvoiceResponse.SendinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x15\n\rcreated_index\x18\x08 \x01(\x04\x12\x1a\n\rupdated_index\x18\t \x01(\x04H\x02\x88\x01\x01\x12\x16\n\tpay_index\x18\n \x01(\x04H\x03\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0c \x01(\x04H\x05\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x06\x88\x01\x01\"6\n\x11SendinvoiceStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\x0e\n\x0c_amount_msatB\t\n\x07_bolt12B\x10\n\x0e_updated_indexB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimage\"\xaa\x02\n\x11SetchannelRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12!\n\x07\x66\x65\x65\x62\x61se\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x13\n\x06\x66\x65\x65ppm\x18\x03 \x01(\rH\x01\x88\x01\x01\x12!\n\x07htlcmin\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12!\n\x07htlcmax\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x19\n\x0c\x65nforcedelay\x18\x06 \x01(\rH\x04\x88\x01\x01\x12\x1c\n\x0fignorefeelimits\x18\x07 \x01(\x08H\x05\x88\x01\x01\x42\n\n\x08_feebaseB\t\n\x07_feeppmB\n\n\x08_htlcminB\n\n\x08_htlcmaxB\x0f\n\r_enforcedelayB\x12\n\x10_ignorefeelimits\"?\n\x12SetchannelResponse\x12)\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x17.cln.SetchannelChannels\"\xaf\x03\n\x12SetchannelChannels\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x12\n\nchannel_id\x18\x02 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\"\n\rfee_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x05 \x01(\r\x12*\n\x15minimum_htlc_out_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12$\n\x17warning_htlcmin_too_low\x18\x07 \x01(\tH\x01\x88\x01\x01\x12*\n\x15maximum_htlc_out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x18warning_htlcmax_too_high\x18\t \x01(\tH\x02\x88\x01\x01\x12\x19\n\x11ignore_fee_limits\x18\n \x01(\x08\x42\x13\n\x11_short_channel_idB\x1a\n\x18_warning_htlcmin_too_lowB\x1b\n\x19_warning_htlcmax_too_high\"b\n\x10SetconfigRequest\x12\x0e\n\x06\x63onfig\x18\x01 \x01(\t\x12\x10\n\x03val\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttransient\x18\x03 \x01(\x08H\x01\x88\x01\x01\x42\x06\n\x04_valB\x0c\n\n_transient\"9\n\x11SetconfigResponse\x12$\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x14.cln.SetconfigConfig\"\xda\x02\n\x0fSetconfigConfig\x12\x0e\n\x06\x63onfig\x18\x01 \x01(\t\x12\x13\n\x06source\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0f\n\x07\x64ynamic\x18\x04 \x01(\x08\x12\x10\n\x03set\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x16\n\tvalue_str\x18\x06 \x01(\tH\x03\x88\x01\x01\x12$\n\nvalue_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x16\n\tvalue_int\x18\x08 \x01(\x12H\x05\x88\x01\x01\x12\x17\n\nvalue_bool\x18\t \x01(\x08H\x06\x88\x01\x01\x12\x0f\n\x07sources\x18\n \x03(\t\x12\x12\n\nvalues_str\x18\x0b \x03(\tB\t\n\x07_sourceB\t\n\x07_pluginB\x06\n\x04_setB\x0c\n\n_value_strB\r\n\x0b_value_msatB\x0c\n\n_value_intB\r\n\x0b_value_bool\"6\n\x15SetpsbtversionRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\r\"&\n\x16SetpsbtversionResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\"\'\n\x12SigninvoiceRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\"%\n\x13SigninvoiceResponse\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\"%\n\x12SignmessageRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\"F\n\x13SignmessageResponse\x12\x11\n\tsignature\x18\x01 \x01(\x0c\x12\r\n\x05recid\x18\x02 \x01(\x0c\x12\r\n\x05zbase\x18\x03 \x01(\t\"\xc8\x01\n\x11SpliceInitRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x17\n\x0frelative_amount\x18\x02 \x01(\x12\x12\x18\n\x0binitialpsbt\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1b\n\x0e\x66\x65\x65rate_per_kw\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1a\n\rforce_feerate\x18\x05 \x01(\x08H\x02\x88\x01\x01\x42\x0e\n\x0c_initialpsbtB\x11\n\x0f_feerate_per_kwB\x10\n\x0e_force_feerate\"\"\n\x12SpliceInitResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\"_\n\x13SpliceSignedRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\x12\x17\n\nsign_first\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\r\n\x0b_sign_first\"^\n\x14SpliceSignedResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x13\n\x06outnum\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x0c\n\x04psbt\x18\x04 \x01(\tB\t\n\x07_outnum\"7\n\x13SpliceUpdateRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\"y\n\x14SpliceUpdateResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x1b\n\x13\x63ommitments_secured\x18\x02 \x01(\x08\x12\x1f\n\x12signatures_secured\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\x15\n\x13_signatures_secured\"2\n\x0fSpliceinRequest\x12\x0f\n\x07\x63hannel\x18\x01 \x01(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\t\"b\n\x10SpliceinResponse\x12\x11\n\x04psbt\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x03 \x01(\tH\x02\x88\x01\x01\x42\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"\x8b\x01\n\x10SpliceoutRequest\x12\x0f\n\x07\x63hannel\x18\x01 \x01(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\t\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rforce_feerate\x18\x04 \x01(\x08H\x01\x88\x01\x01\x42\x0e\n\x0c_destinationB\x10\n\x0e_force_feerate\"c\n\x11SpliceoutResponse\x12\x11\n\x04psbt\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x03 \x01(\tH\x02\x88\x01\x01\x42\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"\xc6\x01\n\x10\x44\x65vspliceRequest\x12\x16\n\x0escript_or_json\x18\x01 \x01(\t\x12\x13\n\x06\x64ryrun\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x1a\n\rforce_feerate\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x16\n\tdebug_log\x18\x04 \x01(\x08H\x02\x88\x01\x01\x12\x17\n\ndev_wetrun\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_dryrunB\x10\n\x0e_force_feerateB\x0c\n\n_debug_logB\r\n\x0b_dev_wetrun\"\x80\x01\n\x11\x44\x65vspliceResponse\x12\x0e\n\x06\x64ryrun\x18\x01 \x03(\t\x12\x11\n\x04psbt\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03log\x18\x05 \x03(\tB\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"H\n\x16UnreserveinputsRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x14\n\x07reserve\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_reserve\"Q\n\x17UnreserveinputsResponse\x12\x36\n\x0creservations\x18\x01 \x03(\x0b\x32 .cln.UnreserveinputsReservations\"\x97\x01\n\x1bUnreserveinputsReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x1e\n\x11reserved_to_block\x18\x05 \x01(\rH\x00\x88\x01\x01\x42\x14\n\x12_reserved_to_block\"n\n\x14UpgradewalletRequest\x12\"\n\x07\x66\x65\x65rate\x18\x01 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x17\n\nreservedok\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\n\n\x08_feerateB\r\n\x0b_reservedok\"~\n\x15UpgradewalletResponse\x12\x15\n\rupgraded_outs\x18\x01 \x01(\x04\x12\x11\n\x04psbt\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"O\n\x16WaitblockheightRequest\x12\x13\n\x0b\x62lockheight\x18\x01 \x01(\r\x12\x14\n\x07timeout\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_timeout\".\n\x17WaitblockheightResponse\x12\x13\n\x0b\x62lockheight\x18\x01 \x01(\r\"\xb9\x02\n\x0bWaitRequest\x12\x31\n\tsubsystem\x18\x01 \x01(\x0e\x32\x1e.cln.WaitRequest.WaitSubsystem\x12\x31\n\tindexname\x18\x02 \x01(\x0e\x32\x1e.cln.WaitRequest.WaitIndexname\x12\x11\n\tnextvalue\x18\x03 \x01(\x04\"6\n\rWaitIndexname\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x12\x0b\n\x07\x44\x45LETED\x10\x02\"y\n\rWaitSubsystem\x12\x0c\n\x08INVOICES\x10\x00\x12\x0c\n\x08\x46ORWARDS\x10\x01\x12\x0c\n\x08SENDPAYS\x10\x02\x12\t\n\x05HTLCS\x10\x03\x12\x0e\n\nCHAINMOVES\x10\x04\x12\x10\n\x0c\x43HANNELMOVES\x10\x05\x12\x11\n\rNETWORKEVENTS\x10\x06\"\xf4\x05\n\x0cWaitResponse\x12\x32\n\tsubsystem\x18\x01 \x01(\x0e\x32\x1f.cln.WaitResponse.WaitSubsystem\x12\x14\n\x07\x63reated\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07updated\x18\x03 \x01(\x04H\x01\x88\x01\x01\x12\x14\n\x07\x64\x65leted\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12*\n\x07\x64\x65tails\x18\x05 \x01(\x0b\x32\x10.cln.WaitDetailsB\x02\x18\x01H\x03\x88\x01\x01\x12(\n\x08\x66orwards\x18\x06 \x01(\x0b\x32\x11.cln.WaitForwardsH\x04\x88\x01\x01\x12(\n\x08invoices\x18\x07 \x01(\x0b\x32\x11.cln.WaitInvoicesH\x05\x88\x01\x01\x12(\n\x08sendpays\x18\x08 \x01(\x0b\x32\x11.cln.WaitSendpaysH\x06\x88\x01\x01\x12\"\n\x05htlcs\x18\t \x01(\x0b\x32\x0e.cln.WaitHtlcsH\x07\x88\x01\x01\x12,\n\nchainmoves\x18\n \x01(\x0b\x32\x13.cln.WaitChainmovesH\x08\x88\x01\x01\x12\x30\n\x0c\x63hannelmoves\x18\x0b \x01(\x0b\x32\x15.cln.WaitChannelmovesH\t\x88\x01\x01\x12\x32\n\rnetworkevents\x18\x0c \x01(\x0b\x32\x16.cln.WaitNetworkeventsH\n\x88\x01\x01\"y\n\rWaitSubsystem\x12\x0c\n\x08INVOICES\x10\x00\x12\x0c\n\x08\x46ORWARDS\x10\x01\x12\x0c\n\x08SENDPAYS\x10\x02\x12\t\n\x05HTLCS\x10\x03\x12\x0e\n\nCHAINMOVES\x10\x04\x12\x10\n\x0c\x43HANNELMOVES\x10\x05\x12\x11\n\rNETWORKEVENTS\x10\x06\x42\n\n\x08_createdB\n\n\x08_updatedB\n\n\x08_deletedB\n\n\x08_detailsB\x0b\n\t_forwardsB\x0b\n\t_invoicesB\x0b\n\t_sendpaysB\x08\n\x06_htlcsB\r\n\x0b_chainmovesB\x0f\n\r_channelmovesB\x10\n\x0e_networkevents\"d\n\x0eWaitChainmoves\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\"f\n\x10WaitChannelmoves\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\"\xd0\x05\n\x0bWaitDetails\x12;\n\x06status\x18\x01 \x01(\x0e\x32\".cln.WaitDetails.WaitDetailsStatusB\x02\x18\x01H\x00\x88\x01\x01\x12\x16\n\x05label\x18\x02 \x01(\tB\x02\x18\x01H\x01\x88\x01\x01\x12\x1c\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x02\x18\x01H\x02\x88\x01\x01\x12\x17\n\x06\x62olt11\x18\x04 \x01(\tB\x02\x18\x01H\x03\x88\x01\x01\x12\x17\n\x06\x62olt12\x18\x05 \x01(\tB\x02\x18\x01H\x04\x88\x01\x01\x12\x17\n\x06partid\x18\x06 \x01(\x04\x42\x02\x18\x01H\x05\x88\x01\x01\x12\x18\n\x07groupid\x18\x07 \x01(\x04\x42\x02\x18\x01H\x06\x88\x01\x01\x12\x1d\n\x0cpayment_hash\x18\x08 \x01(\x0c\x42\x02\x18\x01H\x07\x88\x01\x01\x12\x1b\n\nin_channel\x18\t \x01(\tB\x02\x18\x01H\x08\x88\x01\x01\x12\x1b\n\nin_htlc_id\x18\n \x01(\x04\x42\x02\x18\x01H\t\x88\x01\x01\x12%\n\x07in_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\n\x88\x01\x01\x12\x1c\n\x0bout_channel\x18\x0c \x01(\tB\x02\x18\x01H\x0b\x88\x01\x01\"\xad\x01\n\x11WaitDetailsStatus\x12\x0e\n\x06UNPAID\x10\x00\x1a\x02\x08\x01\x12\x0c\n\x04PAID\x10\x01\x1a\x02\x08\x01\x12\x0f\n\x07\x45XPIRED\x10\x02\x1a\x02\x08\x01\x12\x0f\n\x07PENDING\x10\x03\x1a\x02\x08\x01\x12\x0e\n\x06\x46\x41ILED\x10\x04\x1a\x02\x08\x01\x12\x10\n\x08\x43OMPLETE\x10\x05\x1a\x02\x08\x01\x12\x0f\n\x07OFFERED\x10\x06\x1a\x02\x08\x01\x12\x0f\n\x07SETTLED\x10\x07\x1a\x02\x08\x01\x12\x14\n\x0cLOCAL_FAILED\x10\x08\x1a\x02\x08\x01\x42\t\n\x07_statusB\x08\n\x06_labelB\x0e\n\x0c_descriptionB\t\n\x07_bolt11B\t\n\x07_bolt12B\t\n\x07_partidB\n\n\x08_groupidB\x0f\n\r_payment_hashB\r\n\x0b_in_channelB\r\n\x0b_in_htlc_idB\n\n\x08_in_msatB\x0e\n\x0c_out_channel\"\xcb\x02\n\x0cWaitForwards\x12\x39\n\x06status\x18\x01 \x01(\x0e\x32$.cln.WaitForwards.WaitForwardsStatusH\x00\x88\x01\x01\x12\x17\n\nin_channel\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nin_htlc_id\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12!\n\x07in_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x18\n\x0bout_channel\x18\x05 \x01(\tH\x04\x88\x01\x01\"L\n\x12WaitForwardsStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x12\x10\n\x0cLOCAL_FAILED\x10\x03\x42\t\n\x07_statusB\r\n\x0b_in_channelB\r\n\x0b_in_htlc_idB\n\n\x08_in_msatB\x0e\n\x0c_out_channel\"\x8c\x03\n\tWaitHtlcs\x12\"\n\x05state\x18\x01 \x01(\x0e\x32\x0e.cln.HtlcStateH\x00\x88\x01\x01\x12\x14\n\x07htlc_id\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0b\x63ltv_expiry\x18\x04 \x01(\rH\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x39\n\tdirection\x18\x06 \x01(\x0e\x32!.cln.WaitHtlcs.WaitHtlcsDirectionH\x05\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x07 \x01(\x0cH\x06\x88\x01\x01\"%\n\x12WaitHtlcsDirection\x12\x07\n\x03OUT\x10\x00\x12\x06\n\x02IN\x10\x01\x42\x08\n\x06_stateB\n\n\x08_htlc_idB\x13\n\x11_short_channel_idB\x0e\n\x0c_cltv_expiryB\x0e\n\x0c_amount_msatB\x0c\n\n_directionB\x0f\n\r_payment_hash\"\x95\x02\n\x0cWaitInvoices\x12\x39\n\x06status\x18\x01 \x01(\x0e\x32$.cln.WaitInvoices.WaitInvoicesStatusH\x00\x88\x01\x01\x12\x12\n\x05label\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x05 \x01(\tH\x04\x88\x01\x01\"7\n\x12WaitInvoicesStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\t\n\x07_statusB\x08\n\x06_labelB\x0e\n\x0c_descriptionB\t\n\x07_bolt11B\t\n\x07_bolt12\"\x89\x02\n\x11WaitNetworkevents\x12\x1a\n\rcreated_index\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x44\n\titem_type\x18\x02 \x01(\x0e\x32,.cln.WaitNetworkevents.WaitNetworkeventsTypeH\x01\x88\x01\x01\x12\x14\n\x07peer_id\x18\x03 \x01(\x0cH\x02\x88\x01\x01\"P\n\x15WaitNetworkeventsType\x12\x0b\n\x07\x43ONNECT\x10\x00\x12\x10\n\x0c\x43ONNECT_FAIL\x10\x01\x12\x08\n\x04PING\x10\x02\x12\x0e\n\nDISCONNECT\x10\x03\x42\x10\n\x0e_created_indexB\x0c\n\n_item_typeB\n\n\x08_peer_id\"\xff\x01\n\x0cWaitSendpays\x12\x39\n\x06status\x18\x01 \x01(\x0e\x32$.cln.WaitSendpays.WaitSendpaysStatusH\x00\x88\x01\x01\x12\x13\n\x06partid\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x14\n\x07groupid\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x04 \x01(\x0cH\x03\x88\x01\x01\";\n\x12WaitSendpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\t\n\x07_statusB\t\n\x07_partidB\n\n\x08_groupidB\x0f\n\r_payment_hash\"4\n\x12ListconfigsRequest\x12\x13\n\x06\x63onfig\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_config\"P\n\x13ListconfigsResponse\x12-\n\x07\x63onfigs\x18\x01 \x01(\x0b\x32\x17.cln.ListconfigsConfigsH\x00\x88\x01\x01\x42\n\n\x08_configs\"\xed\x36\n\x12ListconfigsConfigs\x12.\n\x04\x63onf\x18\x01 \x01(\x0b\x32\x1b.cln.ListconfigsConfigsConfH\x00\x88\x01\x01\x12\x38\n\tdeveloper\x18\x02 \x01(\x0b\x32 .cln.ListconfigsConfigsDeveloperH\x01\x88\x01\x01\x12?\n\rclear_plugins\x18\x03 \x01(\x0b\x32#.cln.ListconfigsConfigsClearpluginsH\x02\x88\x01\x01\x12;\n\x0b\x64isable_mpp\x18\x04 \x01(\x0b\x32!.cln.ListconfigsConfigsDisablemppH\x03\x88\x01\x01\x12\x34\n\x07mainnet\x18\x05 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsMainnetH\x04\x88\x01\x01\x12\x34\n\x07regtest\x18\x06 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsRegtestH\x05\x88\x01\x01\x12\x32\n\x06signet\x18\x07 \x01(\x0b\x32\x1d.cln.ListconfigsConfigsSignetH\x06\x88\x01\x01\x12\x34\n\x07testnet\x18\x08 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsTestnetH\x07\x88\x01\x01\x12\x45\n\x10important_plugin\x18\t \x01(\x0b\x32&.cln.ListconfigsConfigsImportantpluginH\x08\x88\x01\x01\x12\x32\n\x06plugin\x18\n \x01(\x0b\x32\x1d.cln.ListconfigsConfigsPluginH\t\x88\x01\x01\x12\x39\n\nplugin_dir\x18\x0b \x01(\x0b\x32 .cln.ListconfigsConfigsPlugindirH\n\x88\x01\x01\x12?\n\rlightning_dir\x18\x0c \x01(\x0b\x32#.cln.ListconfigsConfigsLightningdirH\x0b\x88\x01\x01\x12\x34\n\x07network\x18\r \x01(\x0b\x32\x1e.cln.ListconfigsConfigsNetworkH\x0c\x88\x01\x01\x12N\n\x15\x61llow_deprecated_apis\x18\x0e \x01(\x0b\x32*.cln.ListconfigsConfigsAllowdeprecatedapisH\r\x88\x01\x01\x12\x35\n\x08rpc_file\x18\x0f \x01(\x0b\x32\x1e.cln.ListconfigsConfigsRpcfileH\x0e\x88\x01\x01\x12\x41\n\x0e\x64isable_plugin\x18\x10 \x01(\x0b\x32$.cln.ListconfigsConfigsDisablepluginH\x0f\x88\x01\x01\x12\x44\n\x10\x61lways_use_proxy\x18\x11 \x01(\x0b\x32%.cln.ListconfigsConfigsAlwaysuseproxyH\x10\x88\x01\x01\x12\x32\n\x06\x64\x61\x65mon\x18\x12 \x01(\x0b\x32\x1d.cln.ListconfigsConfigsDaemonH\x11\x88\x01\x01\x12\x32\n\x06wallet\x18\x13 \x01(\x0b\x32\x1d.cln.ListconfigsConfigsWalletH\x12\x88\x01\x01\x12\x41\n\x0elarge_channels\x18\x14 \x01(\x0b\x32$.cln.ListconfigsConfigsLargechannelsH\x13\x88\x01\x01\x12P\n\x16\x65xperimental_dual_fund\x18\x15 \x01(\x0b\x32+.cln.ListconfigsConfigsExperimentaldualfundH\x14\x88\x01\x01\x12S\n\x15\x65xperimental_splicing\x18\x16 \x01(\x0b\x32+.cln.ListconfigsConfigsExperimentalsplicingB\x02\x18\x01H\x15\x88\x01\x01\x12i\n#experimental_shutdown_wrong_funding\x18\x19 \x01(\x0b\x32\x37.cln.ListconfigsConfigsExperimentalshutdownwrongfundingH\x16\x88\x01\x01\x12Z\n\x19\x65xperimental_peer_storage\x18\x1a \x01(\x0b\x32..cln.ListconfigsConfigsExperimentalpeerstorageB\x02\x18\x01H\x17\x88\x01\x01\x12Q\n\x14\x65xperimental_anchors\x18\x1b \x01(\x0b\x32*.cln.ListconfigsConfigsExperimentalanchorsB\x02\x18\x01H\x18\x88\x01\x01\x12\x45\n\x10\x64\x61tabase_upgrade\x18\x1c \x01(\x0b\x32&.cln.ListconfigsConfigsDatabaseupgradeH\x19\x88\x01\x01\x12,\n\x03rgb\x18\x1d \x01(\x0b\x32\x1a.cln.ListconfigsConfigsRgbH\x1a\x88\x01\x01\x12\x30\n\x05\x61lias\x18\x1e \x01(\x0b\x32\x1c.cln.ListconfigsConfigsAliasH\x1b\x88\x01\x01\x12\x35\n\x08pid_file\x18\x1f \x01(\x0b\x32\x1e.cln.ListconfigsConfigsPidfileH\x1c\x88\x01\x01\x12\x46\n\x11ignore_fee_limits\x18 \x01(\x0b\x32&.cln.ListconfigsConfigsIgnorefeelimitsH\x1d\x88\x01\x01\x12\x45\n\x10watchtime_blocks\x18! \x01(\x0b\x32&.cln.ListconfigsConfigsWatchtimeblocksH\x1e\x88\x01\x01\x12N\n\x13max_locktime_blocks\x18\" \x01(\x0b\x32(.cln.ListconfigsConfigsMaxlocktimeblocksB\x02\x18\x01H\x1f\x88\x01\x01\x12\x45\n\x10\x66unding_confirms\x18# \x01(\x0b\x32&.cln.ListconfigsConfigsFundingconfirmsH \x88\x01\x01\x12\x39\n\ncltv_delta\x18$ \x01(\x0b\x32 .cln.ListconfigsConfigsCltvdeltaH!\x88\x01\x01\x12\x39\n\ncltv_final\x18% \x01(\x0b\x32 .cln.ListconfigsConfigsCltvfinalH\"\x88\x01\x01\x12;\n\x0b\x63ommit_time\x18& \x01(\x0b\x32!.cln.ListconfigsConfigsCommittimeH#\x88\x01\x01\x12\x35\n\x08\x66\x65\x65_base\x18\' \x01(\x0b\x32\x1e.cln.ListconfigsConfigsFeebaseH$\x88\x01\x01\x12\x32\n\x06rescan\x18( \x01(\x0b\x32\x1d.cln.ListconfigsConfigsRescanH%\x88\x01\x01\x12\x42\n\x0f\x66\x65\x65_per_satoshi\x18) \x01(\x0b\x32$.cln.ListconfigsConfigsFeepersatoshiH&\x88\x01\x01\x12L\n\x14max_concurrent_htlcs\x18* \x01(\x0b\x32).cln.ListconfigsConfigsMaxconcurrenthtlcsH\'\x88\x01\x01\x12\x46\n\x11htlc_minimum_msat\x18+ \x01(\x0b\x32&.cln.ListconfigsConfigsHtlcminimummsatH(\x88\x01\x01\x12\x46\n\x11htlc_maximum_msat\x18, \x01(\x0b\x32&.cln.ListconfigsConfigsHtlcmaximummsatH)\x88\x01\x01\x12X\n\x1bmax_dust_htlc_exposure_msat\x18- \x01(\x0b\x32..cln.ListconfigsConfigsMaxdusthtlcexposuremsatH*\x88\x01\x01\x12\x44\n\x10min_capacity_sat\x18. \x01(\x0b\x32%.cln.ListconfigsConfigsMincapacitysatH+\x88\x01\x01\x12.\n\x04\x61\x64\x64r\x18/ \x01(\x0b\x32\x1b.cln.ListconfigsConfigsAddrH,\x88\x01\x01\x12?\n\rannounce_addr\x18\x30 \x01(\x0b\x32#.cln.ListconfigsConfigsAnnounceaddrH-\x88\x01\x01\x12\x37\n\tbind_addr\x18\x31 \x01(\x0b\x32\x1f.cln.ListconfigsConfigsBindaddrH.\x88\x01\x01\x12\x34\n\x07offline\x18\x32 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsOfflineH/\x88\x01\x01\x12:\n\nautolisten\x18\x33 \x01(\x0b\x32!.cln.ListconfigsConfigsAutolistenH0\x88\x01\x01\x12\x30\n\x05proxy\x18\x34 \x01(\x0b\x32\x1c.cln.ListconfigsConfigsProxyH1\x88\x01\x01\x12;\n\x0b\x64isable_dns\x18\x35 \x01(\x0b\x32!.cln.ListconfigsConfigsDisablednsH2\x88\x01\x01\x12T\n\x18\x61nnounce_addr_discovered\x18\x36 \x01(\x0b\x32-.cln.ListconfigsConfigsAnnounceaddrdiscoveredH3\x88\x01\x01\x12]\n\x1d\x61nnounce_addr_discovered_port\x18\x37 \x01(\x0b\x32\x31.cln.ListconfigsConfigsAnnounceaddrdiscoveredportH4\x88\x01\x01\x12\x43\n\rencrypted_hsm\x18\x38 \x01(\x0b\x32#.cln.ListconfigsConfigsEncryptedhsmB\x02\x18\x01H5\x88\x01\x01\x12>\n\rrpc_file_mode\x18\x39 \x01(\x0b\x32\".cln.ListconfigsConfigsRpcfilemodeH6\x88\x01\x01\x12\x37\n\tlog_level\x18: \x01(\x0b\x32\x1f.cln.ListconfigsConfigsLoglevelH7\x88\x01\x01\x12\x39\n\nlog_prefix\x18; \x01(\x0b\x32 .cln.ListconfigsConfigsLogprefixH8\x88\x01\x01\x12\x35\n\x08log_file\x18< \x01(\x0b\x32\x1e.cln.ListconfigsConfigsLogfileH9\x88\x01\x01\x12\x41\n\x0elog_timestamps\x18= \x01(\x0b\x32$.cln.ListconfigsConfigsLogtimestampsH:\x88\x01\x01\x12\x41\n\x0e\x66orce_feerates\x18> \x01(\x0b\x32$.cln.ListconfigsConfigsForcefeeratesH;\x88\x01\x01\x12\x38\n\tsubdaemon\x18? \x01(\x0b\x32 .cln.ListconfigsConfigsSubdaemonH<\x88\x01\x01\x12Q\n\x16\x66\x65tchinvoice_noconnect\x18@ \x01(\x0b\x32,.cln.ListconfigsConfigsFetchinvoicenoconnectH=\x88\x01\x01\x12L\n\x14tor_service_password\x18\x42 \x01(\x0b\x32).cln.ListconfigsConfigsTorservicepasswordH>\x88\x01\x01\x12\x46\n\x11\x61nnounce_addr_dns\x18\x43 \x01(\x0b\x32&.cln.ListconfigsConfigsAnnounceaddrdnsH?\x88\x01\x01\x12T\n\x18require_confirmed_inputs\x18\x44 \x01(\x0b\x32-.cln.ListconfigsConfigsRequireconfirmedinputsH@\x88\x01\x01\x12\x39\n\ncommit_fee\x18\x45 \x01(\x0b\x32 .cln.ListconfigsConfigsCommitfeeHA\x88\x01\x01\x12N\n\x15\x63ommit_feerate_offset\x18\x46 \x01(\x0b\x32*.cln.ListconfigsConfigsCommitfeerateoffsetHB\x88\x01\x01\x12T\n\x18\x61utoconnect_seeker_peers\x18G \x01(\x0b\x32-.cln.ListconfigsConfigsAutoconnectseekerpeersHC\x88\x01\x01\x12R\n\x17\x63urrencyrate_add_source\x18J \x01(\x0b\x32,.cln.ListconfigsConfigsCurrencyrateaddsourceHD\x88\x01\x01\x12Z\n\x1b\x63urrencyrate_disable_source\x18K \x01(\x0b\x32\x30.cln.ListconfigsConfigsCurrencyratedisablesourceHE\x88\x01\x01\x12V\n\x19\x65xperimental_simple_close\x18L \x01(\x0b\x32..cln.ListconfigsConfigsExperimentalsimplecloseHF\x88\x01\x01\x12K\n\x14\x61\x63\x63\x65pt_htlc_tlv_type\x18M \x01(\x0b\x32(.cln.ListconfigsConfigsAccepthtlctlvtypeHG\x88\x01\x01\x12\x41\n\x0ehsm_passphrase\x18N \x01(\x0b\x32$.cln.ListconfigsConfigsHsmpassphraseHH\x88\x01\x01\x12`\n i_promise_to_fix_broken_api_user\x18O \x01(\x0b\x32\x31.cln.ListconfigsConfigsIpromisetofixbrokenapiuserHI\x88\x01\x01\x12V\n\x19invoices_onchain_fallback\x18P \x01(\x0b\x32..cln.ListconfigsConfigsInvoicesonchainfallbackHJ\x88\x01\x01\x12\x43\n\x0fmessage_padding\x18Q \x01(\x0b\x32%.cln.ListconfigsConfigsMessagepaddingHK\x88\x01\x01\x12H\n\x12min_emergency_msat\x18R \x01(\x0b\x32\'.cln.ListconfigsConfigsMinemergencymsatHL\x88\x01\x01\x12N\n\x15payment_fronting_node\x18S \x01(\x0b\x32*.cln.ListconfigsConfigsPaymentfrontingnodeHM\x88\x01\x01\x12\x34\n\x07recover\x18T \x01(\x0b\x32\x1e.cln.ListconfigsConfigsRecoverHN\x88\x01\x01\x12=\n\x0creckless_dir\x18U \x01(\x0b\x32\".cln.ListconfigsConfigsRecklessdirHO\x88\x01\x01\x42\x07\n\x05_confB\x0c\n\n_developerB\x10\n\x0e_clear_pluginsB\x0e\n\x0c_disable_mppB\n\n\x08_mainnetB\n\n\x08_regtestB\t\n\x07_signetB\n\n\x08_testnetB\x13\n\x11_important_pluginB\t\n\x07_pluginB\r\n\x0b_plugin_dirB\x10\n\x0e_lightning_dirB\n\n\x08_networkB\x18\n\x16_allow_deprecated_apisB\x0b\n\t_rpc_fileB\x11\n\x0f_disable_pluginB\x13\n\x11_always_use_proxyB\t\n\x07_daemonB\t\n\x07_walletB\x11\n\x0f_large_channelsB\x19\n\x17_experimental_dual_fundB\x18\n\x16_experimental_splicingB&\n$_experimental_shutdown_wrong_fundingB\x1c\n\x1a_experimental_peer_storageB\x17\n\x15_experimental_anchorsB\x13\n\x11_database_upgradeB\x06\n\x04_rgbB\x08\n\x06_aliasB\x0b\n\t_pid_fileB\x14\n\x12_ignore_fee_limitsB\x13\n\x11_watchtime_blocksB\x16\n\x14_max_locktime_blocksB\x13\n\x11_funding_confirmsB\r\n\x0b_cltv_deltaB\r\n\x0b_cltv_finalB\x0e\n\x0c_commit_timeB\x0b\n\t_fee_baseB\t\n\x07_rescanB\x12\n\x10_fee_per_satoshiB\x17\n\x15_max_concurrent_htlcsB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x1e\n\x1c_max_dust_htlc_exposure_msatB\x13\n\x11_min_capacity_satB\x07\n\x05_addrB\x10\n\x0e_announce_addrB\x0c\n\n_bind_addrB\n\n\x08_offlineB\r\n\x0b_autolistenB\x08\n\x06_proxyB\x0e\n\x0c_disable_dnsB\x1b\n\x19_announce_addr_discoveredB \n\x1e_announce_addr_discovered_portB\x10\n\x0e_encrypted_hsmB\x10\n\x0e_rpc_file_modeB\x0c\n\n_log_levelB\r\n\x0b_log_prefixB\x0b\n\t_log_fileB\x11\n\x0f_log_timestampsB\x11\n\x0f_force_feeratesB\x0c\n\n_subdaemonB\x19\n\x17_fetchinvoice_noconnectB\x17\n\x15_tor_service_passwordB\x14\n\x12_announce_addr_dnsB\x1b\n\x19_require_confirmed_inputsB\r\n\x0b_commit_feeB\x18\n\x16_commit_feerate_offsetB\x1b\n\x19_autoconnect_seeker_peersB\x1a\n\x18_currencyrate_add_sourceB\x1e\n\x1c_currencyrate_disable_sourceB\x1c\n\x1a_experimental_simple_closeB\x17\n\x15_accept_htlc_tlv_typeB\x11\n\x0f_hsm_passphraseB#\n!_i_promise_to_fix_broken_api_userB\x1c\n\x1a_invoices_onchain_fallbackB\x12\n\x10_message_paddingB\x15\n\x13_min_emergency_msatB\x18\n\x16_payment_fronting_nodeB\n\n\x08_recoverB\x0f\n\r_reckless_dir\"J\n#ListconfigsConfigsAccepthtlctlvtype\x12\x0f\n\x07sources\x18\x01 \x03(\t\x12\x12\n\nvalues_int\x18\x02 \x03(\r\"=\n\x16ListconfigsConfigsAddr\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"<\n\x17ListconfigsConfigsAlias\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"K\n%ListconfigsConfigsAllowdeprecatedapis\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"F\n ListconfigsConfigsAlwaysuseproxy\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"E\n\x1eListconfigsConfigsAnnounceaddr\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"\x80\x02\n(ListconfigsConfigsAnnounceaddrdiscovered\x12q\n\tvalue_str\x18\x01 \x01(\x0e\x32^.cln.ListconfigsConfigsAnnounceaddrdiscovered.ListconfigsConfigsAnnounceaddrdiscoveredValueStr\x12\x0e\n\x06source\x18\x02 \x01(\t\"Q\n0ListconfigsConfigsAnnounceaddrdiscoveredValueStr\x12\x08\n\x04TRUE\x10\x00\x12\t\n\x05\x46\x41LSE\x10\x01\x12\x08\n\x04\x41UTO\x10\x02\"Q\n,ListconfigsConfigsAnnounceaddrdiscoveredport\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"G\n!ListconfigsConfigsAnnounceaddrdns\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"M\n(ListconfigsConfigsAutoconnectseekerpeers\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1cListconfigsConfigsAutolisten\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"A\n\x1aListconfigsConfigsBindaddr\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"=\n\x1eListconfigsConfigsClearplugins\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsCltvdelta\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsCltvfinal\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsCommitfee\x12\x11\n\tvalue_int\x18\x01 \x01(\x04\x12\x0e\n\x06source\x18\x02 \x01(\t\"J\n%ListconfigsConfigsCommitfeerateoffset\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"A\n\x1cListconfigsConfigsCommittime\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"\xa2\x01\n\x16ListconfigsConfigsConf\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12H\n\x06source\x18\x02 \x01(\x0e\x32\x38.cln.ListconfigsConfigsConf.ListconfigsConfigsConfSource\"+\n\x1cListconfigsConfigsConfSource\x12\x0b\n\x07\x43MDLINE\x10\x00\"n\n\'ListconfigsConfigsCurrencyrateaddsource\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"r\n+ListconfigsConfigsCurrencyratedisablesource\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"7\n\x18ListconfigsConfigsDaemon\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"G\n!ListconfigsConfigsDatabaseupgrade\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\":\n\x1bListconfigsConfigsDeveloper\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\";\n\x1cListconfigsConfigsDisabledns\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"[\n\x1cListconfigsConfigsDisablempp\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"F\n\x1fListconfigsConfigsDisableplugin\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"E\n\x1eListconfigsConfigsEncryptedhsm\x12\x0f\n\x03set\x18\x01 \x01(\x08\x42\x02\x18\x01\x12\x12\n\x06source\x18\x02 \x01(\tB\x02\x18\x01\"L\n%ListconfigsConfigsExperimentalanchors\x12\x0f\n\x03set\x18\x01 \x01(\x08\x42\x02\x18\x01\x12\x12\n\x06source\x18\x02 \x01(\tB\x02\x18\x01\"E\n&ListconfigsConfigsExperimentaldualfund\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"P\n)ListconfigsConfigsExperimentalpeerstorage\x12\x0f\n\x03set\x18\x01 \x01(\x08\x42\x02\x18\x01\x12\x12\n\x06source\x18\x02 \x01(\tB\x02\x18\x01\"Q\n2ListconfigsConfigsExperimentalshutdownwrongfunding\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"H\n)ListconfigsConfigsExperimentalsimpleclose\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"M\n&ListconfigsConfigsExperimentalsplicing\x12\x0f\n\x03set\x18\x01 \x01(\x08\x42\x02\x18\x01\x12\x12\n\x06source\x18\x02 \x01(\tB\x02\x18\x01\">\n\x19ListconfigsConfigsFeebase\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"D\n\x1fListconfigsConfigsFeepersatoshi\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"f\n\'ListconfigsConfigsFetchinvoicenoconnect\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"D\n\x1fListconfigsConfigsForcefeerates\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"F\n!ListconfigsConfigsFundingconfirms\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x1fListconfigsConfigsHsmpassphrase\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"T\n!ListconfigsConfigsHtlcmaximummsat\x12\x1f\n\nvalue_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06source\x18\x02 \x01(\t\"T\n!ListconfigsConfigsHtlcminimummsat\x12\x1f\n\nvalue_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06source\x18\x02 \x01(\t\"S\n,ListconfigsConfigsIpromisetofixbrokenapiuser\x12\x0f\n\x07sources\x18\x01 \x03(\t\x12\x12\n\nvalues_str\x18\x02 \x03(\t\"G\n!ListconfigsConfigsIgnorefeelimits\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"H\n!ListconfigsConfigsImportantplugin\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"H\n)ListconfigsConfigsInvoicesonchainfallback\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x1fListconfigsConfigsLargechannels\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"C\n\x1eListconfigsConfigsLightningdir\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x19ListconfigsConfigsLogfile\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"?\n\x1aListconfigsConfigsLoglevel\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsLogprefix\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"E\n\x1fListconfigsConfigsLogtimestamps\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"8\n\x19ListconfigsConfigsMainnet\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"I\n$ListconfigsConfigsMaxconcurrenthtlcs\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"\\\n)ListconfigsConfigsMaxdusthtlcexposuremsat\x12\x1f\n\nvalue_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06source\x18\x02 \x01(\t\"P\n#ListconfigsConfigsMaxlocktimeblocks\x12\x15\n\tvalue_int\x18\x01 \x01(\rB\x02\x18\x01\x12\x12\n\x06source\x18\x02 \x01(\tB\x02\x18\x01\"F\n ListconfigsConfigsMessagepadding\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x12\n\nvalue_bool\x18\x02 \x01(\x08\"g\n ListconfigsConfigsMincapacitysat\x12\x11\n\tvalue_int\x18\x01 \x01(\x04\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x14\n\x07\x64ynamic\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\n\n\x08_dynamic\"U\n\"ListconfigsConfigsMinemergencymsat\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x1f\n\nvalue_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\">\n\x19ListconfigsConfigsNetwork\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"8\n\x19ListconfigsConfigsOffline\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"L\n%ListconfigsConfigsPaymentfrontingnode\x12\x0f\n\x07sources\x18\x01 \x03(\t\x12\x12\n\nvalues_str\x18\x02 \x03(\t\">\n\x19ListconfigsConfigsPidfile\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"?\n\x18ListconfigsConfigsPlugin\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"B\n\x1bListconfigsConfigsPlugindir\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"<\n\x17ListconfigsConfigsProxy\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1dListconfigsConfigsRecklessdir\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x11\n\tvalue_str\x18\x02 \x01(\t\">\n\x19ListconfigsConfigsRecover\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x11\n\tvalue_str\x18\x02 \x01(\t\"8\n\x19ListconfigsConfigsRegtest\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"N\n(ListconfigsConfigsRequireconfirmedinputs\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"=\n\x18ListconfigsConfigsRescan\x12\x11\n\tvalue_int\x18\x01 \x01(\x12\x12\x0e\n\x06source\x18\x02 \x01(\t\":\n\x15ListconfigsConfigsRgb\x12\x11\n\tvalue_str\x18\x01 \x01(\x0c\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x19ListconfigsConfigsRpcfile\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1dListconfigsConfigsRpcfilemode\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"7\n\x18ListconfigsConfigsSignet\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1bListconfigsConfigsSubdaemon\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"8\n\x19ListconfigsConfigsTestnet\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"I\n$ListconfigsConfigsTorservicepassword\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"=\n\x18ListconfigsConfigsWallet\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"F\n!ListconfigsConfigsWatchtimeblocks\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"\r\n\x0bStopRequest\"a\n\x0cStopResponse\x12,\n\x06result\x18\x01 \x01(\x0e\x32\x1c.cln.StopResponse.StopResult\"#\n\nStopResult\x12\x15\n\x11SHUTDOWN_COMPLETE\x10\x00\"/\n\x0bHelpRequest\x12\x14\n\x07\x63ommand\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_command\"\x95\x01\n\x0cHelpResponse\x12\x1b\n\x04help\x18\x01 \x03(\x0b\x32\r.cln.HelpHelp\x12:\n\x0b\x66ormat_hint\x18\x02 \x01(\x0e\x32 .cln.HelpResponse.HelpFormathintH\x00\x88\x01\x01\"\x1c\n\x0eHelpFormathint\x12\n\n\x06SIMPLE\x10\x00\x42\x0e\n\x0c_format_hint\"\x1b\n\x08HelpHelp\x12\x0f\n\x07\x63ommand\x18\x01 \x01(\t\"g\n\x18PreapprovekeysendRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\x0c\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\"\x1b\n\x19PreapprovekeysendResponse\"*\n\x18PreapproveinvoiceRequest\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\"\x1b\n\x19PreapproveinvoiceResponse\"\x15\n\x13StaticbackupRequest\"#\n\x14StaticbackupResponse\x12\x0b\n\x03scb\x18\x01 \x03(\x0c\"d\n\x16\x42kprchannelsapyRequest\x12\x17\n\nstart_time\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x02 \x01(\x04H\x01\x88\x01\x01\x42\r\n\x0b_start_timeB\x0b\n\t_end_time\"P\n\x17\x42kprchannelsapyResponse\x12\x35\n\x0c\x63hannels_apy\x18\x01 \x03(\x0b\x32\x1f.cln.BkprchannelsapyChannelsApy\"\xf9\x06\n\x1a\x42kprchannelsapyChannelsApy\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12$\n\x0frouted_out_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0erouted_in_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12(\n\x13lease_fee_paid_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12*\n\x15lease_fee_earned_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12$\n\x0fpushed_out_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0epushed_in_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x16our_start_balance_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12/\n\x1a\x63hannel_start_balance_msat\x18\t \x01(\x0b\x32\x0b.cln.Amount\x12\"\n\rfees_out_msat\x18\n \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x0c\x66\x65\x65s_in_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x17\n\x0futilization_out\x18\x0c \x01(\t\x12$\n\x17utilization_out_initial\x18\r \x01(\tH\x01\x88\x01\x01\x12\x16\n\x0eutilization_in\x18\x0e \x01(\t\x12#\n\x16utilization_in_initial\x18\x0f \x01(\tH\x02\x88\x01\x01\x12\x0f\n\x07\x61py_out\x18\x10 \x01(\t\x12\x1c\n\x0f\x61py_out_initial\x18\x11 \x01(\tH\x03\x88\x01\x01\x12\x0e\n\x06\x61py_in\x18\x12 \x01(\t\x12\x1b\n\x0e\x61py_in_initial\x18\x13 \x01(\tH\x04\x88\x01\x01\x12\x11\n\tapy_total\x18\x14 \x01(\t\x12\x1e\n\x11\x61py_total_initial\x18\x15 \x01(\tH\x05\x88\x01\x01\x12\x16\n\tapy_lease\x18\x16 \x01(\tH\x06\x88\x01\x01\x42\x0f\n\r_fees_in_msatB\x1a\n\x18_utilization_out_initialB\x19\n\x17_utilization_in_initialB\x12\n\x10_apy_out_initialB\x11\n\x0f_apy_in_initialB\x14\n\x12_apy_total_initialB\x0c\n\n_apy_lease\"\xd2\x01\n\x18\x42kprdumpincomecsvRequest\x12\x12\n\ncsv_format\x18\x01 \x01(\t\x12\x15\n\x08\x63sv_file\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x1d\n\x10\x63onsolidate_fees\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x17\n\nstart_time\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x05 \x01(\x04H\x03\x88\x01\x01\x42\x0b\n\t_csv_fileB\x13\n\x11_consolidate_feesB\r\n\x0b_start_timeB\x0b\n\t_end_time\"\xd4\x01\n\x19\x42kprdumpincomecsvResponse\x12\x10\n\x08\x63sv_file\x18\x01 \x01(\t\x12M\n\ncsv_format\x18\x02 \x01(\x0e\x32\x39.cln.BkprdumpincomecsvResponse.BkprdumpincomecsvCsvFormat\"V\n\x1a\x42kprdumpincomecsvCsvFormat\x12\x0f\n\x0b\x43OINTRACKER\x10\x00\x12\n\n\x06KOINLY\x10\x01\x12\x0b\n\x07HARMONY\x10\x02\x12\x0e\n\nQUICKBOOKS\x10\x03\"%\n\x12\x42kprinspectRequest\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\"7\n\x13\x42kprinspectResponse\x12 \n\x03txs\x18\x01 \x03(\x0b\x32\x13.cln.BkprinspectTxs\"\x9a\x01\n\x0e\x42kprinspectTxs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x18\n\x0b\x62lockheight\x18\x02 \x01(\rH\x00\x88\x01\x01\x12#\n\x0e\x66\x65\x65s_paid_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x07outputs\x18\x04 \x03(\x0b\x32\x1a.cln.BkprinspectTxsOutputsB\x0e\n\x0c_blockheight\"\xbc\x03\n\x15\x42kprinspectTxsOutputs\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x0e\n\x06outnum\x18\x02 \x01(\r\x12&\n\x11output_value_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x04 \x01(\t\x12%\n\x0b\x63redit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12$\n\ndebit_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12 \n\x13originating_account\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x17\n\noutput_tag\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tspend_tag\x18\t \x01(\tH\x04\x88\x01\x01\x12\x1a\n\rspending_txid\x18\n \x01(\x0cH\x05\x88\x01\x01\x12\x17\n\npayment_id\x18\x0b \x01(\x0cH\x06\x88\x01\x01\x42\x0e\n\x0c_credit_msatB\r\n\x0b_debit_msatB\x16\n\x14_originating_accountB\r\n\x0b_output_tagB\x0c\n\n_spend_tagB\x10\n\x0e_spending_txidB\r\n\x0b_payment_id\"h\n\x1c\x42kprlistaccounteventsRequest\x12\x14\n\x07\x61\x63\x63ount\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x17\n\npayment_id\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\n\n\x08_accountB\r\n\x0b_payment_id\"Q\n\x1d\x42kprlistaccounteventsResponse\x12\x30\n\x06\x65vents\x18\x01 \x03(\x0b\x32 .cln.BkprlistaccounteventsEvents\"\xcd\x05\n\x1b\x42kprlistaccounteventsEvents\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12S\n\titem_type\x18\x02 \x01(\x0e\x32@.cln.BkprlistaccounteventsEvents.BkprlistaccounteventsEventsType\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x06 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\r\x12\x15\n\x08outpoint\x18\x08 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\t \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06origin\x18\n \x01(\tH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\x0b \x01(\x0cH\x03\x88\x01\x01\x12\x11\n\x04txid\x18\x0c \x01(\x0cH\x04\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\r \x01(\tH\x05\x88\x01\x01\x12#\n\tfees_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x19\n\x0cis_rebalance\x18\x0f \x01(\x08H\x07\x88\x01\x01\x12\x14\n\x07part_id\x18\x10 \x01(\rH\x08\x88\x01\x01\x12\x19\n\x0c\x63urrencyrate\x18\x11 \x01(\x01H\t\x88\x01\x01\"J\n\x1f\x42kprlistaccounteventsEventsType\x12\x0f\n\x0bONCHAIN_FEE\x10\x00\x12\t\n\x05\x43HAIN\x10\x01\x12\x0b\n\x07\x43HANNEL\x10\x02\x42\x0b\n\t_outpointB\x0e\n\x0c_blockheightB\t\n\x07_originB\r\n\x0b_payment_idB\x07\n\x05_txidB\x0e\n\x0c_descriptionB\x0c\n\n_fees_msatB\x0f\n\r_is_rebalanceB\n\n\x08_part_idB\x0f\n\r_currencyrate\"\x19\n\x17\x42kprlistbalancesRequest\"K\n\x18\x42kprlistbalancesResponse\x12/\n\x08\x61\x63\x63ounts\x18\x01 \x03(\x0b\x32\x1d.cln.BkprlistbalancesAccounts\"\xc6\x02\n\x18\x42kprlistbalancesAccounts\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x37\n\x08\x62\x61lances\x18\x02 \x03(\x0b\x32%.cln.BkprlistbalancesAccountsBalances\x12\x14\n\x07peer_id\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x16\n\twe_opened\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x1b\n\x0e\x61\x63\x63ount_closed\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x1d\n\x10\x61\x63\x63ount_resolved\x18\x06 \x01(\x08H\x03\x88\x01\x01\x12\x1e\n\x11resolved_at_block\x18\x07 \x01(\rH\x04\x88\x01\x01\x42\n\n\x08_peer_idB\x0c\n\n_we_openedB\x11\n\x0f_account_closedB\x13\n\x11_account_resolvedB\x14\n\x12_resolved_at_block\"X\n BkprlistbalancesAccountsBalances\x12!\n\x0c\x62\x61lance_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\tcoin_type\x18\x02 \x01(\t\"\x97\x01\n\x15\x42kprlistincomeRequest\x12\x1d\n\x10\x63onsolidate_fees\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x17\n\nstart_time\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x03 \x01(\rH\x02\x88\x01\x01\x42\x13\n\x11_consolidate_feesB\r\n\x0b_start_timeB\x0b\n\t_end_time\"P\n\x16\x42kprlistincomeResponse\x12\x36\n\rincome_events\x18\x01 \x03(\x0b\x32\x1f.cln.BkprlistincomeIncomeEvents\"\xb4\x02\n\x1a\x42kprlistincomeIncomeEvents\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x0b\n\x03tag\x18\x02 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\r\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08outpoint\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\t \x01(\x0cH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\n \x01(\x0cH\x03\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0b\n\t_outpointB\x07\n\x05_txidB\r\n\x0b_payment_id\"P\n%BkpreditdescriptionbypaymentidRequest\x12\x12\n\npayment_id\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"e\n&BkpreditdescriptionbypaymentidResponse\x12;\n\x07updated\x18\x01 \x03(\x0b\x32*.cln.BkpreditdescriptionbypaymentidUpdated\"\xa3\x05\n%BkpreditdescriptionbypaymentidUpdated\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12g\n\titem_type\x18\x02 \x01(\x0e\x32T.cln.BkpreditdescriptionbypaymentidUpdated.BkpreditdescriptionbypaymentidUpdatedType\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x06 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\r\x12\x13\n\x0b\x64\x65scription\x18\x08 \x01(\t\x12\x15\n\x08outpoint\x18\t \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\n \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06origin\x18\x0b \x01(\tH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\x0c \x01(\x0cH\x03\x88\x01\x01\x12\x11\n\x04txid\x18\r \x01(\x0cH\x04\x88\x01\x01\x12#\n\tfees_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x19\n\x0cis_rebalance\x18\x0f \x01(\x08H\x06\x88\x01\x01\x12\x14\n\x07part_id\x18\x10 \x01(\rH\x07\x88\x01\x01\"C\n)BkpreditdescriptionbypaymentidUpdatedType\x12\t\n\x05\x43HAIN\x10\x00\x12\x0b\n\x07\x43HANNEL\x10\x01\x42\x0b\n\t_outpointB\x0e\n\x0c_blockheightB\t\n\x07_originB\r\n\x0b_payment_idB\x07\n\x05_txidB\x0c\n\n_fees_msatB\x0f\n\r_is_rebalanceB\n\n\x08_part_id\"M\n$BkpreditdescriptionbyoutpointRequest\x12\x10\n\x08outpoint\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"c\n%BkpreditdescriptionbyoutpointResponse\x12:\n\x07updated\x18\x01 \x03(\x0b\x32).cln.BkpreditdescriptionbyoutpointUpdated\"\x9f\x05\n$BkpreditdescriptionbyoutpointUpdated\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x65\n\titem_type\x18\x02 \x01(\x0e\x32R.cln.BkpreditdescriptionbyoutpointUpdated.BkpreditdescriptionbyoutpointUpdatedType\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x06 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\r\x12\x13\n\x0b\x64\x65scription\x18\x08 \x01(\t\x12\x15\n\x08outpoint\x18\t \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\n \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06origin\x18\x0b \x01(\tH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\x0c \x01(\x0cH\x03\x88\x01\x01\x12\x11\n\x04txid\x18\r \x01(\x0cH\x04\x88\x01\x01\x12#\n\tfees_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x19\n\x0cis_rebalance\x18\x0f \x01(\x08H\x06\x88\x01\x01\x12\x14\n\x07part_id\x18\x10 \x01(\rH\x07\x88\x01\x01\"B\n(BkpreditdescriptionbyoutpointUpdatedType\x12\t\n\x05\x43HAIN\x10\x00\x12\x0b\n\x07\x43HANNEL\x10\x01\x42\x0b\n\t_outpointB\x0e\n\x0c_blockheightB\t\n\x07_originB\r\n\x0b_payment_idB\x07\n\x05_txidB\x0c\n\n_fees_msatB\x0f\n\r_is_rebalanceB\n\n\x08_part_id\"\xb0\x01\n\x11\x42kprreportRequest\x12\x13\n\x06\x66ormat\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x07headers\x18\x02 \x03(\t\x12\x13\n\x06\x65scape\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nstart_time\x18\x04 \x01(\rH\x02\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x05 \x01(\rH\x03\x88\x01\x01\x42\t\n\x07_formatB\t\n\x07_escapeB\r\n\x0b_start_timeB\x0b\n\t_end_time\"$\n\x12\x42kprreportResponse\x12\x0e\n\x06report\x18\x01 \x03(\t\"n\n\x14\x42lacklistruneRequest\x12\x12\n\x05start\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03\x65nd\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x13\n\x06relist\x18\x03 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_startB\x06\n\x04_endB\t\n\x07_relist\"G\n\x15\x42lacklistruneResponse\x12.\n\tblacklist\x18\x01 \x03(\x0b\x32\x1b.cln.BlacklistruneBlacklist\"4\n\x16\x42lacklistruneBlacklist\x12\r\n\x05start\x18\x01 \x01(\x04\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x04\"p\n\x10\x43heckruneRequest\x12\x0c\n\x04rune\x18\x01 \x01(\t\x12\x13\n\x06nodeid\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06method\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0e\n\x06params\x18\x04 \x03(\tB\t\n\x07_nodeidB\t\n\x07_method\"\"\n\x11\x43heckruneResponse\x12\r\n\x05valid\x18\x01 \x01(\x08\"E\n\x11\x43reateruneRequest\x12\x11\n\x04rune\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0crestrictions\x18\x02 \x03(\tB\x07\n\x05_rune\"{\n\x12\x43reateruneResponse\x12\x0c\n\x04rune\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12&\n\x19warning_unrestricted_rune\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x1c\n\x1a_warning_unrestricted_rune\".\n\x10ShowrunesRequest\x12\x11\n\x04rune\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x07\n\x05_rune\"7\n\x11ShowrunesResponse\x12\"\n\x05runes\x18\x01 \x03(\x0b\x32\x13.cln.ShowrunesRunes\"\x9d\x02\n\x0eShowrunesRunes\x12\x0c\n\x04rune\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12\x35\n\x0crestrictions\x18\x03 \x03(\x0b\x32\x1f.cln.ShowrunesRunesRestrictions\x12\x1f\n\x17restrictions_as_english\x18\x04 \x01(\t\x12\x13\n\x06stored\x18\x05 \x01(\x08H\x00\x88\x01\x01\x12\x18\n\x0b\x62lacklisted\x18\x06 \x01(\x08H\x01\x88\x01\x01\x12\x16\n\tlast_used\x18\x07 \x01(\x01H\x02\x88\x01\x01\x12\x15\n\x08our_rune\x18\x08 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_storedB\x0e\n\x0c_blacklistedB\x0c\n\n_last_usedB\x0b\n\t_our_rune\"p\n\x1aShowrunesRunesRestrictions\x12\x41\n\x0c\x61lternatives\x18\x01 \x03(\x0b\x32+.cln.ShowrunesRunesRestrictionsAlternatives\x12\x0f\n\x07\x65nglish\x18\x02 \x01(\t\"n\n&ShowrunesRunesRestrictionsAlternatives\x12\x11\n\tfieldname\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\x12\x11\n\tcondition\x18\x03 \x01(\t\x12\x0f\n\x07\x65nglish\x18\x04 \x01(\t\"r\n\x17\x41skreneunreserveRequest\x12\'\n\x04path\x18\x01 \x03(\x0b\x32\x19.cln.AskreneunreservePath\x12\x1b\n\x0e\x64\x65v_remove_all\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\x11\n\x0f_dev_remove_all\"\x1a\n\x18\x41skreneunreserveResponse\"t\n\x14\x41skreneunreservePath\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1c\n\x14short_channel_id_dir\x18\x04 \x01(\t\x12\x12\n\x05layer\x18\x05 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_layer\"8\n\x18\x41skrenelistlayersRequest\x12\x12\n\x05layer\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_layer\"I\n\x19\x41skrenelistlayersResponse\x12,\n\x06layers\x18\x01 \x03(\x0b\x32\x1c.cln.AskrenelistlayersLayers\"\xe8\x03\n\x17\x41skrenelistlayersLayers\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x16\n\x0e\x64isabled_nodes\x18\x02 \x03(\x0c\x12\x45\n\x10\x63reated_channels\x18\x03 \x03(\x0b\x32+.cln.AskrenelistlayersLayersCreatedChannels\x12<\n\x0b\x63onstraints\x18\x04 \x03(\x0b\x32\'.cln.AskrenelistlayersLayersConstraints\x12\x12\n\npersistent\x18\x05 \x01(\x08\x12\x19\n\x11\x64isabled_channels\x18\x06 \x03(\t\x12\x43\n\x0f\x63hannel_updates\x18\x07 \x03(\x0b\x32*.cln.AskrenelistlayersLayersChannelUpdates\x12\x32\n\x06\x62iases\x18\x08 \x03(\x0b\x32\".cln.AskrenelistlayersLayersBiases\x12;\n\x0bnode_biases\x18\t \x03(\x0b\x32&.cln.AskrenelistlayersLayersNodeBiases\x12<\n\x0bimpressions\x18\n \x03(\x0b\x32\'.cln.AskrenelistlayersLayersImpressions\"\x9b\x01\n\x1d\x41skrenelistlayersLayersBiases\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\x0c\n\x04\x62ias\x18\x02 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttimestamp\x18\x04 \x01(\x04H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0c\n\n_timestamp\"\xa8\x03\n%AskrenelistlayersLayersChannelUpdates\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\x14\n\x07\x65nabled\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12+\n\x11htlc_minimum_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12+\n\x11htlc_maximum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x06 \x01(\rH\x04\x88\x01\x01\x12\x1e\n\x11\x63ltv_expiry_delta\x18\x07 \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_enabledB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x14\n\x12_cltv_expiry_delta\"\xda\x01\n\"AskrenelistlayersLayersConstraints\x12&\n\x0cmaximum_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12&\n\x0cminimum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x1c\n\x14short_channel_id_dir\x18\x05 \x01(\t\x12\x16\n\ttimestamp\x18\x06 \x01(\x04H\x02\x88\x01\x01\x42\x0f\n\r_maximum_msatB\x0f\n\r_minimum_msatB\x0c\n\n_timestamp\"\x8b\x01\n&AskrenelistlayersLayersCreatedChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\"\n\rcapacity_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\"w\n\"AskrenelistlayersLayersImpressions\x12 \n\x0b\x61mount_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\x04\"\x91\x01\n!AskrenelistlayersLayersNodeBiases\x12\x0c\n\x04node\x18\x01 \x01(\x0c\x12\x0f\n\x07in_bias\x18\x02 \x01(\x12\x12\x10\n\x08out_bias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x42\x0e\n\x0c_description\"R\n\x19\x41skrenecreatelayerRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x17\n\npersistent\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\r\n\x0b_persistent\"K\n\x1a\x41skrenecreatelayerResponse\x12-\n\x06layers\x18\x01 \x03(\x0b\x32\x1d.cln.AskrenecreatelayerLayers\"\xef\x03\n\x18\x41skrenecreatelayerLayers\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x12\n\npersistent\x18\x02 \x01(\x08\x12\x16\n\x0e\x64isabled_nodes\x18\x03 \x03(\x0c\x12\x19\n\x11\x64isabled_channels\x18\x04 \x03(\t\x12\x46\n\x10\x63reated_channels\x18\x05 \x03(\x0b\x32,.cln.AskrenecreatelayerLayersCreatedChannels\x12\x44\n\x0f\x63hannel_updates\x18\x06 \x03(\x0b\x32+.cln.AskrenecreatelayerLayersChannelUpdates\x12=\n\x0b\x63onstraints\x18\x07 \x03(\x0b\x32(.cln.AskrenecreatelayerLayersConstraints\x12\x33\n\x06\x62iases\x18\x08 \x03(\x0b\x32#.cln.AskrenecreatelayerLayersBiases\x12<\n\x0bnode_biases\x18\t \x03(\x0b\x32\'.cln.AskrenecreatelayerLayersNodeBiases\x12=\n\x0bimpressions\x18\n \x03(\x0b\x32(.cln.AskrenecreatelayerLayersImpressions\"\x9c\x01\n\x1e\x41skrenecreatelayerLayersBiases\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\x0c\n\x04\x62ias\x18\x02 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttimestamp\x18\x04 \x01(\x04H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0c\n\n_timestamp\"\xd1\x02\n&AskrenecreatelayerLayersChannelUpdates\x12+\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12+\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x04 \x01(\rH\x03\x88\x01\x01\x12\x12\n\x05\x64\x65lay\x18\x05 \x01(\rH\x04\x88\x01\x01\x42\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x08\n\x06_delay\"\xc4\x01\n#AskrenecreatelayerLayersConstraints\x12\x18\n\x10short_channel_id\x18\x01 \x01(\t\x12\x11\n\tdirection\x18\x02 \x01(\r\x12&\n\x0cmaximum_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12&\n\x0cminimum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x42\x0f\n\r_maximum_msatB\x0f\n\r_minimum_msat\"\x8c\x01\n\'AskrenecreatelayerLayersCreatedChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\"\n\rcapacity_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\"x\n#AskrenecreatelayerLayersImpressions\x12 \n\x0b\x61mount_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\x04\"\x92\x01\n\"AskrenecreatelayerLayersNodeBiases\x12\x0c\n\x04node\x18\x01 \x01(\x0c\x12\x0f\n\x07in_bias\x18\x02 \x01(\x12\x12\x10\n\x08out_bias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x42\x0e\n\x0c_description\"*\n\x19\x41skreneremovelayerRequest\x12\r\n\x05layer\x18\x01 \x01(\t\"\x1c\n\x1a\x41skreneremovelayerResponse\"P\n!AskreneremovechannelupdateRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\"$\n\"AskreneremovechannelupdateResponse\">\n\x15\x41skrenereserveRequest\x12%\n\x04path\x18\x01 \x03(\x0b\x32\x17.cln.AskrenereservePath\"\x18\n\x16\x41skrenereserveResponse\"r\n\x12\x41skrenereservePath\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1c\n\x14short_channel_id_dir\x18\x04 \x01(\t\x12\x12\n\x05layer\x18\x05 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_layer\"2\n\x11\x41skreneageRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0e\n\x06\x63utoff\x18\x02 \x01(\x04\"8\n\x12\x41skreneageResponse\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x13\n\x0bnum_removed\x18\x02 \x01(\x04\"\xe7\x01\n\x10GetroutesRequest\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06layers\x18\x04 \x03(\t\x12 \n\x0bmaxfee_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\nfinal_cltv\x18\x07 \x01(\r\x12\x15\n\x08maxdelay\x18\x08 \x01(\rH\x00\x88\x01\x01\x12\x15\n\x08maxparts\x18\t \x01(\rH\x01\x88\x01\x01\x42\x0b\n\t_maxdelayB\x0b\n\t_maxparts\"R\n\x11GetroutesResponse\x12\x17\n\x0fprobability_ppm\x18\x01 \x01(\x04\x12$\n\x06routes\x18\x02 \x03(\x0b\x32\x14.cln.GetroutesRoutes\"\x88\x01\n\x0fGetroutesRoutes\x12\x17\n\x0fprobability_ppm\x18\x01 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x04path\x18\x03 \x03(\x0b\x32\x18.cln.GetroutesRoutesPath\x12\x12\n\nfinal_cltv\x18\x04 \x01(\r\"\xd4\x03\n\x13GetroutesRoutesPath\x12)\n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x00\x88\x01\x01\x12\x1d\n\x0cnext_node_id\x18\x04 \x01(\x0c\x42\x02\x18\x01H\x01\x88\x01\x01\x12\x16\n\x05\x64\x65lay\x18\x05 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x1c\n\x14short_channel_id_dir\x18\x06 \x01(\t\x12(\n\x0e\x61mount_in_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12)\n\x0f\x61mount_out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x17\n\nnode_id_in\x18\t \x01(\x0cH\x05\x88\x01\x01\x12\x18\n\x0bnode_id_out\x18\n \x01(\x0cH\x06\x88\x01\x01\x12\x14\n\x07\x63ltv_in\x18\x0b \x01(\rH\x07\x88\x01\x01\x12\x15\n\x08\x63ltv_out\x18\x0c \x01(\rH\x08\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\x0f\n\r_next_node_idB\x08\n\x06_delayB\x11\n\x0f_amount_in_msatB\x12\n\x10_amount_out_msatB\r\n\x0b_node_id_inB\x0e\n\x0c_node_id_outB\n\n\x08_cltv_inB\x0b\n\t_cltv_out\"8\n\x19\x41skrenedisablenodeRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\x0c\"\x1c\n\x1a\x41skrenedisablenodeResponse\"\x8a\x02\n\x1b\x41skreneinformchannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x06 \x01(\t\x12 \n\x0b\x61mount_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12K\n\x06inform\x18\x08 \x01(\x0e\x32;.cln.AskreneinformchannelRequest.AskreneinformchannelInform\"O\n\x1a\x41skreneinformchannelInform\x12\x0f\n\x0b\x43ONSTRAINED\x10\x00\x12\x11\n\rUNCONSTRAINED\x10\x01\x12\r\n\tSUCCEEDED\x10\x02\"\x94\x01\n\x1c\x41skreneinformchannelResponse\x12\x39\n\x0b\x63onstraints\x18\x02 \x03(\x0b\x32$.cln.AskreneinformchannelConstraints\x12\x39\n\x0bimpressions\x18\x03 \x03(\x0b\x32$.cln.AskreneinformchannelImpressions\"\xd3\x01\n\x1f\x41skreneinformchannelConstraints\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\r\n\x05layer\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\x04\x12&\n\x0cmaximum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12&\n\x0cminimum_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x42\x0f\n\r_maximum_msatB\x0f\n\r_minimum_msat\"\x83\x01\n\x1f\x41skreneinformchannelImpressions\x12 \n\x0b\x61mount_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\r\n\x05layer\x18\x02 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x03 \x01(\t\x12\x11\n\ttimestamp\x18\x04 \x01(\x04\"\x8f\x01\n\x1b\x41skrenecreatechannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x03 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x04 \x01(\t\x12\"\n\rcapacity_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"\x1e\n\x1c\x41skrenecreatechannelResponse\"\xad\x03\n\x1b\x41skreneupdatechannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x14\n\x07\x65nabled\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12+\n\x11htlc_minimum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12+\n\x11htlc_maximum_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x07 \x01(\rH\x04\x88\x01\x01\x12\x1e\n\x11\x63ltv_expiry_delta\x18\x08 \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_enabledB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x14\n\x12_cltv_expiry_delta\"\x1e\n\x1c\x41skreneupdatechannelResponse\"\xa4\x01\n\x19\x41skrenebiaschannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x0c\n\x04\x62ias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08relative\x18\x05 \x01(\x08H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0b\n\t_relative\"K\n\x1a\x41skrenebiaschannelResponse\x12-\n\x06\x62iases\x18\x01 \x03(\x0b\x32\x1d.cln.AskrenebiaschannelBiases\"\xa5\x01\n\x18\x41skrenebiaschannelBiases\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x0c\n\x04\x62ias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttimestamp\x18\x05 \x01(\x04H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0c\n\n_timestamp\"\xa4\x01\n\x16\x41skrenebiasnodeRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x11\n\tdirection\x18\x03 \x01(\t\x12\x0c\n\x04\x62ias\x18\x04 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08relative\x18\x06 \x01(\x08H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0b\n\t_relative\"N\n\x17\x41skrenebiasnodeResponse\x12\x33\n\x0bnode_biases\x18\x01 \x03(\x0b\x32\x1e.cln.AskrenebiasnodeNodeBiases\"\x98\x01\n\x19\x41skrenebiasnodeNodeBiases\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x0f\n\x07in_bias\x18\x03 \x01(\x12\x12\x10\n\x08out_bias\x18\x04 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x06 \x01(\x04\x42\x0e\n\x0c_description\" \n\x1e\x41skrenelistreservationsRequest\"a\n\x1f\x41skrenelistreservationsResponse\x12>\n\x0creservations\x18\x01 \x03(\x0b\x32(.cln.AskrenelistreservationsReservations\"\x91\x01\n#AskrenelistreservationsReservations\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x16\n\x0e\x61ge_in_seconds\x18\x03 \x01(\x04\x12\x12\n\ncommand_id\x18\x04 \x01(\t\"\xf5\x02\n\x19InjectpaymentonionRequest\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x0b\x63ltv_expiry\x18\x04 \x01(\r\x12\x0e\n\x06partid\x18\x05 \x01(\x04\x12\x0f\n\x07groupid\x18\x06 \x01(\x04\x12\x12\n\x05label\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tinvstring\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\t \x01(\x0cH\x02\x88\x01\x01\x12*\n\x10\x64\x65stination_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x0b \x01(\x0cH\x04\x88\x01\x01\x42\x08\n\x06_labelB\x0c\n\n_invstringB\x10\n\x0e_localinvreqidB\x13\n\x11_destination_msatB\x0e\n\x0c_destination\"w\n\x1aInjectpaymentonionResponse\x12\x12\n\ncreated_at\x18\x01 \x01(\x04\x12\x14\n\x0c\x63ompleted_at\x18\x02 \x01(\x04\x12\x15\n\rcreated_index\x18\x03 \x01(\x04\x12\x18\n\x10payment_preimage\x18\x04 \x01(\x0c\">\n\x19InjectonionmessageRequest\x12\x10\n\x08path_key\x18\x01 \x01(\x0c\x12\x0f\n\x07message\x18\x02 \x01(\x0c\"\x1c\n\x1aInjectonionmessageResponse\"\xbb\x03\n\x0bXpayRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12 \n\x06maxfee\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x0e\n\x06layers\x18\x04 \x03(\t\x12\x16\n\tretry_for\x18\x05 \x01(\rH\x02\x88\x01\x01\x12&\n\x0cpartial_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x07 \x01(\rH\x04\x88\x01\x01\x12\x17\n\npayer_note\x18\x08 \x01(\tH\x05\x88\x01\x01\x12\x12\n\x05label\x18\t \x01(\tH\x06\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\n \x01(\x0cH\x07\x88\x01\x01\x12\x1b\n\x0e\x64\x65v_use_shadow\x18\x0b \x01(\x08H\x08\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\t\n\x07_maxfeeB\x0c\n\n_retry_forB\x0f\n\r_partial_msatB\x0b\n\t_maxdelayB\r\n\x0b_payer_noteB\x08\n\x06_labelB\x10\n\x0e_localinvreqidB\x11\n\x0f_dev_use_shadow\"\xa1\x01\n\x0cXpayResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x14\n\x0c\x66\x61iled_parts\x18\x02 \x01(\x04\x12\x18\n\x10successful_parts\x18\x03 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"=\n\x19SignmessagewithkeyRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t\"`\n\x1aSignmessagewithkeyResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x0e\n\x06pubkey\x18\x02 \x01(\x0c\x12\x11\n\tsignature\x18\x03 \x01(\x0c\x12\x0e\n\x06\x62\x61se64\x18\x04 \x01(\t\"\xcd\x01\n\x17ListchannelmovesRequest\x12\x46\n\x05index\x18\x01 \x01(\x0e\x32\x32.cln.ListchannelmovesRequest.ListchannelmovesIndexH\x00\x88\x01\x01\x12\x12\n\x05start\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x03 \x01(\rH\x02\x88\x01\x01\"$\n\x15ListchannelmovesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x42\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"S\n\x18ListchannelmovesResponse\x12\x37\n\x0c\x63hannelmoves\x18\x01 \x03(\x0b\x32!.cln.ListchannelmovesChannelmoves\"\xa9\x04\n\x1cListchannelmovesChannelmoves\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\x12\n\naccount_id\x18\x02 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x12]\n\x0bprimary_tag\x18\x06 \x01(\x0e\x32H.cln.ListchannelmovesChannelmoves.ListchannelmovesChannelmovesPrimaryTag\x12\x19\n\x0cpayment_hash\x18\x07 \x01(\x0cH\x00\x88\x01\x01\x12\x14\n\x07part_id\x18\x08 \x01(\x04H\x01\x88\x01\x01\x12\x15\n\x08group_id\x18\t \x01(\x04H\x02\x88\x01\x01\x12\x1e\n\tfees_msat\x18\n \x01(\x0b\x32\x0b.cln.Amount\"\x96\x01\n&ListchannelmovesChannelmovesPrimaryTag\x12\x0b\n\x07INVOICE\x10\x00\x12\n\n\x06ROUTED\x10\x01\x12\n\n\x06PUSHED\x10\x02\x12\r\n\tLEASE_FEE\x10\x03\x12\x14\n\x10\x43HANNEL_PROPOSED\x10\x04\x12\x0f\n\x0bPENALTY_ADJ\x10\x05\x12\x11\n\rJOURNAL_ENTRY\x10\x06\x42\x0f\n\r_payment_hashB\n\n\x08_part_idB\x0b\n\t_group_id\"\xc5\x01\n\x15ListchainmovesRequest\x12\x42\n\x05index\x18\x01 \x01(\x0e\x32..cln.ListchainmovesRequest.ListchainmovesIndexH\x00\x88\x01\x01\x12\x12\n\x05start\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x03 \x01(\rH\x02\x88\x01\x01\"\"\n\x13ListchainmovesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x42\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"K\n\x16ListchainmovesResponse\x12\x31\n\nchainmoves\x18\x01 \x03(\x0b\x32\x1d.cln.ListchainmovesChainmoves\"\xd4\x06\n\x18ListchainmovesChainmoves\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\x12\n\naccount_id\x18\x02 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x12U\n\x0bprimary_tag\x18\x06 \x01(\x0e\x32@.cln.ListchainmovesChainmoves.ListchainmovesChainmovesPrimaryTag\x12\x14\n\x07peer_id\x18\x08 \x01(\x0cH\x00\x88\x01\x01\x12 \n\x13originating_account\x18\t \x01(\tH\x01\x88\x01\x01\x12\x1a\n\rspending_txid\x18\n \x01(\x0cH\x02\x88\x01\x01\x12\x1b\n\x04utxo\x18\x0b \x01(\x0b\x32\r.cln.Outpoint\x12\x19\n\x0cpayment_hash\x18\x0c \x01(\x0cH\x03\x88\x01\x01\x12 \n\x0boutput_msat\x18\r \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x0coutput_count\x18\x0e \x01(\rH\x04\x88\x01\x01\x12\x13\n\x0b\x62lockheight\x18\x0f \x01(\r\x12\x12\n\nextra_tags\x18\x10 \x03(\t\"\x95\x02\n\"ListchainmovesChainmovesPrimaryTag\x12\x0b\n\x07\x44\x45POSIT\x10\x00\x12\x0e\n\nWITHDRAWAL\x10\x01\x12\x0b\n\x07PENALTY\x10\x02\x12\x10\n\x0c\x43HANNEL_OPEN\x10\x03\x12\x11\n\rCHANNEL_CLOSE\x10\x04\x12\x11\n\rDELAYED_TO_US\x10\x05\x12\x0b\n\x07HTLC_TX\x10\x06\x12\x10\n\x0cHTLC_TIMEOUT\x10\x07\x12\x10\n\x0cHTLC_FULFILL\x10\x08\x12\r\n\tTO_WALLET\x10\t\x12\n\n\x06\x41NCHOR\x10\n\x12\x0b\n\x07TO_THEM\x10\x0b\x12\r\n\tPENALIZED\x10\x0c\x12\n\n\x06STOLEN\x10\r\x12\x0b\n\x07IGNORED\x10\x0e\x12\x0c\n\x08TO_MINER\x10\x0f\x42\n\n\x08_peer_idB\x16\n\x14_originating_accountB\x10\n\x0e_spending_txidB\x0f\n\r_payment_hashB\x0f\n\r_output_count\"\xe9\x01\n\x18ListnetworkeventsRequest\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12H\n\x05index\x18\x02 \x01(\x0e\x32\x34.cln.ListnetworkeventsRequest.ListnetworkeventsIndexH\x01\x88\x01\x01\x12\x12\n\x05start\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\rH\x03\x88\x01\x01\"%\n\x16ListnetworkeventsIndex\x12\x0b\n\x07\x43REATED\x10\x00\x42\x05\n\x03_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"W\n\x19ListnetworkeventsResponse\x12:\n\rnetworkevents\x18\x01 \x03(\x0b\x32#.cln.ListnetworkeventsNetworkevents\"\xf2\x01\n\x1eListnetworkeventsNetworkevents\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\x11\n\ttimestamp\x18\x02 \x01(\x04\x12\x0f\n\x07peer_id\x18\x03 \x01(\x0c\x12\x11\n\titem_type\x18\x04 \x01(\t\x12\x13\n\x06reason\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rduration_nsec\x18\x06 \x01(\x04H\x01\x88\x01\x01\x12\x1e\n\x11\x63onnect_attempted\x18\x07 \x01(\x08H\x02\x88\x01\x01\x42\t\n\x07_reasonB\x10\n\x0e_duration_nsecB\x14\n\x12_connect_attempted\"/\n\x16\x44\x65lnetworkeventRequest\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\"\x19\n\x17\x44\x65lnetworkeventResponse\"\xf6\x01\n\x1a\x43lnrestregisterpathRequest\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x12\n\nrpc_method\x18\x02 \x01(\t\x12H\n\x11rune_restrictions\x18\x03 \x01(\x0b\x32(.cln.ClnrestregisterpathRuneRestrictionsH\x00\x88\x01\x01\x12\x1a\n\rrune_required\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x18\n\x0bhttp_method\x18\x05 \x01(\tH\x02\x88\x01\x01\x42\x14\n\x12_rune_restrictionsB\x10\n\x0e_rune_requiredB\x0e\n\x0c_http_method\"\x1d\n\x1b\x43lnrestregisterpathResponse\"\xda\x01\n#ClnrestregisterpathRuneRestrictions\x12\x13\n\x06nodeid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06method\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x44\n\x06params\x18\x03 \x03(\x0b\x32\x34.cln.ClnrestregisterpathRuneRestrictions.ParamsEntry\x1a-\n\x0bParamsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\t\n\x07_nodeidB\t\n\x07_method\",\n\x18ListcurrencyratesRequest\x12\x10\n\x08\x63urrency\x18\x01 \x01(\t\"W\n\x19ListcurrencyratesResponse\x12:\n\rcurrencyrates\x18\x01 \x03(\x0b\x32#.cln.ListcurrencyratesCurrencyrates\"@\n\x1eListcurrencyratesCurrencyrates\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\x01\":\n\x16\x43urrencyconvertRequest\x12\x0e\n\x06\x61mount\x18\x01 \x01(\x01\x12\x10\n\x08\x63urrency\x18\x02 \x01(\t\"4\n\x17\x43urrencyconvertResponse\x12\x19\n\x04msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\"G\n\x13\x43urrencyrateRequest\x12\x10\n\x08\x63urrency\x18\x01 \x01(\t\x12\x13\n\x06source\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_source\"$\n\x14\x43urrencyrateResponse\x12\x0c\n\x04rate\x18\x01 \x01(\x01\"\x95\x02\n\x11SendamountRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12 \n\x06maxfee\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x0e\n\x06layers\x18\x04 \x03(\t\x12\x16\n\tretry_for\x18\x05 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x06 \x01(\rH\x02\x88\x01\x01\x12\x17\n\npayer_note\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x12\n\x05label\x18\x08 \x01(\tH\x04\x88\x01\x01\x42\t\n\x07_maxfeeB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\r\n\x0b_payer_noteB\x08\n\x06_label\"\xa7\x01\n\x12SendamountResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x14\n\x0c\x66\x61iled_parts\x18\x02 \x01(\x04\x12\x18\n\x10successful_parts\x18\x03 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"e\n\x12\x43reateproofRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12\x11\n\x04note\x18\x02 \x01(\tH\x00\x88\x01\x01\x12 \n\x07include\x18\x03 \x03(\x0b\x32\x0f.cln.ProofFieldB\x07\n\x05_note\"=\n\x13\x43reateproofResponse\x12&\n\x06proofs\x18\x01 \x03(\x0b\x32\x16.cln.CreateproofProofs\"\xb6\x01\n\x11\x43reateproofProofs\x12\x0e\n\x06\x62olt12\x18\x01 \x01(\t\x12.\n\x15offer_fields_included\x18\x02 \x03(\x0b\x32\x0f.cln.ProofField\x12/\n\x16invreq_fields_included\x18\x03 \x03(\x0b\x32\x0f.cln.ProofField\x12\x30\n\x17invoice_fields_included\x18\x04 \x03(\x0b\x32\x0f.cln.ProofField\"\xd7\x02\n\x0fXkeysendRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\x03 \x01(\tH\x00\x88\x01\x01\x12 \n\x06maxfee\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x0e\n\x06layers\x18\x05 \x03(\t\x12\x16\n\tretry_for\x18\x06 \x01(\rH\x02\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x07 \x01(\rH\x03\x88\x01\x01\x12\x36\n\textratlvs\x18\x08 \x03(\x0b\x32#.cln.XkeysendRequest.ExtratlvsEntry\x1a\x30\n\x0e\x45xtratlvsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x08\n\x06_labelB\t\n\x07_maxfeeB\x0c\n\n_retry_forB\x0b\n\t_maxdelay\"\xa5\x01\n\x10XkeysendResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x14\n\x0c\x66\x61iled_parts\x18\x02 \x01(\x04\x12\x18\n\x10successful_parts\x18\x03 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"3\n\x0fGracefulRequest\x12\x14\n\x07timeout\x18\x01 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_timeout\"H\n\x10GracefulResponse\x12\x1d\n\x15pending_htlc_expiries\x18\x01 \x03(\r\x12\x15\n\rpending_peers\x18\x02 \x03(\x0c\"\xc0\x04\n\x0fRecklessRequest\x12%\n\x0b\x61mount_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x35\n\x07\x63ommand\x18\x02 \x01(\x0e\x32$.cln.RecklessRequest.RecklessCommand\x12\x16\n\tdeveloper\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x0f\n\x07options\x18\x04 \x03(\t\x12\x17\n\npayer_note\x18\x05 \x01(\tH\x02\x88\x01\x01\x12@\n\nsubcommand\x18\x06 \x01(\x0e\x32\'.cln.RecklessRequest.RecklessSubcommandH\x03\x88\x01\x01\x12\x13\n\x06target\x18\x07 \x01(\tH\x04\x88\x01\x01\x12\x14\n\x07verbose\x18\x08 \x01(\x08H\x05\x88\x01\x01\"\x97\x01\n\x0fRecklessCommand\x12\x0b\n\x07INSTALL\x10\x00\x12\n\n\x06UPDATE\x10\x01\x12\r\n\tUNINSTALL\x10\x02\x12\x11\n\rLISTAVAILABLE\x10\x03\x12\x11\n\rLISTINSTALLED\x10\x04\x12\n\n\x06\x45NABLE\x10\x05\x12\x0b\n\x07\x44ISABLE\x10\x06\x12\n\n\x06SOURCE\x10\x07\x12\x07\n\x03TIP\x10\x08\x12\x08\n\x04HELP\x10\t\"3\n\x12RecklessSubcommand\x12\x07\n\x03\x41\x44\x44\x10\x00\x12\x08\n\x04LIST\x10\x01\x12\n\n\x06REMOVE\x10\x02\x42\x0e\n\x0c_amount_msatB\x0c\n\n_developerB\r\n\x0b_payer_noteB\r\n\x0b_subcommandB\t\n\x07_targetB\n\n\x08_verbose\"\xc8\x03\n\x10RecklessResponse\x12*\n\x07\x64isable\x18\x01 \x01(\x0b\x32\x14.cln.RecklessDisableH\x00\x88\x01\x01\x12(\n\x06\x65nable\x18\x02 \x01(\x0b\x32\x13.cln.RecklessEnableH\x01\x88\x01\x01\x12*\n\x07install\x18\x03 \x01(\x0b\x32\x14.cln.RecklessInstallH\x02\x88\x01\x01\x12\x31\n\rlistavailable\x18\x04 \x03(\x0b\x32\x1a.cln.RecklessListavailable\x12/\n\x0clistintalled\x18\x05 \x03(\x0b\x32\x19.cln.RecklessListintalled\x12\x0b\n\x03log\x18\x06 \x03(\t\x12\x0f\n\x07sources\x18\x07 \x03(\t\x12\"\n\x03tip\x18\x08 \x01(\x0b\x32\x10.cln.RecklessTipH\x03\x88\x01\x01\x12.\n\tuninstall\x18\t \x01(\x0b\x32\x16.cln.RecklessUninstallH\x04\x88\x01\x01\x12#\n\x06update\x18\n \x03(\x0b\x32\x13.cln.RecklessUpdateB\n\n\x08_disableB\t\n\x07_enableB\n\n\x08_installB\x06\n\x04_tipB\x0c\n\n_uninstall\"&\n\x0fRecklessDisable\x12\x13\n\x0bplugin_name\x18\x01 \x01(\t\"%\n\x0eRecklessEnable\x12\x13\n\x0bplugin_name\x18\x01 \x01(\t\"k\n\x0fRecklessInstall\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x1d\n\x10installed_commit\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x0bplugin_name\x18\x03 \x01(\tB\x13\n\x11_installed_commit\"\xf5\x02\n\x15RecklessListavailable\x12L\n\tinstaller\x18\x01 \x01(\x0e\x32\x39.cln.RecklessListavailable.RecklessListavailableInstaller\x12\x34\n\x08manifest\x18\x02 \x01(\x0b\x32\".cln.RecklessListavailableManifest\x12\x0e\n\x06origin\x18\x03 \x01(\t\x12\x13\n\x0bplugin_name\x18\x04 \x01(\t\"\xb2\x01\n\x1eRecklessListavailableInstaller\x12\x0c\n\x08PYTHONUV\x10\x00\x12\x13\n\x0fPYTHONUVSHEBANG\x10\x01\x12\x12\n\x0ePYTHONUVLEGACY\x10\x02\x12\x0e\n\nPOETRYVENV\x10\x03\x12\x13\n\x0fPYPROJECTVIAPIP\x10\x04\x12\n\n\x06PYTHON\x10\x05\x12\n\n\x06NODEJS\x10\x06\x12\x08\n\x04RUST\x10\x07\x12\x06\n\x02GO\x10\x08\x12\n\n\x06\x43USTOM\x10\t\"\xaa\x02\n\x1dRecklessListavailableManifest\x12\x14\n\x0c\x64\x65pendencies\x18\x01 \x03(\t\x12\x12\n\nentrypoint\x18\x02 \x01(\t\x12\x13\n\x0binstall_cmd\x18\x03 \x03(\t\x12\x18\n\x0binstallable\x18\x04 \x01(\x08H\x00\x88\x01\x01\x12\x1d\n\x10long_description\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x12\n\x05offer\x18\x06 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x10required_options\x18\x07 \x03(\t\x12\x1e\n\x11short_description\x18\x08 \x01(\tH\x03\x88\x01\x01\x42\x0e\n\x0c_installableB\x13\n\x11_long_descriptionB\x08\n\x06_offerB\x14\n\x12_short_description\"\xe2\x01\n\x14RecklessListintalled\x12\x19\n\x11installation_date\x18\x01 \x01(\t\x12\x19\n\x11installation_time\x18\x02 \x01(\x01\x12\x1d\n\x10installed_commit\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x17\n\x0foriginal_source\x18\x04 \x01(\t\x12\x13\n\x0bplugin_name\x18\x05 \x01(\t\x12\x1d\n\x10requested_commit\x18\x06 \x01(\tH\x01\x88\x01\x01\x42\x13\n\x11_installed_commitB\x13\n\x11_requested_commit\"\xa0\x01\n\x0bRecklessTip\x12 \n\x0b\x61mount_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66\x61iled_parts\x18\x03 \x01(\x04\x12\x18\n\x10payment_preimage\x18\x04 \x01(\x0c\x12\x18\n\x10successful_parts\x18\x05 \x01(\x04\"(\n\x11RecklessUninstall\x12\x13\n\x0bplugin_name\x18\x01 \x01(\t\"j\n\x0eRecklessUpdate\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x1d\n\x10installed_commit\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x0bplugin_name\x18\x03 \x01(\tB\x13\n\x11_installed_commit\"\x1e\n\x1cStreamBalanceSnapshotRequest\"\x86\x01\n\x1b\x42\x61lanceSnapshotNotification\x12\x0f\n\x07node_id\x18\x01 \x01(\x0c\x12\x13\n\x0b\x62lockheight\x18\x02 \x01(\r\x12\x11\n\ttimestamp\x18\x03 \x01(\r\x12.\n\x08\x61\x63\x63ounts\x18\x04 \x03(\x0b\x32\x1c.cln.BalanceSnapshotAccounts\"c\n\x17\x42\x61lanceSnapshotAccounts\x12\x12\n\naccount_id\x18\x01 \x01(\t\x12!\n\x0c\x62\x61lance_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\tcoin_type\x18\x03 \x01(\t\"\x19\n\x17StreamBlockAddedRequest\"6\n\x16\x42lockAddedNotification\x12\x0c\n\x04hash\x18\x01 \x01(\x0c\x12\x0e\n\x06height\x18\x02 \x01(\r\" \n\x1eStreamChannelOpenFailedRequest\"3\n\x1d\x43hannelOpenFailedNotification\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\"\x1c\n\x1aStreamChannelOpenedRequest\"w\n\x19\x43hannelOpenedNotification\x12\n\n\x02id\x18\x01 \x01(\x0c\x12!\n\x0c\x66unding_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66unding_txid\x18\x03 \x01(\x0c\x12\x15\n\rchannel_ready\x18\x04 \x01(\x08\"\"\n StreamChannelStateChangedRequest\"\xc1\x03\n\x1f\x43hannelStateChangedNotification\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x12\n\nchannel_id\x18\x02 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x04 \x01(\t\x12)\n\told_state\x18\x05 \x01(\x0e\x32\x11.cln.ChannelStateH\x01\x88\x01\x01\x12$\n\tnew_state\x18\x06 \x01(\x0e\x32\x11.cln.ChannelState\x12L\n\x05\x63\x61use\x18\x07 \x01(\x0e\x32=.cln.ChannelStateChangedNotification.ChannelStateChangedCause\x12\x14\n\x07message\x18\x08 \x01(\tH\x02\x88\x01\x01\"c\n\x18\x43hannelStateChangedCause\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05LOCAL\x10\x01\x12\x08\n\x04USER\x10\x02\x12\n\n\x06REMOTE\x10\x03\x12\x0c\n\x08PROTOCOL\x10\x04\x12\x0b\n\x07ONCHAIN\x10\x05\x42\x13\n\x11_short_channel_idB\x0c\n\n_old_stateB\n\n\x08_message\"\x16\n\x14StreamConnectRequest\"\xbe\x01\n\x17PeerConnectNotification\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x44\n\tdirection\x18\x02 \x01(\x0e\x32\x31.cln.PeerConnectNotification.PeerConnectDirection\x12(\n\x07\x61\x64\x64ress\x18\x03 \x01(\x0b\x32\x17.cln.PeerConnectAddress\"\'\n\x14PeerConnectDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\"\x9a\x02\n\x12PeerConnectAddress\x12\x41\n\titem_type\x18\x01 \x01(\x0e\x32..cln.PeerConnectAddress.PeerConnectAddressType\x12\x13\n\x06socket\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04port\x18\x04 \x01(\rH\x02\x88\x01\x01\"c\n\x16PeerConnectAddressType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x12\r\n\tWEBSOCKET\x10\x05\x42\t\n\x07_socketB\n\n\x08_addressB\x07\n\x05_port\"\x1b\n\x19StreamCoinMovementRequest\"\xaf\x0b\n\x18\x43oinMovementNotification\x12\x0f\n\x07version\x18\x01 \x01(\r\x12\x11\n\tcoin_type\x18\x02 \x01(\t\x12\x0f\n\x07node_id\x18\x03 \x01(\x0c\x12\x41\n\titem_type\x18\x04 \x01(\x0e\x32..cln.CoinMovementNotification.CoinMovementType\x12\x1a\n\rcreated_index\x18\x05 \x01(\x04H\x00\x88\x01\x01\x12\x12\n\naccount_id\x18\x06 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\ttimestamp\x18\t \x01(\x04\x12\x10\n\x04tags\x18\n \x03(\tB\x02\x18\x01\x12N\n\x0bprimary_tag\x18\x0b \x01(\x0e\x32\x34.cln.CoinMovementNotification.CoinMovementPrimaryTagH\x01\x88\x01\x01\x12\x12\n\nextra_tags\x18\x0c \x03(\t\x12\x19\n\x0cpayment_hash\x18\r \x01(\x0cH\x02\x88\x01\x01\x12\x14\n\x07part_id\x18\x0e \x01(\x04H\x03\x88\x01\x01\x12\x15\n\x08group_id\x18\x0f \x01(\x04H\x04\x88\x01\x01\x12#\n\tfees_msat\x18\x10 \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12 \n\x04utxo\x18\x11 \x01(\x0b\x32\r.cln.OutpointH\x06\x88\x01\x01\x12\x14\n\x07peer_id\x18\x12 \x01(\x0cH\x07\x88\x01\x01\x12 \n\x13originating_account\x18\x13 \x01(\tH\x08\x88\x01\x01\x12\x15\n\x04txid\x18\x14 \x01(\x0c\x42\x02\x18\x01H\t\x88\x01\x01\x12\x1a\n\rspending_txid\x18\x15 \x01(\x0cH\n\x88\x01\x01\x12\x1a\n\tutxo_txid\x18\x16 \x01(\x0c\x42\x02\x18\x01H\x0b\x88\x01\x01\x12\x15\n\x04vout\x18\x17 \x01(\rB\x02\x18\x01H\x0c\x88\x01\x01\x12%\n\x0boutput_msat\x18\x18 \x01(\x0b\x32\x0b.cln.AmountH\r\x88\x01\x01\x12\x19\n\x0coutput_count\x18\x19 \x01(\rH\x0e\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\x1a \x01(\rH\x0f\x88\x01\x01\"\xf7\x02\n\x16\x43oinMovementPrimaryTag\x12\x0b\n\x07\x44\x45POSIT\x10\x00\x12\x0e\n\nWITHDRAWAL\x10\x01\x12\x0b\n\x07PENALTY\x10\x02\x12\x10\n\x0c\x43HANNEL_OPEN\x10\x03\x12\x11\n\rCHANNEL_CLOSE\x10\x04\x12\x11\n\rDELAYED_TO_US\x10\x05\x12\x0b\n\x07HTLC_TX\x10\x06\x12\x10\n\x0cHTLC_TIMEOUT\x10\x07\x12\x10\n\x0cHTLC_FULFILL\x10\x08\x12\r\n\tTO_WALLET\x10\t\x12\n\n\x06\x41NCHOR\x10\n\x12\x0b\n\x07TO_THEM\x10\x0b\x12\r\n\tPENALIZED\x10\x0c\x12\n\n\x06STOLEN\x10\r\x12\x0b\n\x07IGNORED\x10\x0e\x12\x0c\n\x08TO_MINER\x10\x0f\x12\x0b\n\x07INVOICE\x10\x10\x12\n\n\x06ROUTED\x10\x11\x12\n\n\x06PUSHED\x10\x12\x12\r\n\tLEASE_FEE\x10\x13\x12\x14\n\x10\x43HANNEL_PROPOSED\x10\x14\x12\x0f\n\x0bPENALTY_ADJ\x10\x15\x12\x11\n\rJOURNAL_ENTRY\x10\x16\"2\n\x10\x43oinMovementType\x12\x0f\n\x0b\x43HANNEL_MVT\x10\x00\x12\r\n\tCHAIN_MVT\x10\x01\x42\x10\n\x0e_created_indexB\x0e\n\x0c_primary_tagB\x0f\n\r_payment_hashB\n\n\x08_part_idB\x0b\n\t_group_idB\x0c\n\n_fees_msatB\x07\n\x05_utxoB\n\n\x08_peer_idB\x16\n\x14_originating_accountB\x07\n\x05_txidB\x10\n\x0e_spending_txidB\x0c\n\n_utxo_txidB\x07\n\x05_voutB\x0e\n\x0c_output_msatB\x0f\n\r_output_countB\x0e\n\x0c_blockheight\"\x18\n\x16StreamCustomMsgRequest\"9\n\x15\x43ustomMsgNotification\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\" \n\x1eStreamDeprecatedOneshotRequest\"6\n\x1d\x44\x65precatedOneshotNotification\x12\x15\n\rdeprecated_ok\x18\x01 \x01(\x08\"\x19\n\x17StreamDisconnectRequest\"$\n\x16\x44isconnectNotification\x12\n\n\x02id\x18\x01 \x01(\x0c\"\x1b\n\x19StreamForwardEventRequest\"\x88\x05\n\x18\x46orwardEventNotification\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x12\n\nin_channel\x18\x02 \x01(\t\x12\x18\n\x0bout_channel\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1c\n\x07in_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\"\n\x08out_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\"\n\x08\x66\x65\x65_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12@\n\x06status\x18\x07 \x01(\x0e\x32\x30.cln.ForwardEventNotification.ForwardEventStatus\x12\x15\n\x08\x66\x61ilcode\x18\x08 \x01(\rH\x03\x88\x01\x01\x12\x17\n\nfailreason\x18\t \x01(\tH\x04\x88\x01\x01\x12\x43\n\x05style\x18\n \x01(\x0e\x32/.cln.ForwardEventNotification.ForwardEventStyleH\x05\x88\x01\x01\x12\x15\n\rreceived_time\x18\x0b \x01(\x01\x12\x1a\n\rresolved_time\x18\x0c \x01(\x01H\x06\x88\x01\x01\"L\n\x12\x46orwardEventStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\x10\n\x0cLOCAL_FAILED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\"(\n\x11\x46orwardEventStyle\x12\n\n\x06LEGACY\x10\x00\x12\x07\n\x03TLV\x10\x01\x42\x0e\n\x0c_out_channelB\x0b\n\t_out_msatB\x0b\n\t_fee_msatB\x0b\n\t_failcodeB\r\n\x0b_failreasonB\x08\n\x06_styleB\x10\n\x0e_resolved_time\"\x1e\n\x1cStreamInvoiceCreationRequest\"\x8b\x01\n\x1bInvoiceCreationNotification\x12\x1e\n\x04msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x10\n\x08preimage\x18\x02 \x01(\x0c\x12\r\n\x05label\x18\x03 \x01(\t\x12\x15\n\x08offer_id\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x42\x07\n\x05_msatB\x0b\n\t_offer_id\"\x1d\n\x1bStreamInvoicePaymentRequest\"\x8b\x01\n\x1aInvoicePaymentNotification\x12\x19\n\x04msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08preimage\x18\x02 \x01(\x0c\x12$\n\x08outpoint\x18\x03 \x01(\x0b\x32\r.cln.OutpointH\x00\x88\x01\x01\x12\r\n\x05label\x18\x04 \x01(\tB\x0b\n\t_outpoint\"\x12\n\x10StreamLogRequest\"\xca\x01\n\x0fLogNotification\x12,\n\x05level\x18\x01 \x01(\x0e\x32\x1d.cln.LogNotification.LogLevel\x12\x0c\n\x04time\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\t\x12\x0e\n\x06source\x18\x04 \x01(\t\x12\x0b\n\x03log\x18\x05 \x01(\t\"K\n\x08LogLevel\x12\x06\n\x02IO\x10\x00\x12\t\n\x05TRACE\x10\x01\x12\t\n\x05\x44\x45\x42UG\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\x0b\n\x07UNUSUAL\x10\x04\x12\n\n\x06\x42ROKEN\x10\x05\"&\n$StreamOnionMessageForwardFailRequest\"\xef\x01\n#OnionMessageForwardFailNotification\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x10\n\x08incoming\x18\x02 \x01(\x0c\x12\x10\n\x08path_key\x18\x03 \x01(\x0c\x12\x15\n\x08outgoing\x18\x04 \x01(\x0cH\x00\x88\x01\x01\x12\x19\n\x0cnext_node_id\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12&\n\x19next_short_channel_id_dir\x18\x06 \x01(\tH\x02\x88\x01\x01\x42\x0b\n\t_outgoingB\x0f\n\r_next_node_idB\x1c\n\x1a_next_short_channel_id_dir\"\"\n StreamOpenChannelPeerSigsRequest\"J\n\x1fOpenChannelPeerSigsNotification\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x13\n\x0bsigned_psbt\x18\x02 \x01(\t\"\x1c\n\x1aStreamPluginStartedRequest\"V\n\x19PluginStartedNotification\x12\x13\n\x0bplugin_name\x18\x01 \x01(\t\x12\x13\n\x0bplugin_path\x18\x02 \x01(\t\x12\x0f\n\x07methods\x18\x03 \x03(\t\"\x1c\n\x1aStreamPluginStoppedRequest\"V\n\x19PluginStoppedNotification\x12\x13\n\x0bplugin_name\x18\x01 \x01(\t\x12\x13\n\x0bplugin_path\x18\x02 \x01(\t\x12\x0f\n\x07methods\x18\x03 \x03(\t\"\x1d\n\x1bStreamSendPayFailureRequest\"b\n\x1aSendPayFailureNotification\x12\x0c\n\x04\x63ode\x18\x01 \x01(\x12\x12\x0f\n\x07message\x18\x02 \x01(\t\x12%\n\x04\x64\x61ta\x18\x03 \x01(\x0b\x32\x17.cln.SendpayFailureData\"\xc1\t\n\x12SendpayFailureData\x12\x1a\n\rcreated_index\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x0f\n\x02id\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x12\x14\n\x07groupid\x18\x04 \x01(\x04H\x03\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x13\n\x06partid\x18\x06 \x01(\x04H\x05\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x07 \x01(\x0cH\x06\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x07\x88\x01\x01\x12*\n\x10\x61mount_sent_msat\x18\t \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x12\x17\n\ncreated_at\x18\n \x01(\x04H\t\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0b \x01(\x04H\n\x88\x01\x01\x12\x45\n\x06status\x18\x0c \x01(\x0e\x32\x30.cln.SendpayFailureData.SendpayFailureDataStatusH\x0b\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x0c\x88\x01\x01\x12\x12\n\x05label\x18\x0e \x01(\tH\r\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0f \x01(\tH\x0e\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x10 \x01(\tH\x0f\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x11 \x01(\tH\x10\x88\x01\x01\x12\x17\n\nerroronion\x18\x12 \x01(\x0cH\x11\x88\x01\x01\x12\x17\n\nonionreply\x18\x13 \x01(\x0cH\x12\x88\x01\x01\x12\x19\n\x0c\x65rring_index\x18\x14 \x01(\rH\x13\x88\x01\x01\x12\x15\n\x08\x66\x61ilcode\x18\x15 \x01(\rH\x14\x88\x01\x01\x12\x19\n\x0c\x66\x61ilcodename\x18\x16 \x01(\tH\x15\x88\x01\x01\x12\x18\n\x0b\x65rring_node\x18\x17 \x01(\x0cH\x16\x88\x01\x01\x12\x1b\n\x0e\x65rring_channel\x18\x18 \x01(\tH\x17\x88\x01\x01\x12\x1d\n\x10\x65rring_direction\x18\x19 \x01(\rH\x18\x88\x01\x01\x12\x18\n\x0braw_message\x18\x1a \x01(\x0cH\x19\x88\x01\x01\"A\n\x18SendpayFailureDataStatus\x12\n\n\x06\x46\x41ILED\x10\x00\x12\x0b\n\x07PENDING\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x10\n\x0e_created_indexB\x05\n\x03_idB\x0f\n\r_payment_hashB\n\n\x08_groupidB\x10\n\x0e_updated_indexB\t\n\x07_partidB\x0e\n\x0c_destinationB\x0e\n\x0c_amount_msatB\x13\n\x11_amount_sent_msatB\r\n\x0b_created_atB\x0f\n\r_completed_atB\t\n\x07_statusB\x13\n\x11_payment_preimageB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_descriptionB\r\n\x0b_erroronionB\r\n\x0b_onionreplyB\x0f\n\r_erring_indexB\x0b\n\t_failcodeB\x0f\n\r_failcodenameB\x0e\n\x0c_erring_nodeB\x11\n\x0f_erring_channelB\x13\n\x11_erring_directionB\x0e\n\x0c_raw_message\"\x1d\n\x1bStreamSendPaySuccessRequest\"\xcc\x05\n\x1aSendPaySuccessNotification\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\n\n\x02id\x18\x02 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x0f\n\x07groupid\x18\x04 \x01(\x04\x12\x1a\n\rupdated_index\x18\x05 \x01(\x04H\x00\x88\x01\x01\x12\x13\n\x06partid\x18\x06 \x01(\x04H\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x07 \x01(\x0cH\x02\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12%\n\x10\x61mount_sent_msat\x18\t \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\ncreated_at\x18\n \x01(\x04\x12\x19\n\x0c\x63ompleted_at\x18\x0b \x01(\x04H\x04\x88\x01\x01\x12\x44\n\x06status\x18\x0c \x01(\x0e\x32\x34.cln.SendPaySuccessNotification.SendpaySuccessStatus\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x05\x88\x01\x01\x12\x12\n\x05label\x18\x0e \x01(\tH\x06\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0f \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x10 \x01(\tH\x08\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x11 \x01(\tH\t\x88\x01\x01\x12\x17\n\nerroronion\x18\x12 \x01(\x0cH\n\x88\x01\x01\"$\n\x14SendpaySuccessStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x42\x10\n\x0e_updated_indexB\t\n\x07_partidB\x0e\n\x0c_destinationB\x0e\n\x0c_amount_msatB\x0f\n\r_completed_atB\x13\n\x11_payment_preimageB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_descriptionB\r\n\x0b_erroronion\"\x17\n\x15StreamShutdownRequest\"\x16\n\x14ShutdownNotification\"\x16\n\x14StreamWarningRequest\"\xae\x01\n\x13WarningNotification\x12\x34\n\x05level\x18\x01 \x01(\x0e\x32%.cln.WarningNotification.WarningLevel\x12\x0c\n\x04time\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\t\x12\x0e\n\x06source\x18\x04 \x01(\t\x12\x0b\n\x03log\x18\x05 \x01(\t\"#\n\x0cWarningLevel\x12\x08\n\x04WARN\x10\x00\x12\t\n\x05\x45RROR\x10\x01\"\x19\n\x17StreamPayPartEndRequest\"\xf1\x03\n\x16PayPartEndNotification\x12<\n\x06status\x18\x01 \x01(\x0e\x32,.cln.PayPartEndNotification.PayPartEndStatus\x12\x10\n\x08\x64uration\x18\x02 \x01(\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x0f\n\x07groupid\x18\x04 \x01(\x04\x12\x0e\n\x06partid\x18\x05 \x01(\x04\x12\x17\n\nfailed_msg\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12\x1b\n\x0e\x66\x61iled_node_id\x18\x07 \x01(\x0cH\x01\x88\x01\x01\x12$\n\x17\x66\x61iled_short_channel_id\x18\x08 \x01(\tH\x02\x88\x01\x01\x12\x1d\n\x10\x66\x61iled_direction\x18\t \x01(\rH\x03\x88\x01\x01\x12\x17\n\nerror_code\x18\n \x01(\rH\x04\x88\x01\x01\x12\x1a\n\rerror_message\x18\x0b \x01(\tH\x05\x88\x01\x01\",\n\x10PayPartEndStatus\x12\x0b\n\x07SUCCESS\x10\x00\x12\x0b\n\x07\x46\x41ILURE\x10\x01\x42\r\n\x0b_failed_msgB\x11\n\x0f_failed_node_idB\x1a\n\x18_failed_short_channel_idB\x13\n\x11_failed_directionB\r\n\x0b_error_codeB\x10\n\x0e_error_message\"\x1b\n\x19StreamPayPartStartRequest\"\xc2\x01\n\x18PayPartStartNotification\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x0f\n\x07groupid\x18\x02 \x01(\x04\x12\x0e\n\x06partid\x18\x03 \x01(\x04\x12\'\n\x12total_payment_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12!\n\x0c\x61ttempt_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x04hops\x18\x06 \x03(\x0b\x32\x15.cln.PayPartStartHops\"\x9f\x01\n\x10PayPartStartHops\x12\x11\n\tnext_node\x18\x01 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x02 \x01(\t\x12\x11\n\tdirection\x18\x03 \x01(\r\x12$\n\x0f\x63hannel_in_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x63hannel_out_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"\x1a\n\x18StreamRecklessLogRequest\"\xda\x01\n\x17RecklessLogNotification\x12<\n\x05level\x18\x01 \x01(\x0e\x32-.cln.RecklessLogNotification.RecklessLogLevel\x12\x0b\n\x03log\x18\x02 \x01(\t\x12\x0c\n\x04time\x18\x03 \x01(\t\x12\x11\n\ttimestamp\x18\x04 \x01(\t\"S\n\x10RecklessLogLevel\x12\x06\n\x02IO\x10\x00\x12\t\n\x05TRACE\x10\x01\x12\t\n\x05\x44\x45\x42UG\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\x0b\n\x07UNUSUAL\x10\x04\x12\n\n\x06\x42ROKEN\x10\x05\x32\xcei\n\x04Node\x12\x36\n\x07Getinfo\x12\x13.cln.GetinfoRequest\x1a\x14.cln.GetinfoResponse\"\x00\x12<\n\tListPeers\x12\x15.cln.ListpeersRequest\x1a\x16.cln.ListpeersResponse\"\x00\x12<\n\tListFunds\x12\x15.cln.ListfundsRequest\x1a\x16.cln.ListfundsResponse\"\x00\x12\x36\n\x07SendPay\x12\x13.cln.SendpayRequest\x1a\x14.cln.SendpayResponse\"\x00\x12\x45\n\x0cListChannels\x12\x18.cln.ListchannelsRequest\x1a\x19.cln.ListchannelsResponse\"\x00\x12<\n\tAddGossip\x12\x15.cln.AddgossipRequest\x1a\x16.cln.AddgossipResponse\"\x00\x12H\n\rAddPsbtOutput\x12\x19.cln.AddpsbtoutputRequest\x1a\x1a.cln.AddpsbtoutputResponse\"\x00\x12H\n\rAutoCleanOnce\x12\x19.cln.AutocleanonceRequest\x1a\x1a.cln.AutocleanonceResponse\"\x00\x12N\n\x0f\x41utoCleanStatus\x12\x1b.cln.AutocleanstatusRequest\x1a\x1c.cln.AutocleanstatusResponse\"\x00\x12\x45\n\x0c\x43heckMessage\x12\x18.cln.CheckmessageRequest\x1a\x19.cln.CheckmessageResponse\"\x00\x12\x30\n\x05\x43lose\x12\x11.cln.CloseRequest\x1a\x12.cln.CloseResponse\"\x00\x12:\n\x0b\x43onnectPeer\x12\x13.cln.ConnectRequest\x1a\x14.cln.ConnectResponse\"\x00\x12H\n\rCreateInvoice\x12\x19.cln.CreateinvoiceRequest\x1a\x1a.cln.CreateinvoiceResponse\"\x00\x12<\n\tDatastore\x12\x15.cln.DatastoreRequest\x1a\x16.cln.DatastoreResponse\"\x00\x12K\n\x0e\x44\x61tastoreUsage\x12\x1a.cln.DatastoreusageRequest\x1a\x1b.cln.DatastoreusageResponse\"\x00\x12\x42\n\x0b\x43reateOnion\x12\x17.cln.CreateonionRequest\x1a\x18.cln.CreateonionResponse\"\x00\x12\x45\n\x0c\x44\x65lDatastore\x12\x18.cln.DeldatastoreRequest\x1a\x19.cln.DeldatastoreResponse\"\x00\x12?\n\nDelInvoice\x12\x16.cln.DelinvoiceRequest\x1a\x17.cln.DelinvoiceResponse\"\x00\x12Q\n\x10\x44\x65vForgetChannel\x12\x1c.cln.DevforgetchannelRequest\x1a\x1d.cln.DevforgetchannelResponse\"\x00\x12Q\n\x10\x45mergencyRecover\x12\x1c.cln.EmergencyrecoverRequest\x1a\x1d.cln.EmergencyrecoverResponse\"\x00\x12\x66\n\x17GetEmergencyRecoverData\x12#.cln.GetemergencyrecoverdataRequest\x1a$.cln.GetemergencyrecoverdataResponse\"\x00\x12\x45\n\x0c\x45xposeSecret\x12\x18.cln.ExposesecretRequest\x1a\x19.cln.ExposesecretResponse\"\x00\x12\x36\n\x07Recover\x12\x13.cln.RecoverRequest\x1a\x14.cln.RecoverResponse\"\x00\x12K\n\x0eRecoverChannel\x12\x1a.cln.RecoverchannelRequest\x1a\x1b.cln.RecoverchannelResponse\"\x00\x12\x36\n\x07Invoice\x12\x13.cln.InvoiceRequest\x1a\x14.cln.InvoiceResponse\"\x00\x12Q\n\x14\x43reateInvoiceRequest\x12\x1a.cln.InvoicerequestRequest\x1a\x1b.cln.InvoicerequestResponse\"\x00\x12`\n\x15\x44isableInvoiceRequest\x12!.cln.DisableinvoicerequestRequest\x1a\".cln.DisableinvoicerequestResponse\"\x00\x12Z\n\x13ListInvoiceRequests\x12\x1f.cln.ListinvoicerequestsRequest\x1a .cln.ListinvoicerequestsResponse\"\x00\x12H\n\rListDatastore\x12\x19.cln.ListdatastoreRequest\x1a\x1a.cln.ListdatastoreResponse\"\x00\x12\x45\n\x0cListInvoices\x12\x18.cln.ListinvoicesRequest\x1a\x19.cln.ListinvoicesResponse\"\x00\x12<\n\tSendOnion\x12\x15.cln.SendonionRequest\x1a\x16.cln.SendonionResponse\"\x00\x12\x45\n\x0cListSendPays\x12\x18.cln.ListsendpaysRequest\x1a\x19.cln.ListsendpaysResponse\"\x00\x12Q\n\x10ListTransactions\x12\x1c.cln.ListtransactionsRequest\x1a\x1d.cln.ListtransactionsResponse\"\x00\x12?\n\nMakeSecret\x12\x16.cln.MakesecretRequest\x1a\x17.cln.MakesecretResponse\"\x00\x12*\n\x03Pay\x12\x0f.cln.PayRequest\x1a\x10.cln.PayResponse\"\x00\x12<\n\tListNodes\x12\x15.cln.ListnodesRequest\x1a\x16.cln.ListnodesResponse\"\x00\x12K\n\x0eWaitAnyInvoice\x12\x1a.cln.WaitanyinvoiceRequest\x1a\x1b.cln.WaitanyinvoiceResponse\"\x00\x12\x42\n\x0bWaitInvoice\x12\x17.cln.WaitinvoiceRequest\x1a\x18.cln.WaitinvoiceResponse\"\x00\x12\x42\n\x0bWaitSendPay\x12\x17.cln.WaitsendpayRequest\x1a\x18.cln.WaitsendpayResponse\"\x00\x12\x36\n\x07NewAddr\x12\x13.cln.NewaddrRequest\x1a\x14.cln.NewaddrResponse\"\x00\x12\x39\n\x08Withdraw\x12\x14.cln.WithdrawRequest\x1a\x15.cln.WithdrawResponse\"\x00\x12\x36\n\x07KeySend\x12\x13.cln.KeysendRequest\x1a\x14.cln.KeysendResponse\"\x00\x12\x39\n\x08\x46undPsbt\x12\x14.cln.FundpsbtRequest\x1a\x15.cln.FundpsbtResponse\"\x00\x12\x39\n\x08SendPsbt\x12\x14.cln.SendpsbtRequest\x1a\x15.cln.SendpsbtResponse\"\x00\x12\x39\n\x08SignPsbt\x12\x14.cln.SignpsbtRequest\x1a\x15.cln.SignpsbtResponse\"\x00\x12\x39\n\x08UtxoPsbt\x12\x14.cln.UtxopsbtRequest\x1a\x15.cln.UtxopsbtResponse\"\x00\x12<\n\tTxDiscard\x12\x15.cln.TxdiscardRequest\x1a\x16.cln.TxdiscardResponse\"\x00\x12<\n\tTxPrepare\x12\x15.cln.TxprepareRequest\x1a\x16.cln.TxprepareResponse\"\x00\x12\x33\n\x06TxSend\x12\x12.cln.TxsendRequest\x1a\x13.cln.TxsendResponse\"\x00\x12Q\n\x10ListPeerChannels\x12\x1c.cln.ListpeerchannelsRequest\x1a\x1d.cln.ListpeerchannelsResponse\"\x00\x12W\n\x12ListClosedChannels\x12\x1e.cln.ListclosedchannelsRequest\x1a\x1f.cln.ListclosedchannelsResponse\"\x00\x12\x33\n\x06\x44\x65\x63ode\x12\x12.cln.DecodeRequest\x1a\x13.cln.DecodeResponse\"\x00\x12\x33\n\x06\x44\x65lPay\x12\x12.cln.DelpayRequest\x1a\x13.cln.DelpayResponse\"\x00\x12?\n\nDelForward\x12\x16.cln.DelforwardRequest\x1a\x17.cln.DelforwardResponse\"\x00\x12\x45\n\x0c\x44isableOffer\x12\x18.cln.DisableofferRequest\x1a\x19.cln.DisableofferResponse\"\x00\x12\x42\n\x0b\x45nableOffer\x12\x17.cln.EnableofferRequest\x1a\x18.cln.EnableofferResponse\"\x00\x12?\n\nDisconnect\x12\x16.cln.DisconnectRequest\x1a\x17.cln.DisconnectResponse\"\x00\x12\x39\n\x08\x46\x65\x65rates\x12\x14.cln.FeeratesRequest\x1a\x15.cln.FeeratesResponse\"\x00\x12\x42\n\x0b\x46\x65tchBip353\x12\x17.cln.Fetchbip353Request\x1a\x18.cln.Fetchbip353Response\"\x00\x12\x45\n\x0c\x46\x65tchInvoice\x12\x18.cln.FetchinvoiceRequest\x1a\x19.cln.FetchinvoiceResponse\"\x00\x12\x63\n\x16\x43\x61ncelRecurringInvoice\x12\".cln.CancelrecurringinvoiceRequest\x1a#.cln.CancelrecurringinvoiceResponse\"\x00\x12T\n\x11\x46undChannelCancel\x12\x1d.cln.FundchannelCancelRequest\x1a\x1e.cln.FundchannelCancelResponse\"\x00\x12Z\n\x13\x46undChannelComplete\x12\x1f.cln.FundchannelCompleteRequest\x1a .cln.FundchannelCompleteResponse\"\x00\x12\x42\n\x0b\x46undChannel\x12\x17.cln.FundchannelRequest\x1a\x18.cln.FundchannelResponse\"\x00\x12Q\n\x10\x46undChannelStart\x12\x1c.cln.FundchannelStartRequest\x1a\x1d.cln.FundchannelStartResponse\"\x00\x12\x33\n\x06GetLog\x12\x12.cln.GetlogRequest\x1a\x13.cln.GetlogResponse\"\x00\x12\x45\n\x0c\x46underUpdate\x12\x18.cln.FunderupdateRequest\x1a\x19.cln.FunderupdateResponse\"\x00\x12\x39\n\x08GetRoute\x12\x14.cln.GetrouteRequest\x1a\x15.cln.GetrouteResponse\"\x00\x12H\n\rListAddresses\x12\x19.cln.ListaddressesRequest\x1a\x1a.cln.ListaddressesResponse\"\x00\x12\x45\n\x0cListForwards\x12\x18.cln.ListforwardsRequest\x1a\x19.cln.ListforwardsResponse\"\x00\x12?\n\nListOffers\x12\x16.cln.ListoffersRequest\x1a\x17.cln.ListoffersResponse\"\x00\x12\x39\n\x08ListPays\x12\x14.cln.ListpaysRequest\x1a\x15.cln.ListpaysResponse\"\x00\x12<\n\tListHtlcs\x12\x15.cln.ListhtlcsRequest\x1a\x16.cln.ListhtlcsResponse\"\x00\x12Q\n\x10MultiFundChannel\x12\x1c.cln.MultifundchannelRequest\x1a\x1d.cln.MultifundchannelResponse\"\x00\x12H\n\rMultiWithdraw\x12\x19.cln.MultiwithdrawRequest\x1a\x1a.cln.MultiwithdrawResponse\"\x00\x12\x30\n\x05Offer\x12\x11.cln.OfferRequest\x1a\x12.cln.OfferResponse\"\x00\x12Q\n\x10OpenChannelAbort\x12\x1c.cln.OpenchannelAbortRequest\x1a\x1d.cln.OpenchannelAbortResponse\"\x00\x12N\n\x0fOpenChannelBump\x12\x1b.cln.OpenchannelBumpRequest\x1a\x1c.cln.OpenchannelBumpResponse\"\x00\x12N\n\x0fOpenChannelInit\x12\x1b.cln.OpenchannelInitRequest\x1a\x1c.cln.OpenchannelInitResponse\"\x00\x12T\n\x11OpenChannelSigned\x12\x1d.cln.OpenchannelSignedRequest\x1a\x1e.cln.OpenchannelSignedResponse\"\x00\x12T\n\x11OpenChannelUpdate\x12\x1d.cln.OpenchannelUpdateRequest\x1a\x1e.cln.OpenchannelUpdateResponse\"\x00\x12-\n\x04Ping\x12\x10.cln.PingRequest\x1a\x11.cln.PingResponse\"\x00\x12\x33\n\x06Plugin\x12\x12.cln.PluginRequest\x1a\x13.cln.PluginResponse\"\x00\x12H\n\rRenePayStatus\x12\x19.cln.RenepaystatusRequest\x1a\x1a.cln.RenepaystatusResponse\"\x00\x12\x36\n\x07RenePay\x12\x13.cln.RenepayRequest\x1a\x14.cln.RenepayResponse\"\x00\x12H\n\rReserveInputs\x12\x19.cln.ReserveinputsRequest\x1a\x1a.cln.ReserveinputsResponse\"\x00\x12H\n\rSendCustomMsg\x12\x19.cln.SendcustommsgRequest\x1a\x1a.cln.SendcustommsgResponse\"\x00\x12\x42\n\x0bSendInvoice\x12\x17.cln.SendinvoiceRequest\x1a\x18.cln.SendinvoiceResponse\"\x00\x12?\n\nSetChannel\x12\x16.cln.SetchannelRequest\x1a\x17.cln.SetchannelResponse\"\x00\x12<\n\tSetConfig\x12\x15.cln.SetconfigRequest\x1a\x16.cln.SetconfigResponse\"\x00\x12K\n\x0eSetPsbtVersion\x12\x1a.cln.SetpsbtversionRequest\x1a\x1b.cln.SetpsbtversionResponse\"\x00\x12\x42\n\x0bSignInvoice\x12\x17.cln.SigninvoiceRequest\x1a\x18.cln.SigninvoiceResponse\"\x00\x12\x42\n\x0bSignMessage\x12\x17.cln.SignmessageRequest\x1a\x18.cln.SignmessageResponse\"\x00\x12?\n\nSpliceInit\x12\x16.cln.SpliceInitRequest\x1a\x17.cln.SpliceInitResponse\"\x00\x12\x45\n\x0cSpliceSigned\x12\x18.cln.SpliceSignedRequest\x1a\x19.cln.SpliceSignedResponse\"\x00\x12\x45\n\x0cSpliceUpdate\x12\x18.cln.SpliceUpdateRequest\x1a\x19.cln.SpliceUpdateResponse\"\x00\x12\x39\n\x08SpliceIn\x12\x14.cln.SpliceinRequest\x1a\x15.cln.SpliceinResponse\"\x00\x12<\n\tSpliceOut\x12\x15.cln.SpliceoutRequest\x1a\x16.cln.SpliceoutResponse\"\x00\x12<\n\tDevSplice\x12\x15.cln.DevspliceRequest\x1a\x16.cln.DevspliceResponse\"\x00\x12N\n\x0fUnreserveInputs\x12\x1b.cln.UnreserveinputsRequest\x1a\x1c.cln.UnreserveinputsResponse\"\x00\x12H\n\rUpgradeWallet\x12\x19.cln.UpgradewalletRequest\x1a\x1a.cln.UpgradewalletResponse\"\x00\x12N\n\x0fWaitBlockHeight\x12\x1b.cln.WaitblockheightRequest\x1a\x1c.cln.WaitblockheightResponse\"\x00\x12-\n\x04Wait\x12\x10.cln.WaitRequest\x1a\x11.cln.WaitResponse\"\x00\x12\x42\n\x0bListConfigs\x12\x17.cln.ListconfigsRequest\x1a\x18.cln.ListconfigsResponse\"\x00\x12-\n\x04Stop\x12\x10.cln.StopRequest\x1a\x11.cln.StopResponse\"\x00\x12-\n\x04Help\x12\x10.cln.HelpRequest\x1a\x11.cln.HelpResponse\"\x00\x12T\n\x11PreApproveKeysend\x12\x1d.cln.PreapprovekeysendRequest\x1a\x1e.cln.PreapprovekeysendResponse\"\x00\x12T\n\x11PreApproveInvoice\x12\x1d.cln.PreapproveinvoiceRequest\x1a\x1e.cln.PreapproveinvoiceResponse\"\x00\x12\x45\n\x0cStaticBackup\x12\x18.cln.StaticbackupRequest\x1a\x19.cln.StaticbackupResponse\"\x00\x12N\n\x0f\x42kprChannelsApy\x12\x1b.cln.BkprchannelsapyRequest\x1a\x1c.cln.BkprchannelsapyResponse\"\x00\x12T\n\x11\x42kprDumpIncomeCsv\x12\x1d.cln.BkprdumpincomecsvRequest\x1a\x1e.cln.BkprdumpincomecsvResponse\"\x00\x12\x42\n\x0b\x42kprInspect\x12\x17.cln.BkprinspectRequest\x1a\x18.cln.BkprinspectResponse\"\x00\x12`\n\x15\x42kprListAccountEvents\x12!.cln.BkprlistaccounteventsRequest\x1a\".cln.BkprlistaccounteventsResponse\"\x00\x12Q\n\x10\x42kprListBalances\x12\x1c.cln.BkprlistbalancesRequest\x1a\x1d.cln.BkprlistbalancesResponse\"\x00\x12K\n\x0e\x42kprListIncome\x12\x1a.cln.BkprlistincomeRequest\x1a\x1b.cln.BkprlistincomeResponse\"\x00\x12{\n\x1e\x42kprEditDescriptionByPaymentId\x12*.cln.BkpreditdescriptionbypaymentidRequest\x1a+.cln.BkpreditdescriptionbypaymentidResponse\"\x00\x12x\n\x1d\x42kprEditDescriptionByOutpoint\x12).cln.BkpreditdescriptionbyoutpointRequest\x1a*.cln.BkpreditdescriptionbyoutpointResponse\"\x00\x12?\n\nBkprReport\x12\x16.cln.BkprreportRequest\x1a\x17.cln.BkprreportResponse\"\x00\x12H\n\rBlacklistRune\x12\x19.cln.BlacklistruneRequest\x1a\x1a.cln.BlacklistruneResponse\"\x00\x12<\n\tCheckRune\x12\x15.cln.CheckruneRequest\x1a\x16.cln.CheckruneResponse\"\x00\x12?\n\nCreateRune\x12\x16.cln.CreateruneRequest\x1a\x17.cln.CreateruneResponse\"\x00\x12<\n\tShowRunes\x12\x15.cln.ShowrunesRequest\x1a\x16.cln.ShowrunesResponse\"\x00\x12Q\n\x10\x41skReneUnreserve\x12\x1c.cln.AskreneunreserveRequest\x1a\x1d.cln.AskreneunreserveResponse\"\x00\x12T\n\x11\x41skReneListLayers\x12\x1d.cln.AskrenelistlayersRequest\x1a\x1e.cln.AskrenelistlayersResponse\"\x00\x12W\n\x12\x41skReneCreateLayer\x12\x1e.cln.AskrenecreatelayerRequest\x1a\x1f.cln.AskrenecreatelayerResponse\"\x00\x12W\n\x12\x41skReneRemoveLayer\x12\x1e.cln.AskreneremovelayerRequest\x1a\x1f.cln.AskreneremovelayerResponse\"\x00\x12o\n\x1a\x41skReneRemoveChannelUpdate\x12&.cln.AskreneremovechannelupdateRequest\x1a\'.cln.AskreneremovechannelupdateResponse\"\x00\x12K\n\x0e\x41skReneReserve\x12\x1a.cln.AskrenereserveRequest\x1a\x1b.cln.AskrenereserveResponse\"\x00\x12?\n\nAskReneAge\x12\x16.cln.AskreneageRequest\x1a\x17.cln.AskreneageResponse\"\x00\x12<\n\tGetRoutes\x12\x15.cln.GetroutesRequest\x1a\x16.cln.GetroutesResponse\"\x00\x12W\n\x12\x41skReneDisableNode\x12\x1e.cln.AskrenedisablenodeRequest\x1a\x1f.cln.AskrenedisablenodeResponse\"\x00\x12]\n\x14\x41skReneInformChannel\x12 .cln.AskreneinformchannelRequest\x1a!.cln.AskreneinformchannelResponse\"\x00\x12]\n\x14\x41skReneCreateChannel\x12 .cln.AskrenecreatechannelRequest\x1a!.cln.AskrenecreatechannelResponse\"\x00\x12]\n\x14\x41skReneUpdateChannel\x12 .cln.AskreneupdatechannelRequest\x1a!.cln.AskreneupdatechannelResponse\"\x00\x12W\n\x12\x41skReneBiasChannel\x12\x1e.cln.AskrenebiaschannelRequest\x1a\x1f.cln.AskrenebiaschannelResponse\"\x00\x12N\n\x0f\x41skreneBiasNode\x12\x1b.cln.AskrenebiasnodeRequest\x1a\x1c.cln.AskrenebiasnodeResponse\"\x00\x12\x66\n\x17\x41skReneListReservations\x12#.cln.AskrenelistreservationsRequest\x1a$.cln.AskrenelistreservationsResponse\"\x00\x12W\n\x12InjectPaymentOnion\x12\x1e.cln.InjectpaymentonionRequest\x1a\x1f.cln.InjectpaymentonionResponse\"\x00\x12W\n\x12InjectOnionMessage\x12\x1e.cln.InjectonionmessageRequest\x1a\x1f.cln.InjectonionmessageResponse\"\x00\x12-\n\x04Xpay\x12\x10.cln.XpayRequest\x1a\x11.cln.XpayResponse\"\x00\x12W\n\x12SignMessageWithKey\x12\x1e.cln.SignmessagewithkeyRequest\x1a\x1f.cln.SignmessagewithkeyResponse\"\x00\x12Q\n\x10ListChannelMoves\x12\x1c.cln.ListchannelmovesRequest\x1a\x1d.cln.ListchannelmovesResponse\"\x00\x12K\n\x0eListChainMoves\x12\x1a.cln.ListchainmovesRequest\x1a\x1b.cln.ListchainmovesResponse\"\x00\x12T\n\x11ListNetworkEvents\x12\x1d.cln.ListnetworkeventsRequest\x1a\x1e.cln.ListnetworkeventsResponse\"\x00\x12N\n\x0f\x44\x65lNetworkEvent\x12\x1b.cln.DelnetworkeventRequest\x1a\x1c.cln.DelnetworkeventResponse\"\x00\x12Z\n\x13\x43lnrestRegisterPath\x12\x1f.cln.ClnrestregisterpathRequest\x1a .cln.ClnrestregisterpathResponse\"\x00\x12T\n\x11ListCurrencyRates\x12\x1d.cln.ListcurrencyratesRequest\x1a\x1e.cln.ListcurrencyratesResponse\"\x00\x12N\n\x0f\x43urrencyConvert\x12\x1b.cln.CurrencyconvertRequest\x1a\x1c.cln.CurrencyconvertResponse\"\x00\x12\x45\n\x0c\x43urrencyRate\x12\x18.cln.CurrencyrateRequest\x1a\x19.cln.CurrencyrateResponse\"\x00\x12?\n\nSendAmount\x12\x16.cln.SendamountRequest\x1a\x17.cln.SendamountResponse\"\x00\x12\x42\n\x0b\x43reateProof\x12\x17.cln.CreateproofRequest\x1a\x18.cln.CreateproofResponse\"\x00\x12\x39\n\x08Xkeysend\x12\x14.cln.XkeysendRequest\x1a\x15.cln.XkeysendResponse\"\x00\x12\x39\n\x08Graceful\x12\x14.cln.GracefulRequest\x1a\x15.cln.GracefulResponse\"\x00\x12\x39\n\x08Reckless\x12\x14.cln.RecklessRequest\x1a\x15.cln.RecklessResponse\"\x00\x12\x63\n\x18SubscribeBalanceSnapshot\x12!.cln.StreamBalanceSnapshotRequest\x1a .cln.BalanceSnapshotNotification\"\x00\x30\x01\x12T\n\x13SubscribeBlockAdded\x12\x1c.cln.StreamBlockAddedRequest\x1a\x1b.cln.BlockAddedNotification\"\x00\x30\x01\x12i\n\x1aSubscribeChannelOpenFailed\x12#.cln.StreamChannelOpenFailedRequest\x1a\".cln.ChannelOpenFailedNotification\"\x00\x30\x01\x12]\n\x16SubscribeChannelOpened\x12\x1f.cln.StreamChannelOpenedRequest\x1a\x1e.cln.ChannelOpenedNotification\"\x00\x30\x01\x12o\n\x1cSubscribeChannelStateChanged\x12%.cln.StreamChannelStateChangedRequest\x1a$.cln.ChannelStateChangedNotification\"\x00\x30\x01\x12O\n\x10SubscribeConnect\x12\x19.cln.StreamConnectRequest\x1a\x1c.cln.PeerConnectNotification\"\x00\x30\x01\x12Z\n\x15SubscribeCoinMovement\x12\x1e.cln.StreamCoinMovementRequest\x1a\x1d.cln.CoinMovementNotification\"\x00\x30\x01\x12Q\n\x12SubscribeCustomMsg\x12\x1b.cln.StreamCustomMsgRequest\x1a\x1a.cln.CustomMsgNotification\"\x00\x30\x01\x12i\n\x1aSubscribeDeprecatedOneshot\x12#.cln.StreamDeprecatedOneshotRequest\x1a\".cln.DeprecatedOneshotNotification\"\x00\x30\x01\x12T\n\x13SubscribeDisconnect\x12\x1c.cln.StreamDisconnectRequest\x1a\x1b.cln.DisconnectNotification\"\x00\x30\x01\x12Z\n\x15SubscribeForwardEvent\x12\x1e.cln.StreamForwardEventRequest\x1a\x1d.cln.ForwardEventNotification\"\x00\x30\x01\x12\x63\n\x18SubscribeInvoiceCreation\x12!.cln.StreamInvoiceCreationRequest\x1a .cln.InvoiceCreationNotification\"\x00\x30\x01\x12`\n\x17SubscribeInvoicePayment\x12 .cln.StreamInvoicePaymentRequest\x1a\x1f.cln.InvoicePaymentNotification\"\x00\x30\x01\x12?\n\x0cSubscribeLog\x12\x15.cln.StreamLogRequest\x1a\x14.cln.LogNotification\"\x00\x30\x01\x12{\n SubscribeOnionMessageForwardFail\x12).cln.StreamOnionMessageForwardFailRequest\x1a(.cln.OnionMessageForwardFailNotification\"\x00\x30\x01\x12o\n\x1cSubscribeOpenChannelPeerSigs\x12%.cln.StreamOpenChannelPeerSigsRequest\x1a$.cln.OpenChannelPeerSigsNotification\"\x00\x30\x01\x12]\n\x16SubscribePluginStarted\x12\x1f.cln.StreamPluginStartedRequest\x1a\x1e.cln.PluginStartedNotification\"\x00\x30\x01\x12]\n\x16SubscribePluginStopped\x12\x1f.cln.StreamPluginStoppedRequest\x1a\x1e.cln.PluginStoppedNotification\"\x00\x30\x01\x12`\n\x17SubscribeSendPayFailure\x12 .cln.StreamSendPayFailureRequest\x1a\x1f.cln.SendPayFailureNotification\"\x00\x30\x01\x12`\n\x17SubscribeSendPaySuccess\x12 .cln.StreamSendPaySuccessRequest\x1a\x1f.cln.SendPaySuccessNotification\"\x00\x30\x01\x12N\n\x11SubscribeShutdown\x12\x1a.cln.StreamShutdownRequest\x1a\x19.cln.ShutdownNotification\"\x00\x30\x01\x12K\n\x10SubscribeWarning\x12\x19.cln.StreamWarningRequest\x1a\x18.cln.WarningNotification\"\x00\x30\x01\x12T\n\x13SubscribePayPartEnd\x12\x1c.cln.StreamPayPartEndRequest\x1a\x1b.cln.PayPartEndNotification\"\x00\x30\x01\x12Z\n\x15SubscribePayPartStart\x12\x1e.cln.StreamPayPartStartRequest\x1a\x1d.cln.PayPartStartNotification\"\x00\x30\x01\x12W\n\x14SubscribeRecklessLog\x12\x1d.cln.StreamRecklessLogRequest\x1a\x1c.cln.RecklessLogNotification\"\x00\x30\x01\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -1101,607 +1101,643 @@ _globals['_LISTCONFIGSRESPONSE']._serialized_start=72109 _globals['_LISTCONFIGSRESPONSE']._serialized_end=72189 _globals['_LISTCONFIGSCONFIGS']._serialized_start=72192 - _globals['_LISTCONFIGSCONFIGS']._serialized_end=79133 - _globals['_LISTCONFIGSCONFIGSACCEPTHTLCTLVTYPE']._serialized_start=79135 - _globals['_LISTCONFIGSCONFIGSACCEPTHTLCTLVTYPE']._serialized_end=79209 - _globals['_LISTCONFIGSCONFIGSADDR']._serialized_start=79211 - _globals['_LISTCONFIGSCONFIGSADDR']._serialized_end=79272 - _globals['_LISTCONFIGSCONFIGSALIAS']._serialized_start=79274 - _globals['_LISTCONFIGSCONFIGSALIAS']._serialized_end=79334 - _globals['_LISTCONFIGSCONFIGSALLOWDEPRECATEDAPIS']._serialized_start=79336 - _globals['_LISTCONFIGSCONFIGSALLOWDEPRECATEDAPIS']._serialized_end=79411 - _globals['_LISTCONFIGSCONFIGSALWAYSUSEPROXY']._serialized_start=79413 - _globals['_LISTCONFIGSCONFIGSALWAYSUSEPROXY']._serialized_end=79483 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDR']._serialized_start=79485 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDR']._serialized_end=79554 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVERED']._serialized_start=79557 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVERED']._serialized_end=79813 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVERED_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVEREDVALUESTR']._serialized_start=79732 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVERED_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVEREDVALUESTR']._serialized_end=79813 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVEREDPORT']._serialized_start=79815 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVEREDPORT']._serialized_end=79896 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDNS']._serialized_start=79898 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDNS']._serialized_end=79969 - _globals['_LISTCONFIGSCONFIGSAUTOCONNECTSEEKERPEERS']._serialized_start=79971 - _globals['_LISTCONFIGSCONFIGSAUTOCONNECTSEEKERPEERS']._serialized_end=80048 - _globals['_LISTCONFIGSCONFIGSAUTOLISTEN']._serialized_start=80050 - _globals['_LISTCONFIGSCONFIGSAUTOLISTEN']._serialized_end=80116 - _globals['_LISTCONFIGSCONFIGSBINDADDR']._serialized_start=80118 - _globals['_LISTCONFIGSCONFIGSBINDADDR']._serialized_end=80183 - _globals['_LISTCONFIGSCONFIGSCLEARPLUGINS']._serialized_start=80185 - _globals['_LISTCONFIGSCONFIGSCLEARPLUGINS']._serialized_end=80246 - _globals['_LISTCONFIGSCONFIGSCLTVDELTA']._serialized_start=80248 - _globals['_LISTCONFIGSCONFIGSCLTVDELTA']._serialized_end=80312 - _globals['_LISTCONFIGSCONFIGSCLTVFINAL']._serialized_start=80314 - _globals['_LISTCONFIGSCONFIGSCLTVFINAL']._serialized_end=80378 - _globals['_LISTCONFIGSCONFIGSCOMMITFEE']._serialized_start=80380 - _globals['_LISTCONFIGSCONFIGSCOMMITFEE']._serialized_end=80444 - _globals['_LISTCONFIGSCONFIGSCOMMITFEERATEOFFSET']._serialized_start=80446 - _globals['_LISTCONFIGSCONFIGSCOMMITFEERATEOFFSET']._serialized_end=80520 - _globals['_LISTCONFIGSCONFIGSCOMMITTIME']._serialized_start=80522 - _globals['_LISTCONFIGSCONFIGSCOMMITTIME']._serialized_end=80587 - _globals['_LISTCONFIGSCONFIGSCONF']._serialized_start=80590 - _globals['_LISTCONFIGSCONFIGSCONF']._serialized_end=80752 - _globals['_LISTCONFIGSCONFIGSCONF_LISTCONFIGSCONFIGSCONFSOURCE']._serialized_start=80709 - _globals['_LISTCONFIGSCONFIGSCONF_LISTCONFIGSCONFIGSCONFSOURCE']._serialized_end=80752 - _globals['_LISTCONFIGSCONFIGSCURRENCYRATEADDSOURCE']._serialized_start=80754 - _globals['_LISTCONFIGSCONFIGSCURRENCYRATEADDSOURCE']._serialized_end=80864 - _globals['_LISTCONFIGSCONFIGSCURRENCYRATEDISABLESOURCE']._serialized_start=80866 - _globals['_LISTCONFIGSCONFIGSCURRENCYRATEDISABLESOURCE']._serialized_end=80980 - _globals['_LISTCONFIGSCONFIGSDAEMON']._serialized_start=80982 - _globals['_LISTCONFIGSCONFIGSDAEMON']._serialized_end=81037 - _globals['_LISTCONFIGSCONFIGSDATABASEUPGRADE']._serialized_start=81039 - _globals['_LISTCONFIGSCONFIGSDATABASEUPGRADE']._serialized_end=81110 - _globals['_LISTCONFIGSCONFIGSDEVELOPER']._serialized_start=81112 - _globals['_LISTCONFIGSCONFIGSDEVELOPER']._serialized_end=81170 - _globals['_LISTCONFIGSCONFIGSDISABLEDNS']._serialized_start=81172 - _globals['_LISTCONFIGSCONFIGSDISABLEDNS']._serialized_end=81231 - _globals['_LISTCONFIGSCONFIGSDISABLEMPP']._serialized_start=81233 - _globals['_LISTCONFIGSCONFIGSDISABLEMPP']._serialized_end=81324 - _globals['_LISTCONFIGSCONFIGSDISABLEPLUGIN']._serialized_start=81326 - _globals['_LISTCONFIGSCONFIGSDISABLEPLUGIN']._serialized_end=81396 - _globals['_LISTCONFIGSCONFIGSENCRYPTEDHSM']._serialized_start=81398 - _globals['_LISTCONFIGSCONFIGSENCRYPTEDHSM']._serialized_end=81467 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALANCHORS']._serialized_start=81469 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALANCHORS']._serialized_end=81545 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALDUALFUND']._serialized_start=81547 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALDUALFUND']._serialized_end=81616 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALPEERSTORAGE']._serialized_start=81618 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALPEERSTORAGE']._serialized_end=81698 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSHUTDOWNWRONGFUNDING']._serialized_start=81700 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSHUTDOWNWRONGFUNDING']._serialized_end=81781 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSIMPLECLOSE']._serialized_start=81783 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSIMPLECLOSE']._serialized_end=81855 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSPLICING']._serialized_start=81857 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSPLICING']._serialized_end=81934 - _globals['_LISTCONFIGSCONFIGSFEEBASE']._serialized_start=81936 - _globals['_LISTCONFIGSCONFIGSFEEBASE']._serialized_end=81998 - _globals['_LISTCONFIGSCONFIGSFEEPERSATOSHI']._serialized_start=82000 - _globals['_LISTCONFIGSCONFIGSFEEPERSATOSHI']._serialized_end=82068 - _globals['_LISTCONFIGSCONFIGSFETCHINVOICENOCONNECT']._serialized_start=82070 - _globals['_LISTCONFIGSCONFIGSFETCHINVOICENOCONNECT']._serialized_end=82172 - _globals['_LISTCONFIGSCONFIGSFORCEFEERATES']._serialized_start=82174 - _globals['_LISTCONFIGSCONFIGSFORCEFEERATES']._serialized_end=82242 - _globals['_LISTCONFIGSCONFIGSFUNDINGCONFIRMS']._serialized_start=82244 - _globals['_LISTCONFIGSCONFIGSFUNDINGCONFIRMS']._serialized_end=82314 - _globals['_LISTCONFIGSCONFIGSHSMPASSPHRASE']._serialized_start=82316 - _globals['_LISTCONFIGSCONFIGSHSMPASSPHRASE']._serialized_end=82378 - _globals['_LISTCONFIGSCONFIGSHTLCMAXIMUMMSAT']._serialized_start=82380 - _globals['_LISTCONFIGSCONFIGSHTLCMAXIMUMMSAT']._serialized_end=82464 - _globals['_LISTCONFIGSCONFIGSHTLCMINIMUMMSAT']._serialized_start=82466 - _globals['_LISTCONFIGSCONFIGSHTLCMINIMUMMSAT']._serialized_end=82550 - _globals['_LISTCONFIGSCONFIGSIPROMISETOFIXBROKENAPIUSER']._serialized_start=82552 - _globals['_LISTCONFIGSCONFIGSIPROMISETOFIXBROKENAPIUSER']._serialized_end=82635 - _globals['_LISTCONFIGSCONFIGSIGNOREFEELIMITS']._serialized_start=82637 - _globals['_LISTCONFIGSCONFIGSIGNOREFEELIMITS']._serialized_end=82708 - _globals['_LISTCONFIGSCONFIGSIMPORTANTPLUGIN']._serialized_start=82710 - _globals['_LISTCONFIGSCONFIGSIMPORTANTPLUGIN']._serialized_end=82782 - _globals['_LISTCONFIGSCONFIGSINVOICESONCHAINFALLBACK']._serialized_start=82784 - _globals['_LISTCONFIGSCONFIGSINVOICESONCHAINFALLBACK']._serialized_end=82856 - _globals['_LISTCONFIGSCONFIGSLARGECHANNELS']._serialized_start=82858 - _globals['_LISTCONFIGSCONFIGSLARGECHANNELS']._serialized_end=82920 - _globals['_LISTCONFIGSCONFIGSLIGHTNINGDIR']._serialized_start=82922 - _globals['_LISTCONFIGSCONFIGSLIGHTNINGDIR']._serialized_end=82989 - _globals['_LISTCONFIGSCONFIGSLOGFILE']._serialized_start=82991 - _globals['_LISTCONFIGSCONFIGSLOGFILE']._serialized_end=83055 - _globals['_LISTCONFIGSCONFIGSLOGLEVEL']._serialized_start=83057 - _globals['_LISTCONFIGSCONFIGSLOGLEVEL']._serialized_end=83120 - _globals['_LISTCONFIGSCONFIGSLOGPREFIX']._serialized_start=83122 - _globals['_LISTCONFIGSCONFIGSLOGPREFIX']._serialized_end=83186 - _globals['_LISTCONFIGSCONFIGSLOGTIMESTAMPS']._serialized_start=83188 - _globals['_LISTCONFIGSCONFIGSLOGTIMESTAMPS']._serialized_end=83257 - _globals['_LISTCONFIGSCONFIGSMAINNET']._serialized_start=83259 - _globals['_LISTCONFIGSCONFIGSMAINNET']._serialized_end=83315 - _globals['_LISTCONFIGSCONFIGSMAXCONCURRENTHTLCS']._serialized_start=83317 - _globals['_LISTCONFIGSCONFIGSMAXCONCURRENTHTLCS']._serialized_end=83390 - _globals['_LISTCONFIGSCONFIGSMAXDUSTHTLCEXPOSUREMSAT']._serialized_start=83392 - _globals['_LISTCONFIGSCONFIGSMAXDUSTHTLCEXPOSUREMSAT']._serialized_end=83484 - _globals['_LISTCONFIGSCONFIGSMAXLOCKTIMEBLOCKS']._serialized_start=83486 - _globals['_LISTCONFIGSCONFIGSMAXLOCKTIMEBLOCKS']._serialized_end=83566 - _globals['_LISTCONFIGSCONFIGSMESSAGEPADDING']._serialized_start=83568 - _globals['_LISTCONFIGSCONFIGSMESSAGEPADDING']._serialized_end=83638 - _globals['_LISTCONFIGSCONFIGSMINCAPACITYSAT']._serialized_start=83640 - _globals['_LISTCONFIGSCONFIGSMINCAPACITYSAT']._serialized_end=83743 - _globals['_LISTCONFIGSCONFIGSMINEMERGENCYMSAT']._serialized_start=83745 - _globals['_LISTCONFIGSCONFIGSMINEMERGENCYMSAT']._serialized_end=83830 - _globals['_LISTCONFIGSCONFIGSNETWORK']._serialized_start=83832 - _globals['_LISTCONFIGSCONFIGSNETWORK']._serialized_end=83894 - _globals['_LISTCONFIGSCONFIGSOFFLINE']._serialized_start=83896 - _globals['_LISTCONFIGSCONFIGSOFFLINE']._serialized_end=83952 - _globals['_LISTCONFIGSCONFIGSPAYMENTFRONTINGNODE']._serialized_start=83954 - _globals['_LISTCONFIGSCONFIGSPAYMENTFRONTINGNODE']._serialized_end=84030 - _globals['_LISTCONFIGSCONFIGSPIDFILE']._serialized_start=84032 - _globals['_LISTCONFIGSCONFIGSPIDFILE']._serialized_end=84094 - _globals['_LISTCONFIGSCONFIGSPLUGIN']._serialized_start=84096 - _globals['_LISTCONFIGSCONFIGSPLUGIN']._serialized_end=84159 - _globals['_LISTCONFIGSCONFIGSPLUGINDIR']._serialized_start=84161 - _globals['_LISTCONFIGSCONFIGSPLUGINDIR']._serialized_end=84227 - _globals['_LISTCONFIGSCONFIGSPROXY']._serialized_start=84229 - _globals['_LISTCONFIGSCONFIGSPROXY']._serialized_end=84289 - _globals['_LISTCONFIGSCONFIGSRECOVER']._serialized_start=84291 - _globals['_LISTCONFIGSCONFIGSRECOVER']._serialized_end=84353 - _globals['_LISTCONFIGSCONFIGSREGTEST']._serialized_start=84355 - _globals['_LISTCONFIGSCONFIGSREGTEST']._serialized_end=84411 - _globals['_LISTCONFIGSCONFIGSREQUIRECONFIRMEDINPUTS']._serialized_start=84413 - _globals['_LISTCONFIGSCONFIGSREQUIRECONFIRMEDINPUTS']._serialized_end=84491 - _globals['_LISTCONFIGSCONFIGSRESCAN']._serialized_start=84493 - _globals['_LISTCONFIGSCONFIGSRESCAN']._serialized_end=84554 - _globals['_LISTCONFIGSCONFIGSRGB']._serialized_start=84556 - _globals['_LISTCONFIGSCONFIGSRGB']._serialized_end=84614 - _globals['_LISTCONFIGSCONFIGSRPCFILE']._serialized_start=84616 - _globals['_LISTCONFIGSCONFIGSRPCFILE']._serialized_end=84678 - _globals['_LISTCONFIGSCONFIGSRPCFILEMODE']._serialized_start=84680 - _globals['_LISTCONFIGSCONFIGSRPCFILEMODE']._serialized_end=84746 - _globals['_LISTCONFIGSCONFIGSSIGNET']._serialized_start=84748 - _globals['_LISTCONFIGSCONFIGSSIGNET']._serialized_end=84803 - _globals['_LISTCONFIGSCONFIGSSUBDAEMON']._serialized_start=84805 - _globals['_LISTCONFIGSCONFIGSSUBDAEMON']._serialized_end=84871 - _globals['_LISTCONFIGSCONFIGSTESTNET']._serialized_start=84873 - _globals['_LISTCONFIGSCONFIGSTESTNET']._serialized_end=84929 - _globals['_LISTCONFIGSCONFIGSTORSERVICEPASSWORD']._serialized_start=84931 - _globals['_LISTCONFIGSCONFIGSTORSERVICEPASSWORD']._serialized_end=85004 - _globals['_LISTCONFIGSCONFIGSWALLET']._serialized_start=85006 - _globals['_LISTCONFIGSCONFIGSWALLET']._serialized_end=85067 - _globals['_LISTCONFIGSCONFIGSWATCHTIMEBLOCKS']._serialized_start=85069 - _globals['_LISTCONFIGSCONFIGSWATCHTIMEBLOCKS']._serialized_end=85139 - _globals['_STOPREQUEST']._serialized_start=85141 - _globals['_STOPREQUEST']._serialized_end=85154 - _globals['_STOPRESPONSE']._serialized_start=85156 - _globals['_STOPRESPONSE']._serialized_end=85253 - _globals['_STOPRESPONSE_STOPRESULT']._serialized_start=85218 - _globals['_STOPRESPONSE_STOPRESULT']._serialized_end=85253 - _globals['_HELPREQUEST']._serialized_start=85255 - _globals['_HELPREQUEST']._serialized_end=85302 - _globals['_HELPRESPONSE']._serialized_start=85305 - _globals['_HELPRESPONSE']._serialized_end=85454 - _globals['_HELPRESPONSE_HELPFORMATHINT']._serialized_start=85410 - _globals['_HELPRESPONSE_HELPFORMATHINT']._serialized_end=85438 - _globals['_HELPHELP']._serialized_start=85456 - _globals['_HELPHELP']._serialized_end=85483 - _globals['_PREAPPROVEKEYSENDREQUEST']._serialized_start=85485 - _globals['_PREAPPROVEKEYSENDREQUEST']._serialized_end=85588 - _globals['_PREAPPROVEKEYSENDRESPONSE']._serialized_start=85590 - _globals['_PREAPPROVEKEYSENDRESPONSE']._serialized_end=85617 - _globals['_PREAPPROVEINVOICEREQUEST']._serialized_start=85619 - _globals['_PREAPPROVEINVOICEREQUEST']._serialized_end=85661 - _globals['_PREAPPROVEINVOICERESPONSE']._serialized_start=85663 - _globals['_PREAPPROVEINVOICERESPONSE']._serialized_end=85690 - _globals['_STATICBACKUPREQUEST']._serialized_start=85692 - _globals['_STATICBACKUPREQUEST']._serialized_end=85713 - _globals['_STATICBACKUPRESPONSE']._serialized_start=85715 - _globals['_STATICBACKUPRESPONSE']._serialized_end=85750 - _globals['_BKPRCHANNELSAPYREQUEST']._serialized_start=85752 - _globals['_BKPRCHANNELSAPYREQUEST']._serialized_end=85852 - _globals['_BKPRCHANNELSAPYRESPONSE']._serialized_start=85854 - _globals['_BKPRCHANNELSAPYRESPONSE']._serialized_end=85934 - _globals['_BKPRCHANNELSAPYCHANNELSAPY']._serialized_start=85937 - _globals['_BKPRCHANNELSAPYCHANNELSAPY']._serialized_end=86826 - _globals['_BKPRDUMPINCOMECSVREQUEST']._serialized_start=86829 - _globals['_BKPRDUMPINCOMECSVREQUEST']._serialized_end=87039 - _globals['_BKPRDUMPINCOMECSVRESPONSE']._serialized_start=87042 - _globals['_BKPRDUMPINCOMECSVRESPONSE']._serialized_end=87254 - _globals['_BKPRDUMPINCOMECSVRESPONSE_BKPRDUMPINCOMECSVCSVFORMAT']._serialized_start=87168 - _globals['_BKPRDUMPINCOMECSVRESPONSE_BKPRDUMPINCOMECSVCSVFORMAT']._serialized_end=87254 - _globals['_BKPRINSPECTREQUEST']._serialized_start=87256 - _globals['_BKPRINSPECTREQUEST']._serialized_end=87293 - _globals['_BKPRINSPECTRESPONSE']._serialized_start=87295 - _globals['_BKPRINSPECTRESPONSE']._serialized_end=87350 - _globals['_BKPRINSPECTTXS']._serialized_start=87353 - _globals['_BKPRINSPECTTXS']._serialized_end=87507 - _globals['_BKPRINSPECTTXSOUTPUTS']._serialized_start=87510 - _globals['_BKPRINSPECTTXSOUTPUTS']._serialized_end=87954 - _globals['_BKPRLISTACCOUNTEVENTSREQUEST']._serialized_start=87956 - _globals['_BKPRLISTACCOUNTEVENTSREQUEST']._serialized_end=88060 - _globals['_BKPRLISTACCOUNTEVENTSRESPONSE']._serialized_start=88062 - _globals['_BKPRLISTACCOUNTEVENTSRESPONSE']._serialized_end=88143 - _globals['_BKPRLISTACCOUNTEVENTSEVENTS']._serialized_start=88146 - _globals['_BKPRLISTACCOUNTEVENTSEVENTS']._serialized_end=88863 - _globals['_BKPRLISTACCOUNTEVENTSEVENTS_BKPRLISTACCOUNTEVENTSEVENTSTYPE']._serialized_start=88649 - _globals['_BKPRLISTACCOUNTEVENTSEVENTS_BKPRLISTACCOUNTEVENTSEVENTSTYPE']._serialized_end=88723 - _globals['_BKPRLISTBALANCESREQUEST']._serialized_start=88865 - _globals['_BKPRLISTBALANCESREQUEST']._serialized_end=88890 - _globals['_BKPRLISTBALANCESRESPONSE']._serialized_start=88892 - _globals['_BKPRLISTBALANCESRESPONSE']._serialized_end=88967 - _globals['_BKPRLISTBALANCESACCOUNTS']._serialized_start=88970 - _globals['_BKPRLISTBALANCESACCOUNTS']._serialized_end=89296 - _globals['_BKPRLISTBALANCESACCOUNTSBALANCES']._serialized_start=89298 - _globals['_BKPRLISTBALANCESACCOUNTSBALANCES']._serialized_end=89386 - _globals['_BKPRLISTINCOMEREQUEST']._serialized_start=89389 - _globals['_BKPRLISTINCOMEREQUEST']._serialized_end=89540 - _globals['_BKPRLISTINCOMERESPONSE']._serialized_start=89542 - _globals['_BKPRLISTINCOMERESPONSE']._serialized_end=89622 - _globals['_BKPRLISTINCOMEINCOMEEVENTS']._serialized_start=89625 - _globals['_BKPRLISTINCOMEINCOMEEVENTS']._serialized_end=89933 - _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDREQUEST']._serialized_start=89935 - _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDREQUEST']._serialized_end=90015 - _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDRESPONSE']._serialized_start=90017 - _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDRESPONSE']._serialized_end=90118 - _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATED']._serialized_start=90121 - _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATED']._serialized_end=90796 - _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATED_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATEDTYPE']._serialized_start=90622 - _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATED_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATEDTYPE']._serialized_end=90689 - _globals['_BKPREDITDESCRIPTIONBYOUTPOINTREQUEST']._serialized_start=90798 - _globals['_BKPREDITDESCRIPTIONBYOUTPOINTREQUEST']._serialized_end=90875 - _globals['_BKPREDITDESCRIPTIONBYOUTPOINTRESPONSE']._serialized_start=90877 - _globals['_BKPREDITDESCRIPTIONBYOUTPOINTRESPONSE']._serialized_end=90976 - _globals['_BKPREDITDESCRIPTIONBYOUTPOINTUPDATED']._serialized_start=90979 - _globals['_BKPREDITDESCRIPTIONBYOUTPOINTUPDATED']._serialized_end=91650 - _globals['_BKPREDITDESCRIPTIONBYOUTPOINTUPDATED_BKPREDITDESCRIPTIONBYOUTPOINTUPDATEDTYPE']._serialized_start=91477 - _globals['_BKPREDITDESCRIPTIONBYOUTPOINTUPDATED_BKPREDITDESCRIPTIONBYOUTPOINTUPDATEDTYPE']._serialized_end=91543 - _globals['_BKPRREPORTREQUEST']._serialized_start=91653 - _globals['_BKPRREPORTREQUEST']._serialized_end=91829 - _globals['_BKPRREPORTRESPONSE']._serialized_start=91831 - _globals['_BKPRREPORTRESPONSE']._serialized_end=91867 - _globals['_BLACKLISTRUNEREQUEST']._serialized_start=91869 - _globals['_BLACKLISTRUNEREQUEST']._serialized_end=91979 - _globals['_BLACKLISTRUNERESPONSE']._serialized_start=91981 - _globals['_BLACKLISTRUNERESPONSE']._serialized_end=92052 - _globals['_BLACKLISTRUNEBLACKLIST']._serialized_start=92054 - _globals['_BLACKLISTRUNEBLACKLIST']._serialized_end=92106 - _globals['_CHECKRUNEREQUEST']._serialized_start=92108 - _globals['_CHECKRUNEREQUEST']._serialized_end=92220 - _globals['_CHECKRUNERESPONSE']._serialized_start=92222 - _globals['_CHECKRUNERESPONSE']._serialized_end=92256 - _globals['_CREATERUNEREQUEST']._serialized_start=92258 - _globals['_CREATERUNEREQUEST']._serialized_end=92327 - _globals['_CREATERUNERESPONSE']._serialized_start=92329 - _globals['_CREATERUNERESPONSE']._serialized_end=92452 - _globals['_SHOWRUNESREQUEST']._serialized_start=92454 - _globals['_SHOWRUNESREQUEST']._serialized_end=92500 - _globals['_SHOWRUNESRESPONSE']._serialized_start=92502 - _globals['_SHOWRUNESRESPONSE']._serialized_end=92557 - _globals['_SHOWRUNESRUNES']._serialized_start=92560 - _globals['_SHOWRUNESRUNES']._serialized_end=92845 - _globals['_SHOWRUNESRUNESRESTRICTIONS']._serialized_start=92847 - _globals['_SHOWRUNESRUNESRESTRICTIONS']._serialized_end=92959 - _globals['_SHOWRUNESRUNESRESTRICTIONSALTERNATIVES']._serialized_start=92961 - _globals['_SHOWRUNESRUNESRESTRICTIONSALTERNATIVES']._serialized_end=93071 - _globals['_ASKRENEUNRESERVEREQUEST']._serialized_start=93073 - _globals['_ASKRENEUNRESERVEREQUEST']._serialized_end=93187 - _globals['_ASKRENEUNRESERVERESPONSE']._serialized_start=93189 - _globals['_ASKRENEUNRESERVERESPONSE']._serialized_end=93215 - _globals['_ASKRENEUNRESERVEPATH']._serialized_start=93217 - _globals['_ASKRENEUNRESERVEPATH']._serialized_end=93333 - _globals['_ASKRENELISTLAYERSREQUEST']._serialized_start=93335 - _globals['_ASKRENELISTLAYERSREQUEST']._serialized_end=93391 - _globals['_ASKRENELISTLAYERSRESPONSE']._serialized_start=93393 - _globals['_ASKRENELISTLAYERSRESPONSE']._serialized_end=93466 - _globals['_ASKRENELISTLAYERSLAYERS']._serialized_start=93469 - _globals['_ASKRENELISTLAYERSLAYERS']._serialized_end=93957 - _globals['_ASKRENELISTLAYERSLAYERSBIASES']._serialized_start=93960 - _globals['_ASKRENELISTLAYERSLAYERSBIASES']._serialized_end=94115 - _globals['_ASKRENELISTLAYERSLAYERSCHANNELUPDATES']._serialized_start=94118 - _globals['_ASKRENELISTLAYERSLAYERSCHANNELUPDATES']._serialized_end=94542 - _globals['_ASKRENELISTLAYERSLAYERSCONSTRAINTS']._serialized_start=94545 - _globals['_ASKRENELISTLAYERSLAYERSCONSTRAINTS']._serialized_end=94763 - _globals['_ASKRENELISTLAYERSLAYERSCREATEDCHANNELS']._serialized_start=94766 - _globals['_ASKRENELISTLAYERSLAYERSCREATEDCHANNELS']._serialized_end=94905 - _globals['_ASKRENELISTLAYERSLAYERSIMPRESSIONS']._serialized_start=94907 - _globals['_ASKRENELISTLAYERSLAYERSIMPRESSIONS']._serialized_end=95026 - _globals['_ASKRENELISTLAYERSLAYERSNODEBIASES']._serialized_start=95029 - _globals['_ASKRENELISTLAYERSLAYERSNODEBIASES']._serialized_end=95174 - _globals['_ASKRENECREATELAYERREQUEST']._serialized_start=95176 - _globals['_ASKRENECREATELAYERREQUEST']._serialized_end=95258 - _globals['_ASKRENECREATELAYERRESPONSE']._serialized_start=95260 - _globals['_ASKRENECREATELAYERRESPONSE']._serialized_end=95335 - _globals['_ASKRENECREATELAYERLAYERS']._serialized_start=95338 - _globals['_ASKRENECREATELAYERLAYERS']._serialized_end=95833 - _globals['_ASKRENECREATELAYERLAYERSBIASES']._serialized_start=95836 - _globals['_ASKRENECREATELAYERLAYERSBIASES']._serialized_end=95992 - _globals['_ASKRENECREATELAYERLAYERSCHANNELUPDATES']._serialized_start=95995 - _globals['_ASKRENECREATELAYERLAYERSCHANNELUPDATES']._serialized_end=96332 - _globals['_ASKRENECREATELAYERLAYERSCONSTRAINTS']._serialized_start=96335 - _globals['_ASKRENECREATELAYERLAYERSCONSTRAINTS']._serialized_end=96531 - _globals['_ASKRENECREATELAYERLAYERSCREATEDCHANNELS']._serialized_start=96534 - _globals['_ASKRENECREATELAYERLAYERSCREATEDCHANNELS']._serialized_end=96674 - _globals['_ASKRENECREATELAYERLAYERSIMPRESSIONS']._serialized_start=96676 - _globals['_ASKRENECREATELAYERLAYERSIMPRESSIONS']._serialized_end=96796 - _globals['_ASKRENECREATELAYERLAYERSNODEBIASES']._serialized_start=96799 - _globals['_ASKRENECREATELAYERLAYERSNODEBIASES']._serialized_end=96945 - _globals['_ASKRENEREMOVELAYERREQUEST']._serialized_start=96947 - _globals['_ASKRENEREMOVELAYERREQUEST']._serialized_end=96989 - _globals['_ASKRENEREMOVELAYERRESPONSE']._serialized_start=96991 - _globals['_ASKRENEREMOVELAYERRESPONSE']._serialized_end=97019 - _globals['_ASKRENEREMOVECHANNELUPDATEREQUEST']._serialized_start=97021 - _globals['_ASKRENEREMOVECHANNELUPDATEREQUEST']._serialized_end=97101 - _globals['_ASKRENEREMOVECHANNELUPDATERESPONSE']._serialized_start=97103 - _globals['_ASKRENEREMOVECHANNELUPDATERESPONSE']._serialized_end=97139 - _globals['_ASKRENERESERVEREQUEST']._serialized_start=97141 - _globals['_ASKRENERESERVEREQUEST']._serialized_end=97203 - _globals['_ASKRENERESERVERESPONSE']._serialized_start=97205 - _globals['_ASKRENERESERVERESPONSE']._serialized_end=97229 - _globals['_ASKRENERESERVEPATH']._serialized_start=97231 - _globals['_ASKRENERESERVEPATH']._serialized_end=97345 - _globals['_ASKRENEAGEREQUEST']._serialized_start=97347 - _globals['_ASKRENEAGEREQUEST']._serialized_end=97397 - _globals['_ASKRENEAGERESPONSE']._serialized_start=97399 - _globals['_ASKRENEAGERESPONSE']._serialized_end=97455 - _globals['_GETROUTESREQUEST']._serialized_start=97458 - _globals['_GETROUTESREQUEST']._serialized_end=97689 - _globals['_GETROUTESRESPONSE']._serialized_start=97691 - _globals['_GETROUTESRESPONSE']._serialized_end=97773 - _globals['_GETROUTESROUTES']._serialized_start=97776 - _globals['_GETROUTESROUTES']._serialized_end=97912 - _globals['_GETROUTESROUTESPATH']._serialized_start=97915 - _globals['_GETROUTESROUTESPATH']._serialized_end=98383 - _globals['_ASKRENEDISABLENODEREQUEST']._serialized_start=98385 - _globals['_ASKRENEDISABLENODEREQUEST']._serialized_end=98441 - _globals['_ASKRENEDISABLENODERESPONSE']._serialized_start=98443 - _globals['_ASKRENEDISABLENODERESPONSE']._serialized_end=98471 - _globals['_ASKRENEINFORMCHANNELREQUEST']._serialized_start=98474 - _globals['_ASKRENEINFORMCHANNELREQUEST']._serialized_end=98740 - _globals['_ASKRENEINFORMCHANNELREQUEST_ASKRENEINFORMCHANNELINFORM']._serialized_start=98661 - _globals['_ASKRENEINFORMCHANNELREQUEST_ASKRENEINFORMCHANNELINFORM']._serialized_end=98740 - _globals['_ASKRENEINFORMCHANNELRESPONSE']._serialized_start=98743 - _globals['_ASKRENEINFORMCHANNELRESPONSE']._serialized_end=98891 - _globals['_ASKRENEINFORMCHANNELCONSTRAINTS']._serialized_start=98894 - _globals['_ASKRENEINFORMCHANNELCONSTRAINTS']._serialized_end=99105 - _globals['_ASKRENEINFORMCHANNELIMPRESSIONS']._serialized_start=99108 - _globals['_ASKRENEINFORMCHANNELIMPRESSIONS']._serialized_end=99239 - _globals['_ASKRENECREATECHANNELREQUEST']._serialized_start=99242 - _globals['_ASKRENECREATECHANNELREQUEST']._serialized_end=99385 - _globals['_ASKRENECREATECHANNELRESPONSE']._serialized_start=99387 - _globals['_ASKRENECREATECHANNELRESPONSE']._serialized_end=99417 - _globals['_ASKRENEUPDATECHANNELREQUEST']._serialized_start=99420 - _globals['_ASKRENEUPDATECHANNELREQUEST']._serialized_end=99849 - _globals['_ASKRENEUPDATECHANNELRESPONSE']._serialized_start=99851 - _globals['_ASKRENEUPDATECHANNELRESPONSE']._serialized_end=99881 - _globals['_ASKRENEBIASCHANNELREQUEST']._serialized_start=99884 - _globals['_ASKRENEBIASCHANNELREQUEST']._serialized_end=100048 - _globals['_ASKRENEBIASCHANNELRESPONSE']._serialized_start=100050 - _globals['_ASKRENEBIASCHANNELRESPONSE']._serialized_end=100125 - _globals['_ASKRENEBIASCHANNELBIASES']._serialized_start=100128 - _globals['_ASKRENEBIASCHANNELBIASES']._serialized_end=100293 - _globals['_ASKRENEBIASNODEREQUEST']._serialized_start=100296 - _globals['_ASKRENEBIASNODEREQUEST']._serialized_end=100460 - _globals['_ASKRENEBIASNODERESPONSE']._serialized_start=100462 - _globals['_ASKRENEBIASNODERESPONSE']._serialized_end=100540 - _globals['_ASKRENEBIASNODENODEBIASES']._serialized_start=100543 - _globals['_ASKRENEBIASNODENODEBIASES']._serialized_end=100695 - _globals['_ASKRENELISTRESERVATIONSREQUEST']._serialized_start=100697 - _globals['_ASKRENELISTRESERVATIONSREQUEST']._serialized_end=100729 - _globals['_ASKRENELISTRESERVATIONSRESPONSE']._serialized_start=100731 - _globals['_ASKRENELISTRESERVATIONSRESPONSE']._serialized_end=100828 - _globals['_ASKRENELISTRESERVATIONSRESERVATIONS']._serialized_start=100831 - _globals['_ASKRENELISTRESERVATIONSRESERVATIONS']._serialized_end=100976 - _globals['_INJECTPAYMENTONIONREQUEST']._serialized_start=100979 - _globals['_INJECTPAYMENTONIONREQUEST']._serialized_end=101352 - _globals['_INJECTPAYMENTONIONRESPONSE']._serialized_start=101354 - _globals['_INJECTPAYMENTONIONRESPONSE']._serialized_end=101473 - _globals['_INJECTONIONMESSAGEREQUEST']._serialized_start=101475 - _globals['_INJECTONIONMESSAGEREQUEST']._serialized_end=101537 - _globals['_INJECTONIONMESSAGERESPONSE']._serialized_start=101539 - _globals['_INJECTONIONMESSAGERESPONSE']._serialized_end=101567 - _globals['_XPAYREQUEST']._serialized_start=101570 - _globals['_XPAYREQUEST']._serialized_end=102013 - _globals['_XPAYRESPONSE']._serialized_start=102016 - _globals['_XPAYRESPONSE']._serialized_end=102177 - _globals['_SIGNMESSAGEWITHKEYREQUEST']._serialized_start=102179 - _globals['_SIGNMESSAGEWITHKEYREQUEST']._serialized_end=102240 - _globals['_SIGNMESSAGEWITHKEYRESPONSE']._serialized_start=102242 - _globals['_SIGNMESSAGEWITHKEYRESPONSE']._serialized_end=102338 - _globals['_LISTCHANNELMOVESREQUEST']._serialized_start=102341 - _globals['_LISTCHANNELMOVESREQUEST']._serialized_end=102546 - _globals['_LISTCHANNELMOVESREQUEST_LISTCHANNELMOVESINDEX']._serialized_start=102480 - _globals['_LISTCHANNELMOVESREQUEST_LISTCHANNELMOVESINDEX']._serialized_end=102516 - _globals['_LISTCHANNELMOVESRESPONSE']._serialized_start=102548 - _globals['_LISTCHANNELMOVESRESPONSE']._serialized_end=102631 - _globals['_LISTCHANNELMOVESCHANNELMOVES']._serialized_start=102634 - _globals['_LISTCHANNELMOVESCHANNELMOVES']._serialized_end=103187 - _globals['_LISTCHANNELMOVESCHANNELMOVES_LISTCHANNELMOVESCHANNELMOVESPRIMARYTAG']._serialized_start=102995 - _globals['_LISTCHANNELMOVESCHANNELMOVES_LISTCHANNELMOVESCHANNELMOVESPRIMARYTAG']._serialized_end=103145 - _globals['_LISTCHAINMOVESREQUEST']._serialized_start=103190 - _globals['_LISTCHAINMOVESREQUEST']._serialized_end=103387 - _globals['_LISTCHAINMOVESREQUEST_LISTCHAINMOVESINDEX']._serialized_start=103323 - _globals['_LISTCHAINMOVESREQUEST_LISTCHAINMOVESINDEX']._serialized_end=103357 - _globals['_LISTCHAINMOVESRESPONSE']._serialized_start=103389 - _globals['_LISTCHAINMOVESRESPONSE']._serialized_end=103464 - _globals['_LISTCHAINMOVESCHAINMOVES']._serialized_start=103467 - _globals['_LISTCHAINMOVESCHAINMOVES']._serialized_end=104319 - _globals['_LISTCHAINMOVESCHAINMOVES_LISTCHAINMOVESCHAINMOVESPRIMARYTAG']._serialized_start=103954 - _globals['_LISTCHAINMOVESCHAINMOVES_LISTCHAINMOVESCHAINMOVESPRIMARYTAG']._serialized_end=104231 - _globals['_LISTNETWORKEVENTSREQUEST']._serialized_start=104322 - _globals['_LISTNETWORKEVENTSREQUEST']._serialized_end=104555 - _globals['_LISTNETWORKEVENTSREQUEST_LISTNETWORKEVENTSINDEX']._serialized_start=104481 - _globals['_LISTNETWORKEVENTSREQUEST_LISTNETWORKEVENTSINDEX']._serialized_end=104518 - _globals['_LISTNETWORKEVENTSRESPONSE']._serialized_start=104557 - _globals['_LISTNETWORKEVENTSRESPONSE']._serialized_end=104644 - _globals['_LISTNETWORKEVENTSNETWORKEVENTS']._serialized_start=104647 - _globals['_LISTNETWORKEVENTSNETWORKEVENTS']._serialized_end=104889 - _globals['_DELNETWORKEVENTREQUEST']._serialized_start=104891 - _globals['_DELNETWORKEVENTREQUEST']._serialized_end=104938 - _globals['_DELNETWORKEVENTRESPONSE']._serialized_start=104940 - _globals['_DELNETWORKEVENTRESPONSE']._serialized_end=104965 - _globals['_CLNRESTREGISTERPATHREQUEST']._serialized_start=104968 - _globals['_CLNRESTREGISTERPATHREQUEST']._serialized_end=105214 - _globals['_CLNRESTREGISTERPATHRESPONSE']._serialized_start=105216 - _globals['_CLNRESTREGISTERPATHRESPONSE']._serialized_end=105245 - _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS']._serialized_start=105248 - _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS']._serialized_end=105466 - _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS_PARAMSENTRY']._serialized_start=105399 - _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS_PARAMSENTRY']._serialized_end=105444 - _globals['_LISTCURRENCYRATESREQUEST']._serialized_start=105468 - _globals['_LISTCURRENCYRATESREQUEST']._serialized_end=105512 - _globals['_LISTCURRENCYRATESRESPONSE']._serialized_start=105514 - _globals['_LISTCURRENCYRATESRESPONSE']._serialized_end=105601 - _globals['_LISTCURRENCYRATESCURRENCYRATES']._serialized_start=105603 - _globals['_LISTCURRENCYRATESCURRENCYRATES']._serialized_end=105667 - _globals['_CURRENCYCONVERTREQUEST']._serialized_start=105669 - _globals['_CURRENCYCONVERTREQUEST']._serialized_end=105727 - _globals['_CURRENCYCONVERTRESPONSE']._serialized_start=105729 - _globals['_CURRENCYCONVERTRESPONSE']._serialized_end=105781 - _globals['_CURRENCYRATEREQUEST']._serialized_start=105783 - _globals['_CURRENCYRATEREQUEST']._serialized_end=105854 - _globals['_CURRENCYRATERESPONSE']._serialized_start=105856 - _globals['_CURRENCYRATERESPONSE']._serialized_end=105892 - _globals['_SENDAMOUNTREQUEST']._serialized_start=105895 - _globals['_SENDAMOUNTREQUEST']._serialized_end=106172 - _globals['_SENDAMOUNTRESPONSE']._serialized_start=106175 - _globals['_SENDAMOUNTRESPONSE']._serialized_end=106342 - _globals['_CREATEPROOFREQUEST']._serialized_start=106344 - _globals['_CREATEPROOFREQUEST']._serialized_end=106445 - _globals['_CREATEPROOFRESPONSE']._serialized_start=106447 - _globals['_CREATEPROOFRESPONSE']._serialized_end=106508 - _globals['_CREATEPROOFPROOFS']._serialized_start=106511 - _globals['_CREATEPROOFPROOFS']._serialized_end=106693 - _globals['_XKEYSENDREQUEST']._serialized_start=106696 - _globals['_XKEYSENDREQUEST']._serialized_end=107039 - _globals['_XKEYSENDREQUEST_EXTRATLVSENTRY']._serialized_start=106943 - _globals['_XKEYSENDREQUEST_EXTRATLVSENTRY']._serialized_end=106991 - _globals['_XKEYSENDRESPONSE']._serialized_start=107042 - _globals['_XKEYSENDRESPONSE']._serialized_end=107207 - _globals['_GRACEFULREQUEST']._serialized_start=107209 - _globals['_GRACEFULREQUEST']._serialized_end=107260 - _globals['_GRACEFULRESPONSE']._serialized_start=107262 - _globals['_GRACEFULRESPONSE']._serialized_end=107334 - _globals['_STREAMBALANCESNAPSHOTREQUEST']._serialized_start=107336 - _globals['_STREAMBALANCESNAPSHOTREQUEST']._serialized_end=107366 - _globals['_BALANCESNAPSHOTNOTIFICATION']._serialized_start=107369 - _globals['_BALANCESNAPSHOTNOTIFICATION']._serialized_end=107503 - _globals['_BALANCESNAPSHOTACCOUNTS']._serialized_start=107505 - _globals['_BALANCESNAPSHOTACCOUNTS']._serialized_end=107604 - _globals['_STREAMBLOCKADDEDREQUEST']._serialized_start=107606 - _globals['_STREAMBLOCKADDEDREQUEST']._serialized_end=107631 - _globals['_BLOCKADDEDNOTIFICATION']._serialized_start=107633 - _globals['_BLOCKADDEDNOTIFICATION']._serialized_end=107687 - _globals['_STREAMCHANNELOPENFAILEDREQUEST']._serialized_start=107689 - _globals['_STREAMCHANNELOPENFAILEDREQUEST']._serialized_end=107721 - _globals['_CHANNELOPENFAILEDNOTIFICATION']._serialized_start=107723 - _globals['_CHANNELOPENFAILEDNOTIFICATION']._serialized_end=107774 - _globals['_STREAMCHANNELOPENEDREQUEST']._serialized_start=107776 - _globals['_STREAMCHANNELOPENEDREQUEST']._serialized_end=107804 - _globals['_CHANNELOPENEDNOTIFICATION']._serialized_start=107806 - _globals['_CHANNELOPENEDNOTIFICATION']._serialized_end=107925 - _globals['_STREAMCHANNELSTATECHANGEDREQUEST']._serialized_start=107927 - _globals['_STREAMCHANNELSTATECHANGEDREQUEST']._serialized_end=107961 - _globals['_CHANNELSTATECHANGEDNOTIFICATION']._serialized_start=107964 - _globals['_CHANNELSTATECHANGEDNOTIFICATION']._serialized_end=108413 - _globals['_CHANNELSTATECHANGEDNOTIFICATION_CHANNELSTATECHANGEDCAUSE']._serialized_start=108267 - _globals['_CHANNELSTATECHANGEDNOTIFICATION_CHANNELSTATECHANGEDCAUSE']._serialized_end=108366 - _globals['_STREAMCONNECTREQUEST']._serialized_start=108415 - _globals['_STREAMCONNECTREQUEST']._serialized_end=108437 - _globals['_PEERCONNECTNOTIFICATION']._serialized_start=108440 - _globals['_PEERCONNECTNOTIFICATION']._serialized_end=108630 - _globals['_PEERCONNECTNOTIFICATION_PEERCONNECTDIRECTION']._serialized_start=108591 - _globals['_PEERCONNECTNOTIFICATION_PEERCONNECTDIRECTION']._serialized_end=108630 - _globals['_PEERCONNECTADDRESS']._serialized_start=108633 - _globals['_PEERCONNECTADDRESS']._serialized_end=108915 - _globals['_PEERCONNECTADDRESS_PEERCONNECTADDRESSTYPE']._serialized_start=108784 - _globals['_PEERCONNECTADDRESS_PEERCONNECTADDRESSTYPE']._serialized_end=108883 - _globals['_STREAMCOINMOVEMENTREQUEST']._serialized_start=108917 - _globals['_STREAMCOINMOVEMENTREQUEST']._serialized_end=108944 - _globals['_COINMOVEMENTNOTIFICATION']._serialized_start=108947 - _globals['_COINMOVEMENTNOTIFICATION']._serialized_end=110402 - _globals['_COINMOVEMENTNOTIFICATION_COINMOVEMENTPRIMARYTAG']._serialized_start=109741 - _globals['_COINMOVEMENTNOTIFICATION_COINMOVEMENTPRIMARYTAG']._serialized_end=110116 - _globals['_COINMOVEMENTNOTIFICATION_COINMOVEMENTTYPE']._serialized_start=110118 - _globals['_COINMOVEMENTNOTIFICATION_COINMOVEMENTTYPE']._serialized_end=110168 - _globals['_STREAMCUSTOMMSGREQUEST']._serialized_start=110404 - _globals['_STREAMCUSTOMMSGREQUEST']._serialized_end=110428 - _globals['_CUSTOMMSGNOTIFICATION']._serialized_start=110430 - _globals['_CUSTOMMSGNOTIFICATION']._serialized_end=110487 - _globals['_STREAMDEPRECATEDONESHOTREQUEST']._serialized_start=110489 - _globals['_STREAMDEPRECATEDONESHOTREQUEST']._serialized_end=110521 - _globals['_DEPRECATEDONESHOTNOTIFICATION']._serialized_start=110523 - _globals['_DEPRECATEDONESHOTNOTIFICATION']._serialized_end=110577 - _globals['_STREAMDISCONNECTREQUEST']._serialized_start=110579 - _globals['_STREAMDISCONNECTREQUEST']._serialized_end=110604 - _globals['_DISCONNECTNOTIFICATION']._serialized_start=110606 - _globals['_DISCONNECTNOTIFICATION']._serialized_end=110642 - _globals['_STREAMFORWARDEVENTREQUEST']._serialized_start=110644 - _globals['_STREAMFORWARDEVENTREQUEST']._serialized_end=110671 - _globals['_FORWARDEVENTNOTIFICATION']._serialized_start=110674 - _globals['_FORWARDEVENTNOTIFICATION']._serialized_end=111322 - _globals['_FORWARDEVENTNOTIFICATION_FORWARDEVENTSTATUS']._serialized_start=111106 - _globals['_FORWARDEVENTNOTIFICATION_FORWARDEVENTSTATUS']._serialized_end=111182 - _globals['_FORWARDEVENTNOTIFICATION_FORWARDEVENTSTYLE']._serialized_start=111184 - _globals['_FORWARDEVENTNOTIFICATION_FORWARDEVENTSTYLE']._serialized_end=111224 - _globals['_STREAMINVOICECREATIONREQUEST']._serialized_start=111324 - _globals['_STREAMINVOICECREATIONREQUEST']._serialized_end=111354 - _globals['_INVOICECREATIONNOTIFICATION']._serialized_start=111357 - _globals['_INVOICECREATIONNOTIFICATION']._serialized_end=111496 - _globals['_STREAMINVOICEPAYMENTREQUEST']._serialized_start=111498 - _globals['_STREAMINVOICEPAYMENTREQUEST']._serialized_end=111527 - _globals['_INVOICEPAYMENTNOTIFICATION']._serialized_start=111530 - _globals['_INVOICEPAYMENTNOTIFICATION']._serialized_end=111669 - _globals['_STREAMLOGREQUEST']._serialized_start=111671 - _globals['_STREAMLOGREQUEST']._serialized_end=111689 - _globals['_LOGNOTIFICATION']._serialized_start=111692 - _globals['_LOGNOTIFICATION']._serialized_end=111894 - _globals['_LOGNOTIFICATION_LOGLEVEL']._serialized_start=111819 - _globals['_LOGNOTIFICATION_LOGLEVEL']._serialized_end=111894 - _globals['_STREAMONIONMESSAGEFORWARDFAILREQUEST']._serialized_start=111896 - _globals['_STREAMONIONMESSAGEFORWARDFAILREQUEST']._serialized_end=111934 - _globals['_ONIONMESSAGEFORWARDFAILNOTIFICATION']._serialized_start=111937 - _globals['_ONIONMESSAGEFORWARDFAILNOTIFICATION']._serialized_end=112176 - _globals['_STREAMOPENCHANNELPEERSIGSREQUEST']._serialized_start=112178 - _globals['_STREAMOPENCHANNELPEERSIGSREQUEST']._serialized_end=112212 - _globals['_OPENCHANNELPEERSIGSNOTIFICATION']._serialized_start=112214 - _globals['_OPENCHANNELPEERSIGSNOTIFICATION']._serialized_end=112288 - _globals['_STREAMPLUGINSTARTEDREQUEST']._serialized_start=112290 - _globals['_STREAMPLUGINSTARTEDREQUEST']._serialized_end=112318 - _globals['_PLUGINSTARTEDNOTIFICATION']._serialized_start=112320 - _globals['_PLUGINSTARTEDNOTIFICATION']._serialized_end=112406 - _globals['_STREAMPLUGINSTOPPEDREQUEST']._serialized_start=112408 - _globals['_STREAMPLUGINSTOPPEDREQUEST']._serialized_end=112436 - _globals['_PLUGINSTOPPEDNOTIFICATION']._serialized_start=112438 - _globals['_PLUGINSTOPPEDNOTIFICATION']._serialized_end=112524 - _globals['_STREAMSENDPAYFAILUREREQUEST']._serialized_start=112526 - _globals['_STREAMSENDPAYFAILUREREQUEST']._serialized_end=112555 - _globals['_SENDPAYFAILURENOTIFICATION']._serialized_start=112557 - _globals['_SENDPAYFAILURENOTIFICATION']._serialized_end=112655 - _globals['_SENDPAYFAILUREDATA']._serialized_start=112658 - _globals['_SENDPAYFAILUREDATA']._serialized_end=113875 - _globals['_SENDPAYFAILUREDATA_SENDPAYFAILUREDATASTATUS']._serialized_start=113413 - _globals['_SENDPAYFAILUREDATA_SENDPAYFAILUREDATASTATUS']._serialized_end=113478 - _globals['_STREAMSENDPAYSUCCESSREQUEST']._serialized_start=113877 - _globals['_STREAMSENDPAYSUCCESSREQUEST']._serialized_end=113906 - _globals['_SENDPAYSUCCESSNOTIFICATION']._serialized_start=113909 - _globals['_SENDPAYSUCCESSNOTIFICATION']._serialized_end=114625 - _globals['_SENDPAYSUCCESSNOTIFICATION_SENDPAYSUCCESSSTATUS']._serialized_start=114427 - _globals['_SENDPAYSUCCESSNOTIFICATION_SENDPAYSUCCESSSTATUS']._serialized_end=114463 - _globals['_STREAMSHUTDOWNREQUEST']._serialized_start=114627 - _globals['_STREAMSHUTDOWNREQUEST']._serialized_end=114650 - _globals['_SHUTDOWNNOTIFICATION']._serialized_start=114652 - _globals['_SHUTDOWNNOTIFICATION']._serialized_end=114674 - _globals['_STREAMWARNINGREQUEST']._serialized_start=114676 - _globals['_STREAMWARNINGREQUEST']._serialized_end=114698 - _globals['_WARNINGNOTIFICATION']._serialized_start=114701 - _globals['_WARNINGNOTIFICATION']._serialized_end=114875 - _globals['_WARNINGNOTIFICATION_WARNINGLEVEL']._serialized_start=114840 - _globals['_WARNINGNOTIFICATION_WARNINGLEVEL']._serialized_end=114875 - _globals['_STREAMPAYPARTENDREQUEST']._serialized_start=114877 - _globals['_STREAMPAYPARTENDREQUEST']._serialized_end=114902 - _globals['_PAYPARTENDNOTIFICATION']._serialized_start=114905 - _globals['_PAYPARTENDNOTIFICATION']._serialized_end=115402 - _globals['_PAYPARTENDNOTIFICATION_PAYPARTENDSTATUS']._serialized_start=115242 - _globals['_PAYPARTENDNOTIFICATION_PAYPARTENDSTATUS']._serialized_end=115286 - _globals['_STREAMPAYPARTSTARTREQUEST']._serialized_start=115404 - _globals['_STREAMPAYPARTSTARTREQUEST']._serialized_end=115431 - _globals['_PAYPARTSTARTNOTIFICATION']._serialized_start=115434 - _globals['_PAYPARTSTARTNOTIFICATION']._serialized_end=115628 - _globals['_PAYPARTSTARTHOPS']._serialized_start=115631 - _globals['_PAYPARTSTARTHOPS']._serialized_end=115790 - _globals['_NODE']._serialized_start=115793 - _globals['_NODE']._serialized_end=129163 + _globals['_LISTCONFIGSCONFIGS']._serialized_end=79213 + _globals['_LISTCONFIGSCONFIGSACCEPTHTLCTLVTYPE']._serialized_start=79215 + _globals['_LISTCONFIGSCONFIGSACCEPTHTLCTLVTYPE']._serialized_end=79289 + _globals['_LISTCONFIGSCONFIGSADDR']._serialized_start=79291 + _globals['_LISTCONFIGSCONFIGSADDR']._serialized_end=79352 + _globals['_LISTCONFIGSCONFIGSALIAS']._serialized_start=79354 + _globals['_LISTCONFIGSCONFIGSALIAS']._serialized_end=79414 + _globals['_LISTCONFIGSCONFIGSALLOWDEPRECATEDAPIS']._serialized_start=79416 + _globals['_LISTCONFIGSCONFIGSALLOWDEPRECATEDAPIS']._serialized_end=79491 + _globals['_LISTCONFIGSCONFIGSALWAYSUSEPROXY']._serialized_start=79493 + _globals['_LISTCONFIGSCONFIGSALWAYSUSEPROXY']._serialized_end=79563 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDR']._serialized_start=79565 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDR']._serialized_end=79634 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVERED']._serialized_start=79637 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVERED']._serialized_end=79893 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVERED_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVEREDVALUESTR']._serialized_start=79812 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVERED_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVEREDVALUESTR']._serialized_end=79893 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVEREDPORT']._serialized_start=79895 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVEREDPORT']._serialized_end=79976 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDNS']._serialized_start=79978 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDNS']._serialized_end=80049 + _globals['_LISTCONFIGSCONFIGSAUTOCONNECTSEEKERPEERS']._serialized_start=80051 + _globals['_LISTCONFIGSCONFIGSAUTOCONNECTSEEKERPEERS']._serialized_end=80128 + _globals['_LISTCONFIGSCONFIGSAUTOLISTEN']._serialized_start=80130 + _globals['_LISTCONFIGSCONFIGSAUTOLISTEN']._serialized_end=80196 + _globals['_LISTCONFIGSCONFIGSBINDADDR']._serialized_start=80198 + _globals['_LISTCONFIGSCONFIGSBINDADDR']._serialized_end=80263 + _globals['_LISTCONFIGSCONFIGSCLEARPLUGINS']._serialized_start=80265 + _globals['_LISTCONFIGSCONFIGSCLEARPLUGINS']._serialized_end=80326 + _globals['_LISTCONFIGSCONFIGSCLTVDELTA']._serialized_start=80328 + _globals['_LISTCONFIGSCONFIGSCLTVDELTA']._serialized_end=80392 + _globals['_LISTCONFIGSCONFIGSCLTVFINAL']._serialized_start=80394 + _globals['_LISTCONFIGSCONFIGSCLTVFINAL']._serialized_end=80458 + _globals['_LISTCONFIGSCONFIGSCOMMITFEE']._serialized_start=80460 + _globals['_LISTCONFIGSCONFIGSCOMMITFEE']._serialized_end=80524 + _globals['_LISTCONFIGSCONFIGSCOMMITFEERATEOFFSET']._serialized_start=80526 + _globals['_LISTCONFIGSCONFIGSCOMMITFEERATEOFFSET']._serialized_end=80600 + _globals['_LISTCONFIGSCONFIGSCOMMITTIME']._serialized_start=80602 + _globals['_LISTCONFIGSCONFIGSCOMMITTIME']._serialized_end=80667 + _globals['_LISTCONFIGSCONFIGSCONF']._serialized_start=80670 + _globals['_LISTCONFIGSCONFIGSCONF']._serialized_end=80832 + _globals['_LISTCONFIGSCONFIGSCONF_LISTCONFIGSCONFIGSCONFSOURCE']._serialized_start=80789 + _globals['_LISTCONFIGSCONFIGSCONF_LISTCONFIGSCONFIGSCONFSOURCE']._serialized_end=80832 + _globals['_LISTCONFIGSCONFIGSCURRENCYRATEADDSOURCE']._serialized_start=80834 + _globals['_LISTCONFIGSCONFIGSCURRENCYRATEADDSOURCE']._serialized_end=80944 + _globals['_LISTCONFIGSCONFIGSCURRENCYRATEDISABLESOURCE']._serialized_start=80946 + _globals['_LISTCONFIGSCONFIGSCURRENCYRATEDISABLESOURCE']._serialized_end=81060 + _globals['_LISTCONFIGSCONFIGSDAEMON']._serialized_start=81062 + _globals['_LISTCONFIGSCONFIGSDAEMON']._serialized_end=81117 + _globals['_LISTCONFIGSCONFIGSDATABASEUPGRADE']._serialized_start=81119 + _globals['_LISTCONFIGSCONFIGSDATABASEUPGRADE']._serialized_end=81190 + _globals['_LISTCONFIGSCONFIGSDEVELOPER']._serialized_start=81192 + _globals['_LISTCONFIGSCONFIGSDEVELOPER']._serialized_end=81250 + _globals['_LISTCONFIGSCONFIGSDISABLEDNS']._serialized_start=81252 + _globals['_LISTCONFIGSCONFIGSDISABLEDNS']._serialized_end=81311 + _globals['_LISTCONFIGSCONFIGSDISABLEMPP']._serialized_start=81313 + _globals['_LISTCONFIGSCONFIGSDISABLEMPP']._serialized_end=81404 + _globals['_LISTCONFIGSCONFIGSDISABLEPLUGIN']._serialized_start=81406 + _globals['_LISTCONFIGSCONFIGSDISABLEPLUGIN']._serialized_end=81476 + _globals['_LISTCONFIGSCONFIGSENCRYPTEDHSM']._serialized_start=81478 + _globals['_LISTCONFIGSCONFIGSENCRYPTEDHSM']._serialized_end=81547 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALANCHORS']._serialized_start=81549 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALANCHORS']._serialized_end=81625 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALDUALFUND']._serialized_start=81627 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALDUALFUND']._serialized_end=81696 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALPEERSTORAGE']._serialized_start=81698 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALPEERSTORAGE']._serialized_end=81778 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSHUTDOWNWRONGFUNDING']._serialized_start=81780 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSHUTDOWNWRONGFUNDING']._serialized_end=81861 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSIMPLECLOSE']._serialized_start=81863 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSIMPLECLOSE']._serialized_end=81935 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSPLICING']._serialized_start=81937 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSPLICING']._serialized_end=82014 + _globals['_LISTCONFIGSCONFIGSFEEBASE']._serialized_start=82016 + _globals['_LISTCONFIGSCONFIGSFEEBASE']._serialized_end=82078 + _globals['_LISTCONFIGSCONFIGSFEEPERSATOSHI']._serialized_start=82080 + _globals['_LISTCONFIGSCONFIGSFEEPERSATOSHI']._serialized_end=82148 + _globals['_LISTCONFIGSCONFIGSFETCHINVOICENOCONNECT']._serialized_start=82150 + _globals['_LISTCONFIGSCONFIGSFETCHINVOICENOCONNECT']._serialized_end=82252 + _globals['_LISTCONFIGSCONFIGSFORCEFEERATES']._serialized_start=82254 + _globals['_LISTCONFIGSCONFIGSFORCEFEERATES']._serialized_end=82322 + _globals['_LISTCONFIGSCONFIGSFUNDINGCONFIRMS']._serialized_start=82324 + _globals['_LISTCONFIGSCONFIGSFUNDINGCONFIRMS']._serialized_end=82394 + _globals['_LISTCONFIGSCONFIGSHSMPASSPHRASE']._serialized_start=82396 + _globals['_LISTCONFIGSCONFIGSHSMPASSPHRASE']._serialized_end=82458 + _globals['_LISTCONFIGSCONFIGSHTLCMAXIMUMMSAT']._serialized_start=82460 + _globals['_LISTCONFIGSCONFIGSHTLCMAXIMUMMSAT']._serialized_end=82544 + _globals['_LISTCONFIGSCONFIGSHTLCMINIMUMMSAT']._serialized_start=82546 + _globals['_LISTCONFIGSCONFIGSHTLCMINIMUMMSAT']._serialized_end=82630 + _globals['_LISTCONFIGSCONFIGSIPROMISETOFIXBROKENAPIUSER']._serialized_start=82632 + _globals['_LISTCONFIGSCONFIGSIPROMISETOFIXBROKENAPIUSER']._serialized_end=82715 + _globals['_LISTCONFIGSCONFIGSIGNOREFEELIMITS']._serialized_start=82717 + _globals['_LISTCONFIGSCONFIGSIGNOREFEELIMITS']._serialized_end=82788 + _globals['_LISTCONFIGSCONFIGSIMPORTANTPLUGIN']._serialized_start=82790 + _globals['_LISTCONFIGSCONFIGSIMPORTANTPLUGIN']._serialized_end=82862 + _globals['_LISTCONFIGSCONFIGSINVOICESONCHAINFALLBACK']._serialized_start=82864 + _globals['_LISTCONFIGSCONFIGSINVOICESONCHAINFALLBACK']._serialized_end=82936 + _globals['_LISTCONFIGSCONFIGSLARGECHANNELS']._serialized_start=82938 + _globals['_LISTCONFIGSCONFIGSLARGECHANNELS']._serialized_end=83000 + _globals['_LISTCONFIGSCONFIGSLIGHTNINGDIR']._serialized_start=83002 + _globals['_LISTCONFIGSCONFIGSLIGHTNINGDIR']._serialized_end=83069 + _globals['_LISTCONFIGSCONFIGSLOGFILE']._serialized_start=83071 + _globals['_LISTCONFIGSCONFIGSLOGFILE']._serialized_end=83135 + _globals['_LISTCONFIGSCONFIGSLOGLEVEL']._serialized_start=83137 + _globals['_LISTCONFIGSCONFIGSLOGLEVEL']._serialized_end=83200 + _globals['_LISTCONFIGSCONFIGSLOGPREFIX']._serialized_start=83202 + _globals['_LISTCONFIGSCONFIGSLOGPREFIX']._serialized_end=83266 + _globals['_LISTCONFIGSCONFIGSLOGTIMESTAMPS']._serialized_start=83268 + _globals['_LISTCONFIGSCONFIGSLOGTIMESTAMPS']._serialized_end=83337 + _globals['_LISTCONFIGSCONFIGSMAINNET']._serialized_start=83339 + _globals['_LISTCONFIGSCONFIGSMAINNET']._serialized_end=83395 + _globals['_LISTCONFIGSCONFIGSMAXCONCURRENTHTLCS']._serialized_start=83397 + _globals['_LISTCONFIGSCONFIGSMAXCONCURRENTHTLCS']._serialized_end=83470 + _globals['_LISTCONFIGSCONFIGSMAXDUSTHTLCEXPOSUREMSAT']._serialized_start=83472 + _globals['_LISTCONFIGSCONFIGSMAXDUSTHTLCEXPOSUREMSAT']._serialized_end=83564 + _globals['_LISTCONFIGSCONFIGSMAXLOCKTIMEBLOCKS']._serialized_start=83566 + _globals['_LISTCONFIGSCONFIGSMAXLOCKTIMEBLOCKS']._serialized_end=83646 + _globals['_LISTCONFIGSCONFIGSMESSAGEPADDING']._serialized_start=83648 + _globals['_LISTCONFIGSCONFIGSMESSAGEPADDING']._serialized_end=83718 + _globals['_LISTCONFIGSCONFIGSMINCAPACITYSAT']._serialized_start=83720 + _globals['_LISTCONFIGSCONFIGSMINCAPACITYSAT']._serialized_end=83823 + _globals['_LISTCONFIGSCONFIGSMINEMERGENCYMSAT']._serialized_start=83825 + _globals['_LISTCONFIGSCONFIGSMINEMERGENCYMSAT']._serialized_end=83910 + _globals['_LISTCONFIGSCONFIGSNETWORK']._serialized_start=83912 + _globals['_LISTCONFIGSCONFIGSNETWORK']._serialized_end=83974 + _globals['_LISTCONFIGSCONFIGSOFFLINE']._serialized_start=83976 + _globals['_LISTCONFIGSCONFIGSOFFLINE']._serialized_end=84032 + _globals['_LISTCONFIGSCONFIGSPAYMENTFRONTINGNODE']._serialized_start=84034 + _globals['_LISTCONFIGSCONFIGSPAYMENTFRONTINGNODE']._serialized_end=84110 + _globals['_LISTCONFIGSCONFIGSPIDFILE']._serialized_start=84112 + _globals['_LISTCONFIGSCONFIGSPIDFILE']._serialized_end=84174 + _globals['_LISTCONFIGSCONFIGSPLUGIN']._serialized_start=84176 + _globals['_LISTCONFIGSCONFIGSPLUGIN']._serialized_end=84239 + _globals['_LISTCONFIGSCONFIGSPLUGINDIR']._serialized_start=84241 + _globals['_LISTCONFIGSCONFIGSPLUGINDIR']._serialized_end=84307 + _globals['_LISTCONFIGSCONFIGSPROXY']._serialized_start=84309 + _globals['_LISTCONFIGSCONFIGSPROXY']._serialized_end=84369 + _globals['_LISTCONFIGSCONFIGSRECKLESSDIR']._serialized_start=84371 + _globals['_LISTCONFIGSCONFIGSRECKLESSDIR']._serialized_end=84437 + _globals['_LISTCONFIGSCONFIGSRECOVER']._serialized_start=84439 + _globals['_LISTCONFIGSCONFIGSRECOVER']._serialized_end=84501 + _globals['_LISTCONFIGSCONFIGSREGTEST']._serialized_start=84503 + _globals['_LISTCONFIGSCONFIGSREGTEST']._serialized_end=84559 + _globals['_LISTCONFIGSCONFIGSREQUIRECONFIRMEDINPUTS']._serialized_start=84561 + _globals['_LISTCONFIGSCONFIGSREQUIRECONFIRMEDINPUTS']._serialized_end=84639 + _globals['_LISTCONFIGSCONFIGSRESCAN']._serialized_start=84641 + _globals['_LISTCONFIGSCONFIGSRESCAN']._serialized_end=84702 + _globals['_LISTCONFIGSCONFIGSRGB']._serialized_start=84704 + _globals['_LISTCONFIGSCONFIGSRGB']._serialized_end=84762 + _globals['_LISTCONFIGSCONFIGSRPCFILE']._serialized_start=84764 + _globals['_LISTCONFIGSCONFIGSRPCFILE']._serialized_end=84826 + _globals['_LISTCONFIGSCONFIGSRPCFILEMODE']._serialized_start=84828 + _globals['_LISTCONFIGSCONFIGSRPCFILEMODE']._serialized_end=84894 + _globals['_LISTCONFIGSCONFIGSSIGNET']._serialized_start=84896 + _globals['_LISTCONFIGSCONFIGSSIGNET']._serialized_end=84951 + _globals['_LISTCONFIGSCONFIGSSUBDAEMON']._serialized_start=84953 + _globals['_LISTCONFIGSCONFIGSSUBDAEMON']._serialized_end=85019 + _globals['_LISTCONFIGSCONFIGSTESTNET']._serialized_start=85021 + _globals['_LISTCONFIGSCONFIGSTESTNET']._serialized_end=85077 + _globals['_LISTCONFIGSCONFIGSTORSERVICEPASSWORD']._serialized_start=85079 + _globals['_LISTCONFIGSCONFIGSTORSERVICEPASSWORD']._serialized_end=85152 + _globals['_LISTCONFIGSCONFIGSWALLET']._serialized_start=85154 + _globals['_LISTCONFIGSCONFIGSWALLET']._serialized_end=85215 + _globals['_LISTCONFIGSCONFIGSWATCHTIMEBLOCKS']._serialized_start=85217 + _globals['_LISTCONFIGSCONFIGSWATCHTIMEBLOCKS']._serialized_end=85287 + _globals['_STOPREQUEST']._serialized_start=85289 + _globals['_STOPREQUEST']._serialized_end=85302 + _globals['_STOPRESPONSE']._serialized_start=85304 + _globals['_STOPRESPONSE']._serialized_end=85401 + _globals['_STOPRESPONSE_STOPRESULT']._serialized_start=85366 + _globals['_STOPRESPONSE_STOPRESULT']._serialized_end=85401 + _globals['_HELPREQUEST']._serialized_start=85403 + _globals['_HELPREQUEST']._serialized_end=85450 + _globals['_HELPRESPONSE']._serialized_start=85453 + _globals['_HELPRESPONSE']._serialized_end=85602 + _globals['_HELPRESPONSE_HELPFORMATHINT']._serialized_start=85558 + _globals['_HELPRESPONSE_HELPFORMATHINT']._serialized_end=85586 + _globals['_HELPHELP']._serialized_start=85604 + _globals['_HELPHELP']._serialized_end=85631 + _globals['_PREAPPROVEKEYSENDREQUEST']._serialized_start=85633 + _globals['_PREAPPROVEKEYSENDREQUEST']._serialized_end=85736 + _globals['_PREAPPROVEKEYSENDRESPONSE']._serialized_start=85738 + _globals['_PREAPPROVEKEYSENDRESPONSE']._serialized_end=85765 + _globals['_PREAPPROVEINVOICEREQUEST']._serialized_start=85767 + _globals['_PREAPPROVEINVOICEREQUEST']._serialized_end=85809 + _globals['_PREAPPROVEINVOICERESPONSE']._serialized_start=85811 + _globals['_PREAPPROVEINVOICERESPONSE']._serialized_end=85838 + _globals['_STATICBACKUPREQUEST']._serialized_start=85840 + _globals['_STATICBACKUPREQUEST']._serialized_end=85861 + _globals['_STATICBACKUPRESPONSE']._serialized_start=85863 + _globals['_STATICBACKUPRESPONSE']._serialized_end=85898 + _globals['_BKPRCHANNELSAPYREQUEST']._serialized_start=85900 + _globals['_BKPRCHANNELSAPYREQUEST']._serialized_end=86000 + _globals['_BKPRCHANNELSAPYRESPONSE']._serialized_start=86002 + _globals['_BKPRCHANNELSAPYRESPONSE']._serialized_end=86082 + _globals['_BKPRCHANNELSAPYCHANNELSAPY']._serialized_start=86085 + _globals['_BKPRCHANNELSAPYCHANNELSAPY']._serialized_end=86974 + _globals['_BKPRDUMPINCOMECSVREQUEST']._serialized_start=86977 + _globals['_BKPRDUMPINCOMECSVREQUEST']._serialized_end=87187 + _globals['_BKPRDUMPINCOMECSVRESPONSE']._serialized_start=87190 + _globals['_BKPRDUMPINCOMECSVRESPONSE']._serialized_end=87402 + _globals['_BKPRDUMPINCOMECSVRESPONSE_BKPRDUMPINCOMECSVCSVFORMAT']._serialized_start=87316 + _globals['_BKPRDUMPINCOMECSVRESPONSE_BKPRDUMPINCOMECSVCSVFORMAT']._serialized_end=87402 + _globals['_BKPRINSPECTREQUEST']._serialized_start=87404 + _globals['_BKPRINSPECTREQUEST']._serialized_end=87441 + _globals['_BKPRINSPECTRESPONSE']._serialized_start=87443 + _globals['_BKPRINSPECTRESPONSE']._serialized_end=87498 + _globals['_BKPRINSPECTTXS']._serialized_start=87501 + _globals['_BKPRINSPECTTXS']._serialized_end=87655 + _globals['_BKPRINSPECTTXSOUTPUTS']._serialized_start=87658 + _globals['_BKPRINSPECTTXSOUTPUTS']._serialized_end=88102 + _globals['_BKPRLISTACCOUNTEVENTSREQUEST']._serialized_start=88104 + _globals['_BKPRLISTACCOUNTEVENTSREQUEST']._serialized_end=88208 + _globals['_BKPRLISTACCOUNTEVENTSRESPONSE']._serialized_start=88210 + _globals['_BKPRLISTACCOUNTEVENTSRESPONSE']._serialized_end=88291 + _globals['_BKPRLISTACCOUNTEVENTSEVENTS']._serialized_start=88294 + _globals['_BKPRLISTACCOUNTEVENTSEVENTS']._serialized_end=89011 + _globals['_BKPRLISTACCOUNTEVENTSEVENTS_BKPRLISTACCOUNTEVENTSEVENTSTYPE']._serialized_start=88797 + _globals['_BKPRLISTACCOUNTEVENTSEVENTS_BKPRLISTACCOUNTEVENTSEVENTSTYPE']._serialized_end=88871 + _globals['_BKPRLISTBALANCESREQUEST']._serialized_start=89013 + _globals['_BKPRLISTBALANCESREQUEST']._serialized_end=89038 + _globals['_BKPRLISTBALANCESRESPONSE']._serialized_start=89040 + _globals['_BKPRLISTBALANCESRESPONSE']._serialized_end=89115 + _globals['_BKPRLISTBALANCESACCOUNTS']._serialized_start=89118 + _globals['_BKPRLISTBALANCESACCOUNTS']._serialized_end=89444 + _globals['_BKPRLISTBALANCESACCOUNTSBALANCES']._serialized_start=89446 + _globals['_BKPRLISTBALANCESACCOUNTSBALANCES']._serialized_end=89534 + _globals['_BKPRLISTINCOMEREQUEST']._serialized_start=89537 + _globals['_BKPRLISTINCOMEREQUEST']._serialized_end=89688 + _globals['_BKPRLISTINCOMERESPONSE']._serialized_start=89690 + _globals['_BKPRLISTINCOMERESPONSE']._serialized_end=89770 + _globals['_BKPRLISTINCOMEINCOMEEVENTS']._serialized_start=89773 + _globals['_BKPRLISTINCOMEINCOMEEVENTS']._serialized_end=90081 + _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDREQUEST']._serialized_start=90083 + _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDREQUEST']._serialized_end=90163 + _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDRESPONSE']._serialized_start=90165 + _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDRESPONSE']._serialized_end=90266 + _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATED']._serialized_start=90269 + _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATED']._serialized_end=90944 + _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATED_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATEDTYPE']._serialized_start=90770 + _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATED_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATEDTYPE']._serialized_end=90837 + _globals['_BKPREDITDESCRIPTIONBYOUTPOINTREQUEST']._serialized_start=90946 + _globals['_BKPREDITDESCRIPTIONBYOUTPOINTREQUEST']._serialized_end=91023 + _globals['_BKPREDITDESCRIPTIONBYOUTPOINTRESPONSE']._serialized_start=91025 + _globals['_BKPREDITDESCRIPTIONBYOUTPOINTRESPONSE']._serialized_end=91124 + _globals['_BKPREDITDESCRIPTIONBYOUTPOINTUPDATED']._serialized_start=91127 + _globals['_BKPREDITDESCRIPTIONBYOUTPOINTUPDATED']._serialized_end=91798 + _globals['_BKPREDITDESCRIPTIONBYOUTPOINTUPDATED_BKPREDITDESCRIPTIONBYOUTPOINTUPDATEDTYPE']._serialized_start=91625 + _globals['_BKPREDITDESCRIPTIONBYOUTPOINTUPDATED_BKPREDITDESCRIPTIONBYOUTPOINTUPDATEDTYPE']._serialized_end=91691 + _globals['_BKPRREPORTREQUEST']._serialized_start=91801 + _globals['_BKPRREPORTREQUEST']._serialized_end=91977 + _globals['_BKPRREPORTRESPONSE']._serialized_start=91979 + _globals['_BKPRREPORTRESPONSE']._serialized_end=92015 + _globals['_BLACKLISTRUNEREQUEST']._serialized_start=92017 + _globals['_BLACKLISTRUNEREQUEST']._serialized_end=92127 + _globals['_BLACKLISTRUNERESPONSE']._serialized_start=92129 + _globals['_BLACKLISTRUNERESPONSE']._serialized_end=92200 + _globals['_BLACKLISTRUNEBLACKLIST']._serialized_start=92202 + _globals['_BLACKLISTRUNEBLACKLIST']._serialized_end=92254 + _globals['_CHECKRUNEREQUEST']._serialized_start=92256 + _globals['_CHECKRUNEREQUEST']._serialized_end=92368 + _globals['_CHECKRUNERESPONSE']._serialized_start=92370 + _globals['_CHECKRUNERESPONSE']._serialized_end=92404 + _globals['_CREATERUNEREQUEST']._serialized_start=92406 + _globals['_CREATERUNEREQUEST']._serialized_end=92475 + _globals['_CREATERUNERESPONSE']._serialized_start=92477 + _globals['_CREATERUNERESPONSE']._serialized_end=92600 + _globals['_SHOWRUNESREQUEST']._serialized_start=92602 + _globals['_SHOWRUNESREQUEST']._serialized_end=92648 + _globals['_SHOWRUNESRESPONSE']._serialized_start=92650 + _globals['_SHOWRUNESRESPONSE']._serialized_end=92705 + _globals['_SHOWRUNESRUNES']._serialized_start=92708 + _globals['_SHOWRUNESRUNES']._serialized_end=92993 + _globals['_SHOWRUNESRUNESRESTRICTIONS']._serialized_start=92995 + _globals['_SHOWRUNESRUNESRESTRICTIONS']._serialized_end=93107 + _globals['_SHOWRUNESRUNESRESTRICTIONSALTERNATIVES']._serialized_start=93109 + _globals['_SHOWRUNESRUNESRESTRICTIONSALTERNATIVES']._serialized_end=93219 + _globals['_ASKRENEUNRESERVEREQUEST']._serialized_start=93221 + _globals['_ASKRENEUNRESERVEREQUEST']._serialized_end=93335 + _globals['_ASKRENEUNRESERVERESPONSE']._serialized_start=93337 + _globals['_ASKRENEUNRESERVERESPONSE']._serialized_end=93363 + _globals['_ASKRENEUNRESERVEPATH']._serialized_start=93365 + _globals['_ASKRENEUNRESERVEPATH']._serialized_end=93481 + _globals['_ASKRENELISTLAYERSREQUEST']._serialized_start=93483 + _globals['_ASKRENELISTLAYERSREQUEST']._serialized_end=93539 + _globals['_ASKRENELISTLAYERSRESPONSE']._serialized_start=93541 + _globals['_ASKRENELISTLAYERSRESPONSE']._serialized_end=93614 + _globals['_ASKRENELISTLAYERSLAYERS']._serialized_start=93617 + _globals['_ASKRENELISTLAYERSLAYERS']._serialized_end=94105 + _globals['_ASKRENELISTLAYERSLAYERSBIASES']._serialized_start=94108 + _globals['_ASKRENELISTLAYERSLAYERSBIASES']._serialized_end=94263 + _globals['_ASKRENELISTLAYERSLAYERSCHANNELUPDATES']._serialized_start=94266 + _globals['_ASKRENELISTLAYERSLAYERSCHANNELUPDATES']._serialized_end=94690 + _globals['_ASKRENELISTLAYERSLAYERSCONSTRAINTS']._serialized_start=94693 + _globals['_ASKRENELISTLAYERSLAYERSCONSTRAINTS']._serialized_end=94911 + _globals['_ASKRENELISTLAYERSLAYERSCREATEDCHANNELS']._serialized_start=94914 + _globals['_ASKRENELISTLAYERSLAYERSCREATEDCHANNELS']._serialized_end=95053 + _globals['_ASKRENELISTLAYERSLAYERSIMPRESSIONS']._serialized_start=95055 + _globals['_ASKRENELISTLAYERSLAYERSIMPRESSIONS']._serialized_end=95174 + _globals['_ASKRENELISTLAYERSLAYERSNODEBIASES']._serialized_start=95177 + _globals['_ASKRENELISTLAYERSLAYERSNODEBIASES']._serialized_end=95322 + _globals['_ASKRENECREATELAYERREQUEST']._serialized_start=95324 + _globals['_ASKRENECREATELAYERREQUEST']._serialized_end=95406 + _globals['_ASKRENECREATELAYERRESPONSE']._serialized_start=95408 + _globals['_ASKRENECREATELAYERRESPONSE']._serialized_end=95483 + _globals['_ASKRENECREATELAYERLAYERS']._serialized_start=95486 + _globals['_ASKRENECREATELAYERLAYERS']._serialized_end=95981 + _globals['_ASKRENECREATELAYERLAYERSBIASES']._serialized_start=95984 + _globals['_ASKRENECREATELAYERLAYERSBIASES']._serialized_end=96140 + _globals['_ASKRENECREATELAYERLAYERSCHANNELUPDATES']._serialized_start=96143 + _globals['_ASKRENECREATELAYERLAYERSCHANNELUPDATES']._serialized_end=96480 + _globals['_ASKRENECREATELAYERLAYERSCONSTRAINTS']._serialized_start=96483 + _globals['_ASKRENECREATELAYERLAYERSCONSTRAINTS']._serialized_end=96679 + _globals['_ASKRENECREATELAYERLAYERSCREATEDCHANNELS']._serialized_start=96682 + _globals['_ASKRENECREATELAYERLAYERSCREATEDCHANNELS']._serialized_end=96822 + _globals['_ASKRENECREATELAYERLAYERSIMPRESSIONS']._serialized_start=96824 + _globals['_ASKRENECREATELAYERLAYERSIMPRESSIONS']._serialized_end=96944 + _globals['_ASKRENECREATELAYERLAYERSNODEBIASES']._serialized_start=96947 + _globals['_ASKRENECREATELAYERLAYERSNODEBIASES']._serialized_end=97093 + _globals['_ASKRENEREMOVELAYERREQUEST']._serialized_start=97095 + _globals['_ASKRENEREMOVELAYERREQUEST']._serialized_end=97137 + _globals['_ASKRENEREMOVELAYERRESPONSE']._serialized_start=97139 + _globals['_ASKRENEREMOVELAYERRESPONSE']._serialized_end=97167 + _globals['_ASKRENEREMOVECHANNELUPDATEREQUEST']._serialized_start=97169 + _globals['_ASKRENEREMOVECHANNELUPDATEREQUEST']._serialized_end=97249 + _globals['_ASKRENEREMOVECHANNELUPDATERESPONSE']._serialized_start=97251 + _globals['_ASKRENEREMOVECHANNELUPDATERESPONSE']._serialized_end=97287 + _globals['_ASKRENERESERVEREQUEST']._serialized_start=97289 + _globals['_ASKRENERESERVEREQUEST']._serialized_end=97351 + _globals['_ASKRENERESERVERESPONSE']._serialized_start=97353 + _globals['_ASKRENERESERVERESPONSE']._serialized_end=97377 + _globals['_ASKRENERESERVEPATH']._serialized_start=97379 + _globals['_ASKRENERESERVEPATH']._serialized_end=97493 + _globals['_ASKRENEAGEREQUEST']._serialized_start=97495 + _globals['_ASKRENEAGEREQUEST']._serialized_end=97545 + _globals['_ASKRENEAGERESPONSE']._serialized_start=97547 + _globals['_ASKRENEAGERESPONSE']._serialized_end=97603 + _globals['_GETROUTESREQUEST']._serialized_start=97606 + _globals['_GETROUTESREQUEST']._serialized_end=97837 + _globals['_GETROUTESRESPONSE']._serialized_start=97839 + _globals['_GETROUTESRESPONSE']._serialized_end=97921 + _globals['_GETROUTESROUTES']._serialized_start=97924 + _globals['_GETROUTESROUTES']._serialized_end=98060 + _globals['_GETROUTESROUTESPATH']._serialized_start=98063 + _globals['_GETROUTESROUTESPATH']._serialized_end=98531 + _globals['_ASKRENEDISABLENODEREQUEST']._serialized_start=98533 + _globals['_ASKRENEDISABLENODEREQUEST']._serialized_end=98589 + _globals['_ASKRENEDISABLENODERESPONSE']._serialized_start=98591 + _globals['_ASKRENEDISABLENODERESPONSE']._serialized_end=98619 + _globals['_ASKRENEINFORMCHANNELREQUEST']._serialized_start=98622 + _globals['_ASKRENEINFORMCHANNELREQUEST']._serialized_end=98888 + _globals['_ASKRENEINFORMCHANNELREQUEST_ASKRENEINFORMCHANNELINFORM']._serialized_start=98809 + _globals['_ASKRENEINFORMCHANNELREQUEST_ASKRENEINFORMCHANNELINFORM']._serialized_end=98888 + _globals['_ASKRENEINFORMCHANNELRESPONSE']._serialized_start=98891 + _globals['_ASKRENEINFORMCHANNELRESPONSE']._serialized_end=99039 + _globals['_ASKRENEINFORMCHANNELCONSTRAINTS']._serialized_start=99042 + _globals['_ASKRENEINFORMCHANNELCONSTRAINTS']._serialized_end=99253 + _globals['_ASKRENEINFORMCHANNELIMPRESSIONS']._serialized_start=99256 + _globals['_ASKRENEINFORMCHANNELIMPRESSIONS']._serialized_end=99387 + _globals['_ASKRENECREATECHANNELREQUEST']._serialized_start=99390 + _globals['_ASKRENECREATECHANNELREQUEST']._serialized_end=99533 + _globals['_ASKRENECREATECHANNELRESPONSE']._serialized_start=99535 + _globals['_ASKRENECREATECHANNELRESPONSE']._serialized_end=99565 + _globals['_ASKRENEUPDATECHANNELREQUEST']._serialized_start=99568 + _globals['_ASKRENEUPDATECHANNELREQUEST']._serialized_end=99997 + _globals['_ASKRENEUPDATECHANNELRESPONSE']._serialized_start=99999 + _globals['_ASKRENEUPDATECHANNELRESPONSE']._serialized_end=100029 + _globals['_ASKRENEBIASCHANNELREQUEST']._serialized_start=100032 + _globals['_ASKRENEBIASCHANNELREQUEST']._serialized_end=100196 + _globals['_ASKRENEBIASCHANNELRESPONSE']._serialized_start=100198 + _globals['_ASKRENEBIASCHANNELRESPONSE']._serialized_end=100273 + _globals['_ASKRENEBIASCHANNELBIASES']._serialized_start=100276 + _globals['_ASKRENEBIASCHANNELBIASES']._serialized_end=100441 + _globals['_ASKRENEBIASNODEREQUEST']._serialized_start=100444 + _globals['_ASKRENEBIASNODEREQUEST']._serialized_end=100608 + _globals['_ASKRENEBIASNODERESPONSE']._serialized_start=100610 + _globals['_ASKRENEBIASNODERESPONSE']._serialized_end=100688 + _globals['_ASKRENEBIASNODENODEBIASES']._serialized_start=100691 + _globals['_ASKRENEBIASNODENODEBIASES']._serialized_end=100843 + _globals['_ASKRENELISTRESERVATIONSREQUEST']._serialized_start=100845 + _globals['_ASKRENELISTRESERVATIONSREQUEST']._serialized_end=100877 + _globals['_ASKRENELISTRESERVATIONSRESPONSE']._serialized_start=100879 + _globals['_ASKRENELISTRESERVATIONSRESPONSE']._serialized_end=100976 + _globals['_ASKRENELISTRESERVATIONSRESERVATIONS']._serialized_start=100979 + _globals['_ASKRENELISTRESERVATIONSRESERVATIONS']._serialized_end=101124 + _globals['_INJECTPAYMENTONIONREQUEST']._serialized_start=101127 + _globals['_INJECTPAYMENTONIONREQUEST']._serialized_end=101500 + _globals['_INJECTPAYMENTONIONRESPONSE']._serialized_start=101502 + _globals['_INJECTPAYMENTONIONRESPONSE']._serialized_end=101621 + _globals['_INJECTONIONMESSAGEREQUEST']._serialized_start=101623 + _globals['_INJECTONIONMESSAGEREQUEST']._serialized_end=101685 + _globals['_INJECTONIONMESSAGERESPONSE']._serialized_start=101687 + _globals['_INJECTONIONMESSAGERESPONSE']._serialized_end=101715 + _globals['_XPAYREQUEST']._serialized_start=101718 + _globals['_XPAYREQUEST']._serialized_end=102161 + _globals['_XPAYRESPONSE']._serialized_start=102164 + _globals['_XPAYRESPONSE']._serialized_end=102325 + _globals['_SIGNMESSAGEWITHKEYREQUEST']._serialized_start=102327 + _globals['_SIGNMESSAGEWITHKEYREQUEST']._serialized_end=102388 + _globals['_SIGNMESSAGEWITHKEYRESPONSE']._serialized_start=102390 + _globals['_SIGNMESSAGEWITHKEYRESPONSE']._serialized_end=102486 + _globals['_LISTCHANNELMOVESREQUEST']._serialized_start=102489 + _globals['_LISTCHANNELMOVESREQUEST']._serialized_end=102694 + _globals['_LISTCHANNELMOVESREQUEST_LISTCHANNELMOVESINDEX']._serialized_start=102628 + _globals['_LISTCHANNELMOVESREQUEST_LISTCHANNELMOVESINDEX']._serialized_end=102664 + _globals['_LISTCHANNELMOVESRESPONSE']._serialized_start=102696 + _globals['_LISTCHANNELMOVESRESPONSE']._serialized_end=102779 + _globals['_LISTCHANNELMOVESCHANNELMOVES']._serialized_start=102782 + _globals['_LISTCHANNELMOVESCHANNELMOVES']._serialized_end=103335 + _globals['_LISTCHANNELMOVESCHANNELMOVES_LISTCHANNELMOVESCHANNELMOVESPRIMARYTAG']._serialized_start=103143 + _globals['_LISTCHANNELMOVESCHANNELMOVES_LISTCHANNELMOVESCHANNELMOVESPRIMARYTAG']._serialized_end=103293 + _globals['_LISTCHAINMOVESREQUEST']._serialized_start=103338 + _globals['_LISTCHAINMOVESREQUEST']._serialized_end=103535 + _globals['_LISTCHAINMOVESREQUEST_LISTCHAINMOVESINDEX']._serialized_start=103471 + _globals['_LISTCHAINMOVESREQUEST_LISTCHAINMOVESINDEX']._serialized_end=103505 + _globals['_LISTCHAINMOVESRESPONSE']._serialized_start=103537 + _globals['_LISTCHAINMOVESRESPONSE']._serialized_end=103612 + _globals['_LISTCHAINMOVESCHAINMOVES']._serialized_start=103615 + _globals['_LISTCHAINMOVESCHAINMOVES']._serialized_end=104467 + _globals['_LISTCHAINMOVESCHAINMOVES_LISTCHAINMOVESCHAINMOVESPRIMARYTAG']._serialized_start=104102 + _globals['_LISTCHAINMOVESCHAINMOVES_LISTCHAINMOVESCHAINMOVESPRIMARYTAG']._serialized_end=104379 + _globals['_LISTNETWORKEVENTSREQUEST']._serialized_start=104470 + _globals['_LISTNETWORKEVENTSREQUEST']._serialized_end=104703 + _globals['_LISTNETWORKEVENTSREQUEST_LISTNETWORKEVENTSINDEX']._serialized_start=104629 + _globals['_LISTNETWORKEVENTSREQUEST_LISTNETWORKEVENTSINDEX']._serialized_end=104666 + _globals['_LISTNETWORKEVENTSRESPONSE']._serialized_start=104705 + _globals['_LISTNETWORKEVENTSRESPONSE']._serialized_end=104792 + _globals['_LISTNETWORKEVENTSNETWORKEVENTS']._serialized_start=104795 + _globals['_LISTNETWORKEVENTSNETWORKEVENTS']._serialized_end=105037 + _globals['_DELNETWORKEVENTREQUEST']._serialized_start=105039 + _globals['_DELNETWORKEVENTREQUEST']._serialized_end=105086 + _globals['_DELNETWORKEVENTRESPONSE']._serialized_start=105088 + _globals['_DELNETWORKEVENTRESPONSE']._serialized_end=105113 + _globals['_CLNRESTREGISTERPATHREQUEST']._serialized_start=105116 + _globals['_CLNRESTREGISTERPATHREQUEST']._serialized_end=105362 + _globals['_CLNRESTREGISTERPATHRESPONSE']._serialized_start=105364 + _globals['_CLNRESTREGISTERPATHRESPONSE']._serialized_end=105393 + _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS']._serialized_start=105396 + _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS']._serialized_end=105614 + _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS_PARAMSENTRY']._serialized_start=105547 + _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS_PARAMSENTRY']._serialized_end=105592 + _globals['_LISTCURRENCYRATESREQUEST']._serialized_start=105616 + _globals['_LISTCURRENCYRATESREQUEST']._serialized_end=105660 + _globals['_LISTCURRENCYRATESRESPONSE']._serialized_start=105662 + _globals['_LISTCURRENCYRATESRESPONSE']._serialized_end=105749 + _globals['_LISTCURRENCYRATESCURRENCYRATES']._serialized_start=105751 + _globals['_LISTCURRENCYRATESCURRENCYRATES']._serialized_end=105815 + _globals['_CURRENCYCONVERTREQUEST']._serialized_start=105817 + _globals['_CURRENCYCONVERTREQUEST']._serialized_end=105875 + _globals['_CURRENCYCONVERTRESPONSE']._serialized_start=105877 + _globals['_CURRENCYCONVERTRESPONSE']._serialized_end=105929 + _globals['_CURRENCYRATEREQUEST']._serialized_start=105931 + _globals['_CURRENCYRATEREQUEST']._serialized_end=106002 + _globals['_CURRENCYRATERESPONSE']._serialized_start=106004 + _globals['_CURRENCYRATERESPONSE']._serialized_end=106040 + _globals['_SENDAMOUNTREQUEST']._serialized_start=106043 + _globals['_SENDAMOUNTREQUEST']._serialized_end=106320 + _globals['_SENDAMOUNTRESPONSE']._serialized_start=106323 + _globals['_SENDAMOUNTRESPONSE']._serialized_end=106490 + _globals['_CREATEPROOFREQUEST']._serialized_start=106492 + _globals['_CREATEPROOFREQUEST']._serialized_end=106593 + _globals['_CREATEPROOFRESPONSE']._serialized_start=106595 + _globals['_CREATEPROOFRESPONSE']._serialized_end=106656 + _globals['_CREATEPROOFPROOFS']._serialized_start=106659 + _globals['_CREATEPROOFPROOFS']._serialized_end=106841 + _globals['_XKEYSENDREQUEST']._serialized_start=106844 + _globals['_XKEYSENDREQUEST']._serialized_end=107187 + _globals['_XKEYSENDREQUEST_EXTRATLVSENTRY']._serialized_start=107091 + _globals['_XKEYSENDREQUEST_EXTRATLVSENTRY']._serialized_end=107139 + _globals['_XKEYSENDRESPONSE']._serialized_start=107190 + _globals['_XKEYSENDRESPONSE']._serialized_end=107355 + _globals['_GRACEFULREQUEST']._serialized_start=107357 + _globals['_GRACEFULREQUEST']._serialized_end=107408 + _globals['_GRACEFULRESPONSE']._serialized_start=107410 + _globals['_GRACEFULRESPONSE']._serialized_end=107482 + _globals['_RECKLESSREQUEST']._serialized_start=107485 + _globals['_RECKLESSREQUEST']._serialized_end=108061 + _globals['_RECKLESSREQUEST_RECKLESSCOMMAND']._serialized_start=107774 + _globals['_RECKLESSREQUEST_RECKLESSCOMMAND']._serialized_end=107925 + _globals['_RECKLESSREQUEST_RECKLESSSUBCOMMAND']._serialized_start=107927 + _globals['_RECKLESSREQUEST_RECKLESSSUBCOMMAND']._serialized_end=107978 + _globals['_RECKLESSRESPONSE']._serialized_start=108064 + _globals['_RECKLESSRESPONSE']._serialized_end=108520 + _globals['_RECKLESSDISABLE']._serialized_start=108522 + _globals['_RECKLESSDISABLE']._serialized_end=108560 + _globals['_RECKLESSENABLE']._serialized_start=108562 + _globals['_RECKLESSENABLE']._serialized_end=108599 + _globals['_RECKLESSINSTALL']._serialized_start=108601 + _globals['_RECKLESSINSTALL']._serialized_end=108708 + _globals['_RECKLESSLISTAVAILABLE']._serialized_start=108711 + _globals['_RECKLESSLISTAVAILABLE']._serialized_end=109084 + _globals['_RECKLESSLISTAVAILABLE_RECKLESSLISTAVAILABLEINSTALLER']._serialized_start=108906 + _globals['_RECKLESSLISTAVAILABLE_RECKLESSLISTAVAILABLEINSTALLER']._serialized_end=109084 + _globals['_RECKLESSLISTAVAILABLEMANIFEST']._serialized_start=109087 + _globals['_RECKLESSLISTAVAILABLEMANIFEST']._serialized_end=109385 + _globals['_RECKLESSLISTINTALLED']._serialized_start=109388 + _globals['_RECKLESSLISTINTALLED']._serialized_end=109614 + _globals['_RECKLESSTIP']._serialized_start=109617 + _globals['_RECKLESSTIP']._serialized_end=109777 + _globals['_RECKLESSUNINSTALL']._serialized_start=109779 + _globals['_RECKLESSUNINSTALL']._serialized_end=109819 + _globals['_RECKLESSUPDATE']._serialized_start=109821 + _globals['_RECKLESSUPDATE']._serialized_end=109927 + _globals['_STREAMBALANCESNAPSHOTREQUEST']._serialized_start=109929 + _globals['_STREAMBALANCESNAPSHOTREQUEST']._serialized_end=109959 + _globals['_BALANCESNAPSHOTNOTIFICATION']._serialized_start=109962 + _globals['_BALANCESNAPSHOTNOTIFICATION']._serialized_end=110096 + _globals['_BALANCESNAPSHOTACCOUNTS']._serialized_start=110098 + _globals['_BALANCESNAPSHOTACCOUNTS']._serialized_end=110197 + _globals['_STREAMBLOCKADDEDREQUEST']._serialized_start=110199 + _globals['_STREAMBLOCKADDEDREQUEST']._serialized_end=110224 + _globals['_BLOCKADDEDNOTIFICATION']._serialized_start=110226 + _globals['_BLOCKADDEDNOTIFICATION']._serialized_end=110280 + _globals['_STREAMCHANNELOPENFAILEDREQUEST']._serialized_start=110282 + _globals['_STREAMCHANNELOPENFAILEDREQUEST']._serialized_end=110314 + _globals['_CHANNELOPENFAILEDNOTIFICATION']._serialized_start=110316 + _globals['_CHANNELOPENFAILEDNOTIFICATION']._serialized_end=110367 + _globals['_STREAMCHANNELOPENEDREQUEST']._serialized_start=110369 + _globals['_STREAMCHANNELOPENEDREQUEST']._serialized_end=110397 + _globals['_CHANNELOPENEDNOTIFICATION']._serialized_start=110399 + _globals['_CHANNELOPENEDNOTIFICATION']._serialized_end=110518 + _globals['_STREAMCHANNELSTATECHANGEDREQUEST']._serialized_start=110520 + _globals['_STREAMCHANNELSTATECHANGEDREQUEST']._serialized_end=110554 + _globals['_CHANNELSTATECHANGEDNOTIFICATION']._serialized_start=110557 + _globals['_CHANNELSTATECHANGEDNOTIFICATION']._serialized_end=111006 + _globals['_CHANNELSTATECHANGEDNOTIFICATION_CHANNELSTATECHANGEDCAUSE']._serialized_start=110860 + _globals['_CHANNELSTATECHANGEDNOTIFICATION_CHANNELSTATECHANGEDCAUSE']._serialized_end=110959 + _globals['_STREAMCONNECTREQUEST']._serialized_start=111008 + _globals['_STREAMCONNECTREQUEST']._serialized_end=111030 + _globals['_PEERCONNECTNOTIFICATION']._serialized_start=111033 + _globals['_PEERCONNECTNOTIFICATION']._serialized_end=111223 + _globals['_PEERCONNECTNOTIFICATION_PEERCONNECTDIRECTION']._serialized_start=111184 + _globals['_PEERCONNECTNOTIFICATION_PEERCONNECTDIRECTION']._serialized_end=111223 + _globals['_PEERCONNECTADDRESS']._serialized_start=111226 + _globals['_PEERCONNECTADDRESS']._serialized_end=111508 + _globals['_PEERCONNECTADDRESS_PEERCONNECTADDRESSTYPE']._serialized_start=111377 + _globals['_PEERCONNECTADDRESS_PEERCONNECTADDRESSTYPE']._serialized_end=111476 + _globals['_STREAMCOINMOVEMENTREQUEST']._serialized_start=111510 + _globals['_STREAMCOINMOVEMENTREQUEST']._serialized_end=111537 + _globals['_COINMOVEMENTNOTIFICATION']._serialized_start=111540 + _globals['_COINMOVEMENTNOTIFICATION']._serialized_end=112995 + _globals['_COINMOVEMENTNOTIFICATION_COINMOVEMENTPRIMARYTAG']._serialized_start=112334 + _globals['_COINMOVEMENTNOTIFICATION_COINMOVEMENTPRIMARYTAG']._serialized_end=112709 + _globals['_COINMOVEMENTNOTIFICATION_COINMOVEMENTTYPE']._serialized_start=112711 + _globals['_COINMOVEMENTNOTIFICATION_COINMOVEMENTTYPE']._serialized_end=112761 + _globals['_STREAMCUSTOMMSGREQUEST']._serialized_start=112997 + _globals['_STREAMCUSTOMMSGREQUEST']._serialized_end=113021 + _globals['_CUSTOMMSGNOTIFICATION']._serialized_start=113023 + _globals['_CUSTOMMSGNOTIFICATION']._serialized_end=113080 + _globals['_STREAMDEPRECATEDONESHOTREQUEST']._serialized_start=113082 + _globals['_STREAMDEPRECATEDONESHOTREQUEST']._serialized_end=113114 + _globals['_DEPRECATEDONESHOTNOTIFICATION']._serialized_start=113116 + _globals['_DEPRECATEDONESHOTNOTIFICATION']._serialized_end=113170 + _globals['_STREAMDISCONNECTREQUEST']._serialized_start=113172 + _globals['_STREAMDISCONNECTREQUEST']._serialized_end=113197 + _globals['_DISCONNECTNOTIFICATION']._serialized_start=113199 + _globals['_DISCONNECTNOTIFICATION']._serialized_end=113235 + _globals['_STREAMFORWARDEVENTREQUEST']._serialized_start=113237 + _globals['_STREAMFORWARDEVENTREQUEST']._serialized_end=113264 + _globals['_FORWARDEVENTNOTIFICATION']._serialized_start=113267 + _globals['_FORWARDEVENTNOTIFICATION']._serialized_end=113915 + _globals['_FORWARDEVENTNOTIFICATION_FORWARDEVENTSTATUS']._serialized_start=113699 + _globals['_FORWARDEVENTNOTIFICATION_FORWARDEVENTSTATUS']._serialized_end=113775 + _globals['_FORWARDEVENTNOTIFICATION_FORWARDEVENTSTYLE']._serialized_start=113777 + _globals['_FORWARDEVENTNOTIFICATION_FORWARDEVENTSTYLE']._serialized_end=113817 + _globals['_STREAMINVOICECREATIONREQUEST']._serialized_start=113917 + _globals['_STREAMINVOICECREATIONREQUEST']._serialized_end=113947 + _globals['_INVOICECREATIONNOTIFICATION']._serialized_start=113950 + _globals['_INVOICECREATIONNOTIFICATION']._serialized_end=114089 + _globals['_STREAMINVOICEPAYMENTREQUEST']._serialized_start=114091 + _globals['_STREAMINVOICEPAYMENTREQUEST']._serialized_end=114120 + _globals['_INVOICEPAYMENTNOTIFICATION']._serialized_start=114123 + _globals['_INVOICEPAYMENTNOTIFICATION']._serialized_end=114262 + _globals['_STREAMLOGREQUEST']._serialized_start=114264 + _globals['_STREAMLOGREQUEST']._serialized_end=114282 + _globals['_LOGNOTIFICATION']._serialized_start=114285 + _globals['_LOGNOTIFICATION']._serialized_end=114487 + _globals['_LOGNOTIFICATION_LOGLEVEL']._serialized_start=114412 + _globals['_LOGNOTIFICATION_LOGLEVEL']._serialized_end=114487 + _globals['_STREAMONIONMESSAGEFORWARDFAILREQUEST']._serialized_start=114489 + _globals['_STREAMONIONMESSAGEFORWARDFAILREQUEST']._serialized_end=114527 + _globals['_ONIONMESSAGEFORWARDFAILNOTIFICATION']._serialized_start=114530 + _globals['_ONIONMESSAGEFORWARDFAILNOTIFICATION']._serialized_end=114769 + _globals['_STREAMOPENCHANNELPEERSIGSREQUEST']._serialized_start=114771 + _globals['_STREAMOPENCHANNELPEERSIGSREQUEST']._serialized_end=114805 + _globals['_OPENCHANNELPEERSIGSNOTIFICATION']._serialized_start=114807 + _globals['_OPENCHANNELPEERSIGSNOTIFICATION']._serialized_end=114881 + _globals['_STREAMPLUGINSTARTEDREQUEST']._serialized_start=114883 + _globals['_STREAMPLUGINSTARTEDREQUEST']._serialized_end=114911 + _globals['_PLUGINSTARTEDNOTIFICATION']._serialized_start=114913 + _globals['_PLUGINSTARTEDNOTIFICATION']._serialized_end=114999 + _globals['_STREAMPLUGINSTOPPEDREQUEST']._serialized_start=115001 + _globals['_STREAMPLUGINSTOPPEDREQUEST']._serialized_end=115029 + _globals['_PLUGINSTOPPEDNOTIFICATION']._serialized_start=115031 + _globals['_PLUGINSTOPPEDNOTIFICATION']._serialized_end=115117 + _globals['_STREAMSENDPAYFAILUREREQUEST']._serialized_start=115119 + _globals['_STREAMSENDPAYFAILUREREQUEST']._serialized_end=115148 + _globals['_SENDPAYFAILURENOTIFICATION']._serialized_start=115150 + _globals['_SENDPAYFAILURENOTIFICATION']._serialized_end=115248 + _globals['_SENDPAYFAILUREDATA']._serialized_start=115251 + _globals['_SENDPAYFAILUREDATA']._serialized_end=116468 + _globals['_SENDPAYFAILUREDATA_SENDPAYFAILUREDATASTATUS']._serialized_start=116006 + _globals['_SENDPAYFAILUREDATA_SENDPAYFAILUREDATASTATUS']._serialized_end=116071 + _globals['_STREAMSENDPAYSUCCESSREQUEST']._serialized_start=116470 + _globals['_STREAMSENDPAYSUCCESSREQUEST']._serialized_end=116499 + _globals['_SENDPAYSUCCESSNOTIFICATION']._serialized_start=116502 + _globals['_SENDPAYSUCCESSNOTIFICATION']._serialized_end=117218 + _globals['_SENDPAYSUCCESSNOTIFICATION_SENDPAYSUCCESSSTATUS']._serialized_start=117020 + _globals['_SENDPAYSUCCESSNOTIFICATION_SENDPAYSUCCESSSTATUS']._serialized_end=117056 + _globals['_STREAMSHUTDOWNREQUEST']._serialized_start=117220 + _globals['_STREAMSHUTDOWNREQUEST']._serialized_end=117243 + _globals['_SHUTDOWNNOTIFICATION']._serialized_start=117245 + _globals['_SHUTDOWNNOTIFICATION']._serialized_end=117267 + _globals['_STREAMWARNINGREQUEST']._serialized_start=117269 + _globals['_STREAMWARNINGREQUEST']._serialized_end=117291 + _globals['_WARNINGNOTIFICATION']._serialized_start=117294 + _globals['_WARNINGNOTIFICATION']._serialized_end=117468 + _globals['_WARNINGNOTIFICATION_WARNINGLEVEL']._serialized_start=117433 + _globals['_WARNINGNOTIFICATION_WARNINGLEVEL']._serialized_end=117468 + _globals['_STREAMPAYPARTENDREQUEST']._serialized_start=117470 + _globals['_STREAMPAYPARTENDREQUEST']._serialized_end=117495 + _globals['_PAYPARTENDNOTIFICATION']._serialized_start=117498 + _globals['_PAYPARTENDNOTIFICATION']._serialized_end=117995 + _globals['_PAYPARTENDNOTIFICATION_PAYPARTENDSTATUS']._serialized_start=117835 + _globals['_PAYPARTENDNOTIFICATION_PAYPARTENDSTATUS']._serialized_end=117879 + _globals['_STREAMPAYPARTSTARTREQUEST']._serialized_start=117997 + _globals['_STREAMPAYPARTSTARTREQUEST']._serialized_end=118024 + _globals['_PAYPARTSTARTNOTIFICATION']._serialized_start=118027 + _globals['_PAYPARTSTARTNOTIFICATION']._serialized_end=118221 + _globals['_PAYPARTSTARTHOPS']._serialized_start=118224 + _globals['_PAYPARTSTARTHOPS']._serialized_end=118383 + _globals['_STREAMRECKLESSLOGREQUEST']._serialized_start=118385 + _globals['_STREAMRECKLESSLOGREQUEST']._serialized_end=118411 + _globals['_RECKLESSLOGNOTIFICATION']._serialized_start=118414 + _globals['_RECKLESSLOGNOTIFICATION']._serialized_end=118632 + _globals['_RECKLESSLOGNOTIFICATION_RECKLESSLOGLEVEL']._serialized_start=118549 + _globals['_RECKLESSLOGNOTIFICATION_RECKLESSLOGLEVEL']._serialized_end=118632 + _globals['_NODE']._serialized_start=118635 + _globals['_NODE']._serialized_end=132153 # @@protoc_insertion_point(module_scope) diff --git a/contrib/pyln-grpc-proto/pyln/grpc/node_pb2_grpc.py b/contrib/pyln-grpc-proto/pyln/grpc/node_pb2_grpc.py index ab8bd868c93e..64ba021f0ee3 100644 --- a/contrib/pyln-grpc-proto/pyln/grpc/node_pb2_grpc.py +++ b/contrib/pyln-grpc-proto/pyln/grpc/node_pb2_grpc.py @@ -799,6 +799,11 @@ def __init__(self, channel): request_serializer=node__pb2.GracefulRequest.SerializeToString, response_deserializer=node__pb2.GracefulResponse.FromString, _registered_method=True) + self.Reckless = channel.unary_unary( + '/cln.Node/Reckless', + request_serializer=node__pb2.RecklessRequest.SerializeToString, + response_deserializer=node__pb2.RecklessResponse.FromString, + _registered_method=True) self.SubscribeBalanceSnapshot = channel.unary_stream( '/cln.Node/SubscribeBalanceSnapshot', request_serializer=node__pb2.StreamBalanceSnapshotRequest.SerializeToString, @@ -919,6 +924,11 @@ def __init__(self, channel): request_serializer=node__pb2.StreamPayPartStartRequest.SerializeToString, response_deserializer=node__pb2.PayPartStartNotification.FromString, _registered_method=True) + self.SubscribeRecklessLog = channel.unary_stream( + '/cln.Node/SubscribeRecklessLog', + request_serializer=node__pb2.StreamRecklessLogRequest.SerializeToString, + response_deserializer=node__pb2.RecklessLogNotification.FromString, + _registered_method=True) class NodeServicer(object): @@ -1842,6 +1852,12 @@ def Graceful(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def Reckless(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def SubscribeBalanceSnapshot(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -1986,6 +2002,12 @@ def SubscribePayPartStart(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def SubscribeRecklessLog(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_NodeServicer_to_server(servicer, server): rpc_method_handlers = { @@ -2754,6 +2776,11 @@ def add_NodeServicer_to_server(servicer, server): request_deserializer=node__pb2.GracefulRequest.FromString, response_serializer=node__pb2.GracefulResponse.SerializeToString, ), + 'Reckless': grpc.unary_unary_rpc_method_handler( + servicer.Reckless, + request_deserializer=node__pb2.RecklessRequest.FromString, + response_serializer=node__pb2.RecklessResponse.SerializeToString, + ), 'SubscribeBalanceSnapshot': grpc.unary_stream_rpc_method_handler( servicer.SubscribeBalanceSnapshot, request_deserializer=node__pb2.StreamBalanceSnapshotRequest.FromString, @@ -2874,6 +2901,11 @@ def add_NodeServicer_to_server(servicer, server): request_deserializer=node__pb2.StreamPayPartStartRequest.FromString, response_serializer=node__pb2.PayPartStartNotification.SerializeToString, ), + 'SubscribeRecklessLog': grpc.unary_stream_rpc_method_handler( + servicer.SubscribeRecklessLog, + request_deserializer=node__pb2.StreamRecklessLogRequest.FromString, + response_serializer=node__pb2.RecklessLogNotification.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'cln.Node', rpc_method_handlers) @@ -7016,6 +7048,33 @@ def Graceful(request, metadata, _registered_method=True) + @staticmethod + def Reckless(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/cln.Node/Reckless', + node__pb2.RecklessRequest.SerializeToString, + node__pb2.RecklessResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + @staticmethod def SubscribeBalanceSnapshot(request, target, @@ -7663,3 +7722,30 @@ def SubscribePayPartStart(request, timeout, metadata, _registered_method=True) + + @staticmethod + def SubscribeRecklessLog(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_stream( + request, + target, + '/cln.Node/SubscribeRecklessLog', + node__pb2.StreamRecklessLogRequest.SerializeToString, + node__pb2.RecklessLogNotification.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) diff --git a/contrib/pyln-testing/pyln/testing/grpc2py.py b/contrib/pyln-testing/pyln/testing/grpc2py.py index fef3c546a9f1..eff750b2975e 100644 --- a/contrib/pyln-testing/pyln/testing/grpc2py.py +++ b/contrib/pyln-testing/pyln/testing/grpc2py.py @@ -2678,6 +2678,13 @@ def listconfigs_configs_proxy2py(m): }) +def listconfigs_configs_reckless_dir2py(m): + return remove_default({ + "source": m.source, # PrimitiveField in generate_composite + "value_str": m.value_str, # PrimitiveField in generate_composite + }) + + def listconfigs_configs_recover2py(m): return remove_default({ "source": m.source, # PrimitiveField in generate_composite @@ -3557,6 +3564,92 @@ def graceful2py(m): }) +def reckless_disable2py(m): + return remove_default({ + "plugin_name": m.plugin_name, # PrimitiveField in generate_composite + }) + + +def reckless_enable2py(m): + return remove_default({ + "plugin_name": m.plugin_name, # PrimitiveField in generate_composite + }) + + +def reckless_install2py(m): + return remove_default({ + "enabled": m.enabled, # PrimitiveField in generate_composite + "installed_commit": m.installed_commit, # PrimitiveField in generate_composite + "plugin_name": m.plugin_name, # PrimitiveField in generate_composite + }) + + +def reckless_listavailable_manifest2py(m): + return remove_default({ + "dependencies": [m.dependencies for i in m.dependencies], # ArrayField[primitive] in generate_composite + "install_cmd": [m.install_cmd for i in m.install_cmd], # ArrayField[primitive] in generate_composite + "required_options": [m.required_options for i in m.required_options], # ArrayField[primitive] in generate_composite + "entrypoint": m.entrypoint, # PrimitiveField in generate_composite + "installable": m.installable, # PrimitiveField in generate_composite + "long_description": m.long_description, # PrimitiveField in generate_composite + "offer": m.offer, # PrimitiveField in generate_composite + "short_description": m.short_description, # PrimitiveField in generate_composite + }) + + +def reckless_listavailable2py(m): + return remove_default({ + "installer": str(m.installer), # EnumField in generate_composite + "origin": m.origin, # PrimitiveField in generate_composite + "plugin_name": m.plugin_name, # PrimitiveField in generate_composite + }) + + +def reckless_listintalled2py(m): + return remove_default({ + "installation_date": m.installation_date, # PrimitiveField in generate_composite + "installation_time": m.installation_time, # PrimitiveField in generate_composite + "installed_commit": m.installed_commit, # PrimitiveField in generate_composite + "original_source": m.original_source, # PrimitiveField in generate_composite + "plugin_name": m.plugin_name, # PrimitiveField in generate_composite + "requested_commit": m.requested_commit, # PrimitiveField in generate_composite + }) + + +def reckless_tip2py(m): + return remove_default({ + "amount_msat": amount2msat(m.amount_msat), # PrimitiveField in generate_composite + "amount_sent_msat": amount2msat(m.amount_sent_msat), # PrimitiveField in generate_composite + "failed_parts": m.failed_parts, # PrimitiveField in generate_composite + "payment_preimage": hexlify(m.payment_preimage), # PrimitiveField in generate_composite + "successful_parts": m.successful_parts, # PrimitiveField in generate_composite + }) + + +def reckless_uninstall2py(m): + return remove_default({ + "plugin_name": m.plugin_name, # PrimitiveField in generate_composite + }) + + +def reckless_update2py(m): + return remove_default({ + "enabled": m.enabled, # PrimitiveField in generate_composite + "installed_commit": m.installed_commit, # PrimitiveField in generate_composite + "plugin_name": m.plugin_name, # PrimitiveField in generate_composite + }) + + +def reckless2py(m): + return remove_default({ + "listavailable": [reckless_listavailable2py(i) for i in m.listavailable], # ArrayField[composite] in generate_composite + "listintalled": [reckless_listintalled2py(i) for i in m.listintalled], # ArrayField[composite] in generate_composite + "log": [m.log for i in m.log], # ArrayField[primitive] in generate_composite + "sources": [m.sources for i in m.sources], # ArrayField[primitive] in generate_composite + "update": [reckless_update2py(i) for i in m.update], # ArrayField[composite] in generate_composite + }) + + def decodekeysend_routes2py(m): # manual override return remove_default({ "expirydelta": m.expirydelta, diff --git a/contrib/pyln-testing/pyln/testing/utils.py b/contrib/pyln-testing/pyln/testing/utils.py index 55c327d3b9ec..822d0e1705c8 100644 --- a/contrib/pyln-testing/pyln/testing/utils.py +++ b/contrib/pyln-testing/pyln/testing/utils.py @@ -1064,7 +1064,7 @@ def __init__(self, node_id, lightning_dir, bitcoind, executor, may_fail=False, if dsn is not None: self.daemon.opts['wallet'] = dsn if VALGRIND: - trace_skip_pattern = '*python*,*bitcoin-cli*,*elements-cli*,*cln-grpc*,*clnrest*,*wss-proxy*,*cln-bip353*,*reckless,*cln-currencyrate*' + trace_skip_pattern = '*python*,*bitcoin-cli*,*elements-cli*,*cln-grpc*,*clnrest*,*wss-proxy*,*cln-bip353*,*cln-reckless*,*cln-currencyrate*' if not valgrind_plugins: trace_skip_pattern += ',*plugins*' self.daemon.cmd_prefix = [ diff --git a/doc/Makefile b/doc/Makefile index 2775eb1c9c49..2af53ffee32e 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -191,8 +191,7 @@ NON_PREFIXED_MANPAGES := doc/lightning-cli.1 \ doc/lightningd-config.5 \ doc/lightningd-rpc.7 \ doc/lightning-hsmtool.8 \ - doc/lightning-downgrade.8 \ - doc/lightning-reckless.1 + doc/lightning-downgrade.8 MANPAGES := $(PREFIXED_MANPAGES) $(NON_PREFIXED_MANPAGES) diff --git a/doc/developers-guide/plugin-development/plugin-manager.md b/doc/developers-guide/plugin-development/plugin-manager.md index 418ba3206cbb..70b38fbc9f66 100644 --- a/doc/developers-guide/plugin-development/plugin-manager.md +++ b/doc/developers-guide/plugin-development/plugin-manager.md @@ -6,18 +6,6 @@ content: privacy: view: public --- -`reckless` is a plugin manager for Core Lightning that you can use to install and uninstall [plugins](doc:plugins) with a single command. +`reckless` is a plugin manager for Core Lightning that you can use to install and uninstall (and more!) [plugins](doc:plugins) with a single command. -To make your plugin compatible with reckless install: - -- Choose a unique plugin name. -- The plugin entrypoint is inferred. Naming your plugin executable the same as your plugin name will allow reckless to identify it correctly (file extensions are okay). -- For python plugins, a requirements.txt is the preferred medium for python dependencies. A pyproject.toml will be used as a fallback, but test installation via `pip install -e .` - Poetry looks for additional files in the working directory, whereas with pip, any references to these will require something like `packages = [{ include = "*.py" }]` under the `[tool.poetry]` section. -- Additional repository sources may be added with `reckless source add https://my.repo.url/here` however https://github.com/lightningd/plugins is included by default. Consider adding your plugin lightningd/plugins to make installation simpler. -- If your plugin is located in a subdirectory of your repo with a different name than your plugin, it will likely be overlooked. - -> 📘 -> -> As reckless needs to know how to handle and install the dependencies of a plugin, current version only supports python plugins. We are working on a broader support, e.g., for javascript, golang and other popular programming languages. -> -> Stay tuned and tell us what languages you need support for, and what features you're missing. +Please refer to the `reckless` README for more information: [README.md](https://github.com/ElementsProject/lightning/blob/master/plugins/reckless-plugin/README.md) diff --git a/doc/index.rst b/doc/index.rst index 8a1cf769ddd0..b135674494d4 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -110,7 +110,6 @@ Core Lightning Documentation lightning-cli lightning-downgrade lightning-hsmtool - lightning-reckless lightningd lightningd-config lightningd-rpc @@ -158,6 +157,7 @@ Core Lightning Documentation notification-openchannel_peer_sigs notification-plugin_started notification-plugin_stopped + notification-reckless_log notification-sendpay_failure notification-sendpay_success notification-shutdown diff --git a/doc/lightning-reckless.1.md b/doc/lightning-reckless.1.md deleted file mode 100644 index 4a7b476fe989..000000000000 --- a/doc/lightning-reckless.1.md +++ /dev/null @@ -1,159 +0,0 @@ -reckless - install and activate a CLN plugin by name -==================================================== - -SYNOPSIS --------- - -**reckless** [*options*] **install/uninstall/enable/disable/source** *target* - -DESCRIPTION ------------ - -Reckless is a plugin manager for Core-Lightning. Typical plugin -installation involves: finding the source plugin, copying, -installing dependencies, testing, activating, and updating the -lightningd config file. Reckless does all of these by invoking: - -**reckless** **install**[@*commit/tag*] *plugin\_name* - -Alternatively, the source path or URL to the plugin repository can be -passed directly in place of the *plugin\_name*. In either case, the -containing directory or repository should be named for the plugin, don't -pass the plugin's executable/entrypoint directly. - -reckless will exit early in the event that: - -- the plugin is not found in any available source repositories -- dependencies are not successfully installed -- the plugin fails to execute - -Reckless-installed plugins reside in the 'reckless' subdirectory -of the user's `.lightning` folder. By default, plugins are activated -on the `bitcoin` network (and use lightningd's bitcoin network -config), but regtest may also be used. - -Other commands include: - -**reckless** **uninstall** *plugin\_name* - disables the plugin, removes the directory. - -**reckless** **search** *plugin\_name* - looks through all available sources for a plugin matching - this name. - -**reckless** **enable** *plugin\_name* - dynamically enables the reckless-installed plugin and updates - the config to match. - -**reckless** **disable** *plugin\_name* - dynamically disables the reckless-installed plugin and updates - the config to match. - -**reckless** **source** **list** - list available plugin repositories. - -**reckless** **source** **add** *repo\_url* - add another plugin repo for reckless to search. - -**reckless** **source** **rm** *repo\_url* - remove a plugin repo for reckless to search. - -**reckless** **update** *[plugin\_name]* - install the latest commit of a single plugin, or omit to update all - reckless-installed plugins. Does not automatically update if a plugin - was previously installed by requesting a specific git tag or commit. - -OPTIONS -------- - -Available option flags: - -**-d**, **--reckless-dir** *reckless\_dir* - specify an alternative data directory for reckless to use. - Useful if your .lightning is protected from execution. - -**-l**, **--lightning** *lightning\_data\_dir* - lightning data directory (defaults to $USER/.lightning) - -**-c**, **--conf** *lightning\_config* - pass the config used by lightningd - -**-r**, **--regtest** - use the regtest network and config instead of bitcoin mainnet - -**-v**, **--verbose** - request additional debug output - -**--network**=*network* - specify bitcoin, regtest, liquid, liquid-regtest, signet, - or testnet networks. (default: bitcoin) - -NOTES ------ - -Reckless currently supports python, rust, and javascript plugins. - -Running the first time will prompt the user that their lightningd's -bitcoin config will be appended (or created) to inherit the reckless -config file (this config is specific to bitcoin by default.) -Management of plugins will subsequently modify this file. - - -Troubleshooting tips: - -Plugins must be executable. For python plugins, the shebang is -invoked, so **python3** should be available in your environment. This -can be verified with **which Python3**. The default reckless directory -is $USER/.lightning/reckless and it should be possible for the -lightningd user to execute files located here. If this is a problem, -the option flag **reckless -d=`my_alternate_dir`** may be used to -relocate the reckless directory from its default. Consider creating a -permanent alias in this case. - -Python plugins are installed to their own virtual environments. The -environment is activated by a wrapper (named the same as the plugin) -which then imports and executes the actual plugin entrypoint. - -For Plugin Developers: - -To make your plugin compatible with reckless install: - -- Choose a unique plugin name. -- The plugin entrypoint is inferred. Naming your plugin executable - the same as your plugin name will allow reckless to identify it - correctly (file extensions are okay.) -- For python plugins, a requirements.txt is the preferred medium for - python dependencies. A pyproject.toml will be used as a fallback, - but test installation via `pip install -e .` - Poetry looks for - additional files in the working directory, whereas with pip, any - references to these will require something like - `packages = [{ include = "*.py" }]` under the `[tool.poetry]` - section. -- Additional repository sources may be added with - `reckless source add https://my.repo.url/here` however, - https://github.com/lightningd/plugins is included by default. - Consider adding your plugin lightningd/plugins to make - installation simpler. -- If your plugin is located in a subdirectory of your repo with a - different name than your plugin, it will likely be overlooked. - -AUTHOR ------- - -Antoine Poinsot wrote the original reckless plugin on which this is -based. - -Rusty Russell wrote the outline for the reckless utility's function - -Alex Myers [alex@endothermic.dev](mailto:alex@endothermic.dev) is mostly responsible for the -reckless code and this man page, with thanks to Christian Decker for extensive review. - -SEE ALSO --------- - -reckless(7), Core-Lightning plugins repo: [https://github.com/lightningd/plugins](https://github.com/lightningd/plugins) - -RESOURCES ---------- - -Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning) diff --git a/doc/lightningd-config.5.md b/doc/lightningd-config.5.md index aaa3e8fb8bc7..f1802c8ca749 100644 --- a/doc/lightningd-config.5.md +++ b/doc/lightningd-config.5.md @@ -334,6 +334,11 @@ connections. Default is 9736. them over grpc. If buffer overflow occurs some notifications will not be delivered. +* **reckless-dir**=*DIR* + + Set the working directory for reckless, where repositories, metadata, reckless-installed + plugins, and a reckless-installed config is stored. Defaults to `lightning-dir/../reckless` + ### Lightning node customization options * **recover**=*mnemonic* diff --git a/doc/node-operators-guide/plugins.md b/doc/node-operators-guide/plugins.md index be288d921ecc..a7c9fc3ba97d 100644 --- a/doc/node-operators-guide/plugins.md +++ b/doc/node-operators-guide/plugins.md @@ -10,110 +10,6 @@ Power up your Core Lightning node and tailor it for your business needs with com ## Reckless plugin manager -`reckless` is a plugin manager for Core Lightning that you can use to install and uninstall plugins with a single command. +`reckless` is a plugin manager for Core Lightning that you can use to install and uninstall (and more!) plugins with a single command. -> 📘 -> -> Reckless currently supports python plugins only. Additional language support will be provided in future releases. For plugins built by the community in other languages, see the complete list of plugins [here](https://github.com/lightningd/plugins). - -Typical plugin installation involves: finding the source plugin, copying, installing dependencies, testing, activating, and updating the lightningd config file. Reckless does all of these by invoking: - -```shell -reckless install plugin_name -``` - - - -reckless will exit early in the event that: - -- the plugin is not found in any available source repositories -- dependencies are not sucessfully installed -- the plugin fails to execute - -Reckless-installed plugins reside in the 'reckless' subdirectory of the user's `.lightning` folder. By default, plugins are activated on the `bitcoin` network (and use lightningd's bitcoin network config), but regtest may also be used. - -Other commands include: - -Disable the plugin, remove the directory: - -```shell -reckless uninstall plugin_name -``` - - - -Look through all available sources for a plugin matching this name: - -```shell -reckless search plugin_name -``` - - - -Dynamically enable the reckless-installed plugin and update the config to match: - -```shell -reckless enable plugin_name -``` - - - -Dynamically disable the reckless-installed plugin and update the config to match: - -```shell -reckless disable plugin_name -``` - - - -List available plugin repositories: - -```shell -reckless source list -``` - - - -Add another plugin repo for reckless to search: - -```shell -reckless source add repo_url -``` - - - -Remove a plugin repo for reckless to search: - -```shell -reckless source rm repo_url -``` - - - -## Options - -Available option flags: - -**-d**, **--reckless-dir** _reckless\_dir_ - specify an alternative data directory for reckless to use. - Useful if your .lightning is protected from execution. - -**-l**, **--lightning** _lightning\_data\_dir_ - lightning data directory (defaults to $USER/.lightning) - -**-c**, **--conf** _lightning\_config_ - pass the config used by lightningd - -**-r**, **--regtest** - use the regtest network and config instead of bitcoin mainnet - -**-v**, **--verbose** - request additional debug output - -> 📘 -> -> Running the first time will prompt the user that their lightningd's bitcoin config will be appended (or created) to inherit the reckless config file (this config is specific to bitcoin by default.) Management of plugins will subsequently modify this file. - -## Troubleshooting - -Plugins must be executable. For python plugins, the shebang is invoked, so **python3** should be available in your environment. This can be verified with **which Python3**. The default reckless directory is $USER/.lightning/reckless and it should be possible for the lightningd user to execute files located here. If this is a problem, the option flag **reckless -d=\** may be used to relocate the reckless directory from its default. Consider creating a permanent alias in this case. +Please refer to the `reckless` README for more information: [README.md](https://github.com/ElementsProject/lightning/blob/master/plugins/reckless-plugin/README.md) diff --git a/doc/reckless.7.md b/doc/reckless.7.md deleted file mode 100644 index 49918023d56b..000000000000 --- a/doc/reckless.7.md +++ /dev/null @@ -1,167 +0,0 @@ -reckless -- Issue a command to the reckless plugin manager utility -================================================================== - -SYNOPSIS --------- - -**reckless** *command* [*target/subcommand*] [*target*] - -DESCRIPTION ------------ - -The **reckless** RPC starts a reckless process with the *command* and *target* provided. Node configuration, network, and lightning direrctory are automatically passed to the reckless utility. - -- **command** (string) (one of "install", "uninstall", "search", "enable", "disable", "source", "--version"): Determines which command to pass to reckless - - *command* **install** takes a *plugin\_name* to search for and install a named plugin. - - *command* **uninstall** takes a *plugin\_name* and attempts to uninstall a plugin of the same name. - - *command* **search** takes a *plugin\_name* to search for a named plugin. - ... -- **target/subcommand** (one of, optional): Target of a reckless command or a subcommand.: - - (string) - - (array) -- **target** (one of, optional): *name* of a plugin to install/uninstall/search/enable/disable or source to add/remove.: - - (string) - - (array) - -RETURN VALUE ------------- - -On success, an object is returned, containing: - -- **result** (array of strings): Output of the requested reckless command.: - - (string, optional) -- **log** (array of strings): Verbose log entries of the requested reckless command.: - - (string, optional) - -AUTHOR ------- - -Alex Myers [alex@endothermic.dev](mailto:alex@endothermic.dev) is mainly responsible. - -SEE ALSO --------- - -reckless(1) - -RESOURCES ---------- - -Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning) - -EXAMPLES --------- - - -**Example 1**: - -Request: -```shell -lightning-cli reckless -k "command"="search" "target/subcommand"="backup" -``` -```json -{ - "id": "example:reckless#1", - "method": "reckless", - "params": { - "command": "search", - "target/subcommand": "backup" - } -} -``` - -Response: -```json -{ - "result": [ - "https://github.com/lightningd/plugins" - ], - "log": [ - "DEBUG: Warning: Reckless requires write access", - "DEBUG: fetching from gh API: https://api.github.com/repos/lightningd/plugins/contents/", - "DEBUG: fetching from gh API: https://api.github.com/repos/lightningd/plugins/git/trees/294f93d7060799439c994daa84f534c4d1458325", - "INFO: found backup in source: https://github.com/lightningd/plugins", - "DEBUG: entry: None", - "DEBUG: sub-directory: backup" - ] -} -``` - -**Example 2**: - -Request: -```shell -lightning-cli reckless -k "command"="install" "target/subcommand"='["summars", "currecyrate"]' -``` -```json -{ - "id": "example:reckless#2", - "method": "reckless", - "params": { - "command": "install", - "target/subcommand": [ - "summars", - "currecyrate" - ] - } -} -``` - -Response: -```json -{ - "result": [ - "/tmp/l1/reckless/summars", - "/tmp/l1/reckless/currencyrate" - ], - "log": [ - "DEBUG: Searching for summars", - "DEBUG: fetching from gh API: https://api.github.com/repos/lightningd/plugins/contents/", - "DEBUG: fetching from gh API: https://api.github.com/repos/lightningd/plugins/git/trees/294f93d7060799439c994daa84f534c4d1458325", - "INFO: found summars in source: https://github.com/lightningd/plugins", - "DEBUG: entry: None", - "DEBUG: sub-directory: summars", - "DEBUG: Retrieving summars from https://github.com/lightningd/plugins", - "DEBUG: Install requested from InstInfo(summars, https://github.com/lightningd/plugins, None, None, None, summars).", - "INFO: cloning Source.GITHUB_REPO InstInfo(summars, https://github.com/lightningd/plugins, None, None, None, summars)", - "DEBUG: cloned_src: InstInfo(summars, /tmp/reckless-726255950dyifh_fh/clone, None, Cargo.toml, Cargo.toml, summars/summars)", - "DEBUG: using latest commit of default branch", - "DEBUG: checked out HEAD: 5e449468bd57db7d0f33178fe0dc867e0da94133", - "DEBUG: using installer rust", - "DEBUG: creating /tmp/l1/reckless/summars", - "DEBUG: creating /tmp/l1/reckless/summars/source", - "DEBUG: copying /tmp/reckless-726255950dyifh_fh/clone/summars/summars tree to /tmp/l1/reckless/summars/source/summars", - "DEBUG: linking source /tmp/l1/reckless/summars/source/summars/Cargo.toml to /tmp/l1/reckless/summars/Cargo.toml", - "DEBUG: InstInfo(summars, /tmp/l1/reckless/summars, None, Cargo.toml, Cargo.toml, source/summars)", - "DEBUG: cargo installing from /tmp/l1/reckless/summars/source/summars", - "DEBUG: rust project compiled successfully", - "INFO: plugin installed: /tmp/l1/reckless/summars", - "DEBUG: activating summars", - "INFO: summars enabled", - "DEBUG: Searching for currencyrate", - "DEBUG: fetching from gh API: https://api.github.com/repos/lightningd/plugins/contents/", - "DEBUG: fetching from gh API: https://api.github.com/repos/lightningd/plugins/git/trees/294f93d7060799439c994daa84f534c4d1458325", - "INFO: found currencyrate in source: https://github.com/lightningd/plugins", - "DEBUG: entry: None", - "DEBUG: sub-directory: currencyrate", - "DEBUG: Retrieving currencyrate from https://github.com/lightningd/plugins", - "DEBUG: Install requested from InstInfo(currencyrate, https://github.com/lightningd/plugins, None, None, None, currencyrate).", - "INFO: cloning Source.GITHUB_REPO InstInfo(currencyrate, https://github.com/lightningd/plugins, None, None, None, currencyrate)", - "DEBUG: cloned_src: InstInfo(currencyrate, /tmp/reckless-192564272t478naxn/clone, None, currencyrate.py, requirements.txt, currencyrate/currencyrate)", - "DEBUG: using latest commit of default branch", - "DEBUG: checked out HEAD: 5e449468bd57db7d0f33178fe0dc867e0da94133", - "DEBUG: using installer python3venv", - "DEBUG: creating /tmp/l1/reckless/currencyrate", - "DEBUG: creating /tmp/l1/reckless/currencyrate/source", - "DEBUG: copying /tmp/reckless-192564272t478naxn/clone/currencyrate/currencyrate tree to /tmp/l1/reckless/currencyrate/source/currencyrate", - "DEBUG: linking source /tmp/l1/reckless/currencyrate/source/currencyrate/currencyrate.py to /tmp/l1/reckless/currencyrate/currencyrate.py", - "DEBUG: InstInfo(currencyrate, /tmp/l1/reckless/currencyrate, None, currencyrate.py, requirements.txt, source/currencyrate)", - "DEBUG: configuring a python virtual environment (pip) in /tmp/l1/reckless/currencyrate/.venv", - "DEBUG: virtual environment created in /tmp/l1/reckless/currencyrate/.venv.", - "INFO: dependencies installed successfully", - "DEBUG: virtual environment for cloned plugin: .venv", - "INFO: plugin installed: /tmp/l1/reckless/currencyrate", - "DEBUG: activating currencyrate", - "INFO: currencyrate enabled" - ] -} -``` diff --git a/doc/schemas/listconfigs.json b/doc/schemas/listconfigs.json index 662a6413fc04..bde55302c806 100644 --- a/doc/schemas/listconfigs.json +++ b/doc/schemas/listconfigs.json @@ -1962,6 +1962,31 @@ ] } } + }, + "reckless-dir": { + "added": "v26.09", + "type": "object", + "additionalProperties": false, + "required": [ + "value_str", + "source" + ], + "properties": { + "value_str": { + "added": "v26.09", + "type": "string", + "description": [ + "Field from config or cmdline, or default." + ] + }, + "source": { + "added": "v26.09", + "type": "string", + "description": [ + "Source of configuration setting." + ] + } + } } } } diff --git a/doc/schemas/notification/reckless_log.json b/doc/schemas/notification/reckless_log.json new file mode 100644 index 000000000000..db31a19e9840 --- /dev/null +++ b/doc/schemas/notification/reckless_log.json @@ -0,0 +1,54 @@ +{ + "$schema": "../../rpc-schema-draft.json", + "type": "object", + "additionalProperties": false, + "notification": "reckless_log", + "title": "Notification for reckless log events", + "description": [ + "The **reckless_log** notification informs whenever the reckless plugin emits a log message during **install** or **update**" + ], + "added": "v26.09", + "request": {}, + "response": { + "required": [ + "level", + "time", + "timestamp", + "log" + ], + "properties": { + "level": { + "type": "string", + "enum": [ + "io", + "trace", + "debug", + "info", + "unusual", + "broken" + ], + "description": [ + "The log level of the emitted message." + ] + }, + "time": { + "type": "string", + "description": [ + "The event time as seconds since epoch with subsecond precision." + ] + }, + "timestamp": { + "type": "string", + "description": [ + "The event time in ISO 8601 format." + ] + }, + "log": { + "type": "string", + "description": [ + "The original log message." + ] + } + } + } +} diff --git a/doc/schemas/plugin.json b/doc/schemas/plugin.json index a635f4673912..c746767f191a 100644 --- a/doc/schemas/plugin.json +++ b/doc/schemas/plugin.json @@ -257,11 +257,6 @@ "active": true, "dynamic": true }, - { - "name": "/usr/local/libexec/plugins/recklessrpc", - "active": true, - "dynamic": true - }, { "name": "/usr/local/libexec/plugins/recover", "active": true, @@ -312,6 +307,11 @@ "active": true, "dynamic": true }, + { + "name": "/usr/local/libexec/plugins/cln-reckless", + "active": true, + "dynamic": true + }, { "name": "/usr/local/libexec/plugins/bookkeeper", "active": true, @@ -405,11 +405,6 @@ "active": true, "dynamic": true }, - { - "name": "/usr/local/libexec/plugins/recklessrpc", - "active": true, - "dynamic": true - }, { "name": "/usr/local/libexec/plugins/recover", "active": true, @@ -460,6 +455,11 @@ "active": true, "dynamic": true }, + { + "name": "/usr/local/libexec/plugins/cln-reckless", + "active": true, + "dynamic": true + }, { "name": "/usr/local/libexec/plugins/bookkeeper", "active": true, diff --git a/doc/schemas/reckless.json b/doc/schemas/reckless.json index 294fdf8f9690..530969805364 100644 --- a/doc/schemas/reckless.json +++ b/doc/schemas/reckless.json @@ -1,10 +1,11 @@ { "$schema": "../rpc-schema-draft.json", "type": "object", + "added": "v22.11", "rpc": "reckless", - "title": "Issue a command to the reckless plugin manager utility", + "title": "Reckless, a plugin manager", "description": [ - "The **reckless** RPC starts a reckless process with the *command* and *target* provided. Node configuration, network, and lightning direrctory are automatically passed to the reckless utility." + "The **reckless** RPC lets you manage plugins. It has multiple commands available, best described in the **help** command." ], "request": { "required": [ @@ -16,63 +17,411 @@ "type": "string", "enum": [ "install", + "update", "uninstall", - "search", + "listavailable", + "listinstalled", "enable", "disable", "source", - "--version" + "tip", + "help" ], "description": [ "Determines which command to pass to reckless", " - *command* **install** takes a *plugin_name* to search for and install a named plugin.", " - *command* **uninstall** takes a *plugin_name* and attempts to uninstall a plugin of the same name.", - " - *command* **search** takes a *plugin_name* to search for a named plugin.", + " - *command* **help** takes a *command* to display help for (plain text).", "..." ] }, - "target/subcommand": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "array" - } + "subcommand": { + "type": "string", + "enum": [ + "add", + "list", + "remove" ], "description": [ - "Target of a reckless command or a subcommand." + "A subcommand. Only in combination with *command* **source**." ] }, "target": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "array" - } - ], + "type": "string", + "description": [ + "*name* of a plugin to install/update/uninstall/listavailable/enable/disable or source to add/remove. Can also have a git ref added with `@` to install a specific version." + ] + }, + "options": { + "type": "array", + "added": "v26.09", + "items": { + "type": "string" + }, + "description": [ + "Plugin options to be used with the commands **install**/**update**/**enable** in the form of `key=value`." + ] + }, + "amount_msat": { + "type": "msat", + "added": "v26.09", + "description": [ + "The amount of msat to send when using the *command* **tip**." + ] + }, + "payer_note": { + "type": "string", + "added": "v26.09", + "description": [ + "A message that a payer is willing to send to a payee when using the *command* **tip**." + ] + }, + "verbose": { + "type": "boolean", + "added": "v26.09", "description": [ - "*name* of a plugin to install/uninstall/search/enable/disable or source to add/remove." + "Verbose output for all logging outputs for this command." + ] + }, + "developer": { + "type": "boolean", + "added": "v26.09", + "description": [ + "Build plugins in debug mode and do not clean up build files where applicable." ] } } }, "response": { "required": [ - "log", - "result" + "log" ], "additionalProperties": false, "properties": { - "result": { + "install": { + "type": "object", + "added": "v26.09", + "properties": { + "plugin_name": { + "type": "string", + "description": [ + "The name of the plugin that was installed." + ] + }, + "enabled": { + "type": "boolean", + "description": [ + "Whether the plugin was enabled or not." + ] + }, + "installed_commit": { + "type": "string", + "description": [ + "The git ref that was installed. Only present if source is a remote git repository." + ] + } + }, + "required": [ + "plugin_name", + "enabled" + ], + "additionalProperties": false + }, + "update": { + "type": "array", + "added": "v26.09", + "items": { + "type": "object", + "properties": { + "plugin_name": { + "type": "string", + "description": [ + "The name of the plugin that was updated." + ] + }, + "enabled": { + "type": "boolean", + "description": [ + "Whether the plugin was enabled or not." + ] + }, + "installed_commit": { + "type": "string", + "description": [ + "The git ref that the plugin was updated to. Only present if source is a remote git repository." + ] + } + }, + "required": [ + "plugin_name", + "enabled" + ], + "additionalProperties": false + } + }, + "uninstall": { + "type": "object", + "added": "v26.09", + "properties": { + "plugin_name": { + "type": "string", + "description": [ + "The name of the plugin that was uninstalled." + ] + } + }, + "required": [ + "plugin_name" + ], + "additionalProperties": false + }, + "enable": { + "type": "object", + "added": "v26.09", + "properties": { + "plugin_name": { + "type": "string", + "description": [ + "The name of the plugin that was enabled." + ] + } + }, + "required": [ + "plugin_name" + ], + "additionalProperties": false + }, + "disable": { + "type": "object", + "added": "v26.09", + "properties": { + "plugin_name": { + "type": "string", + "description": [ + "The name of the plugin that was disabled." + ] + } + }, + "required": [ + "plugin_name" + ], + "additionalProperties": false + }, + "listavailable": { + "type": "array", + "added": "v26.09", + "items": { + "type": "object", + "properties": { + "plugin_name": { + "type": "string", + "description": [ + "The name of the plugin that was listed." + ] + }, + "installer": { + "type": "string", + "enum": [ + "PythonUv", + "PythonUvShebang", + "PythonUvLegacy", + "PoetryVenv", + "PyprojectViaPip", + "Python", + "Nodejs", + "Rust", + "Go", + "Custom" + ], + "description": [ + "The name of the plugin installer that will be used." + ] + }, + "manifest": { + "type": "object", + "properties": { + "short_description": { + "type": "string", + "description": [ + "A short description of the plugin." + ] + }, + "long_description": { + "type": "string", + "description": [ + "A long description of the plugin." + ] + }, + "entrypoint": { + "type": "string", + "description": [ + "The entrypoint for the plugin." + ] + }, + "dependencies": { + "type": "array", + "items": { + "type": "string" + }, + "description": [ + "Programs needed to install this plugin." + ] + }, + "install_cmd": { + "type": "array", + "items": { + "type": "string" + }, + "description": [ + "Custom commands needed to install this plugin, if the default installers do not work." + ] + }, + "required_options": { + "type": "array", + "items": { + "type": "string" + }, + "description": [ + "Options needed to install this plugin." + ] + }, + "offer": { + "type": "string", + "description": [ + "An offer for users to tip for this plugin." + ] + }, + "installable": { + "type": "boolean", + "description": [ + "Whether this plugin is reckless-installable." + ] + } + }, + "required": [ + "entrypoint" + ], + "additionalProperties": false + }, + "origin": { + "type": "string", + "description": [ + "The origin of the plugin." + ] + } + }, + "required": [ + "plugin_name", + "installer", + "manifest", + "origin" + ], + "additionalProperties": false + } + }, + "listintalled": { + "type": "array", + "added": "v26.09", + "items": { + "type": "object", + "properties": { + "plugin_name": { + "type": "string", + "description": [ + "The name of the plugin that was listed." + ] + }, + "installation_date": { + "type": "string", + "description": [ + "The date the plugin was installed." + ] + }, + "installation_time": { + "type": "number", + "description": [ + "The timestamp the plugin was installed." + ] + }, + "original_source": { + "type": "string", + "description": [ + "The original source of the plugin." + ] + }, + "requested_commit": { + "type": "string", + "description": [ + "The git ref that was requested to be installed." + ] + }, + "installed_commit": { + "type": "string", + "description": [ + "The git ref that was installed." + ] + } + }, + "required": [ + "plugin_name", + "installation_date", + "installation_time", + "original_source" + ], + "additionalProperties": false + } + }, + "sources": { "type": "array", + "added": "v26.09", "items": { "type": "string" }, "description": [ - "Output of the requested reckless command." + "The list of current sources." + ] + }, + "tip": { + "type": "object", + "added": "v26.09", + "properties": { + "payment_preimage": { + "type": "secret", + "description": [ + "The proof of payment: SHA256 of this **payment_hash**." + ] + }, + "failed_parts": { + "type": "u64", + "description": [ + "How many separate payment parts failed." + ] + }, + "successful_parts": { + "type": "u64", + "description": [ + "How many separate payment parts succeeded (or are anticipated to succeed). This will be at least one." + ] + }, + "amount_msat": { + "type": "msat", + "description": [ + "Amount the recipient received." + ] + }, + "amount_sent_msat": { + "type": "msat", + "description": [ + "Total amount we sent (including fees)." + ] + } + }, + "required": [ + "payment_preimage", + "failed_parts", + "successful_parts", + "amount_msat", + "amount_sent_msat" ] }, "log": { @@ -81,13 +430,14 @@ "type": "string" }, "description": [ - "Verbose log entries of the requested reckless command." + "Log entries of the requested reckless command." ] } } }, "author": [ - "Alex Myers [alex@endothermic.dev](mailto:alex@endothermic.dev) is mainly responsible." + "Alex Myers [alex@endothermic.dev](mailto:alex@endothermic.dev) is mainly responsible for the original python reckless.", + "daywalker90 [daywalker990@gmx.de](mailto:daywalker990@gmx.de) is mainly responsible for the current rust reckless." ], "see_also": [ "reckless(1)" @@ -101,90 +451,82 @@ "id": "example:reckless#1", "method": "reckless", "params": { - "command": "search", - "target/subcommand": "backup" + "command": "install", + "target": "summary" } }, "response": { - "result": [ - "https://github.com/lightningd/plugins" - ], + "install": { + "enabled": false, + "installed_commit": "002761088174c151237e8a847c50603db20d5abf", + "plugin_name": "summary" + }, "log": [ - "DEBUG: Warning: Reckless requires write access", - "DEBUG: fetching from gh API: https://api.github.com/repos/lightningd/plugins/contents/", - "DEBUG: fetching from gh API: https://api.github.com/repos/lightningd/plugins/git/trees/294f93d7060799439c994daa84f534c4d1458325", - "INFO: found backup in source: https://github.com/lightningd/plugins", - "DEBUG: entry: None", - "DEBUG: sub-directory: backup" + "INFO: running command: `git clone --recursive https://github.com/lightningd/plugins /tmp/ltests-88arihe3/test_generate_examples_1/lightning-1/reckless/lightningd/plugins`", + "", + "INFO: running command: `git submodule sync --recursive` (cwd: /tmp/ltests-88arihe3/test_generate_examples_1/lightning-1/reckless/lightningd/plugins)", + "", + "INFO: running command: `git submodule update --init --recursive` (cwd: /tmp/ltests-88arihe3/test_generate_examples_1/lightning-1/reckless/lightningd/plugins)", + "WARNING: could not detect installer for /tmp/ltests-88arihe3/test_generate_examples_1/lightning-1/reckless/lightningd/plugins: entryfile not found", + "INFO: Plugins matching 'summary':", + "INFO: summary (https://github.com/lightningd/plugins)", + "INFO: found summary in source: https://github.com/lightningd/plugins", + "INFO: running command: `git pull --ff-only` (cwd: /tmp/ltests-88arihe3/test_generate_examples_1/lightning-1/reckless/lightningd/plugins)", + "INFO: Already up to date.", + "INFO: running command: `git submodule sync --recursive` (cwd: /tmp/ltests-88arihe3/test_generate_examples_1/lightning-1/reckless/lightningd/plugins)", + "", + "INFO: running command: `git submodule update --init --recursive` (cwd: /tmp/ltests-88arihe3/test_generate_examples_1/lightning-1/reckless/lightningd/plugins)", + "INFO: running command: `git checkout HEAD` (cwd: /tmp/ltests-88arihe3/test_generate_examples_1/lightning-1/reckless/lightningd/plugins/summary)", + "INFO: Your branch is up to date with 'origin/master'.", + "INFO: using installer pythonuvshebang", + "INFO: running command: `git rev-parse HEAD` (cwd: /tmp/ltests-88arihe3/test_generate_examples_1/lightning-1/reckless/lightningd/plugins/summary)", + "INFO: 002761088174c151237e8a847c50603db20d5abf", + "INFO: plugin installed: /tmp/ltests-88arihe3/test_generate_examples_1/lightning-1/reckless/summary/summary.py", + "WARNING: plugin exited before sending getmanifest response", + "WARNING: summary failed to start, it may require options, read the logs!" ] } }, { "request": { - "id": "example:reckless#2", + "id": "example:reckless#1", "method": "reckless", "params": { - "command": "install", - "target/subcommand": [ - "summars", - "currecyrate" - ] + "command": "tip", + "target": "summary", + "amount_msat": 1000, + "payer_note": "thanks!" } }, "response": { - "result": [ - "/tmp/l1/reckless/summars", - "/tmp/l1/reckless/currencyrate" - ], + "tip": { + "amount_msat": 1000, + "amount_sent_msat": 1000, + "failed_parts": 0, + "payment_preimage": "940148d45ce964205c289a215d2b45e7bad32caa4318eb1977184fe424d04a00", + "successful_parts": 1 + }, "log": [ - "DEBUG: Searching for summars", - "DEBUG: fetching from gh API: https://api.github.com/repos/lightningd/plugins/contents/", - "DEBUG: fetching from gh API: https://api.github.com/repos/lightningd/plugins/git/trees/294f93d7060799439c994daa84f534c4d1458325", - "INFO: found summars in source: https://github.com/lightningd/plugins", - "DEBUG: entry: None", - "DEBUG: sub-directory: summars", - "DEBUG: Retrieving summars from https://github.com/lightningd/plugins", - "DEBUG: Install requested from InstInfo(summars, https://github.com/lightningd/plugins, None, None, None, summars).", - "INFO: cloning Source.GITHUB_REPO InstInfo(summars, https://github.com/lightningd/plugins, None, None, None, summars)", - "DEBUG: cloned_src: InstInfo(summars, /tmp/reckless-726255950dyifh_fh/clone, None, Cargo.toml, Cargo.toml, summars/summars)", - "DEBUG: using latest commit of default branch", - "DEBUG: checked out HEAD: 5e449468bd57db7d0f33178fe0dc867e0da94133", - "DEBUG: using installer rust", - "DEBUG: creating /tmp/l1/reckless/summars", - "DEBUG: creating /tmp/l1/reckless/summars/source", - "DEBUG: copying /tmp/reckless-726255950dyifh_fh/clone/summars/summars tree to /tmp/l1/reckless/summars/source/summars", - "DEBUG: linking source /tmp/l1/reckless/summars/source/summars/Cargo.toml to /tmp/l1/reckless/summars/Cargo.toml", - "DEBUG: InstInfo(summars, /tmp/l1/reckless/summars, None, Cargo.toml, Cargo.toml, source/summars)", - "DEBUG: cargo installing from /tmp/l1/reckless/summars/source/summars", - "DEBUG: rust project compiled successfully", - "INFO: plugin installed: /tmp/l1/reckless/summars", - "DEBUG: activating summars", - "INFO: summars enabled", - "DEBUG: Searching for currencyrate", - "DEBUG: fetching from gh API: https://api.github.com/repos/lightningd/plugins/contents/", - "DEBUG: fetching from gh API: https://api.github.com/repos/lightningd/plugins/git/trees/294f93d7060799439c994daa84f534c4d1458325", - "INFO: found currencyrate in source: https://github.com/lightningd/plugins", - "DEBUG: entry: None", - "DEBUG: sub-directory: currencyrate", - "DEBUG: Retrieving currencyrate from https://github.com/lightningd/plugins", - "DEBUG: Install requested from InstInfo(currencyrate, https://github.com/lightningd/plugins, None, None, None, currencyrate).", - "INFO: cloning Source.GITHUB_REPO InstInfo(currencyrate, https://github.com/lightningd/plugins, None, None, None, currencyrate)", - "DEBUG: cloned_src: InstInfo(currencyrate, /tmp/reckless-192564272t478naxn/clone, None, currencyrate.py, requirements.txt, currencyrate/currencyrate)", - "DEBUG: using latest commit of default branch", - "DEBUG: checked out HEAD: 5e449468bd57db7d0f33178fe0dc867e0da94133", - "DEBUG: using installer python3venv", - "DEBUG: creating /tmp/l1/reckless/currencyrate", - "DEBUG: creating /tmp/l1/reckless/currencyrate/source", - "DEBUG: copying /tmp/reckless-192564272t478naxn/clone/currencyrate/currencyrate tree to /tmp/l1/reckless/currencyrate/source/currencyrate", - "DEBUG: linking source /tmp/l1/reckless/currencyrate/source/currencyrate/currencyrate.py to /tmp/l1/reckless/currencyrate/currencyrate.py", - "DEBUG: InstInfo(currencyrate, /tmp/l1/reckless/currencyrate, None, currencyrate.py, requirements.txt, source/currencyrate)", - "DEBUG: configuring a python virtual environment (pip) in /tmp/l1/reckless/currencyrate/.venv", - "DEBUG: virtual environment created in /tmp/l1/reckless/currencyrate/.venv.", - "INFO: dependencies installed successfully", - "DEBUG: virtual environment for cloned plugin: .venv", - "INFO: plugin installed: /tmp/l1/reckless/currencyrate", - "DEBUG: activating currencyrate", - "INFO: currencyrate enabled" + "WARNING: summary is not installed", + "INFO: summary not installed, searching in sources...", + "INFO: running command: `git remote set-head origin -a` (cwd: /tmp/l1/reckless/lightningd/plugins)", + "INFO: origin/HEAD set to master", + "INFO: running command: `git symbolic-ref refs/remotes/origin/HEAD --short` (cwd: /tmp/l1/reckless/lightningd/plugins)", + "INFO: origin/master", + "INFO: running command: `git checkout master` (cwd: /tmp/l1/reckless/lightningd/plugins)", + "WARNING: Already on 'master'", + "INFO: Your branch is up to date with 'origin/master'.", + "INFO: running command: `git pull --ff-only` (cwd: /tmp/l1/reckless/lightningd/plugins)", + "INFO: Already up to date.", + "INFO: running command: `git submodule sync --recursive` (cwd: /tmp/l1/reckless/lightningd/plugins)", + "", + "INFO: running command: `git submodule update --init --recursive` (cwd: /tmp/l1/reckless/lightningd/plugins)", + "WARNING: could not detect installer for /tmp/l1/reckless/lightningd/plugins: entryfile not found", + "INFO: Plugins matching 'summary':", + "INFO: summary (/media/addonssd/dev/plugins/summary)", + "INFO: found summary in source: /media/addonssd/dev/plugins/summary", + "INFO: Sending 1000msat to summary author...", + "INFO: Successfully sent 1000msat to summary author!" ] } } diff --git a/mkdocs.yml b/mkdocs.yml index 7112dac569f2..7f0e78a1835f 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -133,6 +133,7 @@ nav: - "lightning-pay": "lightning-pay.7.md" - "lightning-ping": "lightning-ping.7.md" - "lightning-plugin": "lightning-plugin.7.md" + - "lightning-reckless": "lightning-reckless.7.md" - "lightning-recoverchannel": "lightning-recoverchannel.7.md" - "lightning-reserveinputs": "lightning-reserveinputs.7.md" - "lightning-sendcustommsg": "lightning-sendcustommsg.7.md" @@ -159,7 +160,6 @@ nav: - "lightningd-config": "lightningd-config.5.md" - "lightningd-rpc": "lightningd-rpc.7.md" - "lightningd": "lightningd.8.md" - - "reckless": "reckless.7.md" # block_end manpages - About: - Changelog: "CHANGELOG.md" diff --git a/nix/apps.nix b/nix/apps.nix index 7d9babba5bba..527451c29cc0 100644 --- a/nix/apps.nix +++ b/nix/apps.nix @@ -22,10 +22,6 @@ program = "${self'.packages.cln}/bin/lightning-hsmtool"; meta.description = "Core Lightning HSM tool"; }; - reckless = { - program = "${self'.packages.cln}/bin/reckless"; - meta.description = "Core Lightning reckless tool"; - }; }; }; } diff --git a/plugins/.gitignore b/plugins/.gitignore index 06daa728eca9..a90b62b6bad9 100644 --- a/plugins/.gitignore +++ b/plugins/.gitignore @@ -17,9 +17,9 @@ sql cln-renepay recover cln-askrene -recklessrpc exposesecret cln-xpay cln-lsps-client cln-lsps-service cln-bwatch +cln-reckless diff --git a/plugins/Makefile b/plugins/Makefile index 9179e1d116fa..153129f22d3d 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -87,9 +87,6 @@ PLUGIN_FUNDER_HEADER := \ plugins/funder_policy.h PLUGIN_FUNDER_OBJS := $(PLUGIN_FUNDER_SRC:.c=.o) -PLUGIN_RECKLESSRPC_SRC := plugins/recklessrpc.c -PLUGIN_RECKLESSRPC_OBJS := $(PLUGIN_RECKLESSRPC_SRC:.c=.o) - PLUGIN_ALL_SRC := \ $(PLUGIN_AUTOCLEAN_SRC) \ $(PLUGIN_chanbackup_SRC) \ @@ -106,8 +103,7 @@ PLUGIN_ALL_SRC := \ $(PLUGIN_PAY_LIB_SRC) \ $(PLUGIN_PAY_SRC) \ $(PLUGIN_SPENDER_SRC) \ - $(PLUGIN_RECOVER_SRC) \ - $(PLUGIN_RECKLESSRPC_SRC) + $(PLUGIN_RECOVER_SRC) PLUGIN_ALL_HEADER := \ $(PLUGIN_PAY_HEADER) \ @@ -130,7 +126,6 @@ C_PLUGINS := \ plugins/keysend \ plugins/offers \ plugins/pay \ - plugins/recklessrpc \ plugins/recover \ plugins/txprepare \ plugins/cln-renepay \ @@ -153,7 +148,7 @@ $(shell test -d plugins/clnrest && $(RM) -r plugins/clnrest || true) $(shell test -d plugins/wss-proxy && $(RM) -r plugins/wss-proxy || true) ifneq ($(RUST),0) -RUST_PLUGIN_NAMES := cln-grpc clnrest cln-lsps-client cln-lsps-service wss-proxy cln-bip353 cln-currencyrate +RUST_PLUGIN_NAMES := cln-grpc clnrest cln-lsps-client cln-lsps-service wss-proxy cln-bip353 cln-currencyrate cln-reckless # Builtin plugins must be in this plugins dir to work when we're executed # *without* make install. @@ -218,8 +213,6 @@ plugins/funder: $(PLUGIN_FUNDER_OBJS) $(PLUGIN_LIB_OBJS) libcommon.a plugins/recover: $(PLUGIN_RECOVER_OBJS) $(PLUGIN_LIB_OBJS) libcommon.a -plugins/recklessrpc: $(PLUGIN_RECKLESSRPC_OBJS) $(PLUGIN_LIB_OBJS) libcommon.a - # This covers all the low-level list RPCs which return simple arrays SQL_LISTRPCS := listchannels listforwards listhtlcs listinvoices listnodes listoffers listpeers listpeerchannels listclosedchannels listtransactions listsendpays listchainmoves listchannelmoves bkpr-listaccountevents bkpr-listincome listnetworkevents SQL_LISTRPCS_SCHEMAS := $(foreach l,$(SQL_LISTRPCS),doc/schemas/$l.json) @@ -271,6 +264,7 @@ CLN_LSPS_PLUGIN_SRC = $(shell find plugins/lsps-plugin/src -name "*.rs") CLN_WSS_PROXY_PLUGIN_SRC = $(shell find plugins/wss-proxy-plugin/src -name "*.rs") CLN_BIP353_PLUGIN_SRC = $(shell find plugins/bip353-plugin/src -name "*.rs") CLN_CURRENCYRATE_PLUGIN_SRC = $(shell find plugins/currencyrate-plugin/src -name "*.rs") +CLN_RECKLESS_PLUGIN_SRC = $(shell find plugins/reckless-plugin/src -name "*.rs") $(RUST_TARGET_DIR)/examples/cln-plugin-startup: ${CLN_RPC_SOURCES} ${CLN_PLUGIN_SRC} plugins/examples/cln-plugin-startup.rs $(CARGO) build ${CARGO_OPTS} --example cln-plugin-startup @@ -293,11 +287,13 @@ $(RUST_TARGET_DIR)/cln-bip353: ${CLN_BIP353_PLUGIN_SRC} ${CLN_PLUGIN_SRC} $(CARGO) build ${CARGO_OPTS} --bin cln-bip353 $(RUST_TARGET_DIR)/cln-currencyrate: ${CLN_CURRENCYRATE_PLUGIN_SRC} ${CLN_RPC_SOURCES} ${CLN_PLUGIN_SRC} $(CARGO) build ${CARGO_OPTS} --bin cln-currencyrate +$(RUST_TARGET_DIR)/cln-reckless: ${CLN_RECKLESS_PLUGIN_SRC} + $(CARGO) build ${CARGO_OPTS} --bin cln-reckless ifneq ($(RUST),0) include plugins/rest-plugin/Makefile include plugins/wss-proxy-plugin/Makefile -DEFAULT_TARGETS += $(CLN_PLUGIN_EXAMPLES) plugins/cln-grpc plugins/clnrest plugins/cln-lsps-client plugins/cln-lsps-service plugins/wss-proxy plugins/cln-bip353 plugins/cln-currencyrate +DEFAULT_TARGETS += $(CLN_PLUGIN_EXAMPLES) plugins/cln-grpc plugins/clnrest plugins/cln-lsps-client plugins/cln-lsps-service plugins/wss-proxy plugins/cln-bip353 plugins/cln-currencyrate plugins/cln-reckless endif clean: plugins-clean diff --git a/plugins/reckless-plugin/Cargo.toml b/plugins/reckless-plugin/Cargo.toml new file mode 100644 index 000000000000..eb5fef18dd7d --- /dev/null +++ b/plugins/reckless-plugin/Cargo.toml @@ -0,0 +1,32 @@ +[package] +name = "cln-reckless" +version = "0.1.0" +edition = "2024" +license = "MIT" +description = "Install plugins from remote or local repositories" +homepage = "https://github.com/ElementsProject/lightning/tree/master/plugins" +repository = "https://github.com/ElementsProject/lightning" +rust-version.workspace = true + +[dependencies] +anyhow = "1" +log = { version = "0.4", features = ['std'] } +serde = { version = "1", features = ["derive"] } +serde_json = "1" +tokio = { version = "1", features = ["fs", "process"] } +tokio-util = { version = "0.7", features = ["codec"] } + +futures = "0.3" + +log-panics = "2" + +which = "8" +url = "2" +sha2 = "0.11" +chrono = "0.4" +hex = "0.4" + +clap = { version = "4", features = ["derive"] } + +cln-plugin = { workspace = true } +cln-rpc = { workspace = true } diff --git a/plugins/reckless-plugin/README.md b/plugins/reckless-plugin/README.md new file mode 100644 index 000000000000..acb50155de06 --- /dev/null +++ b/plugins/reckless-plugin/README.md @@ -0,0 +1,121 @@ +# cln-reckless plugin + +A Core Lightning plugin that can manage other plugins. It can install, uninstall, enable, or disable other plugins, including plugin options and persisting them to config files. + +## Options + +These options can be set in your `lightning.conf` config file or passed directly when starting the plugin. + +### `reckless-dir=PATH` + +Set the directory where `reckless` saves remote git repositories, the plugin installations, a config file, and other metadata. Defaults to your lightning directory (not network directory). + +## CLI help + +The `reckless` plugin comes with a help command for every sub-command it offers: + +```bash +lightning-cli reckless help [command] +``` + +## Sources + +By default `reckless` adds `https://github.com/lightningd/plugins` as a plugin source. But you can add other remote git repositories or local paths as a source for `reckless` with + +```bash +lightning-cli reckless source add +``` + +## List plugins + +There are two commands to list plugins. `listinstalled` to list all plugins that are installed by `reckless` and `listavailable` to list all plugins ready to be installed from your current sources. + +## Installing a plugin + +To install a plugin, `reckless` must be able to find it in one of your sources and detect a supported installation method. Plugins can provide a manifest to instruct `reckless` with custom installation commands. Without a manifest most python, rust, go, and javascript plugins are supported. + +```bash +lightning-cli reckless install [options] +``` + +You can just provide the plugin name to install the latest version or specifiy a git reference like a commit hash or git tag to install a specific version. + +You can, and sometimes must, pass plugin configuration options here too. They are in the same format as you would write them to the config file: `config-name:config-value`. + +This will install dependencies, try to start the plugin, and if successfull, persist the plugin and it's options to a config file. Some plugins are not dynamic and will only start the next time you restart your CLN node. + +## Updating plugins + +You can update `reckless`-installed plugins like this: + +```bash +lightning-cli reckless update +``` + +This will update all `reckless`-installed plugins that were installed without specifying a git ref as a version. You can provide the same `` format to the `update` command to update a specific plugin. The `@gitref` is optional and if you omit it `reckless` will install the latest version. + +This command will stop a plugin, update it, and start it again. + + +## Uninstalling a plugin + +To uninstall a plugin with `reckless`, it must have been previously installed with `reckless`. + +```bash +lightning-cli reckless install +``` + +This will remove the plugin's files and it's configuration. + +## Enabling and disabling plugins + +Only plugins installed by `reckless` can be managed by these commands. + +The `disable` command can be used to remove the plugin from the config files, but leave the dependencies and plugin files on disk. + +The `enable` command accepts plugin config options the same as the `install` command and will add a previously disabled plugin to the config files again. + + +## Tipping a plugin author + +If a plugin author provided a bolt12 offer in their `reckless` manifest, you can tip them like this: + +```bash +lightning-cli reckless tip [payer_note] +``` + +Credit goes to [coffee](https://github.com/coffee-tools/coffee) for this wonderful idea. + +## For plugin authors + +### How to make your plugin compatible with reckless + +If you have a more complex setup or a plugin in a language not listed below, you can use [The reckless manifest](#the-reckless-manifest) to help `reckless` install your plugin. + +`reckless` currently supports python (`requirements.txt`, `pyproject.toml` managed by `pip`, `poetry`, or `uv`), javascript (via `npm`), rust, and go plugins. + +For `reckless` to be able to install your plugin without a manifest make sure to: + +- Choose a unique plugin name. If the repository is for a single plugin the name of the repository is the plugin name. +- If you use a compiled language like rust or go, make sure there is ony one binary target. +- The plugin entrypoint for non-compiled languages is inferred. Naming your plugin executable the same as your plugin name will allow `reckless` to identify it correctly (file extensions are okay). +- Additional repository sources may be added with `reckless source add https://my.repo.url/here` however `https://github.com/lightningd/plugins` is included by default. Consider adding your plugin to `lightningd/plugins` to make installation simpler. +- If your plugin is located too deep in a subdirectory of your repo or named differently than your plugin, it will likely be overlooked. + + +### The reckless manifest + +Plugin authors MAY add a `manifest.json` file at their root directory for various purposes. The available fields are: + +- `short_description` (string): A short description of what your plugin does. +- `long_description` (string): A long description of what your plugin does. +- `entrypoint` (string): The path to the file that will be started by CLN, relative to the root of your project. +- `dependencies` (array of strings): System dependencies needed to install your plugin. These are currently only used for display purposes and not installed by `reckless`. +- `install_cmd`(array of strings): A list of commands that are ran inside your plugin directory in order to install your plugin. +- `required_options` (array of strings): A list of your plugin option names that are required by the user to set in order for the plugin to start. This improves the error message in case the user forgot to set any of them. +- `offer` (string): A bolt12 offer. Users can then use the `reckless` tip command to send the plugin author some Bitcoin. +- `installable` (boolean): If your plugin for any reason should not be installed through `reckless`, set this to `false`. + +All fields are optional, but if you set `install_cmd` you must also set `entrypoint`. + + diff --git a/plugins/reckless-plugin/src/cmds.rs b/plugins/reckless-plugin/src/cmds.rs new file mode 100644 index 000000000000..5798a07f2550 --- /dev/null +++ b/plugins/reckless-plugin/src/cmds.rs @@ -0,0 +1,6 @@ +pub mod enable; +pub mod install; +pub mod list; +pub mod source; +pub mod tip; +pub mod update; diff --git a/plugins/reckless-plugin/src/cmds/enable.rs b/plugins/reckless-plugin/src/cmds/enable.rs new file mode 100644 index 000000000000..bd6d6e34d4b0 --- /dev/null +++ b/plugins/reckless-plugin/src/cmds/enable.rs @@ -0,0 +1,188 @@ +use anyhow::anyhow; +use cln_plugin::Plugin; +use cln_rpc::notifications::LogLevel; +use serde_json::json; + +use crate::{ + structs::{ + CommonResult, DisableResponse, EnableArgs, EnableResponse, PluginState, RecklessLogger, + RecklessPlugin, RecklessTopic, + }, + util::{ + add_plugin_to_config, cln_list_plugins, cln_start_plugin, cln_stop_plugin, + get_plugin_manifest, parse_options, parse_target, read_metadata, remove_plugin_from_config, + }, +}; + +pub async fn handle_enable( + plugin: Plugin, + enable_args: EnableArgs, + verbose: bool, +) -> Result { + let mut logger = RecklessLogger::new(&plugin, RecklessTopic::Enable, verbose); + + let (plugin_name, git_ref) = match parse_target(&enable_args.target) { + Ok((n, g)) => (n, g), + Err(e) => { + logger.log(&e.to_string(), LogLevel::UNUSUAL).await?; + return Err(e); + } + }; + if git_ref.is_some() { + let line = "git refs are not supported here"; + logger.log(line, LogLevel::UNUSUAL).await?; + return Err(anyhow!(line)); + } + + let plugin_dir = plugin.state().reckless_dir.join(&plugin_name); + + let rl_plugin = match read_metadata(&plugin_name, &plugin_dir).await { + Ok(p) => p, + Err(e) => { + logger.log(&e.to_string(), LogLevel::UNUSUAL).await?; + return Err(e); + } + }; + + let common_result = + match enable_plugin(plugin.clone(), &rl_plugin, enable_args.options, &mut logger).await { + Ok(()) => CommonResult { plugin_name }, + Err(e) => { + logger.log(&e.to_string(), LogLevel::UNUSUAL).await?; + return Err(e); + } + }; + + let response = EnableResponse::new(common_result, logger); + + Ok(json!(response)) +} + +pub async fn enable_plugin( + plugin: Plugin, + rl_plugin: &RecklessPlugin, + options: Vec<(String, Option)>, + logger: &mut RecklessLogger<'_>, +) -> Result<(), anyhow::Error> { + let entry_file = rl_plugin.manifest().entry_filename_str()?; + let entry_path = rl_plugin.get_entrypath()?; + + let plugin_manifest = get_plugin_manifest(&entry_path, logger).await?; + logger + .log(&format!("{plugin_manifest:#?}"), LogLevel::TRACE) + .await?; + + let parsed_options = parse_options(&plugin_manifest, &options)?; + + if let Some(req_opts) = rl_plugin.manifest().required_options.as_ref() { + for option in req_opts { + if !parsed_options.iter().any(|(o, _)| o == option) { + return Err(anyhow!("option `{option}` is required")); + } + } + } + + let running_plugins = cln_list_plugins(plugin.clone(), logger).await?; + if running_plugins.contains(&entry_file) { + let line = format!("Plugin {} is already running", rl_plugin.name()); + logger.log(&line, LogLevel::INFO).await?; + } else if !running_plugins.contains(&entry_file) && plugin_manifest.is_dynamic() { + cln_start_plugin( + plugin.clone(), + rl_plugin.name(), + &entry_path, + options, + logger, + ) + .await?; + } else if !plugin_manifest.is_dynamic() { + let line = format!( + "{} is not dynamic and will be started the next time the node starts", + rl_plugin.name() + ); + logger.log(&line, LogLevel::INFO).await?; + } + + match add_plugin_to_config(plugin.clone(), entry_path, parsed_options, plugin_manifest).await { + Ok(()) => { + let line = format!("{} enabled", rl_plugin.name()); + logger.log(&line, LogLevel::INFO).await?; + } + Err(e) => { + return Err(anyhow!("{} failed to enable: {e}", rl_plugin.name())); + } + } + + Ok(()) +} + +pub async fn handle_disable( + plugin: Plugin, + target: String, + verbose: bool, +) -> Result { + let mut logger = RecklessLogger::new(&plugin, RecklessTopic::Enable, verbose); + + let (plugin_name, git_ref) = match parse_target(&target) { + Ok((pn, g)) => (pn, g), + Err(e) => { + logger.log(&e.to_string(), LogLevel::UNUSUAL).await?; + return Err(e); + } + }; + if git_ref.is_some() { + let line = "git refs are not supported here"; + logger.log(line, LogLevel::UNUSUAL).await?; + return Err(anyhow!(line)); + } + + let plugin_dir = plugin.state().reckless_dir.join(&plugin_name); + + let rl_plugin = match read_metadata(&plugin_name, &plugin_dir).await { + Ok(p) => p, + Err(e) => { + logger.log(&e.to_string(), LogLevel::UNUSUAL).await?; + return Err(e); + } + }; + + let common_result = match disable_plugin(plugin.clone(), &rl_plugin, &mut logger).await { + Ok(_) => CommonResult { plugin_name }, + Err(e) => { + logger.log(&e.to_string(), LogLevel::BROKEN).await?; + return Err(e); + } + }; + + let response = DisableResponse::new(common_result, logger); + + Ok(json!(response)) +} + +pub async fn disable_plugin( + plugin: Plugin, + rl_plugin: &RecklessPlugin, + logger: &mut RecklessLogger<'_>, +) -> Result)>, anyhow::Error> { + let entry_file = rl_plugin.manifest().entry_filename_str()?; + let entry_path = rl_plugin.get_entrypath()?; + + let manifest = get_plugin_manifest(&entry_path, logger).await?; + logger + .log(&format!("{manifest:#?}"), LogLevel::TRACE) + .await?; + + let running_plugins = cln_list_plugins(plugin.clone(), logger).await?; + if running_plugins.contains(&entry_file) { + cln_stop_plugin(plugin.clone(), rl_plugin.name(), &entry_path, logger).await?; + } else { + let line = format!("{} already stopped", rl_plugin.name()); + logger.log(&line, LogLevel::INFO).await?; + } + + let old_options = remove_plugin_from_config(plugin.clone(), entry_path, manifest).await?; + let line = format!("{} disabled", rl_plugin.name()); + logger.log(&line, LogLevel::INFO).await?; + + Ok(old_options) +} diff --git a/plugins/reckless-plugin/src/cmds/install.rs b/plugins/reckless-plugin/src/cmds/install.rs new file mode 100644 index 000000000000..7149b8a0dccd --- /dev/null +++ b/plugins/reckless-plugin/src/cmds/install.rs @@ -0,0 +1,317 @@ +use std::{collections::HashMap, path::PathBuf}; + +use anyhow::anyhow; +use cln_plugin::Plugin; +use cln_rpc::notifications::LogLevel; +use serde_json::json; +use tokio::{fs, process::Command}; + +use crate::{ + cmds::enable::{disable_plugin, enable_plugin}, + installers::{ + install_custom_plugin, install_go_plugin, install_nodejs_plugin, install_poetry_plugin, + install_python_plugin, install_rust_plugin, install_uv_legacy_plugin, install_uv_plugin, + install_uv_shebang_plugin, + }, + structs::{ + CommonResult, InstallArgs, InstallResponse, InstallResult, Installer, PluginState, + RecklessLogger, RecklessPlugin, RecklessTopic, UninstallResponse, + }, + util::{ + copy_dir_all, parse_install_target, parse_target, read_metadata, run_logged_command, + search_sources, write_metadata, + }, +}; + +pub async fn handle_install( + plugin: Plugin, + install_args: InstallArgs, + verbose: bool, +) -> Result { + let mut logger = RecklessLogger::new(&plugin, RecklessTopic::Install, verbose); + + let mut search_results: HashMap = HashMap::new(); + + let (plugin_name, git_ref) = match parse_install_target( + &mut logger, + &install_args.target, + &mut search_results, + &plugin.state().reckless_dir, + ) + .await + { + Ok((pn, g)) => (pn, g), + Err(e) => { + logger.log(&e.to_string(), LogLevel::UNUSUAL).await?; + return Err(e); + } + }; + + if search_results.is_empty() { + search_results = match search_sources(&plugin, Some(plugin_name.clone()), &mut logger).await + { + Ok(o) => o, + Err(e) => { + logger.log(&e.to_string(), LogLevel::UNUSUAL).await?; + return Err(e); + } + }; + } + let Some(rl_plugin) = search_results.get_mut(&plugin_name) else { + let line = format!("{plugin_name} not found in any known sources"); + logger.log(&line, LogLevel::UNUSUAL).await?; + return Err(anyhow!(line)); + }; + + pre_install_checks(rl_plugin, &plugin_name, git_ref.as_ref(), &mut logger).await?; + + let install_result = install( + rl_plugin, + git_ref.clone(), + install_args.developer, + &mut logger, + ) + .await; + + match install_result { + Ok(entrypoint) => { + let line = format!( + "{plugin_name} installed, entrypoint: {}", + entrypoint.display() + ); + logger.log(&line, LogLevel::DEBUG).await?; + } + Err(e) => { + let line = format!("{plugin_name} install failed: {e}, uninstalling..."); + logger.log(&line, LogLevel::UNUSUAL).await?; + if let Some(deps) = &rl_plugin.manifest().dependencies { + let line = format!( + "Make sure you have the following system dependencies installed: {}", + deps.join(", ") + ); + logger.log(&line, LogLevel::UNUSUAL).await?; + } + if let Err(e) = uninstall(plugin.clone(), plugin_name.clone(), &mut logger).await { + let line = format!("{plugin_name} uninstall failed: {e}"); + logger.log(&line, LogLevel::BROKEN).await?; + return Err(e); + } + return Err(e); + } + } + + let mut install_result = InstallResult { + plugin_name: plugin_name.clone(), + enabled: false, + installed_commit: rl_plugin + .metadata() + .installed_commit() + .map(std::borrow::ToOwned::to_owned), + }; + + match enable_plugin(plugin.clone(), rl_plugin, install_args.options, &mut logger).await { + Ok(()) => install_result.enabled = true, + Err(e) => { + logger.log(&e.to_string(), LogLevel::UNUSUAL).await?; + let line = + format!("{plugin_name} failed to start, it may require options, read the logs!"); + logger.log(&line, LogLevel::UNUSUAL).await?; + } + } + + let response = InstallResponse::new(install_result, logger); + + Ok(json!(response)) +} + +async fn install( + rl_plugin: &mut RecklessPlugin, + git_ref: Option, + developer: bool, + logger: &mut RecklessLogger<'_>, +) -> Result { + if !rl_plugin.origin_plugin_path().exists() { + return Err(anyhow!( + "origin path does not exist: {}", + rl_plugin.origin_repo_path().display() + )); + } + + fs::create_dir_all(rl_plugin.path()).await?; + + if !rl_plugin.is_local_path() { + let mut command = Command::new("git"); + command + .args(["pull", "--ff-only"]) + .current_dir(rl_plugin.origin_repo_path()); + run_logged_command(command, logger).await?; + + let mut command = Command::new("git"); + command + .args(["submodule", "sync", "--recursive"]) + .current_dir(rl_plugin.origin_repo_path()); + run_logged_command(command, logger).await?; + + let mut command = Command::new("git"); + command + .args(["submodule", "update", "--init", "--recursive"]) + .current_dir(rl_plugin.origin_repo_path()); + run_logged_command(command, logger).await?; + + let mut command = Command::new("git"); + command + .args(["checkout", git_ref.as_deref().unwrap_or("HEAD")]) + .current_dir(rl_plugin.origin_plugin_path()); + run_logged_command(command, logger).await?; + + fs::create_dir_all(rl_plugin.source_path()).await?; + copy_dir_all( + rl_plugin.origin_plugin_path(), + rl_plugin.source_path(), + logger, + ) + .await?; + } + + let entrypoint = match rl_plugin.installer() { + Installer::PythonUv => install_uv_plugin(rl_plugin, logger).await?, + Installer::PythonUvShebang => install_uv_shebang_plugin(rl_plugin, logger).await?, + Installer::PythonUvLegacy => install_uv_legacy_plugin(rl_plugin, logger).await?, + Installer::PoetryVenv => install_poetry_plugin(rl_plugin, logger).await?, + Installer::PyprojectViaPip | Installer::Python => { + install_python_plugin(rl_plugin, logger).await? + } + Installer::Nodejs => install_nodejs_plugin(rl_plugin, logger).await?, + Installer::Rust => install_rust_plugin(rl_plugin, logger, developer).await?, + Installer::Go => install_go_plugin(rl_plugin, logger).await?, + Installer::Custom => install_custom_plugin(rl_plugin, logger).await?, + }; + + if rl_plugin.is_local_path() { + rl_plugin.metadata_mut().new_install(None, None); + } else { + let mut command = Command::new("git"); + command + .args(["rev-parse", "HEAD"]) + .current_dir(rl_plugin.origin_plugin_path()); + let commit_hash = run_logged_command(command, logger).await?; + + let installed_ref = if let Some(gr) = &git_ref { + gr.clone() + } else { + commit_hash + }; + + rl_plugin + .metadata_mut() + .new_install(Some(installed_ref), git_ref); + } + + write_metadata(rl_plugin).await?; + + let line = format!("plugin installed: {}", entrypoint.display()); + logger.log(&line, LogLevel::INFO).await?; + + Ok(entrypoint) +} + +async fn pre_install_checks( + rl_plugin: &RecklessPlugin, + plugin_name: &str, + git_ref: Option<&String>, + logger: &mut RecklessLogger<'_>, +) -> Result<(), anyhow::Error> { + if rl_plugin.path().exists() { + let line = format!("{plugin_name} is already installed"); + logger.log(&line, LogLevel::UNUSUAL).await?; + return Err(anyhow!(line)); + } + + if let Some(installable) = rl_plugin.manifest().installable { + if !installable { + let line = + format!("{plugin_name} is not reckless-installable according to their manifest"); + logger.log(&line, LogLevel::UNUSUAL).await?; + return Err(anyhow!(line)); + } + } + + if rl_plugin.is_local_path() && git_ref.is_some() { + let line = "git refs are not supported for local paths"; + logger.log(line, LogLevel::UNUSUAL).await?; + return Err(anyhow!(line)); + } + + Ok(()) +} + +pub async fn handle_uninstall( + plugin: Plugin, + target: String, + verbose: bool, +) -> Result { + let mut logger = RecklessLogger::new(&plugin, RecklessTopic::Uninstall, verbose); + + let (plugin_name, git_ref) = match parse_target(&target) { + Ok((pn, g)) => (pn, g), + Err(e) => { + logger.log(&e.to_string(), LogLevel::UNUSUAL).await?; + return Err(e); + } + }; + if git_ref.is_some() { + let line = "git refs are not supported here"; + logger.log(line, LogLevel::UNUSUAL).await?; + return Err(anyhow!(line)); + } + + let common_result = match uninstall(plugin.clone(), plugin_name.clone(), &mut logger).await { + Ok(()) => CommonResult { plugin_name }, + Err(e) => { + let line = format!("{plugin_name} NOT uninstalled: {e}"); + logger.log(&line, LogLevel::BROKEN).await?; + return Err(anyhow!(line)); + } + }; + + let response = UninstallResponse::new(common_result, logger); + + Ok(json!(response)) +} + +async fn uninstall( + plugin: Plugin, + plugin_name: String, + logger: &mut RecklessLogger<'_>, +) -> Result<(), anyhow::Error> { + let plugin_dir = plugin.state().reckless_dir.join(&plugin_name); + + match read_metadata(&plugin_name, &plugin_dir).await { + Ok(rl_plugin) => { + if let Err(e) = disable_plugin(plugin.clone(), &rl_plugin, logger).await { + let line = + format!("{plugin_name} NOT disabled: {e}, remove plugin from config manually!"); + logger.log(&line, LogLevel::BROKEN).await?; + } + } + Err(e) => { + let line = format!( + "could not read metadata for {plugin_name}: {e}, you must stop and remove it \ + from the configs yourself" + ); + logger.log(&line, LogLevel::BROKEN).await?; + } + } + + match fs::remove_dir_all(&plugin_dir).await { + Ok(()) => { + let line = format!("{plugin_name} uninstalled"); + logger.log(&line, LogLevel::INFO).await?; + } + Err(e) => { + return Err(e.into()); + } + } + + Ok(()) +} diff --git a/plugins/reckless-plugin/src/cmds/list.rs b/plugins/reckless-plugin/src/cmds/list.rs new file mode 100644 index 000000000000..33d52a1a2052 --- /dev/null +++ b/plugins/reckless-plugin/src/cmds/list.rs @@ -0,0 +1,86 @@ +use std::collections::HashMap; + +use anyhow::anyhow; +use cln_plugin::Plugin; +use cln_rpc::notifications::LogLevel; +use serde_json::json; +use tokio::fs; + +use crate::{ + structs::{ + ListavailableResponse, ListavailableResult, ListinstalledResponse, ListinstalledResult, + Metadata, PluginState, RecklessLogger, RecklessTopic, + }, + util::{read_metadata, search_sources}, +}; + +pub async fn handle_list_available( + plugin: Plugin, + target: Option, + verbose: bool, +) -> Result { + let mut logger = RecklessLogger::new(&plugin, RecklessTopic::Search, verbose); + let mut listavailable_results = Vec::new(); + + let reckless_plugins = match search_sources(&plugin, target, &mut logger).await { + Ok(o) => o, + Err(e) => { + logger.log(&e.to_string(), LogLevel::UNUSUAL).await?; + return Err(e); + } + }; + + for (_plugin_name, plugin) in reckless_plugins { + listavailable_results.push(ListavailableResult::from(plugin)); + } + + let response = ListavailableResponse::new(listavailable_results, logger); + + Ok(json!(response)) +} + +pub async fn handle_list_installed( + plugin: Plugin, + verbose: bool, +) -> Result { + let mut logger = RecklessLogger::new(&plugin, RecklessTopic::Search, verbose); + let mut listinstalled_results = Vec::new(); + + let installed = match list_installed(plugin.clone()).await { + Ok(i) => i, + Err(e) => { + logger.log(&e.to_string(), LogLevel::BROKEN).await?; + return Err(anyhow!(e.to_string())); + } + }; + + for (plugin_name, metadata) in installed { + let li_res = ListinstalledResult::new(metadata, plugin_name); + listinstalled_results.push(li_res); + } + + let response = ListinstalledResponse::new(listinstalled_results, logger); + + Ok(json!(response)) +} + +pub async fn list_installed( + plugin: Plugin, +) -> Result, anyhow::Error> { + let mut result: HashMap = HashMap::new(); + let mut entries = fs::read_dir(&plugin.state().reckless_dir).await?; + while let Ok(Some(entry)) = entries.next_entry().await { + let Ok(file_type) = entry.file_type().await else { + continue; + }; + if file_type.is_file() { + continue; + } + let plugin_name = entry.file_name().to_string_lossy().to_string(); + if let Ok(rl_plugin) = read_metadata(&plugin_name, &entry.path()).await { + result.insert(plugin_name, rl_plugin.metadata().clone()); + } + } + + Ok(result) +} diff --git a/plugins/reckless-plugin/src/cmds/source.rs b/plugins/reckless-plugin/src/cmds/source.rs new file mode 100644 index 000000000000..4419ed772927 --- /dev/null +++ b/plugins/reckless-plugin/src/cmds/source.rs @@ -0,0 +1,207 @@ +use std::str::FromStr; + +use anyhow::anyhow; +use cln_plugin::Plugin; +use cln_rpc::notifications::LogLevel; +use serde_json::json; +use tokio::{ + fs::{self, OpenOptions}, + io::AsyncWriteExt, +}; +use url::Url; + +use crate::{ + structs::{PluginOrigin, PluginState, RecklessLogger, RecklessTopic, SourcesResponse}, + util::{init_plugin_repo, read_sources_file, repo_path_from_url}, +}; + +pub async fn handle_source_list( + plugin: Plugin, + verbose: bool, +) -> Result { + let mut logger = RecklessLogger::new(&plugin, RecklessTopic::Search, verbose); + + let (sources, _source_file) = match read_sources_file(&plugin).await { + Ok(res) => res, + Err(e) => { + logger.log(&e.to_string(), LogLevel::BROKEN).await?; + return Err(e); + } + }; + + let response = SourcesResponse::new(sources, logger); + + Ok(json!(response)) +} + +pub async fn handle_source_add( + plugin: Plugin, + target: String, + verbose: bool, +) -> Result { + let mut logger = RecklessLogger::new(&plugin, RecklessTopic::Source, verbose); + + let (mut sources, source_file) = match read_sources_file(&plugin).await { + Ok(res) => res, + Err(e) => { + logger.log(&e.to_string(), LogLevel::BROKEN).await?; + return Err(e); + } + }; + + let mut file_handle = match OpenOptions::new().append(true).open(source_file).await { + Ok(f) => f, + Err(e) => { + logger.log(&e.to_string(), LogLevel::BROKEN).await?; + return Err(anyhow!(e)); + } + }; + + let add_source = PluginOrigin::new(&target)?; + + for source in &sources { + if source == &add_source { + let line = format!("source {target} already exists"); + logger.log(&line, LogLevel::UNUSUAL).await?; + return Err(anyhow!(line)); + } + } + + if let PluginOrigin::Url(url_str) = &add_source { + let url = Url::from_str(url_str)?; + init_plugin_repo(&plugin, url, &mut logger).await?; + } + + if let Err(e) = file_handle + .write_all(format!("{add_source}\n").as_bytes()) + .await + { + logger.log(&e.to_string(), LogLevel::BROKEN).await?; + return Err(anyhow!(e)); + } + + sources.push(add_source); + + let response = SourcesResponse::new(sources, logger); + + Ok(json!(response)) +} + +pub async fn handle_source_remove( + plugin: Plugin, + target: String, + verbose: bool, +) -> Result { + let mut logger = RecklessLogger::new(&plugin, RecklessTopic::Source, verbose); + + let (mut sources, source_file) = match read_sources_file(&plugin).await { + Ok(res) => res, + Err(e) => { + logger.log(&e.to_string(), LogLevel::BROKEN).await?; + return Err(e); + } + }; + + let del_source = PluginOrigin::new(&target)?; + + match remove_source(&plugin, &del_source, &mut logger).await { + Ok(res) => res, + Err(e) => { + logger.log(&e.to_string(), LogLevel::BROKEN).await?; + return Err(e); + } + } + + let Ok(mut file_handle) = OpenOptions::new() + .write(true) + .truncate(true) + .open(&source_file) + .await + else { + let line = format!("failed to open sources file: {}", source_file.display()); + logger.log(&line, LogLevel::BROKEN).await?; + return Err(anyhow!(line)); + }; + + let mut remove_index = None; + + for (i, source) in sources.iter().enumerate() { + if source == &del_source { + remove_index = Some(i); + } else if let Err(e) = file_handle + .write_all(format!("{source}\n").as_bytes()) + .await + { + logger.log(&e.to_string(), LogLevel::BROKEN).await?; + return Err(anyhow!(e)); + } + } + + if let Some(i) = remove_index { + sources.remove(i); + } else { + return Err(anyhow!("source {target} not found")); + } + + let response = SourcesResponse::new(sources, logger); + + Ok(json!(response)) +} + +async fn remove_source( + plugin: &Plugin, + target: &PluginOrigin, + logger: &mut RecklessLogger<'_>, +) -> Result<(), anyhow::Error> { + match target { + PluginOrigin::LocalPath(_path) => {} + PluginOrigin::Url(url_str) => { + let url = Url::from_str(url_str)?; + let repo_dir = plugin.state().reckless_dir.join(repo_path_from_url(&url)?); + if !repo_dir.exists() { + let line = format!("source directory never existed: {}", repo_dir.display()); + logger.log(&line, LogLevel::INFO).await?; + return Ok(()); + } + match fs::remove_dir_all(&repo_dir).await { + Ok(()) => { + let line = format!("source directory removed: {}", repo_dir.display()); + logger.log(&line, LogLevel::INFO).await?; + } + Err(e) => { + let line = format!( + "failed to remove source directory: {}: {}", + repo_dir.display(), + e + ); + return Err(anyhow!(line)); + } + } + + match fs::read_dir(&repo_dir).await { + Ok(mut entries) => { + if entries.next_entry().await?.is_none() { + let owner_dir = repo_dir + .parent() + .ok_or_else(|| anyhow!("source repo has no owner directory"))?; + let line = format!( + "also removing emppty repository owner directory: {}", + owner_dir.display() + ); + logger.log(&line, LogLevel::INFO).await?; + fs::remove_dir_all(owner_dir).await?; + } + } + Err(e) => { + let line = format!( + "failed to read source directory: {} {e}", + repo_dir.display() + ); + return Err(anyhow!(line)); + } + } + } + } + + Ok(()) +} diff --git a/plugins/reckless-plugin/src/cmds/tip.rs b/plugins/reckless-plugin/src/cmds/tip.rs new file mode 100644 index 000000000000..5ddd10dcbae5 --- /dev/null +++ b/plugins/reckless-plugin/src/cmds/tip.rs @@ -0,0 +1,121 @@ +use anyhow::anyhow; +use cln_plugin::Plugin; +use cln_rpc::{model::requests::XpayRequest, notifications::LogLevel, primitives::Amount}; +use serde_json::json; + +use crate::{ + structs::{PluginState, RecklessLogger, RecklessTopic, TipArgs, TipResponse}, + util::{parse_target, read_metadata, search_sources}, +}; + +pub async fn handle_tip( + plugin: Plugin, + args: TipArgs, + verbose: bool, +) -> Result { + let mut logger = RecklessLogger::new(&plugin, RecklessTopic::Tip, verbose); + + let (plugin_name, git_ref) = match parse_target(&args.target) { + Ok(res) => res, + Err(e) => { + logger.log(&e.to_string(), LogLevel::UNUSUAL).await?; + return Err(e); + } + }; + if git_ref.is_some() { + let line = "git refs are not supported here"; + logger.log(line, LogLevel::UNUSUAL).await?; + return Err(anyhow!(line)); + } + + let plugin_dir = plugin.state().reckless_dir.join(&plugin_name); + + let offer = match read_metadata(&plugin_name, &plugin_dir).await { + Ok(p) => { + if let Some(off) = &p.manifest().offer { + Some(off.clone()) + } else { + let line = + format!("installed version of {plugin_name} has no offer, checking sources..."); + logger.log(&line, LogLevel::INFO).await?; + get_offer_from_sources(&plugin, &plugin_name, &mut logger).await? + } + } + Err(e) => { + logger.log(&e.to_string(), LogLevel::UNUSUAL).await?; + let line = format!("{plugin_name} not installed, searching in sources..."); + logger.log(&line, LogLevel::INFO).await?; + + get_offer_from_sources(&plugin, &plugin_name, &mut logger).await? + } + }; + + let Some(offer) = offer else { + return Err(anyhow!( + "no offer found in reckless manifest for {plugin_name}" + )); + }; + + let line = format!( + "Sending {}msat to {plugin_name} author...", + args.amount_msat + ); + logger.log(&line, LogLevel::INFO).await?; + + let mut rpc = plugin.state().rpc.lock().await; + let xpay = match rpc + .call_typed(&XpayRequest { + amount_msat: Some(Amount::from_msat(args.amount_msat)), + dev_use_shadow: None, + label: None, + localinvreqid: None, + maxdelay: None, + maxfee: None, + partial_msat: None, + payer_note: args.payer_note, + retry_for: None, + layers: None, + invstring: offer.clone(), + }) + .await + { + Ok(o) => o, + Err(e) => { + let line = format!( + "Error sending {}msat to {plugin_name} author: {e}", + args.amount_msat + ); + logger.log(&line, LogLevel::UNUSUAL).await?; + return Err(anyhow!(line)); + } + }; + + let line = format!( + "Successfully sent {}msat to {plugin_name} author!", + args.amount_msat + ); + logger.log(&line, LogLevel::INFO).await?; + + let response = TipResponse::new(xpay, logger); + + Ok(json!(response)) +} + +async fn get_offer_from_sources( + plugin: &Plugin, + plugin_name: &str, + logger: &mut RecklessLogger<'_>, +) -> Result, anyhow::Error> { + let search_results = match search_sources(plugin, Some(plugin_name.to_owned()), logger).await { + Ok(o) => o, + Err(e) => { + logger.log(&e.to_string(), LogLevel::UNUSUAL).await?; + return Err(e); + } + }; + let Some(rlp) = search_results.get(plugin_name) else { + return Err(anyhow!("{plugin_name} not found installed or in sources")); + }; + + Ok(rlp.manifest().offer.clone()) +} diff --git a/plugins/reckless-plugin/src/cmds/update.rs b/plugins/reckless-plugin/src/cmds/update.rs new file mode 100644 index 000000000000..a36dc677441b --- /dev/null +++ b/plugins/reckless-plugin/src/cmds/update.rs @@ -0,0 +1,321 @@ +use anyhow::anyhow; +use cln_plugin::Plugin; +use cln_rpc::notifications::LogLevel; +use serde_json::json; +use tokio::process::Command; + +use crate::{ + cmds::{ + enable::{disable_plugin, enable_plugin}, + list::list_installed, + }, + installers::{ + install_custom_plugin, install_go_plugin, install_nodejs_plugin, install_poetry_plugin, + install_python_plugin, install_rust_plugin, install_uv_legacy_plugin, install_uv_plugin, + install_uv_shebang_plugin, + }, + structs::{ + InstallResult, Installer, PluginState, RecklessLogger, RecklessPlugin, RecklessTopic, + UpdateArgs, UpdateResponse, + }, + util::{ + copy_dir_all, parse_target, read_metadata, run_logged_command, search_sources, + write_metadata, + }, +}; + +#[allow(clippy::too_many_lines)] +pub async fn handle_update( + plugin: Plugin, + install_args: UpdateArgs, + verbose: bool, +) -> Result { + let mut logger = RecklessLogger::new(&plugin, RecklessTopic::Install, verbose); + let mut update_results = Vec::new(); + + let mut ignore_pinned = false; + + let targets = gather_update_targets( + plugin.clone(), + &install_args, + &mut ignore_pinned, + &mut logger, + ) + .await?; + + for target in targets { + let (plugin_name, git_ref) = match parse_target(&target) { + Ok(o) => o, + Err(e) => { + logger.log(&e.to_string(), LogLevel::UNUSUAL).await?; + return Err(e); + } + }; + let mut search_results = + match search_sources(&plugin, Some(plugin_name.clone()), &mut logger).await { + Ok(o) => o, + Err(e) => { + logger.log(&e.to_string(), LogLevel::BROKEN).await?; + continue; + } + }; + let Some(new_rl_plugin) = search_results.get_mut(&plugin_name) else { + let line = format!("{plugin_name} not found in any known sources"); + logger.log(&line, LogLevel::UNUSUAL).await?; + continue; + }; + + let plugin_dir = plugin.state().reckless_dir.join(&plugin_name); + + let old_rl_plugin = match read_metadata(&plugin_name, &plugin_dir).await { + Ok(o) => o, + Err(e) => { + logger.log(&e.to_string(), LogLevel::BROKEN).await?; + continue; + } + }; + + if let Err(e) = check_upgradeable(&old_rl_plugin, new_rl_plugin, ignore_pinned) { + let line = format!("{plugin_name} is not upgradeable: {e}"); + logger.log(&line, LogLevel::UNUSUAL).await?; + continue; + } + + let old_options = match disable_plugin(plugin.clone(), &old_rl_plugin, &mut logger).await { + Ok(o) => o, + Err(e) => { + let line = format!( + "Disabling {} before update failed. \ + It might be in an inconsistent state: {e}", + old_rl_plugin.name() + ); + logger.log(&line, LogLevel::BROKEN).await?; + continue; + } + }; + + let update_result = update( + git_ref.clone(), + old_rl_plugin, + new_rl_plugin, + &mut logger, + install_args.developer, + ) + .await; + + let mut install_result = InstallResult { + plugin_name: plugin_name.clone(), + enabled: false, + installed_commit: new_rl_plugin + .metadata() + .installed_commit() + .map(std::borrow::ToOwned::to_owned), + }; + + match update_result { + Ok(()) => { + match enable_plugin(plugin.clone(), new_rl_plugin, old_options, &mut logger).await { + Ok(()) => { + install_result.enabled = true; + } + Err(e) => { + let line = + format!("Enabling {} after update failed: {e}", new_rl_plugin.name()); + logger.log(&line, LogLevel::BROKEN).await?; + } + } + update_results.push(install_result); + } + Err(e) => { + logger.log(&e.to_string(), LogLevel::BROKEN).await?; + if let Some(deps) = &new_rl_plugin.manifest().dependencies { + let line = format!( + "Make sure you have the following system dependencies installed: {}", + deps.join(", ") + ); + logger.log(&line, LogLevel::UNUSUAL).await?; + } + } + } + } + + if update_results.is_empty() { + let line = "No updates succeeded"; + logger.log(line, LogLevel::BROKEN).await?; + return Err(anyhow!(line)); + } + + let response = UpdateResponse::new(update_results, logger); + + Ok(json!(response)) +} + +fn check_upgradeable( + old_rl_plugin: &RecklessPlugin, + new_rl_plugin: &RecklessPlugin, + ignore_pinned: bool, +) -> Result<(), anyhow::Error> { + if old_rl_plugin.metadata().requested_commit().is_some() && !ignore_pinned { + return Err(anyhow!("version-pinned plugin: {}", old_rl_plugin.name())); + } + + if !new_rl_plugin.origin_plugin_path().exists() { + return Err(anyhow!( + "repo does not exist: {}", + new_rl_plugin.origin_repo_path().display() + )); + } + + if let Some(installable) = new_rl_plugin.manifest().installable { + if !installable { + return Err(anyhow!( + "{} is not reckless-installable according to their manifest", + new_rl_plugin.name() + )); + } + } + Ok(()) +} + +async fn gather_update_targets( + plugin: Plugin, + install_args: &UpdateArgs, + ignore_pinned: &mut bool, + logger: &mut RecklessLogger<'_>, +) -> Result, anyhow::Error> { + if let Some(target) = &install_args.target { + *ignore_pinned = true; + Ok(vec![target.clone()]) + } else { + let listinstalled = match list_installed(plugin).await { + Ok(o) => o, + Err(e) => { + logger.log(&e.to_string(), LogLevel::BROKEN).await?; + return Err(e); + } + }; + let mut targets = Vec::new(); + for (name, _) in listinstalled { + targets.push(name); + } + Ok(targets) + } +} + +async fn update( + git_ref: Option, + old_rl_plugin: RecklessPlugin, + new_rl_plugin: &mut RecklessPlugin, + logger: &mut RecklessLogger<'_>, + developer: bool, +) -> Result<(), anyhow::Error> { + if !new_rl_plugin.is_local_path() { + let mut command = Command::new("git"); + command + .args(["pull", "--ff-only"]) + .current_dir(new_rl_plugin.origin_repo_path()); + run_logged_command(command, logger).await?; + + let mut command = Command::new("git"); + command + .args(["submodule", "sync", "--recursive"]) + .current_dir(new_rl_plugin.origin_repo_path()); + run_logged_command(command, logger).await?; + + let mut command = Command::new("git"); + command + .args(["submodule", "update", "--init", "--recursive"]) + .current_dir(new_rl_plugin.origin_repo_path()); + run_logged_command(command, logger).await?; + + let mut command = Command::new("git"); + command + .args(["checkout", git_ref.as_ref().unwrap_or(&"HEAD".to_owned())]) + .current_dir(new_rl_plugin.origin_plugin_path()); + run_logged_command(command, logger).await?; + + let mut command = Command::new("git"); + command + .args(["rev-parse", "HEAD"]) + .current_dir(new_rl_plugin.origin_plugin_path()); + let commit_hash = run_logged_command(command, logger).await?; + + let ref_to_be_installed = if let Some(gr) = &git_ref { + gr.clone() + } else { + commit_hash + }; + + if let Some(installed_commit) = old_rl_plugin.metadata().installed_commit() { + if installed_commit == ref_to_be_installed { + let line = format!( + "{} is already on the latest version: {ref_to_be_installed}", + old_rl_plugin.name() + ); + logger.log(&line, LogLevel::INFO).await?; + return Ok(()); + } + } else { + let line = format!( + "{} should have a git ref for the current install", + old_rl_plugin.name() + ); + logger.log(&line, LogLevel::UNUSUAL).await?; + } + + let line = format!( + "updating {} from {} to {ref_to_be_installed}", + old_rl_plugin.name(), + old_rl_plugin.metadata().installed_commit().unwrap() + ); + logger.log(&line, LogLevel::INFO).await?; + + copy_dir_all( + new_rl_plugin.origin_plugin_path(), + new_rl_plugin.source_path(), + logger, + ) + .await?; + } + + let entrypoint = match new_rl_plugin.installer() { + Installer::PythonUv => install_uv_plugin(new_rl_plugin, logger).await?, + Installer::PythonUvShebang => install_uv_shebang_plugin(new_rl_plugin, logger).await?, + Installer::PythonUvLegacy => install_uv_legacy_plugin(new_rl_plugin, logger).await?, + Installer::PoetryVenv => install_poetry_plugin(new_rl_plugin, logger).await?, + Installer::PyprojectViaPip | Installer::Python => { + install_python_plugin(new_rl_plugin, logger).await? + } + Installer::Nodejs => install_nodejs_plugin(new_rl_plugin, logger).await?, + Installer::Rust => install_rust_plugin(new_rl_plugin, logger, developer).await?, + Installer::Go => install_go_plugin(new_rl_plugin, logger).await?, + Installer::Custom => install_custom_plugin(new_rl_plugin, logger).await?, + }; + + if new_rl_plugin.is_local_path() { + new_rl_plugin.metadata_mut().new_install(None, None); + } else { + let mut command = Command::new("git"); + command + .args(["rev-parse", "HEAD"]) + .current_dir(new_rl_plugin.origin_plugin_path()); + let commit_hash = run_logged_command(command, logger).await?; + + let installed_ref = if let Some(gr) = &git_ref { + gr.clone() + } else { + commit_hash + }; + + new_rl_plugin + .metadata_mut() + .new_install(Some(installed_ref), git_ref); + } + + write_metadata(new_rl_plugin).await?; + + let line = format!("plugin updated: {}", entrypoint.display()); + logger.log(&line, LogLevel::INFO).await?; + + Ok(()) +} diff --git a/plugins/reckless-plugin/src/installers.rs b/plugins/reckless-plugin/src/installers.rs new file mode 100644 index 000000000000..de20c9451b14 --- /dev/null +++ b/plugins/reckless-plugin/src/installers.rs @@ -0,0 +1,625 @@ +use std::{ + collections::{HashMap, VecDeque}, + path::{Path, PathBuf}, +}; + +use anyhow::anyhow; +use cln_rpc::notifications::LogLevel; +use tokio::{fs, process::Command}; + +use crate::{ + structs::{RecklessLogger, RecklessPlugin}, + util::{create_symlink, run_logged_command}, +}; + +pub async fn install_custom_plugin( + rl_plugin: &RecklessPlugin, + logger: &mut RecklessLogger<'_>, +) -> Result { + let line = "using installer custom"; + logger.log(line, LogLevel::INFO).await?; + + let entrypoint = Path::new( + rl_plugin + .manifest() + .entrypoint + .as_ref() + .ok_or_else(|| anyhow!("custom installer requires entrypoint in manifest"))?, + ); + let install_cmds = rl_plugin + .manifest() + .install_cmd + .as_ref() + .ok_or_else(|| anyhow!("custom installer requires install_cmd in manifest"))?; + + let line = format!( + "running install commands for {}, this might take a while...", + rl_plugin.name() + ); + logger.log(&line, LogLevel::INFO).await?; + + for install_cmd in install_cmds { + let cmd_parts = install_cmd.split_whitespace().collect::>(); + + if cmd_parts.is_empty() { + return Err(anyhow!("install_cmd in manifest is empty!?")); + } + + let mut cmd = Command::new(cmd_parts.first().unwrap()); + if cmd_parts.len() > 1 { + cmd.args(&cmd_parts[1..]); + } + cmd.current_dir(rl_plugin.source_path()); + run_logged_command(cmd, logger).await?; + } + + let entrypoint_path = rl_plugin.source_path().join(entrypoint); + + if !entrypoint_path.exists() { + return Err(anyhow!("plugin entry not present after install_cmd")); + } + + set_executable(&entrypoint_path).await?; + + let symlink_path = rl_plugin.get_entrypath()?; + + create_symlink(&entrypoint_path, &symlink_path)?; + + Ok(symlink_path) +} + +pub async fn install_nodejs_plugin( + rl_plugin: &RecklessPlugin, + logger: &mut RecklessLogger<'_>, +) -> Result { + let line = "using installer nodejs"; + logger.log(line, LogLevel::INFO).await?; + + let line = "installing dependencies with `npm install`..."; + logger.log(line, LogLevel::INFO).await?; + + let mut npm_install = Command::new("npm"); + npm_install + .arg("install") + .current_dir(rl_plugin.source_path()); + run_logged_command(npm_install, logger).await?; + + let line = "dependencies installed successfully"; + logger.log(line, LogLevel::INFO).await?; + + let Some(plugin_entry) = &rl_plugin.manifest().entrypoint else { + return Err(anyhow!("plugin entrypoint not found")); + }; + + let plugin_path = rl_plugin.source_path().join(plugin_entry); + set_executable(&plugin_path).await?; + + let symlink_path = rl_plugin.get_entrypath()?; + + create_symlink(&plugin_path, &symlink_path)?; + + Ok(symlink_path) +} + +pub async fn install_rust_plugin( + rl_plugin: &RecklessPlugin, + logger: &mut RecklessLogger<'_>, + developer: bool, +) -> Result { + let line = "using installer rust_cargo"; + logger.log(line, LogLevel::INFO).await?; + + let line = "compiling with `cargo`, this might take a while..."; + logger.log(line, LogLevel::INFO).await?; + + let mut cargo_build = Command::new("cargo"); + cargo_build.arg("build"); + if !developer { + cargo_build.arg("--release"); + } + cargo_build.current_dir(rl_plugin.source_path()); + + run_logged_command(cargo_build, logger).await?; + + let mut cargo_metadata = Command::new("cargo"); + cargo_metadata + .arg("metadata") + .arg("--no-deps") + .arg("--format-version") + .arg("1") + .current_dir(rl_plugin.source_path()); + + let metadata_str = run_logged_command(cargo_metadata, logger).await?; + + let metadata: serde_json::Value = serde_json::from_str(&metadata_str)?; + + let packages = if let Some(p) = metadata.get("packages").and_then(|t| t.as_array()) { + p.clone() + } else { + Vec::new() + }; + + if packages.len() > 1 { + return Err(anyhow!("Multiple packages found in Cargo.toml")); + } + + let mut targets = packages + .first() + .and_then(|p| p.get("targets").and_then(|t| t.as_array().cloned())) + .unwrap_or_default(); + + targets.retain(|p| { + if let Some(serde_json::Value::Array(arr)) = p.get("kind") { + return arr == &["bin"]; + } + false + }); + + if targets.len() > 1 { + return Err(anyhow!("Multiple binaries found in Cargo.toml")); + } + + if let Some(package_name) = targets + .first() + .and_then(|n| n.get("name").and_then(|n| n.as_str())) + { + let profile = if developer { "debug" } else { "release" }; + let binary = rl_plugin + .source_path() + .join("target") + .join(profile) + .join(package_name); + if !binary.exists() { + return Err(anyhow!( + "Binary {package_name} not found in target/{profile}" + )); + } + + let destination = rl_plugin.get_entrypath()?; + + let line = format!("moving {} to {}", binary.display(), destination.display()); + logger.log(&line, LogLevel::DEBUG).await?; + + fs::copy(&binary, &destination).await?; + + if !developer { + let mut cargo_clean = Command::new("cargo"); + cargo_clean.arg("clean"); + cargo_clean.current_dir(rl_plugin.source_path()); + run_logged_command(cargo_clean, logger).await?; + } + + Ok(destination) + } else { + Err(anyhow!("No binary found in Cargo.toml")) + } +} + +pub async fn install_go_plugin( + rl_plugin: &RecklessPlugin, + logger: &mut RecklessLogger<'_>, +) -> Result { + let line = "using installer go"; + logger.log(line, LogLevel::INFO).await?; + + let main_packages = find_go_main_packages(rl_plugin.source_path().to_owned()).await?; + if main_packages.len() > 1 { + return Err(anyhow!( + "Multiple main packages found, can't install: {main_packages:?}" + )); + } + if main_packages.is_empty() { + return Err(anyhow!("No main package found, can't install")); + } + + let destination = rl_plugin.get_entrypath()?; + let main_path = main_packages + .first() + .unwrap() + .parent() + .ok_or_else(|| anyhow!("main package has no parent directory"))?; + + let line = "compiling with `go`, this might take a moment..."; + logger.log(line, LogLevel::INFO).await?; + + let mut command = Command::new("go"); + command.arg("build"); + command.arg("-o"); + command.arg(&destination); + command.arg(main_path); + command.current_dir(rl_plugin.source_path()); + + run_logged_command(command, logger).await?; + + if !destination.exists() { + return Err(anyhow!("Binary {} not found", destination.display())); + } + + Ok(destination) +} + +const GO_SKIP_DIRS: &[&str] = &[ + "examples", + "example", + "testdata", + "tests", + "docs", + "doc", + ".git", + ".github", + ".vscode", + ".idea", + "vendor", + "node_modules", + "target", + "dist", + "build", + "tmp", + "bench", + "benchmark", + "benchmarks", +]; + +async fn find_go_main_packages(root: PathBuf) -> Result, anyhow::Error> { + let mut results: Vec = Vec::new(); + + let mut queue = VecDeque::new(); + queue.push_back((root.clone(), 0usize)); + + while let Some((path, depth)) = queue.pop_front() { + if depth > 256 { + continue; + } + + let Ok(mut read_dir) = fs::read_dir(&path).await else { + continue; + }; + + while let Some(entry) = read_dir.next_entry().await? { + let path = entry.path(); + let file_type = entry.file_type().await?; + + let Some(file_name) = path.file_name().and_then(|p| p.to_str()) else { + continue; + }; + + if file_type.is_dir() { + if !GO_SKIP_DIRS.contains(&file_name) { + queue.push_back((path, depth + 1)); + } + continue; + } + + if !file_type.is_file() { + continue; + } + + if path.extension().and_then(|e| e.to_str()) != Some("go") { + continue; + } + + let Ok(content) = fs::read_to_string(&path).await else { + continue; + }; + + if !content.contains("package main") { + continue; + } + + if !content.contains("func main(") { + continue; + } + + results.push(path.clone()); + } + } + + Ok(results) +} + +pub async fn install_poetry_plugin( + rl_plugin: &RecklessPlugin, + logger: &mut RecklessLogger<'_>, +) -> Result { + let line = "using installer poetryvenv"; + logger.log(line, LogLevel::INFO).await?; + + let venv_dir = rl_plugin.source_path().join(".venv"); + create_venv(rl_plugin.source_path(), &venv_dir, logger).await?; + + let mut env: HashMap = std::env::vars().collect(); + + env.insert("VIRTUAL_ENV".into(), venv_dir.to_string_lossy().to_string()); + env.remove("POETRY_VIRTUAL_ENV"); + + env.insert("LANG".to_string(), "C.UTF-8".to_string()); + env.insert("LC_ALL".to_string(), "C.UTF-8".to_string()); + env.insert("PYTHONUTF8".to_string(), "1".to_string()); + env.insert("PYTHONIOENCODING".to_string(), "utf-8".to_string()); + env.insert( + "POETRY_VIRTUALENVS_PATH".into(), + venv_dir.to_string_lossy().into_owned(), + ); + + let line = "installing dependencies with `poetry install`, this might take a moment..."; + logger.log(line, LogLevel::INFO).await?; + + let mut command = Command::new("poetry"); + command + .arg("install") + .arg("--no-root") + .arg("--no-interaction") + .current_dir(rl_plugin.source_path()) + .env_clear() + .envs(&env); + + run_logged_command(command, logger).await?; + + let line = "dependencies installed successfully"; + logger.log(line, LogLevel::INFO).await?; + + let wrapper = rl_plugin.manifest().entry_filename()?; + let wrapper_path = rl_plugin.get_entrypath()?; + + let wrapper = create_wrapper(rl_plugin, wrapper, &venv_dir).await?; + fs::write(&wrapper_path, wrapper).await?; + + set_executable(&wrapper_path).await?; + + Ok(wrapper_path) +} + +pub async fn install_uv_plugin( + rl_plugin: &RecklessPlugin, + logger: &mut RecklessLogger<'_>, +) -> Result { + let line = "using installer pythonuv"; + logger.log(line, LogLevel::INFO).await?; + + let mut command = Command::new("uv"); + command.arg("sync").current_dir(rl_plugin.source_path()); + run_logged_command(command, logger).await?; + + let line = "dependencies installed successfully"; + logger.log(line, LogLevel::INFO).await?; + + let wrapper = rl_plugin.manifest().entry_filename()?; + let wrapper_path = rl_plugin.get_entrypath()?; + let venv_dir = rl_plugin.source_path().join(".venv"); + + let wrapper = create_wrapper(rl_plugin, wrapper, &venv_dir).await?; + fs::write(&wrapper_path, wrapper).await?; + + set_executable(&wrapper_path).await?; + + Ok(wrapper_path) +} + +pub async fn install_uv_shebang_plugin( + rl_plugin: &RecklessPlugin, + logger: &mut RecklessLogger<'_>, +) -> Result { + let line = "using installer pythonuvshebang"; + logger.log(line, LogLevel::INFO).await?; + + let entryfile = rl_plugin.manifest().entry_filename()?; + + let plugin_path = rl_plugin.source_path().join(entryfile); + set_executable(&plugin_path).await?; + + let symlink_path = rl_plugin.get_entrypath()?; + + create_symlink(&plugin_path, &symlink_path)?; + + Ok(symlink_path) +} + +pub async fn install_uv_legacy_plugin( + rl_plugin: &RecklessPlugin, + logger: &mut RecklessLogger<'_>, +) -> Result { + let line = "using installer pythonuvlegacy"; + logger.log(line, LogLevel::INFO).await?; + + let mut command = Command::new("uv"); + command + .arg("venv") + .arg("--clear") + .current_dir(rl_plugin.source_path()); + + run_logged_command(command, logger).await?; + + let python = python_bin(&rl_plugin.source_path().join(".venv")); + + let mut command = Command::new("uv"); + command + .arg("pip") + .arg("install") + .arg("--python") + .arg(python) + .arg("-r") + .arg("requirements.txt") + .current_dir(rl_plugin.source_path()); + run_logged_command(command, logger).await?; + + let line = "dependencies installed successfully"; + logger.log(line, LogLevel::INFO).await?; + + let wrapper = rl_plugin.manifest().entry_filename()?; + let wrapper_path = rl_plugin.get_entrypath()?; + let venv_dir = rl_plugin.source_path().join(".venv"); + + let wrapper = create_wrapper(rl_plugin, wrapper, &venv_dir).await?; + fs::write(&wrapper_path, wrapper).await?; + + set_executable(&wrapper_path).await?; + + Ok(wrapper_path) +} + +pub async fn install_python_plugin( + rl_plugin: &RecklessPlugin, + logger: &mut RecklessLogger<'_>, +) -> Result { + let line = "using installer PyprojectViaPip/Python"; + logger.log(line, LogLevel::INFO).await?; + + let venv_dir = rl_plugin.source_path().join(".venv"); + create_venv(rl_plugin.source_path(), &venv_dir, logger).await?; + + let pip = pip_bin(&venv_dir); + + let req_txt = rl_plugin.source_path().join("requirements.txt"); + let pyproject = rl_plugin.source_path().join("pyproject.toml"); + + let line = "installing dependencies with `pip install`..."; + logger.log(line, LogLevel::INFO).await?; + + let mut command = Command::new(&pip); + command.arg("install"); + + if req_txt.exists() { + command.arg("-r").arg(&req_txt); + } else if pyproject.exists() { + command.arg("."); + } else { + return Err(anyhow!("No requirements.txt or pyproject.toml found")); + } + + command.current_dir(rl_plugin.source_path()); + run_logged_command(command, logger).await?; + + let line = "dependencies installed successfully"; + logger.log(line, LogLevel::INFO).await?; + + let wrapper = rl_plugin.manifest().entry_filename()?; + let wrapper_path = rl_plugin.get_entrypath()?; + + let wrapper = create_wrapper(rl_plugin, wrapper, &venv_dir).await?; + fs::write(&wrapper_path, wrapper).await?; + + set_executable(&wrapper_path).await?; + + Ok(wrapper_path) +} + +async fn create_venv( + source: &Path, + venv_dir: &Path, + logger: &mut RecklessLogger<'_>, +) -> Result<(), anyhow::Error> { + let line = format!("creating venv at: {}", venv_dir.display()); + logger.log(&line, LogLevel::INFO).await?; + + let mut command = Command::new("python"); + command + .arg("-m") + .arg("venv") + .arg(venv_dir) + .current_dir(source); + + run_logged_command(command, logger).await?; + + Ok(()) +} + +fn python_bin(venv: &Path) -> PathBuf { + #[cfg(unix)] + { + venv.join("bin").join("python") + } + #[cfg(windows)] + { + venv.join("Scripts").join("python.exe") + } +} + +fn pip_bin(venv: &Path) -> PathBuf { + #[cfg(unix)] + { + venv.join("bin").join("pip") + } + #[cfg(windows)] + { + venv.join("Scripts").join("pip.exe") + } +} + +async fn create_wrapper( + rl_plugin: &RecklessPlugin, + entryfile: &Path, + venv: &Path, +) -> Result { + let source_str = rl_plugin + .source_path() + .to_str() + .ok_or_else(|| anyhow!("source path contains invalid utf-8"))? + .to_owned(); + + let venv = check_venv(venv).await?; + + let python = python_bin(&venv); + + let python = python.display().to_string(); + + let path_str = rl_plugin + .path() + .to_str() + .ok_or_else(|| anyhow!("path contains invalid utf-8"))?; + + let module_name = entryfile + .file_stem() + .ok_or_else(|| anyhow!("entryfile has no filename"))? + .to_str() + .ok_or_else(|| anyhow!("entryfile has invalid utf-8 characters"))?; + + let wrapper = format!( + r#"#!{python} +import sys +import runpy + +if '{source_str}' not in sys.path: + sys.path.append('{source_str}') + +if '{path_str}' in sys.path: + sys.path.remove('{path_str}') + +runpy.run_module("{module_name}", {{}}, "__main__") +"# + ); + Ok(wrapper) +} + +async fn check_venv(venv: &Path) -> Result { + if python_bin(venv).exists() { + return Ok(venv.to_path_buf()); + } + + let mut venv_entries = fs::read_dir(venv).await?; + + while let Ok(Some(entry)) = venv_entries.next_entry().await { + if entry.file_type().await?.is_file() { + continue; + } + if python_bin(&entry.path()).exists() { + return Ok(entry.path()); + } + } + + Err(anyhow!("python not found in venv: {}", venv.display())) +} + +#[cfg(unix)] +async fn set_executable(path: &Path) -> Result<(), anyhow::Error> { + use std::os::unix::fs::PermissionsExt; + + let mut perm = fs::metadata(path).await?.permissions(); + perm.set_mode(0o755); + fs::set_permissions(path, perm).await?; + Ok(()) +} + +#[cfg(not(unix))] +async fn set_executable(_path: &Path) -> Result<()> { + Ok(()) +} diff --git a/plugins/reckless-plugin/src/main.rs b/plugins/reckless-plugin/src/main.rs new file mode 100644 index 000000000000..8f307f95e06b --- /dev/null +++ b/plugins/reckless-plugin/src/main.rs @@ -0,0 +1,200 @@ +use std::{path::PathBuf, str::FromStr, sync::Arc}; + +use clap::{CommandFactory, Parser}; +use cln_plugin::{ + Builder, Plugin, RpcMethodBuilder, + messages::NotificationTopic, + options::{ConfigOption, StringConfigOption}, +}; +use cln_rpc::{ClnRpc, model::requests::ListconfigsRequest}; +use serde_json::json; +use tokio::sync::Mutex; + +use crate::structs::{RecklessArgs, RecklessCmd, SourceCmd}; +use crate::{ + cmds::{ + enable::{handle_disable, handle_enable}, + install::{handle_install, handle_uninstall}, + list::{handle_list_available, handle_list_installed}, + source::{handle_source_add, handle_source_list, handle_source_remove}, + tip::handle_tip, + update::handle_update, + }, + structs::PluginState, +}; + +mod cmds; +mod installers; +mod structs; +mod util; + +const RECKLESS_DIR: StringConfigOption = ConfigOption::new_str_no_default( + "reckless-dir", + "directory where reckless config, git repos and metadata are stored, \ + defaults to /reckless", +); +const RECKLESS_NOTIFICATION: &str = "reckless_log"; + +#[tokio::main(flavor = "current_thread")] +async fn main() -> Result<(), anyhow::Error> { + unsafe { + std::env::set_var( + "CLN_PLUGIN_LOG", + "cln_plugin=info,cln_rpc=info,cln_reckless=trace,warn", + ); + }; + + log_panics::init(); + + let github_redir = std::env::var("REDIR_GITHUB").ok(); + + let Some(conf_plugin) = Builder::new(tokio::io::stdin(), tokio::io::stdout()) + .rpcmethod_from_builder( + RpcMethodBuilder::new("reckless", reckless) + .description("manage CLN plugins: install, uninstall, and configuration"), + ) + .notification(NotificationTopic::new(RECKLESS_NOTIFICATION)) + .option(RECKLESS_DIR) + .dynamic() + .configure() + .await? + else { + return Ok(()); + }; + + let mut lightning_dir = PathBuf::from_str(&conf_plugin.configuration().lightning_dir)?; + let mut rpc = match ClnRpc::new(lightning_dir.join(conf_plugin.configuration().rpc_file)).await + { + Ok(o) => o, + Err(e) => { + return conf_plugin + .disable(&format!("could not establish RPC connection to CLN: {e}")) + .await; + } + }; + + let configs_resp = match rpc + .call_typed(&ListconfigsRequest { + config: Some("conf".to_owned()), + }) + .await + { + Ok(o) => o, + Err(e) => { + return conf_plugin + .disable(&format!("could not get listconfigs: {e}")) + .await; + } + }; + let custom_cln_config = configs_resp + .configs + .and_then(|c| c.conf) + .map(|cc| PathBuf::from(cc.value_str)); + + let (cln_global_conf, cln_conf, cln_setconfig) = if let Some(custom_config) = custom_cln_config + { + let Some(conf_dir) = custom_config.parent() else { + return conf_plugin + .disable("`--conf` has no parent directory") + .await; + }; + let Some(conf_name) = custom_config.file_name().and_then(|f| f.to_str()) else { + return conf_plugin.disable("`--conf` has no valid file name").await; + }; + let setconfig = conf_dir.join(format!("{conf_name}.setconfig")); + (None, custom_config, setconfig) + } else { + let Some(global_dir) = lightning_dir.parent() else { + return conf_plugin + .disable("`lightning-dir` has no parent directory") + .await; + }; + let global_config = Some(global_dir.join("config")); + let network_config = lightning_dir.join("config"); + let setconfig_config = lightning_dir.join("config.setconfig"); + + (global_config, network_config, setconfig_config) + }; + + lightning_dir.pop(); + + let reckless_dir = conf_plugin + .option(&RECKLESS_DIR)? + .map_or_else(|| lightning_dir.join("reckless"), PathBuf::from); + + let reckless_conf = reckless_dir.join(format!( + "{}-reckless.conf", + conf_plugin.configuration().network + )); + + let state = PluginState { + reckless_dir, + cln_conf, + cln_global_conf, + cln_setconfig, + reckless_conf, + github_redir, + rpc: Arc::new(Mutex::new(rpc)), + }; + let plugin = conf_plugin.start(state).await?; + + plugin.join().await +} + +async fn reckless( + plugin: Plugin, + args: serde_json::Value, +) -> Result { + let gather_args = structs::json_to_argv(&args)?; + + let parsed = match RecklessArgs::try_parse_from(gather_args) { + Ok(p) => p, + Err(e) if e.kind() == clap::error::ErrorKind::DisplayHelp => { + return Ok( + serde_json::json!({ "format-hint": "simple","result": e.render().to_string() }), + ); + } + Err(e) => { + return Err(anyhow::anyhow!( + "{}", + e.render().to_string().replace('\n', " ") + )); + } + }; + + match parsed.command { + Some(RecklessCmd::Install(args)) => { + handle_install(plugin.clone(), args, parsed.verbose).await + } + Some(RecklessCmd::Uninstall(args)) => { + handle_uninstall(plugin.clone(), args.target, parsed.verbose).await + } + Some(RecklessCmd::Listavailable(args)) => { + handle_list_available(plugin.clone(), args.target, parsed.verbose).await + } + Some(RecklessCmd::Enable(args)) => { + handle_enable(plugin.clone(), args, parsed.verbose).await + } + Some(RecklessCmd::Disable(args)) => { + handle_disable(plugin.clone(), args.target, parsed.verbose).await + } + Some(RecklessCmd::Source(args)) => match args.subcommand { + SourceCmd::List => handle_source_list(plugin.clone(), parsed.verbose).await, + SourceCmd::Add(t) => handle_source_add(plugin.clone(), t.target, parsed.verbose).await, + SourceCmd::Remove(t) => { + handle_source_remove(plugin.clone(), t.target, parsed.verbose).await + } + }, + Some(RecklessCmd::Update(args)) => { + handle_update(plugin.clone(), args, parsed.verbose).await + } + Some(RecklessCmd::Listinstalled) => { + handle_list_installed(plugin.clone(), parsed.verbose).await + } + Some(RecklessCmd::Tip(args)) => handle_tip(plugin.clone(), args, parsed.verbose).await, + None => Ok(json!({ + "format-hint": "simple", + "result": RecklessArgs::command().render_help().to_string() + })), + } +} diff --git a/plugins/reckless-plugin/src/structs.rs b/plugins/reckless-plugin/src/structs.rs new file mode 100644 index 000000000000..e0b2d355ee3d --- /dev/null +++ b/plugins/reckless-plugin/src/structs.rs @@ -0,0 +1,899 @@ +use std::{ + collections::HashSet, + fmt::Display, + path::{Path, PathBuf}, + sync::Arc, + time::{SystemTime, UNIX_EPOCH}, +}; + +use anyhow::{Error, anyhow}; +use chrono::Utc; +use clap::{Args, Parser, Subcommand}; +use cln_plugin::{Plugin, options}; +use cln_rpc::{ClnRpc, model::responses::XpayResponse, notifications::LogLevel}; +use serde::{Deserialize, Serialize}; +use serde_json::json; +use tokio::sync::Mutex; +use url::Url; + +use crate::{RECKLESS_NOTIFICATION, util::validate_path}; + +#[derive(Clone)] +pub struct PluginState { + pub reckless_dir: PathBuf, + pub cln_conf: PathBuf, + pub cln_global_conf: Option, + pub cln_setconfig: PathBuf, + pub reckless_conf: PathBuf, + pub github_redir: Option, + pub rpc: Arc>, +} +impl PluginState { + pub fn get_cln_configs(&self) -> Vec<&Path> { + if let Some(cln_global) = self.cln_global_conf.as_ref() { + return vec![cln_global, &self.cln_conf, &self.cln_setconfig]; + } + + vec![&self.cln_conf, &self.cln_setconfig] + } +} + +pub struct RecklessLogger<'a> { + plugin: &'a Plugin, + log: Vec, + topic: RecklessTopic, + verbose: bool, +} +impl<'a> RecklessLogger<'a> { + pub fn new(plugin: &'a Plugin, topic: RecklessTopic, verbose: bool) -> Self { + Self { + plugin, + log: Vec::new(), + topic, + verbose, + } + } + pub async fn log(&mut self, line: &str, log_level: LogLevel) -> Result<(), anyhow::Error> { + if !self.verbose + && (log_level == LogLevel::IO + || log_level == LogLevel::TRACE + || log_level == LogLevel::DEBUG) + { + return Ok(()); + } + for line in line.split('\n') { + match log_level { + LogLevel::IO => { + self.log.push(format!("IO: {line}")); + log::trace!("{line}"); + } + LogLevel::TRACE => { + self.log.push(format!("TRACE: {line}")); + log::trace!("{line}"); + } + LogLevel::DEBUG => { + self.log.push(format!("DEBUG: {line}")); + log::debug!("{line}"); + } + LogLevel::INFO => { + self.log.push(format!("INFO: {line}")); + log::info!("{line}"); + } + LogLevel::UNUSUAL => { + self.log.push(format!("WARNING: {line}")); + log::warn!("{line}"); + } + LogLevel::BROKEN => { + self.log.push(format!("ERROR: {line}")); + log::error!("{line}"); + } + } + + if let RecklessTopic::Install = self.topic { + let now = Utc::now(); + + let unix_timestamp = f64::from(now.timestamp_subsec_millis()) / 1_000.0; + let iso8601 = now.to_rfc3339(); + self.plugin + .send_custom_notification( + RECKLESS_NOTIFICATION.to_owned(), + json!({ + "level": log_level, + "log": line, + "time": &unix_timestamp.to_string(), + "timestamp": iso8601}), + ) + .await?; + } + } + + Ok(()) + } +} + +#[derive(Parser, Debug, Deserialize, PartialEq)] +#[command(name = "reckless", no_binary_name = true, disable_help_flag = true)] +#[allow(clippy::struct_excessive_bools)] +pub struct RecklessArgs { + #[arg(short = 'v', long, default_value_t = false, global = true)] + pub verbose: bool, + + #[command(subcommand)] + pub command: Option, +} + +#[derive(Subcommand, Debug, Deserialize, PartialEq)] +pub enum RecklessCmd { + /// Install a plugin, start it and then persist to config + Install(InstallArgs), + + /// Stop a plugin and remove it from configs and disk + Uninstall(TargetArgs), + + /// List plugins available from the sources list + Listavailable(ListArgs), + + /// Dynamically enable a plugin and update config + Enable(EnableArgs), + + /// Disable a plugin, remove it from the config, but keep the plugin files + Disable(TargetArgs), + + /// Manage plugin search sources + Source(SourceArgs), + + /// Update plugins to latest version + Update(UpdateArgs), + + /// List reckless-installed plugins + Listinstalled, + + /// Tip a plugin author + Tip(TipArgs), +} + +/// Shared args for commands that take one or more plugin name targets +#[derive(Args, Debug, Deserialize, PartialEq)] +pub struct TargetArgs { + pub target: String, +} + +#[derive(Args, Debug, Deserialize, PartialEq)] +pub struct ListArgs { + pub target: Option, +} + +/// `reckless source ` +#[derive(Args, Debug, Deserialize, PartialEq)] +pub struct SourceArgs { + #[command(subcommand)] + pub subcommand: SourceCmd, +} + +#[derive(Args, Debug, Deserialize, PartialEq)] +pub struct InstallArgs { + #[arg(help = "name of plugin to install")] + pub target: String, + + #[arg(long, help = "build plugins in debug mode and keep build files")] + pub developer: bool, + + #[arg(value_parser = parse_key_val)] + pub options: Vec<(String, Option)>, +} + +#[derive(Args, Debug, Deserialize, PartialEq)] +pub struct UpdateArgs { + #[arg(help = "name of plugin to update, leave empty to update all installed plugins")] + pub target: Option, + + #[arg(long, help = "build plugins in debug mode and keep build files")] + pub developer: bool, + + #[arg(value_parser = parse_key_val)] + pub options: Vec<(String, Option)>, +} + +#[derive(Args, Debug, Deserialize, PartialEq)] +pub struct EnableArgs { + #[arg(help = "name of plugin to install")] + pub target: String, + + #[arg(value_parser = parse_key_val)] + pub options: Vec<(String, Option)>, +} + +#[allow(clippy::unnecessary_wraps)] +pub fn parse_key_val(s: &str) -> Result<(String, Option), String> { + if let Some((k, v)) = s.split_once('=') { + Ok((k.to_owned(), Some(v.to_owned()))) + } else { + Ok((s.to_owned(), None)) + } +} + +#[derive(Args, Debug, Deserialize, PartialEq)] +pub struct TipArgs { + #[arg(help = "plugin name which author to tip")] + pub target: String, + + #[arg(help = "tip amount in msat")] + pub amount_msat: u64, + + #[arg(help = "tip message")] + pub payer_note: Option, +} + +#[derive(Subcommand, Debug, Deserialize, PartialEq)] +pub enum SourceCmd { + /// List available plugin sources + List, + + /// Add a source repository + Add(TargetArgs), + + /// Remove a plugin source repository + #[command(aliases = ["rem", "rm"])] + Remove(TargetArgs), +} + +pub fn json_to_argv(value: &serde_json::Value) -> Result, Error> { + match value { + serde_json::Value::Array(arr) => arr + .iter() + .map(|v| match v { + serde_json::Value::String(s) => Ok(s.clone()), + other => Ok(other.to_string()), + }) + .collect(), + serde_json::Value::Object(obj) => { + fn get_flag<'a>( + key: &'a str, + obj: &serde_json::Map, + remaining: &mut std::collections::HashSet<&'a str>, + ) -> Result { + remaining.remove(key); + match obj.get(key) { + None => Ok(false), + Some(serde_json::Value::Bool(b)) => Ok(*b), + Some(other) => Err(anyhow!("\"{key}\" must be a boolean, got: {other}")), + } + } + + let mut argv: Vec = Vec::new(); + let mut remaining: HashSet<&str> = obj.keys().map(String::as_str).collect(); + + if get_flag("verbose", obj, &mut remaining)? { + argv.push("-v".to_owned()); + } + + remaining.remove("command"); + let command = obj + .get("command") + .and_then(|v| v.as_str()) + .ok_or_else(|| anyhow!("object form requires a `command` field"))?; + argv.push(command.to_owned()); + + if let Some(sc) = obj.get("subcommand") { + if !command.eq_ignore_ascii_case("source") { + return Err(anyhow!("`subcommand` only valid if `command` is `source`")); + } + remaining.remove("subcommand"); + argv.push( + sc.as_str() + .ok_or_else(|| anyhow!("`subcommand` must be a string"))? + .to_owned(), + ); + } + + if get_flag("developer", obj, &mut remaining)? { + argv.push("--developer".to_owned()); + } + + for key in ["target", "amount_msat", "payer_note"] { + remaining.remove(key); + match obj.get(key) { + Some(serde_json::Value::String(s)) => argv.push(s.clone()), + Some(other) => argv.push(other.to_string()), + None => {} + } + } + + if let Some(serde_json::Value::Array(opts)) = obj.get("options") { + remaining.remove("options"); + for opt in opts { + match opt { + serde_json::Value::String(s) => argv.push(s.clone()), + _ => return Err(anyhow!("{opt} must be a string")), + } + } + } + + if !remaining.is_empty() { + let mut unknown: Vec<&str> = remaining.into_iter().collect(); + unknown.sort_unstable(); + return Err(anyhow!("unknown fields: {}", unknown.join(", "))); + } + + Ok(argv) + } + _ => Err(anyhow!("expected array or object")), + } +} + +#[derive(Debug, Clone, Copy, Deserialize, Serialize)] +pub enum Installer { + PythonUv, + PythonUvShebang, + PythonUvLegacy, + PoetryVenv, + PyprojectViaPip, + Python, + Nodejs, + Rust, + Go, + Custom, +} + +#[derive(Debug, Clone, Copy)] +pub enum RecklessTopic { + Install, + Uninstall, + Search, + Enable, + Source, + Tip, +} + +#[derive(Deserialize, Default, Debug)] +pub struct GetManifestResponse { + pub options: Vec, + pub dynamic: Option, +} +impl GetManifestResponse { + pub fn is_dynamic(&self) -> bool { + self.dynamic.unwrap_or(false) + } +} + +#[derive(Clone, Debug, Deserialize)] +pub struct UntypedConfigOption { + pub name: String, + #[serde(rename = "type")] + pub value_type: options::ValueType, + // pub default: Option, + // pub description: String, + // pub deprecated: Option, + // pub dynamic: Option, + pub multi: Option, +} +impl UntypedConfigOption { + // pub fn is_dynamic(&self) -> bool { + // self.dynamic.unwrap_or(false) + // } + pub fn is_multi(&self) -> bool { + self.multi.unwrap_or(false) + } + // pub fn is_deprecated(&self) -> bool { + // self.deprecated.unwrap_or(false) + // } +} + +#[derive(Clone, Serialize, Deserialize, Debug, Default)] +pub struct RecklessManifest { + #[serde(skip_serializing_if = "Option::is_none")] + pub short_description: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub long_description: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub entrypoint: Option, + #[serde(skip_serializing_if = "option_vec_is_empty")] + pub dependencies: Option>, + #[serde(skip_serializing_if = "option_vec_is_empty")] + pub install_cmd: Option>, + #[serde(skip_serializing_if = "option_vec_is_empty")] + pub required_options: Option>, + #[serde(skip_serializing_if = "Option::is_none")] + pub offer: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub installable: Option, +} +impl RecklessManifest { + pub fn entry_filename(&self) -> Result<&Path, anyhow::Error> { + Ok(Path::new( + self.entrypoint + .as_ref() + .ok_or_else(|| anyhow!("no entrypoint found"))? + .file_name() + .ok_or_else(|| anyhow!("entrypoint has no filename"))?, + )) + } + pub fn entry_filename_str(&self) -> Result { + Ok(self + .entry_filename()? + .to_str() + .ok_or_else(|| anyhow!("entry filename contains invalid utf-8"))? + .to_owned()) + } +} + +#[allow(clippy::ref_option)] +fn option_vec_is_empty(v: &Option>) -> bool { + v.as_ref().is_none_or(Vec::is_empty) +} + +#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)] +#[serde(untagged)] +pub enum PluginOrigin { + LocalPath(PathBuf), + Url(String), +} +impl Display for PluginOrigin { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + PluginOrigin::LocalPath(path) => write!(f, "{}", path.display()), + PluginOrigin::Url(url) => write!(f, "{url}"), + } + } +} +impl PluginOrigin { + pub fn new(original_source: &str) -> Result { + match Url::parse(original_source) { + Ok(url) => { + if matches!(url.scheme(), "http" | "https") { + Ok(PluginOrigin::Url(original_source.to_owned())) + } else { + Err(anyhow!( + "only http/https are supported for remote git \ + repositories: {original_source}" + )) + } + } + _ => Ok(PluginOrigin::LocalPath(validate_path(original_source)?)), + } + } +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct RecklessPlugin { + plugin_name: String, + /// URL or path where we got the plugin from, e.g. + /// + origin: PluginOrigin, + /// path that to the overall repo + /// e.g. lightningd/plugins + origin_repo_path: PathBuf, + /// we might need to traverse deeper into a repo to find the plugin path + /// e.g. lightningd/plugins/summary + origin_plugin_path: PathBuf, + /// always ``reckless_dir/`` + path: PathBuf, + /// if origin is a remote git repo it is ``reckless_dir//source/`` + /// if it's from a local path it is just that + source_path: PathBuf, + metadata: Metadata, + installer: Installer, + manifest: RecklessManifest, +} +impl PartialEq for RecklessPlugin { + fn eq(&self, other: &Self) -> bool { + self.plugin_name == other.plugin_name + && self.origin == other.origin + && self.origin_plugin_path == other.origin_plugin_path + && self.origin_repo_path == other.origin_repo_path + && self.path == other.path + } +} +impl RecklessPlugin { + pub fn new( + origin: PluginOrigin, + origin_plugin_path: PathBuf, + origin_repo_path: PathBuf, + name: String, + reckless_dir: &Path, + installer: Installer, + manifest: RecklessManifest, + ) -> Self { + let source_path = match origin { + PluginOrigin::LocalPath(_) => origin_plugin_path.clone(), + PluginOrigin::Url(_) => reckless_dir.join(&name).join("source").join(&name), + }; + RecklessPlugin { + path: reckless_dir.join(&name), + plugin_name: name, + metadata: Metadata::new(origin.clone()), + origin, + origin_plugin_path, + origin_repo_path, + source_path, + installer, + manifest, + } + } + pub fn name(&self) -> &str { + &self.plugin_name + } + pub fn origin(&self) -> &PluginOrigin { + &self.origin + } + pub fn origin_plugin_path(&self) -> &PathBuf { + &self.origin_plugin_path + } + pub fn origin_repo_path(&self) -> &PathBuf { + &self.origin_repo_path + } + pub fn path(&self) -> &PathBuf { + &self.path + } + pub fn source_path(&self) -> &PathBuf { + &self.source_path + } + pub fn metadata(&self) -> &Metadata { + &self.metadata + } + pub fn metadata_mut(&mut self) -> &mut Metadata { + &mut self.metadata + } + pub fn is_local_path(&self) -> bool { + matches!(self.origin, PluginOrigin::LocalPath(_)) + } + pub fn installer(&self) -> &Installer { + &self.installer + } + pub fn manifest(&self) -> &RecklessManifest { + &self.manifest + } + pub fn get_entrypath(&self) -> Result { + Ok(self.path().join(self.manifest().entry_filename()?)) + } +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct Metadata { + installation_date: String, + installation_time: u64, + original_source: PluginOrigin, + #[serde(skip_serializing_if = "Option::is_none")] + requested_commit: Option, + #[serde(skip_serializing_if = "Option::is_none")] + installed_commit: Option, +} +impl Metadata { + pub fn new(original_source: PluginOrigin) -> Metadata { + Metadata { + installation_date: Utc::now().date_naive().to_string(), + installation_time: SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap() + .as_secs(), + original_source, + requested_commit: None, + installed_commit: None, + } + } + pub fn new_install( + &mut self, + installed_commit: Option, + requested_commit: Option, + ) { + self.installation_date = Utc::now().date_naive().to_string(); + self.installation_time = SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap() + .as_secs(); + + self.requested_commit = requested_commit; + self.installed_commit = installed_commit; + } + pub fn requested_commit(&self) -> Option<&str> { + self.requested_commit.as_deref() + } + pub fn installed_commit(&self) -> Option<&str> { + self.installed_commit.as_deref() + } +} + +#[derive(Debug, Serialize)] +pub struct InstallResponse { + install: InstallResult, + log: Vec, +} +impl InstallResponse { + pub fn new(result: InstallResult, logger: RecklessLogger) -> InstallResponse { + InstallResponse { + install: result, + log: logger.log, + } + } +} +#[derive(Debug, Serialize)] +pub struct InstallResult { + pub plugin_name: String, + pub enabled: bool, + #[serde(skip_serializing_if = "Option::is_none")] + pub installed_commit: Option, +} + +#[derive(Debug, Serialize)] +pub struct UpdateResponse { + update: Vec, + log: Vec, +} +impl UpdateResponse { + pub fn new(result: Vec, logger: RecklessLogger) -> UpdateResponse { + UpdateResponse { + update: result, + log: logger.log, + } + } +} + +#[derive(Debug, Serialize)] +pub struct UninstallResponse { + uninstall: CommonResult, + log: Vec, +} +impl UninstallResponse { + pub fn new(result: CommonResult, logger: RecklessLogger) -> UninstallResponse { + UninstallResponse { + uninstall: result, + log: logger.log, + } + } +} +#[derive(Debug, Serialize)] +pub struct EnableResponse { + enable: CommonResult, + log: Vec, +} +impl EnableResponse { + pub fn new(result: CommonResult, logger: RecklessLogger) -> EnableResponse { + EnableResponse { + enable: result, + log: logger.log, + } + } +} +#[derive(Debug, Serialize)] +pub struct DisableResponse { + disable: CommonResult, + log: Vec, +} +impl DisableResponse { + pub fn new(result: CommonResult, logger: RecklessLogger) -> DisableResponse { + DisableResponse { + disable: result, + log: logger.log, + } + } +} +#[derive(Debug, Serialize)] +pub struct CommonResult { + pub plugin_name: String, +} + +#[derive(Debug, Serialize)] +pub struct ListavailableResponse { + listavailable: Vec, + log: Vec, +} +impl ListavailableResponse { + pub fn new(result: Vec, logger: RecklessLogger) -> ListavailableResponse { + ListavailableResponse { + listavailable: result, + log: logger.log, + } + } +} +#[derive(Debug, Serialize)] +pub struct ListavailableResult { + plugin_name: String, + origin: PluginOrigin, + installer: Installer, + manifest: RecklessManifest, +} +impl From for ListavailableResult { + fn from(plugin: RecklessPlugin) -> Self { + ListavailableResult { + plugin_name: plugin.plugin_name, + origin: plugin.origin, + installer: plugin.installer, + manifest: plugin.manifest, + } + } +} + +#[derive(Debug, Serialize)] +pub struct ListinstalledResponse { + listinstalled: Vec, + log: Vec, +} +impl ListinstalledResponse { + pub fn new(result: Vec, logger: RecklessLogger) -> ListinstalledResponse { + ListinstalledResponse { + listinstalled: result, + log: logger.log, + } + } +} +#[derive(Debug, Serialize)] +pub struct ListinstalledResult { + plugin_name: String, + installation_date: String, + installation_time: u64, + original_source: PluginOrigin, + #[serde(skip_serializing_if = "Option::is_none")] + requested_commit: Option, + #[serde(skip_serializing_if = "Option::is_none")] + installed_commit: Option, +} +impl ListinstalledResult { + pub fn new(metadata: Metadata, plugin_name: String) -> ListinstalledResult { + ListinstalledResult { + plugin_name, + installation_date: metadata.installation_date, + installation_time: metadata.installation_time, + original_source: metadata.original_source, + requested_commit: metadata.requested_commit, + installed_commit: metadata.installed_commit, + } + } +} + +#[derive(Debug, Serialize)] +pub struct SourcesResponse { + sources: Vec, + log: Vec, +} +impl SourcesResponse { + pub fn new(result: Vec, logger: RecklessLogger) -> SourcesResponse { + SourcesResponse { + sources: result, + log: logger.log, + } + } +} + +#[derive(Debug, Serialize)] +pub struct TipResponse { + tip: XpayResponse, + log: Vec, +} +impl TipResponse { + pub fn new(result: XpayResponse, logger: RecklessLogger) -> TipResponse { + TipResponse { + tip: result, + log: logger.log, + } + } +} + +#[cfg(test)] +mod tests { + use clap::Parser; + use serde_json::json; + + use crate::structs::{ + EnableArgs, InstallArgs, RecklessArgs, RecklessCmd, SourceArgs, SourceCmd, TargetArgs, + TipArgs, json_to_argv, + }; + + #[test] + fn test_object_input() { + let enable = json!({ + "command": "enable", + "target": "plugin_name", + "verbose": true + }); + let argv = json_to_argv(&enable).unwrap(); + let rl_args = RecklessArgs::try_parse_from(argv).unwrap(); + assert_eq!( + rl_args, + RecklessArgs { + verbose: true, + command: Some(RecklessCmd::Enable(EnableArgs { + target: "plugin_name".to_owned(), + options: vec![] + })) + } + ); + + let enable_opts = json!({ + "command": "enable", + "target": "plugin_name", + "options": ["test-option=value"] + }); + let argv = json_to_argv(&enable_opts).unwrap(); + let rl_args = RecklessArgs::try_parse_from(argv).unwrap(); + assert_eq!( + rl_args, + RecklessArgs { + verbose: false, + command: Some(RecklessCmd::Enable(EnableArgs { + target: "plugin_name".to_owned(), + options: vec![("test-option".to_owned(), Some("value".to_owned()))] + })) + } + ); + + let install = json!({ + "command": "install", + "target": "plugin_name", + "options": ["test-option=value"], + "verbose": true, + "developer": true + }); + let argv = json_to_argv(&install).unwrap(); + let rl_args = RecklessArgs::try_parse_from(argv).unwrap(); + assert_eq!( + rl_args, + RecklessArgs { + verbose: true, + command: Some(RecklessCmd::Install(InstallArgs { + target: "plugin_name".to_owned(), + developer: true, + options: vec![("test-option".to_owned(), Some("value".to_owned()))] + })) + } + ); + + let source = json!({ + "command": "source", + "subcommand": "add", + "target": "plugin_name", + "verbose": true + }); + let argv = json_to_argv(&source).unwrap(); + let rl_args = RecklessArgs::try_parse_from(argv).unwrap(); + assert_eq!( + rl_args, + RecklessArgs { + verbose: true, + command: Some(RecklessCmd::Source(SourceArgs { + subcommand: SourceCmd::Add(TargetArgs { + target: "plugin_name".to_owned() + }) + })) + } + ); + + let tip = json!({ + "command": "tip", + "target": "offer1", + "amount_msat": 1000, + "payer_note": "test note", + "verbose": true + }); + let argv = json_to_argv(&tip).unwrap(); + let rl_args = RecklessArgs::try_parse_from(argv).unwrap(); + assert_eq!( + rl_args, + RecklessArgs { + verbose: true, + command: Some(RecklessCmd::Tip(TipArgs { + target: "offer1".to_owned(), + amount_msat: 1000, + payer_note: Some("test note".to_owned()) + })) + } + ); + } + + #[test] + fn test_object_invalid() { + let typo = json!({ + "commnd": "enable", + "target": "plugin_name", + "verbose": true + }); + assert!(json_to_argv(&typo).is_err()); + + let extra = json!({ + "command": "enable", + "target": "plugin_name", + "verbose": true, + "invalid": "none", + }); + assert!(json_to_argv(&extra).is_err()); + } +} diff --git a/plugins/reckless-plugin/src/util.rs b/plugins/reckless-plugin/src/util.rs new file mode 100644 index 000000000000..e9a5afb66418 --- /dev/null +++ b/plugins/reckless-plugin/src/util.rs @@ -0,0 +1,1456 @@ +use std::{ + collections::{HashMap, HashSet, VecDeque}, + path::{Path, PathBuf}, + process::Stdio, + str::FromStr, + time::Duration, +}; + +use anyhow::anyhow; +use cln_plugin::{Plugin, options}; +use cln_rpc::{ + codec::MultiLineCodec, + model::{requests::PluginRequest, responses::PluginResponse}, + notifications::LogLevel, + primitives::PluginSubcommand, +}; +use futures::StreamExt; +use sha2::{Digest, Sha256}; +use tokio::{ + fs::{self, OpenOptions}, + io::{AsyncBufReadExt, AsyncReadExt, AsyncWriteExt, BufReader}, + process::Command, + time::timeout, +}; +use tokio_util::codec::FramedRead; +use url::Url; +use which::which; + +use crate::structs::{ + GetManifestResponse, Installer, PluginOrigin, PluginState, RecklessLogger, RecklessManifest, + RecklessPlugin, parse_key_val, +}; + +const DEFAULT_REPO: &str = "https://github.com/lightningd/plugins"; +const RECKLESS_CONFIG_HEADER: &str = "# This configuration file is managed by reckless to \ +activate and disable\n# reckless-installed plugins\n\n"; + +pub async fn run_logged_command( + mut command: Command, + logger: &mut RecklessLogger<'_>, +) -> Result { + let mut cmd_str = format!( + "`{} {}`", + command + .as_std() + .get_program() + .to_str() + .ok_or_else(|| anyhow!("command program contains invalid utf-8"))?, + command + .as_std() + .get_args() + .map(|arg| arg + .to_str() + .ok_or_else(|| anyhow!("command argument contains invalid utf-8"))) + .collect::, anyhow::Error>>()? + .join(" "), + ); + if let Some(cwd) = command.as_std().get_current_dir() { + cmd_str = format!("{} (cwd: {})", cmd_str, cwd.display()); + } + logger + .log(&format!("running command: {cmd_str}"), LogLevel::INFO) + .await?; + + command.stdout(Stdio::piped()).stderr(Stdio::piped()); + + let mut child = command.spawn()?; + + let stdout = child + .stdout + .take() + .ok_or_else(|| anyhow!("failed to capture stdout"))?; + + let stderr = child + .stderr + .take() + .ok_or_else(|| anyhow!("failed to capture stderr"))?; + + let mut stdout_lines = BufReader::new(stdout).lines(); + let mut stderr_lines = BufReader::new(stderr).lines(); + + let mut stdout_done = false; + let mut stderr_done = false; + + let mut stdout_buf = String::new(); + let mut stderr_last = String::new(); + + loop { + if stdout_done && stderr_done { + break; + } + + tokio::select! { + line = stdout_lines.next_line(), if !stdout_done => { + match line? { + Some(line) => { + logger.log(&line, LogLevel::INFO).await?; + stdout_buf.push_str(&line); + stdout_buf.push('\n'); + } + None => { + stdout_done = true; + } + } + } + + line = stderr_lines.next_line(), if !stderr_done => { + match line? { + Some(line) => { + logger.log(&line, LogLevel::UNUSUAL).await?; + stderr_last = line; + } + None => { + stderr_done = true; + } + } + } + } + } + + let status = child.wait().await?; + + if !status.success() { + return Err(anyhow!("command {cmd_str} failed: {stderr_last}")); + } + + Ok(stdout_buf.trim().to_owned()) +} + +pub async fn get_plugin_manifest( + entrypoint: &PathBuf, + logger: &mut RecklessLogger<'_>, +) -> Result { + let line = format!("getmanifest: {}", entrypoint.display()); + logger.log(&line, LogLevel::DEBUG).await?; + + let mut child = Command::new(entrypoint) + .stdin(std::process::Stdio::piped()) + .stdout(std::process::Stdio::piped()) + .spawn()?; + + let line = format!("spawned: {}", entrypoint.display()); + logger.log(&line, LogLevel::DEBUG).await?; + + let mut stdin = child + .stdin + .take() + .ok_or_else(|| anyhow!("could not take stdin handle"))?; + let stdout = child + .stdout + .take() + .ok_or_else(|| anyhow!("could not take stdout handle"))?; + + logger.log("took stdin/stdout", LogLevel::DEBUG).await?; + + let mut reader = FramedRead::new(stdout, MultiLineCodec::default()); + + // CLN plugin handshake: simulate lightningd sending getmanifest + let getmanifest = serde_json::json!({ + "jsonrpc": "2.0", + "id": "reckless-1", + "method": "getmanifest", + "params": {} + }); + + stdin.write_all(getmanifest.to_string().as_bytes()).await?; + stdin.write_all(b"\n\n").await?; + stdin.flush().await?; + + logger.log("requested manifest", LogLevel::DEBUG).await?; + + let result = timeout(Duration::from_secs(10), async { + let mut message_count = 0; + + loop { + let message = reader + .next() + .await + .ok_or_else(|| anyhow!("plugin exited before sending getmanifest response"))??; + + message_count += 1; + + if message_count > 100 { + return Err(anyhow!("plugin send alot, but no manifest found")); + } + + let line = format!("got message: `{message}`"); + logger.log(&line, LogLevel::TRACE).await?; + + let mut json = match serde_json::from_str::(&message) { + Ok(v) => v, + Err(e) => { + logger.log(&e.to_string(), LogLevel::TRACE).await?; + continue; + } + }; + + let line = format!("got json: {json:#?}"); + logger.log(&line, LogLevel::TRACE).await?; + + if json.get("id") == Some(&serde_json::Value::String("reckless-1".into())) { + let result = json + .get_mut("result") + .ok_or_else(|| anyhow!("invalid getmanifest response, no `result`"))? + .take(); + + return Ok(result); + } + } + }) + .await + .map_err(|_| anyhow!("timed out reading getmanifest response"))??; + + let parsed: GetManifestResponse = serde_json::from_value(result.clone())?; + let line = format!("got manifest: {parsed:#?}"); + logger.log(&line, LogLevel::DEBUG).await?; + + drop(stdin); + logger.log("dropped stdin", LogLevel::DEBUG).await?; + + let _ = child.start_kill(); + logger.log("child exited", LogLevel::DEBUG).await?; + + let _ = child.wait().await?; + logger.log("waited for child", LogLevel::DEBUG).await?; + + Ok(parsed) +} + +pub fn parse_options( + manifest: &GetManifestResponse, + options: &[(String, Option)], +) -> Result)>, anyhow::Error> { + let manifest_options: HashMap<_, _> = manifest + .options + .iter() + .map(|opt| (&opt.name, opt)) + .collect(); + + let mut seen = HashSet::new(); + + let mut result = Vec::new(); + + for (option_name, value_str) in options { + let manifest_opt = manifest_options + .get(option_name) + .ok_or_else(|| anyhow!("option {option_name} not found in manifest"))?; + + if !manifest_opt.is_multi() && !seen.insert(option_name) { + return Err(anyhow!("{option_name} is not a multi option")); + } + + let value = match (&manifest_opt.value_type, value_str) { + (cln_plugin::options::ValueType::String, Some(v)) => { + Some(options::Value::String(v.clone())) + } + (cln_plugin::options::ValueType::Integer, Some(v)) => { + Some(options::Value::Integer(i64::from_str(v)?)) + } + (cln_plugin::options::ValueType::Boolean, Some(v)) => { + Some(options::Value::Boolean(bool::from_str(v)?)) + } + (cln_plugin::options::ValueType::Flag, None) => None, + _ => { + return Err(anyhow!( + "Invalid option value, expected {:#?} for {option_name}", + manifest_opt.value_type + )); + } + }; + + result.push((option_name.clone(), value)); + } + + Ok(result) +} + +pub fn repo_path_from_url(url: &Url) -> Result { + let mut segments = url + .path_segments() + .ok_or_else(|| anyhow!("No paths in git URL"))?; + let last = segments + .next_back() + .ok_or(anyhow!("Missing repo name in git URL"))?; + + let repo_name = last.trim_end_matches(".git"); + + if repo_name.is_empty() { + return Err(anyhow!("could not determine repo name")); + } + + let repo_owner = segments + .next_back() + .ok_or(anyhow!("Missing repo owner in git URL"))?; + + for segment in segments { + if segment == "tree" { + return Err(anyhow!( + "Please provide a URL with only the repo owner and name, not a tree reference. \ + You can specify a branch when installing a plugin." + )); + } + } + + Ok(PathBuf::from(repo_owner).join(repo_name)) +} + +pub async fn init_plugin_repo( + plugin: &Plugin, + mut url: Url, + logger: &mut RecklessLogger<'_>, +) -> Result { + let repo_path = plugin.state().reckless_dir.join(repo_path_from_url(&url)?); + let line = format!("initializing repo `{url}` in: `{}`", repo_path.display()); + logger.log(&line, LogLevel::DEBUG).await?; + + if let Some(domain) = url.domain() { + if domain == "github.com" { + if let Some(github_redir) = &plugin.state().github_redir { + let line = format!("using github redirect: file://{github_redir}"); + logger.log(&line, LogLevel::INFO).await?; + url = Url::from_str(&format!("file://{github_redir}"))?; + } + } + } + + if repo_path.exists() { + let mut command = Command::new("git"); + command + .args(["remote", "set-head", "origin", "-a"]) + .current_dir(&repo_path); + run_logged_command(command, logger).await?; + + let mut command = Command::new("git"); + command + .args(["symbolic-ref", "refs/remotes/origin/HEAD", "--short"]) + .current_dir(&repo_path); + let default_branch = run_logged_command(command, logger).await?; + let default_branch = default_branch.trim_start_matches("origin/"); + + let mut command = Command::new("git"); + command + .args(["checkout", default_branch]) + .current_dir(&repo_path); + run_logged_command(command, logger).await?; + + let mut command = Command::new("git"); + command.args(["pull", "--ff-only"]).current_dir(&repo_path); + run_logged_command(command, logger).await?; + } else { + let repo_path_str = repo_path + .to_str() + .ok_or_else(|| anyhow!("path is invalid"))?; + let mut command = Command::new("git"); + command.args(["clone", "--recursive", url.as_str(), repo_path_str]); + run_logged_command(command, logger).await?; + } + + let mut command = Command::new("git"); + command + .args(["submodule", "sync", "--recursive"]) + .current_dir(&repo_path); + run_logged_command(command, logger).await?; + + let mut command = Command::new("git"); + command + .args(["submodule", "update", "--init", "--recursive"]) + .current_dir(&repo_path); + run_logged_command(command, logger).await?; + + Ok(repo_path) +} + +pub async fn find_plugin_locs( + reckless_dir: &Path, + origin: String, + repo_dir: PathBuf, + max_depth: usize, + logger: &mut RecklessLogger<'_>, +) -> Result, anyhow::Error> { + let line = format!("trying to find plugins in: `{}`", repo_dir.display()); + logger.log(&line, LogLevel::DEBUG).await?; + + let mut plugin_locs = HashMap::new(); + + let mut queue = VecDeque::new(); + queue.push_back((repo_dir.clone(), 0usize)); + + while let Some((path, depth)) = queue.pop_front() { + if depth > max_depth { + continue; + } + + if depth == 1 { + if let Some(name) = path.file_name().and_then(|p| p.to_str()) { + if name.contains("archive") + || name.eq(".git") + || name.eq(".venv") + || name.eq(".ci") + || name.eq(".github") + { + continue; + } + } + } + + let Some(name) = path.file_name().and_then(|p| p.to_str()) else { + continue; + }; + + let rl_manifest = read_reckless_manifest(&path).await?; + let mut rl_manifest = rl_manifest.unwrap_or_default(); + + match detect_installer(&path, &mut rl_manifest).await { + Ok(installer) => { + let plugin_origin = PluginOrigin::new(&origin)?; + plugin_locs.insert( + normalize_plugin_name(name), + RecklessPlugin::new( + plugin_origin, + path.clone(), + repo_dir.clone(), + name.to_owned(), + reckless_dir, + installer, + rl_manifest, + ), + ); + + continue; + } + Err(e) => { + let line = format!("could not detect installer for {}: {e}", path.display()); + logger.log(&line, LogLevel::UNUSUAL).await?; + } + } + + if depth == max_depth { + continue; + } + + let Ok(mut entries) = fs::read_dir(&path).await else { + continue; + }; + + while let Ok(Some(entry)) = entries.next_entry().await { + let Ok(file_type) = entry.file_type().await else { + continue; + }; + + if file_type.is_symlink() { + continue; + } + + if !file_type.is_dir() { + continue; + } + + queue.push_back((entry.path(), depth + 1)); + } + } + + Ok(plugin_locs) +} + +async fn file_hash(path: &Path) -> Result, anyhow::Error> { + let file = fs::File::open(path).await?; + let mut reader = BufReader::new(file); + + let mut hasher = Sha256::new(); + let mut buf = [0u8; 8192]; + + loop { + let n = reader.read(&mut buf).await?; + if n == 0 { + break; + } + + hasher.update(&buf[..n]); + } + + Ok(hasher.finalize().to_vec()) +} + +async fn files_differ(src: &Path, dst: &Path) -> Result { + let Ok(dst_meta) = fs::metadata(dst).await else { + return Ok(true); + }; + + let src_meta = fs::metadata(src).await?; + + if src_meta.len() != dst_meta.len() { + return Ok(true); + } + + let src_hash = file_hash(src).await?; + let dst_hash = file_hash(dst).await?; + + Ok(src_hash != dst_hash) +} + +pub async fn copy_dir_all( + src: &Path, + dst: &Path, + logger: &mut RecklessLogger<'_>, +) -> Result<(), anyhow::Error> { + let line = format!("copying from: {} -> {}", src.display(), dst.display()); + logger.log(&line, LogLevel::DEBUG).await?; + + let mut stack = vec![(src.to_path_buf(), dst.to_path_buf())]; + + while let Some((src, dst)) = stack.pop() { + fs::create_dir_all(&dst).await?; + + let line = format!("reading dir: {}", src.display()); + logger.log(&line, LogLevel::DEBUG).await?; + + let mut entries = fs::read_dir(&src).await?; + + while let Some(entry) = entries.next_entry().await? { + let name = entry.file_name(); + + let line = format!("processing: {}", name.to_string_lossy()); + logger.log(&line, LogLevel::DEBUG).await?; + + if name == ".venv" || name == ".git" { + let line = format!("skipping {}", entry.path().display()); + logger.log(&line, LogLevel::DEBUG).await?; + continue; + } + + let src_path = entry.path(); + let dst_path = dst.join(&name); + + // IMPORTANT: do not follow symlinks here + let meta = fs::symlink_metadata(&src_path).await?; + let file_type = meta.file_type(); + + if meta.file_type().is_symlink() { + match fs::metadata(&src_path).await { + Ok(target_meta) => { + if target_meta.is_dir() { + stack.push((src_path, dst_path)); + } else { + fs::copy(&src_path, &dst_path).await?; + } + } + Err(e) if e.kind() == std::io::ErrorKind::NotFound => { + let line = format!("skipping broken symlink: {}", src_path.display()); + logger.log(&line, LogLevel::UNUSUAL).await?; + } + Err(e) => return Err(e.into()), + } + } else if file_type.is_dir() { + stack.push((src_path, dst_path)); + } else if file_type.is_file() && files_differ(&src_path, &dst_path).await? { + let line = format!("copying file {}", src_path.display()); + logger.log(&line, LogLevel::DEBUG).await?; + fs::copy(&src_path, &dst_path).await?; + } + } + } + + let line = "copying: done"; + logger.log(line, LogLevel::DEBUG).await?; + Ok(()) +} + +pub async fn write_metadata(rl_plugin: &RecklessPlugin) -> Result<(), anyhow::Error> { + let install_dir = Path::new(rl_plugin.path()); + + if !install_dir.is_dir() { + return Err(anyhow!("{} is not a directory", install_dir.display())); + } + + fs::write( + install_dir.join(".metadata.json"), + serde_json::to_string_pretty(rl_plugin)?, + ) + .await?; + + Ok(()) +} + +pub async fn read_metadata( + plugin_name: &str, + plugin_dir: &Path, +) -> Result { + if !plugin_dir.exists() { + return Err(anyhow!("{plugin_name} is not installed")); + } + + let metadata_file = plugin_dir.join(".metadata.json"); + + let contents = fs::read_to_string(metadata_file).await?; + + let rl_plugin = serde_json::from_str(&contents)?; + + Ok(rl_plugin) +} + +pub fn parse_target(target: &str) -> Result<(String, Option), anyhow::Error> { + let (name, git_ref) = if let Some(x) = target.split_once('@') { + (normalize_plugin_name(x.0), Some(x.1.to_owned())) + } else { + (normalize_plugin_name(target), None) + }; + if name.contains('/') { + return Err(anyhow!("invalid plugin name")); + } + let name = if let Some((base, extension)) = name.split_once('.') { + if extension.contains('.') { + return Err(anyhow!("invalid plugin name, too many `.`")); + } + // We don't want file extensions in the name but we also had plugin names + // like go-lnmetrics.reporter + if extension.len() > 4 { + name + } else { + base.to_owned() + } + } else { + name + }; + Ok((name, git_ref)) +} + +pub fn validate_path(input: &str) -> Result { + let path = PathBuf::from(input); + + if !path.exists() { + return Err(anyhow!("path does not exist")); + } + + path.canonicalize() + .map_err(|e| anyhow!("invalid path: {e}"))?; + + Ok(path) +} + +pub async fn parse_install_target( + logger: &mut RecklessLogger<'_>, + target: &str, + search_results: &mut HashMap, + reckless_dir: &Path, +) -> Result<(String, Option), anyhow::Error> { + let (name, git_ref) = match parse_target(target) { + Ok(o) => o, + Err(e1) => match validate_path(target.trim()) { + Ok(local_path) => { + let plugin_name = local_path + .file_name() + .ok_or_else(|| { + anyhow!("local_dir has no final component: {}", local_path.display()) + })? + .to_str() + .ok_or_else(|| anyhow!("not a valid path: {}", local_path.display()))? + .to_owned(); + + let rl_manifest = read_reckless_manifest(&local_path).await?; + let mut rl_manifest = rl_manifest.unwrap_or_default(); + let installer = detect_installer(&local_path, &mut rl_manifest).await?; + + let plugin_origin = PluginOrigin::new(local_path.to_str().ok_or_else(|| { + anyhow!("path contains invalid utf-8: {}", local_path.display()) + })?)?; + search_results.insert( + plugin_name.clone(), + RecklessPlugin::new( + plugin_origin, + local_path.clone(), + local_path, + plugin_name.clone(), + reckless_dir, + installer, + rl_manifest, + ), + ); + (plugin_name, None) + } + Err(e2) => { + logger.log(&e1.to_string(), LogLevel::BROKEN).await?; + logger.log(&e2.to_string(), LogLevel::BROKEN).await?; + return Err(anyhow!("neither a valid target or path")); + } + }, + }; + Ok((name, git_ref)) +} + +pub async fn read_sources_file( + plugin: &Plugin, +) -> Result<(Vec, PathBuf), anyhow::Error> { + if !plugin.state().reckless_dir.exists() { + fs::create_dir_all(&plugin.state().reckless_dir).await?; + } + + let source_file = plugin.state().reckless_dir.join(".sources"); + + if !source_file.exists() { + fs::write(&source_file, format!("{DEFAULT_REPO}\n")).await?; + } + + let contents = fs::read_to_string(&source_file).await?; + let lines = contents.lines().collect::>(); + + let mut sources: Vec = Vec::new(); + + for line in &lines { + let origin = PluginOrigin::new(line)?; + sources.push(origin); + } + + Ok((sources, source_file)) +} + +async fn find_entryfile(path: &Path, plugin_name: &str) -> Result { + if !path.exists() { + return Err(anyhow!("{} not found", path.display())); + } + + let mut entries = fs::read_dir(&path).await?; + + let guesses = vec![format!("{plugin_name}.py"), format!("{plugin_name}.js")]; + + let mut python_candidates = Vec::new(); + let mut js_candidates = Vec::new(); + + while let Ok(Some(entry)) = entries.next_entry().await { + let Ok(file_type) = entry.file_type().await else { + continue; + }; + if file_type.is_dir() { + continue; + } + if let Some(file_name) = entry.file_name().to_str() { + if normalized_eq(file_name, plugin_name) { + return Ok(PathBuf::from_str(file_name)?); + } + + for guess in &guesses { + if normalized_eq(file_name, guess) { + return Ok(PathBuf::from_str(file_name)?); + } + } + + if file_name.starts_with("test") { + continue; + } + + let fn_path = Path::new(file_name); + if fn_path + .extension() + .is_some_and(|ext| ext.eq_ignore_ascii_case("py")) + { + python_candidates.push(file_name.to_owned()); + } else if fn_path + .extension() + .is_some_and(|ext| ext.eq_ignore_ascii_case("js")) + { + js_candidates.push(file_name.to_owned()); + } + } + } + + if !python_candidates.is_empty() { + for file in &python_candidates { + let file_path = path.join(file); + let content = fs::read_to_string(&file_path).await?; + if content.contains("plugin.run()") { + return Ok(PathBuf::from_str(file)?); + } + } + } + + if js_candidates.len() == 1 { + return Ok(PathBuf::from_str(js_candidates.first().unwrap())?); + } + + if js_candidates.is_empty() && python_candidates.len() == 1 { + return Ok(PathBuf::from_str(python_candidates.first().unwrap())?); + } + + Err(anyhow!( + "{plugin_name} entryfile not found in {}", + path.display() + )) +} + +pub async fn detect_installer( + plugin_path: &Path, + rl_manifest: &mut RecklessManifest, +) -> Result { + let mut entries = fs::read_dir(plugin_path).await?; + let mut files = Vec::new(); + + while let Some(entry) = entries.next_entry().await? { + if let Ok(name) = entry.file_name().into_string() { + files.push(name); + } + } + + let has = |name: &str| files.iter().find(|f| normalized_eq(f, name)); + + let plugin_name = plugin_path + .file_name() + .ok_or_else(|| anyhow!("no filename"))? + .to_str() + .ok_or_else(|| anyhow!("not a valid path"))?; + + if rl_manifest.install_cmd.as_ref().is_some() && rl_manifest.entrypoint.as_ref().is_some() { + return Ok(Installer::Custom); + } + + let entry_file = if let Some(et) = &rl_manifest.entrypoint { + Some(et.clone()) + } else { + find_entryfile(plugin_path, plugin_name).await.ok() + }; + + if let Some(ef) = &entry_file { + rl_manifest.entrypoint = Some(ef.clone()); + } + + if has("Cargo.toml").is_some() { + if entry_file.is_none() { + rl_manifest.entrypoint = Some(PathBuf::from_str(plugin_name)?); + } + if which("cargo").is_ok() { + return Ok(Installer::Rust); + } + return Err(anyhow!("rust plugin requires cargo")); + } + + if has("go.mod").is_some() { + if entry_file.is_none() { + rl_manifest.entrypoint = Some(PathBuf::from_str(plugin_name)?); + } + if which("go").is_ok() { + return Ok(Installer::Go); + } + return Err(anyhow!("go plugin requires go")); + } + + if has("package.json").is_some() { + if entry_file.is_none() { + return Err(anyhow!("node plugin entrypoint not found")); + } + if which("npm").is_ok() { + return Ok(Installer::Nodejs); + } + return Err(anyhow!("node plugin requires npm")); + } + + let actual_python_entry = + plugin_path.join(entry_file.ok_or_else(|| anyhow!("entryfile not found"))?); + + if !actual_python_entry.exists() { + return Err(anyhow!("entry file not found")); + } + + if !actual_python_entry + .extension() + .is_some_and(|ext| ext.eq_ignore_ascii_case("py")) + { + return Err(anyhow!("python entry file must end with .py")); + } + + if has_uv_shebang(plugin_path.join(actual_python_entry)).await? { + if which("uv").is_ok() { + return Ok(Installer::PythonUvShebang); + } + return Err(anyhow!("python plugin uses uv shebang but uv not found")); + } + + if has("uv.lock").is_some() { + if which("uv").is_ok() { + return Ok(Installer::PythonUv); + } + return Err(anyhow!("python plugin uses uv but uv not found")); + } + + if has("poetry.lock").is_some() { + if which("poetry").is_ok() { + return Ok(Installer::PoetryVenv); + } + return Err(anyhow!("python plugin uses poetry but poetry not found")); + } + + if has("pyproject.toml").is_some() { + if which("pip").is_ok() { + return Ok(Installer::PyprojectViaPip); + } + return Err(anyhow!("python pyproject.toml detected but no pip found")); + } + + if has("requirements.txt").is_some() { + if which("uv").is_ok() { + return Ok(Installer::PythonUvLegacy); + } + if which("pip").is_ok() { + return Ok(Installer::Python); + } + return Err(anyhow!("python requirements.txt detected but no pip found")); + } + + Err(anyhow!( + "plugin language could not be detected or is unsupported" + )) +} + +async fn has_uv_shebang(path: PathBuf) -> Result { + let file = fs::File::open(path).await?; + let mut reader = BufReader::new(file); + + let mut line = String::new(); + + loop { + line.clear(); + + let bytes_read = reader.read_line(&mut line).await?; + + if bytes_read == 0 { + return Ok(false); + } + + let trimmed = line.trim(); + + if trimmed.is_empty() { + continue; + } + + if !trimmed.starts_with("#!") { + return Ok(false); + } + + let shebang = &trimmed[2..]; + + let has_uv = shebang.split_whitespace().any(|part| part == "uv"); + + return Ok(has_uv); + } +} + +pub fn create_symlink(src: &Path, dst: &Path) -> std::io::Result<()> { + if let Ok(meta) = std::fs::symlink_metadata(dst) { + if meta.is_dir() { + std::fs::remove_dir_all(dst)?; + } else { + std::fs::remove_file(dst)?; + } + } + + #[cfg(unix)] + { + std::os::unix::fs::symlink(src, dst) + } + + #[cfg(windows)] + { + use std::fs as stdfs; + use std::os::windows::fs; + + let metadata = stdfs::metadata(src); + + match metadata { + Ok(m) if m.is_dir() => fs::symlink_dir(src, dst), + _ => fs::symlink_file(src, dst), + } + } +} + +pub fn normalize_plugin_name(name: &str) -> String { + name.to_ascii_lowercase() +} + +pub fn normalized_eq(a: &str, b: &str) -> bool { + a.replace('-', "_").eq(&b.replace('-', "_")) +} + +fn normalized_line(line: &str) -> &str { + line.trim_start_matches('#').trim_start() +} + +pub async fn update_config_file( + path: &Path, + plugin_line: &str, + removing: bool, + option_lines: &mut Vec<(String, String)>, + remove_options: &mut HashSet, + old_options: &mut Vec<(String, Option)>, +) -> anyhow::Result { + if !path.exists() { + return Ok(false); + } + + let contents = fs::read_to_string(path).await?; + let mut lines: Vec = contents.lines().map(str::to_owned).collect(); + + let mut changed = false; + let mut plugin_enabled = false; + + for line in &mut lines { + let normalized_line = normalized_line(line); + + if normalized_line == plugin_line { + if removing && !line.starts_with('#') { + *line = format!("#{normalized_line}"); + changed = true; + } else if !removing && line.starts_with('#') { + plugin_line.clone_into(line); + changed = true; + } + + plugin_enabled = true; + + continue; + } + + if let Some(pos) = option_lines + .iter() + .position(|(name, _)| normalized_line.starts_with(name)) + { + let (name, expected) = option_lines[pos].clone(); + + if *line != expected { + *line = expected; + changed = true; + } + + // remove ONLY this occurrence (supports multi) + option_lines.remove(pos); + remove_options.insert(name); + continue; + } + + for name in remove_options.iter() { + if line.starts_with(name) { + *line = format!("#{line}"); + changed = true; + old_options.push(parse_key_val(line).unwrap()); + break; + } + } + } + + if changed { + fs::write(path, format!("{}\n", lines.join("\n"))).await?; + } + + Ok(plugin_enabled) +} + +async fn read_reckless_manifest(source: &Path) -> Result, anyhow::Error> { + let manifest_path = source.join("manifest.json"); + + if manifest_path.exists() { + let contents = fs::read_to_string(&manifest_path).await?; + Ok(serde_json::from_str(&contents)?) + } else { + Ok(None) + } +} + +pub async fn cln_list_plugins( + plugin: Plugin, + logger: &mut RecklessLogger<'_>, +) -> Result, anyhow::Error> { + let mut rpc = plugin.state().rpc.lock().await; + let plugins = rpc + .call_typed(&PluginRequest { + directory: None, + plugin: None, + options: None, + subcommand: PluginSubcommand::LIST, + }) + .await?; + + let mut plugin_names = Vec::new(); + + for plugin in plugins + .plugins + .ok_or_else(|| anyhow!("empty plugin list response"))? + { + let Some(name) = Path::new(&plugin.name).file_name() else { + let line = format!("plugin entry path has no filename: {}", plugin.name); + logger.log(&line, LogLevel::UNUSUAL).await?; + continue; + }; + plugin_names.push(name.to_string_lossy().to_string()); + } + + Ok(plugin_names) +} + +pub async fn cln_start_plugin( + plugin: Plugin, + plugin_name: &str, + plugin_entry: &Path, + options: Vec<(String, Option)>, + logger: &mut RecklessLogger<'_>, +) -> Result<(), anyhow::Error> { + let options_str = options + .iter() + .map(|(k, v)| match v { + Some(v) => format!("{k}={v}"), + None => k.clone(), + }) + .collect::>() + .join(", "); + let line = if options.is_empty() { + format!("Starting {plugin_name}") + } else { + format!("Starting {plugin_name} with options: {options_str}") + }; + logger.log(&line, LogLevel::INFO).await?; + + // Can not pass options with cln-rpc because of + // + // so we use .call_raw + let mut obj = serde_json::Map::new(); + + obj.insert( + "subcommand".to_owned(), + serde_json::Value::String("start".to_owned()), + ); + obj.insert( + "plugin".to_owned(), + serde_json::Value::String( + plugin_entry + .to_str() + .ok_or_else(|| anyhow!("plugin path invalid: {}", plugin_entry.display()))? + .to_string(), + ), + ); + + let options_val = options + .iter() + .map(|(k, v)| Ok((k.clone(), serde_json::to_value(v)?))) + .collect::, serde_json::Error>>()?; + + obj.extend(options_val); + + let line = format!("{obj:#?}"); + logger.log(&line, LogLevel::TRACE).await?; + + let mut rpc = plugin.state().rpc.lock().await; + match rpc + // .call_typed(&PluginRequest { + // directory: None, + // plugin: Some( + // path.to_str() + // .ok_or_else(|| anyhow!("plugin path invalid: {}", path.display()))? + // .to_string(), + // ), + // options: Some(options), + // subcommand: PluginSubcommand::START, + // }) + .call_raw::("plugin", &serde_json::Value::Object(obj)) + .await + { + Ok(_) => { + let line = format!("{plugin_name} started"); + logger.log(&line, LogLevel::INFO).await?; + } + Err(e) => { + return Err(anyhow!("{plugin_name} failed to start: {}", e.message)); + } + } + + Ok(()) +} + +pub async fn cln_stop_plugin( + plugin: Plugin, + plugin_name: &str, + plugin_entry: &Path, + logger: &mut RecklessLogger<'_>, +) -> Result<(), anyhow::Error> { + let mut rpc = plugin.state().rpc.lock().await; + + match rpc + .call_typed(&PluginRequest { + directory: None, + plugin: Some( + plugin_entry + .to_str() + .ok_or_else(|| anyhow!("plugin path invalid: {}", plugin_entry.display()))? + .to_string(), + ), + options: None, + subcommand: PluginSubcommand::STOP, + }) + .await + { + Ok(_) => { + let line = format!("{plugin_name} stopped"); + logger.log(&line, LogLevel::INFO).await?; + } + Err(e) => { + let line = format!("{plugin_name} NOT stopped: {e}"); + logger.log(&line, LogLevel::UNUSUAL).await?; + } + } + + Ok(()) +} + +pub async fn search_sources( + plugin: &Plugin, + search_name: Option, + logger: &mut RecklessLogger<'_>, +) -> Result, anyhow::Error> { + let (sources, _source_file) = read_sources_file(plugin).await?; + let mut rl_plugins = HashMap::new(); + + let mut urls: Vec = Vec::new(); + let mut paths: Vec = Vec::new(); + + for source in sources { + match source { + PluginOrigin::Url(url) => urls.push(url), + PluginOrigin::LocalPath(path) => paths.push(path), + } + } + + for url_str in &urls { + let url = Url::from_str(url_str)?; + let repo_dir = init_plugin_repo(plugin, url.clone(), logger).await?; + rl_plugins.extend( + find_plugin_locs( + &plugin.state().reckless_dir, + url.as_str().to_owned(), + repo_dir, + 5, + logger, + ) + .await?, + ); + } + + for path in paths { + rl_plugins.extend( + find_plugin_locs( + &plugin.state().reckless_dir, + path.to_str().unwrap().to_owned(), + path, + 3, + logger, + ) + .await?, + ); + } + + let mut exact_matches = HashMap::new(); + + let mut found_match = false; + for (plugin_name, rl_plugin) in &rl_plugins { + if search_name + .as_ref() + .is_some_and(|search| plugin_name.contains(search)) + { + if !found_match { + let line = format!("Plugins matching '{}':", search_name.as_ref().unwrap()); + logger.log(&line, LogLevel::INFO).await?; + } + let line = format!(" {plugin_name} ({})", rl_plugin.origin()); + logger.log(&line, LogLevel::INFO).await?; + found_match = true; + } + } + + for (plugin_name, rl_plugin) in rl_plugins { + if search_name + .as_ref() + .is_none_or(|search| normalized_eq(&plugin_name, search)) + { + let line = format!("found {plugin_name} in source: {}", rl_plugin.origin()); + logger.log(&line, LogLevel::INFO).await?; + + exact_matches.insert(plugin_name, rl_plugin); + found_match = true; + } + } + + if !found_match { + let line = "Search exhausted all sources"; + logger.log(line, LogLevel::INFO).await?; + } + + Ok(exact_matches) +} + +pub async fn add_plugin_to_config( + plugin: Plugin, + path: PathBuf, + options: Vec<(String, Option)>, + manifest: GetManifestResponse, +) -> Result<(), anyhow::Error> { + include_reckless_config(plugin.clone()).await?; + + let plugin_line = format!("plugin={}", path.display()); + + let mut option_lines: Vec<(String, String)> = options + .iter() + .map(|(name, value)| { + let value_str = match value { + Some(v) => match v { + options::Value::String(s) => s.clone(), + options::Value::Integer(i) => i.to_string(), + options::Value::Boolean(b) => b.to_string(), + _ => panic!("Unsupported value type"), + }, + None => name.clone(), + }; + let line = format!("{name}={value_str}"); + Ok((name.clone(), line)) + }) + .collect::>()?; + + let mut remove_options: HashSet<_> = manifest + .options + .into_iter() + .map(|o| o.name) + .filter(|name| !option_lines.iter().any(|(n, _)| n == name)) + .collect(); + + let mut old_options: Vec<(String, Option)> = Vec::new(); + + let mut plugin_enabled = false; + + for config in plugin.state().get_cln_configs() { + plugin_enabled |= update_config_file( + config, + &plugin_line, + false, + &mut option_lines, + &mut remove_options, + &mut old_options, + ) + .await?; + } + + if !plugin.state().reckless_conf.exists() { + fs::write(&plugin.state().reckless_conf, RECKLESS_CONFIG_HEADER).await?; + } + + plugin_enabled |= update_config_file( + &plugin.state().reckless_conf, + &plugin_line, + false, + &mut option_lines, + &mut remove_options, + &mut old_options, + ) + .await?; + + let mut file = OpenOptions::new() + .append(true) + .open(&plugin.state().reckless_conf) + .await?; + + if !plugin_enabled { + file.write_all(format!("{plugin_line}\n").as_bytes()) + .await?; + } + + for (_name, line) in option_lines { + file.write_all(format!("{line}\n").as_bytes()).await?; + } + + Ok(()) +} + +pub async fn remove_plugin_from_config( + plugin: Plugin, + plugin_entry: PathBuf, + manifest: GetManifestResponse, +) -> Result)>, anyhow::Error> { + include_reckless_config(plugin.clone()).await?; + + let plugin_line = format!("plugin={}", plugin_entry.display()); + + let mut option_lines: Vec<(String, String)> = Vec::new(); + + let mut remove_options: HashSet<_> = manifest.options.into_iter().map(|o| o.name).collect(); + + let mut old_options: Vec<(String, Option)> = Vec::new(); + + for config in &plugin.state().get_cln_configs() { + update_config_file( + config, + &plugin_line, + true, + &mut option_lines, + &mut remove_options, + &mut old_options, + ) + .await?; + } + + if !plugin.state().reckless_conf.exists() { + fs::write(&plugin.state().reckless_conf, RECKLESS_CONFIG_HEADER).await?; + } + + update_config_file( + &plugin.state().reckless_conf, + &plugin_line, + true, + &mut option_lines, + &mut remove_options, + &mut old_options, + ) + .await?; + + Ok(old_options) +} + +async fn include_reckless_config(plugin: Plugin) -> Result<(), anyhow::Error> { + let rl_conf_path_str = plugin + .state() + .reckless_conf + .to_str() + .ok_or_else(|| anyhow!("path to reckless config contains invalid utf-8"))?; + + if !plugin.state().cln_conf.exists() { + fs::write( + &plugin.state().cln_conf, + format!("# This config was autopopulated by reckless\n\ninclude {rl_conf_path_str}\n"), + ) + .await?; + return Ok(()); + } + + let contents = fs::read_to_string(&plugin.state().cln_conf).await?; + let lines = contents.lines().collect::>(); + + let include_line = format!("include {rl_conf_path_str}"); + + for line in lines { + if line.trim() == include_line { + return Ok(()); + } + } + + let mut file_handle = OpenOptions::new() + .append(true) + .open(&plugin.state().cln_conf) + .await?; + + file_handle + .write_all(format!("\ninclude {rl_conf_path_str}\n").as_bytes()) + .await?; + + Ok(()) +} diff --git a/plugins/recklessrpc.c b/plugins/recklessrpc.c deleted file mode 100644 index 5d3ebb5b2525..000000000000 --- a/plugins/recklessrpc.c +++ /dev/null @@ -1,334 +0,0 @@ -/* This plugin provides RPC access to the reckless standalone utility. - */ - -#include "config.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static struct plugin *plugin; - -struct reckless { - struct command *cmd; - int stdinfd; - int stdoutfd; - int stderrfd; - char *stdoutbuf; - char *stderrbuf; - size_t stdout_read; /* running total */ - size_t stdout_new; /* new since last read */ - size_t stderr_read; - size_t stderr_new; - pid_t pid; - char *process_failed; -}; - -struct lconfig { - char *lightningdir; - char *config; - char *network; -} lconfig; - -static struct io_plan *reckless_in_init(struct io_conn *conn, - struct reckless *reckless) -{ - return io_write(conn, "Y", 1, io_close_cb, NULL); -} - -static void reckless_send_yes(struct reckless *reckless) -{ - io_new_conn(reckless, reckless->stdinfd, reckless_in_init, reckless); -} - -static struct io_plan *read_more(struct io_conn *conn, struct reckless *rkls) -{ - rkls->stdout_read += rkls->stdout_new; - if (rkls->stdout_read == tal_count(rkls->stdoutbuf)) - tal_resize(&rkls->stdoutbuf, rkls->stdout_read * 2); - return io_read_partial(conn, rkls->stdoutbuf + rkls->stdout_read, - tal_count(rkls->stdoutbuf) - rkls->stdout_read, - &rkls->stdout_new, read_more, rkls); -} - -static struct command_result *reckless_result(struct io_conn *conn, - struct reckless *reckless) -{ - struct json_stream *response; - if (reckless->process_failed) { - response = jsonrpc_stream_fail(reckless->cmd, - PLUGIN_ERROR, - reckless->process_failed); - return command_finished(reckless->cmd, response); - } - const jsmntok_t *results, *result, *logs, *log; - size_t i; - jsmn_parser parser; - jsmntok_t *toks; - toks = tal_arr(reckless, jsmntok_t, 5000); - jsmn_init(&parser); - int res; - res = jsmn_parse(&parser, reckless->stdoutbuf, - strlen(reckless->stdoutbuf), toks, tal_count(toks)); - const char *err; - if (res == JSMN_ERROR_INVAL) - err = tal_fmt(tmpctx, "reckless returned invalid character in json " - "output"); - else if (res == JSMN_ERROR_PART) - err = tal_fmt(tmpctx, "reckless returned partial output"); - else if (res == JSMN_ERROR_NOMEM ) - err = tal_fmt(tmpctx, "insufficient tokens to parse " - "reckless output."); - else - err = NULL; - - if (err) { - plugin_log(plugin, LOG_UNUSUAL, "failed to parse json: %s", err); - response = jsonrpc_stream_fail(reckless->cmd, PLUGIN_ERROR, - err); - return command_finished(reckless->cmd, response); - } - - response = jsonrpc_stream_success(reckless->cmd); - json_array_start(response, "result"); - results = json_get_member(reckless->stdoutbuf, toks, "result"); - json_for_each_arr(i, result, results) { - json_add_string(response, - NULL, - json_strdup(reckless, reckless->stdoutbuf, - result)); - } - json_array_end(response); - json_array_start(response, "log"); - logs = json_get_member(reckless->stdoutbuf, toks, "log"); - json_for_each_arr(i, log, logs) { - json_add_string(response, - NULL, - json_strdup(reckless, reckless->stdoutbuf, - log)); - } - json_array_end(response); - - return command_finished(reckless->cmd, response); -} - -static struct command_result *reckless_fail(struct reckless *reckless, - char *err) -{ - struct json_stream *resp; - resp = jsonrpc_stream_fail(reckless->cmd, PLUGIN_ERROR, err); - return command_finished(reckless->cmd, resp); -} - -static void reckless_conn_finish(struct io_conn *conn, - struct reckless *reckless) -{ - /* FIXME: avoid EBADFD - leave stdin fd open? */ - if (errno && errno != 9) - plugin_log(plugin, LOG_DBG, "err: %s", strerror(errno)); - if (reckless->pid > 0) { - int status = 0; - pid_t p; - p = waitpid(reckless->pid, &status, WNOHANG); - /* Did the reckless process exit? */ - if (p != reckless->pid && reckless->pid) { - plugin_log(plugin, LOG_DBG, "reckless failed to exit, " - "killing now."); - kill(reckless->pid, SIGKILL); - reckless_fail(reckless, "reckless process hung"); - /* Reckless process exited and with normal status? */ - } else if (WIFEXITED(status) && !WEXITSTATUS(status)) { - plugin_log(plugin, LOG_DBG, - "Reckless subprocess complete: %s", - reckless->stdoutbuf); - reckless_result(conn, reckless); - /* Don't try to process json if python raised an error. */ - } else { - plugin_log(plugin, LOG_DBG, - "Reckless process has crashed (%i).", - WEXITSTATUS(status)); - char * err; - if (reckless->process_failed) - err = reckless->process_failed; - else - err = tal_strdup(tmpctx, "the reckless process " - "has crashed"); - reckless_fail(reckless, err); - plugin_log(plugin, LOG_UNUSUAL, - "The reckless subprocess has failed."); - } - } - io_close(conn); - tal_free(reckless); -} - -static struct io_plan *conn_init(struct io_conn *conn, struct reckless *rkls) -{ - io_set_finish(conn, reckless_conn_finish, rkls); - return read_more(conn, rkls); -} - -static void stderr_conn_finish(struct io_conn *conn, void *reckless UNUSED) -{ - io_close(conn); -} - -static struct io_plan *stderr_read_more(struct io_conn *conn, - struct reckless *rkls) -{ - rkls->stderr_read += rkls->stderr_new; - if (rkls->stderr_read == tal_count(rkls->stderrbuf)) - tal_resize(&rkls->stderrbuf, rkls->stderr_read * 2); - if (strends(rkls->stderrbuf, "[Y] to create one now.\n")) { - plugin_log(plugin, LOG_DBG, "confirming config creation"); - reckless_send_yes(rkls); - } - /* Old version of reckless installed? */ - if (strstr(rkls->stderrbuf, "error: unrecognized arguments: --json")) { - plugin_log(plugin, LOG_DBG, "Reckless call failed due to old " - "installed version."); - rkls->process_failed = tal_strdup(plugin, "The installed " - "reckless utility is out of " - "date. Please update to use " - "the RPC plugin."); - } - return io_read_partial(conn, rkls->stderrbuf + rkls->stderr_read, - tal_count(rkls->stderrbuf) - rkls->stderr_read, - &rkls->stderr_new, stderr_read_more, rkls); -} - -static struct io_plan *stderr_conn_init(struct io_conn *conn, - struct reckless *reckless) -{ - io_set_finish(conn, stderr_conn_finish, NULL); - return stderr_read_more(conn, reckless); -} - -static struct command_result *reckless_call(struct command *cmd, - const char *subcommand, - const char *target, - const char *target2) -{ - if (!subcommand || !target) - return command_fail(cmd, PLUGIN_ERROR, "invalid reckless call"); - char **my_call; - my_call = tal_arrz(tmpctx, char *, 0); - tal_arr_expand(&my_call, "reckless"); - tal_arr_expand(&my_call, "-v"); - tal_arr_expand(&my_call, "--json"); - tal_arr_expand(&my_call, "-l"); - tal_arr_expand(&my_call, lconfig.lightningdir); - tal_arr_expand(&my_call, "--network"); - tal_arr_expand(&my_call, lconfig.network); - if (lconfig.config) { - tal_arr_expand(&my_call, "--conf"); - tal_arr_expand(&my_call, lconfig.config); - } - tal_arr_expand(&my_call, (char *) subcommand); - tal_arr_expand(&my_call, (char *) target); - if (target2) - tal_arr_expand(&my_call, (char *) target2); - tal_arr_expand(&my_call, NULL); - struct reckless *reckless; - reckless = tal(NULL, struct reckless); - reckless->cmd = cmd; - reckless->stdoutbuf = tal_arrz(reckless, char, 4096); - reckless->stderrbuf = tal_arrz(reckless, char, 4096); - reckless->stdout_read = 0; - reckless->stdout_new = 0; - reckless->stderr_read = 0; - reckless->stderr_new = 0; - reckless->process_failed = NULL; - char * full_cmd; - full_cmd = tal_fmt(tmpctx, "calling:"); - for (int i=0; ipid = pipecmdarr(&reckless->stdinfd, &reckless->stdoutfd, - &reckless->stderrfd, my_call); - - if (reckless->pid < 0) { - return command_fail(cmd, LIGHTNINGD, "reckless failed: %s", - strerror(errno)); - } - - io_new_conn(reckless, reckless->stdoutfd, conn_init, reckless); - io_new_conn(reckless, reckless->stderrfd, stderr_conn_init, reckless); - tal_free(my_call); - return command_still_pending(cmd); -} - -static struct command_result *json_reckless(struct command *cmd, - const char *buf, - const jsmntok_t *params) -{ - const char *command; - const char *target; - const char *target2; - /* Allow check command to evaluate. */ - if (!param(cmd, buf, params, - p_req("command", param_string, &command), - p_req("target/subcommand", param_string, &target), - p_opt("target", param_string, &target2), - NULL)) - return command_param_failed(); - return reckless_call(cmd, command, target, target2); -} - -static const char *init(struct command *init_cmd, - const char *buf UNUSED, - const jsmntok_t *config UNUSED) -{ - plugin = init_cmd->plugin; - rpc_scan(init_cmd, "listconfigs", - take(json_out_obj(NULL, NULL, NULL)), - "{configs:{" - "conf?:{value_str:%}," - "lightning-dir:{value_str:%}," - "network:{value_str:%}" - "}}", - JSON_SCAN_TAL(plugin, json_strdup, &lconfig.config), - JSON_SCAN_TAL(plugin, json_strdup, &lconfig.lightningdir), - JSON_SCAN_TAL(plugin, json_strdup, &lconfig.network)); - /* These lightning config parameters need to stick around for each - * reckless call. */ - if (lconfig.config) - notleak(lconfig.config); - notleak(lconfig.lightningdir); - notleak(lconfig.network); - plugin_log(plugin, LOG_DBG, "plugin initialized!"); - plugin_log(plugin, LOG_DBG, "lightning-dir: %s", lconfig.lightningdir); - return NULL; -} - -static const struct plugin_command commands[] = { - { - "reckless", - json_reckless, - }, -}; - -int main(int argc, char **argv) -{ - setup_locale(); - - plugin_main(argv, init, NULL, PLUGIN_RESTARTABLE, true, - NULL, - commands, ARRAY_SIZE(commands), - NULL, 0, /* Notifications */ - NULL, 0, /* Hooks */ - NULL, 0, /* Notification topics */ - NULL); /* plugin options */ - - return 0; -} - diff --git a/plugins/src/options.rs b/plugins/src/options.rs index cfe8d12f39e5..6c78db44727a 100644 --- a/plugins/src/options.rs +++ b/plugins/src/options.rs @@ -132,8 +132,7 @@ //! Ok(()) //! } //! ``` -use serde::Serialize; -use serde::ser::{SerializeSeq, Serializer}; +use serde::{Deserialize, Serialize}; pub mod config_type { #[derive(Clone, Debug)] @@ -435,7 +434,7 @@ impl<'a> OptionType<'a> for config_type::Boolean { } } -#[derive(Clone, Debug, Serialize)] +#[derive(Clone, Debug, Serialize, Deserialize)] pub enum ValueType { #[serde(rename = "string")] String, @@ -447,7 +446,8 @@ pub enum ValueType { Flag, } -#[derive(Clone, Debug)] +#[derive(Deserialize, Serialize, Debug, Clone)] +#[serde(untagged)] pub enum Value { String(String), Integer(i64), @@ -456,33 +456,6 @@ pub enum Value { IntegerArray(Vec), } -impl Serialize for Value { - fn serialize(&self, serializer: S) -> std::prelude::v1::Result - where - S: Serializer, - { - match self { - Value::String(s) => serializer.serialize_str(s), - Value::Integer(i) => serializer.serialize_i64(*i), - Value::Boolean(b) => serializer.serialize_bool(*b), - Value::StringArray(sa) => { - let mut seq = serializer.serialize_seq(Some(sa.len()))?; - for element in sa { - seq.serialize_element(element)?; - } - seq.end() - } - Value::IntegerArray(sa) => { - let mut seq = serializer.serialize_seq(Some(sa.len()))?; - for element in sa { - seq.serialize_element(element)?; - } - seq.end() - } - } - } -} - impl Value { /// Returns true if the `Value` is a String. Returns false otherwise. /// diff --git a/tests/data/recklessrepo/lightningd/testpluginvaliddeps/requirements.txt b/tests/data/recklessrepo/lightningd/testpluginvaliddeps/requirements.txt new file mode 100644 index 000000000000..9b0af6de3e96 --- /dev/null +++ b/tests/data/recklessrepo/lightningd/testpluginvaliddeps/requirements.txt @@ -0,0 +1 @@ +sofijowesifjwoiefjow diff --git a/tests/data/recklessrepo/lightningd/testpluginvaliddeps/testpluginvaliddeps.py b/tests/data/recklessrepo/lightningd/testpluginvaliddeps/testpluginvaliddeps.py new file mode 100644 index 000000000000..19ea984d11fe --- /dev/null +++ b/tests/data/recklessrepo/lightningd/testpluginvaliddeps/testpluginvaliddeps.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 +from pyln.client import Plugin +import sofijowesifjwoiefjow # noqa: F401 + +plugin = Plugin() + +__version__ = "v1" + + +@plugin.init() +def init(options, configuration, plugin, **kwargs): + plugin.log("testplug initialized") + + +@plugin.method("testmethod") +def testmethod(plugin): + return "I live." + + +@plugin.method("gettestplugversion") +def gettestplugversion(plugin): + "to test commit/tag checkout" + return __version__ + + +plugin.run() diff --git a/tests/data/recklessrepo/lightningd/testplugmani/manifest.json b/tests/data/recklessrepo/lightningd/testplugmani/manifest.json new file mode 100644 index 000000000000..ca297a3fa27e --- /dev/null +++ b/tests/data/recklessrepo/lightningd/testplugmani/manifest.json @@ -0,0 +1,8 @@ +{ + "entrypoint": "run.py", + "install_cmd": [ + "uv venv --clear", + "uv pip install --python .venv -r reqs.txt" + ], + "offer": "" +} diff --git a/tests/data/recklessrepo/lightningd/testplugmani/reqs.txt b/tests/data/recklessrepo/lightningd/testplugmani/reqs.txt new file mode 100644 index 000000000000..7b19e677138d --- /dev/null +++ b/tests/data/recklessrepo/lightningd/testplugmani/reqs.txt @@ -0,0 +1,2 @@ +pyln-client + diff --git a/tests/data/recklessrepo/lightningd/testplugmani/run.py b/tests/data/recklessrepo/lightningd/testplugmani/run.py new file mode 100755 index 000000000000..41f41d4d1969 --- /dev/null +++ b/tests/data/recklessrepo/lightningd/testplugmani/run.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python + +import os +from pathlib import Path + +TARGET_SCRIPT = "testplugpass.py" + + +def get_venv_python(): + base = Path(__file__).resolve().parent + + if os.name == "nt": + return base / ".venv" / "Scripts" / "python.exe" + return base / ".venv" / "bin" / "python" + + +def main(): + base = Path(__file__).resolve().parent + venv_python = get_venv_python() + target = base / TARGET_SCRIPT + + if not venv_python.exists(): + raise SystemExit(f"Missing venv python: {venv_python}") + + if not target.exists(): + raise SystemExit(f"Missing target script: {target}") + + # Replace current process (clean execution) + os.execv(str(venv_python), [str(venv_python), str(target)]) + + +if __name__ == "__main__": + main() diff --git a/tests/data/recklessrepo/lightningd/testplugmani/testplugpass.py b/tests/data/recklessrepo/lightningd/testplugmani/testplugpass.py new file mode 100755 index 000000000000..435f979f23a0 --- /dev/null +++ b/tests/data/recklessrepo/lightningd/testplugmani/testplugpass.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +from pyln.client import Plugin + +plugin = Plugin() + +__version__ = 'v1' + + +@plugin.init() +def init(options, configuration, plugin, **kwargs): + plugin.log("testplug initialized") + + +@plugin.method("testmethod") +def testmethod(plugin): + return ("I live.") + + +@plugin.method("gettestplugversion") +def gettestplugversion(plugin): + "to test commit/tag checkout" + return __version__ + + +plugin.run() diff --git a/tests/data/recklessrepo/lightningd/testplugpyproj/poetry.lock b/tests/data/recklessrepo/lightningd/testplugpyproj/poetry.lock new file mode 100644 index 000000000000..56f93ea8f081 --- /dev/null +++ b/tests/data/recklessrepo/lightningd/testplugpyproj/poetry.lock @@ -0,0 +1,523 @@ +# This file is automatically @generated by Poetry 2.1.2 and should not be changed by hand. + +[[package]] +name = "asn1crypto" +version = "1.5.1" +description = "Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12, PKCS#5, X.509 and TSP" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "asn1crypto-1.5.1-py2.py3-none-any.whl", hash = "sha256:db4e40728b728508912cbb3d44f19ce188f218e9eba635821bb4b68564f8fd67"}, + {file = "asn1crypto-1.5.1.tar.gz", hash = "sha256:13ae38502be632115abf8a24cbe5f4da52e3b5231990aff31123c805306ccb9c"}, +] + +[[package]] +name = "base58" +version = "2.1.1" +description = "Base58 and Base58Check implementation." +optional = false +python-versions = ">=3.5" +groups = ["main"] +files = [ + {file = "base58-2.1.1-py3-none-any.whl", hash = "sha256:11a36f4d3ce51dfc1043f3218591ac4eb1ceb172919cebe05b52a5bcc8d245c2"}, + {file = "base58-2.1.1.tar.gz", hash = "sha256:c5d0cb3f5b6e81e8e35da5754388ddcc6d0d14b6c6a132cb93d69ed580a7278c"}, +] + +[package.extras] +tests = ["PyHamcrest (>=2.0.2)", "mypy", "pytest (>=4.6)", "pytest-benchmark", "pytest-cov", "pytest-flake8"] + +[[package]] +name = "bitarray" +version = "3.8.1" +description = "efficient arrays of booleans -- C extension" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "bitarray-3.8.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:30d42c34da2974a5e2e0b51c57ecf89892c1e83ed67e1084d1e27eefc27add91"}, + {file = "bitarray-3.8.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0793c51d3b1c7410bde1f7254fff71fabff1bc0cdeba1fa51319ac4e7931df3d"}, + {file = "bitarray-3.8.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133648c3405564e7fef9103f1768cb018de1b4976f3d8beff09cd4acea73bfe4"}, + {file = "bitarray-3.8.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4fd3399eaf6f1c77ea3132611efbc3d7a8c0eb899793387b3266be221dc75fd"}, + {file = "bitarray-3.8.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3b9790ae107fc8648155f120e80a58ef8e94424efefff5b355de84061de6a18b"}, + {file = "bitarray-3.8.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:af01133e78e5528ee282ceb1cf4bc54aecb937c2001913e751452ad7dffbbeb1"}, + {file = "bitarray-3.8.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2da2ca9495668ab77132a911f6bd530d2bfe686d10467584894efc3b66e9ffb5"}, + {file = "bitarray-3.8.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:72a0e87b2196120523fc6194ca6b580fcffa12d7daa4d57a16d7838e60f82d0e"}, + {file = "bitarray-3.8.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:defa3c12cb06b2fd2066a9e21bf00aab96465be84d9585c8c05195f080510506"}, + {file = "bitarray-3.8.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7eae9e763fbd32f19f2a66dfc2e37906f8422e0c4ad4a6c9dcf9d3246740812e"}, + {file = "bitarray-3.8.1-cp310-cp310-win32.whl", hash = "sha256:3b9358f6437a5fa0c765ffae5810c9830547baf4bcf469438b82845c3f33f998"}, + {file = "bitarray-3.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:6f92d12a46b2a67d56194bb5d226dabf586b386d1f1a5e25be5b745a3080dbba"}, + {file = "bitarray-3.8.1-cp310-cp310-win_arm64.whl", hash = "sha256:8e12d50d4d65c74bd877e15c276992263b878456a7cfcf72521e7205a553557f"}, + {file = "bitarray-3.8.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:660e11b9932f58f10151d0febd11f77d3b0d48d6fa4dd4686d8983f40187101e"}, + {file = "bitarray-3.8.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fb1df55f5700187c6db4b47dbdaf8a0653a111341ac7fccc596b397aa3399e65"}, + {file = "bitarray-3.8.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:838fd67b3d00c5a64181073282a2c0bf8f76465da4844d5e79d2dbbc64c987dc"}, + {file = "bitarray-3.8.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5743f532e408cfd716fa16776b5a6447b83ff2cf39021fb5f8d052aa0f331508"}, + {file = "bitarray-3.8.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0c8c66f5d8055cb84ad0ea14af57b3579cb0b6db589f2086f5e33f0922cf2354"}, + {file = "bitarray-3.8.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8c3fe25871f1758519a3ad8dcafb1bd95c5d1aaeb122e6492ac739ab11fa5907"}, + {file = "bitarray-3.8.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e9ff57452fcadfd1a379314234657b8f4e9967ae64480ddf7c2fd82139bc8cf8"}, + {file = "bitarray-3.8.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4e34f1cb6cdb036c5f4a839a2b74419f75fa36177a70c4bab2867f48973cbe44"}, + {file = "bitarray-3.8.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:698c37fca3761af69a09a1d39cc0492f7e8cb9e263af39a288dce8f3b8a9e2bc"}, + {file = "bitarray-3.8.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:81ede1f094f26eeaff62e029ff1bc4e84e9d568f20d4669f64dcf7c7b18a28fc"}, + {file = "bitarray-3.8.1-cp311-cp311-win32.whl", hash = "sha256:8a345b5dc8ab8cafdf338e08530d48fe3f73df27f4ff569be793c7a7e7bb6b6b"}, + {file = "bitarray-3.8.1-cp311-cp311-win_amd64.whl", hash = "sha256:ddcd25a1f72b2b545fb27e17882046a6c161f3f24514b2e028c00c58ed73a2dd"}, + {file = "bitarray-3.8.1-cp311-cp311-win_arm64.whl", hash = "sha256:dc2cab92c42991b711132bc52405680e075d1505d4356c4468bc6e9c93d49137"}, + {file = "bitarray-3.8.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4494c599effa16064f2b600f6eb28115182d6826847d795a55691339788d8a4d"}, + {file = "bitarray-3.8.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ff2ca039a161d49a8c713f5380def315c6f793df5fe348b94782b1dbee37a644"}, + {file = "bitarray-3.8.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df3ffa6ef88166bb36f5d1492e71e664868b9b8b6afd55821e0ac0cb96625441"}, + {file = "bitarray-3.8.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:478b9f0ea86f957624dd2b159066855716f78db94666e9b04babe85fc013e01b"}, + {file = "bitarray-3.8.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e127b2e7fc533728295196f9265d12834530f475bc6cd6f74619df415d04b8b1"}, + {file = "bitarray-3.8.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6ef49462a615de062dcac8281944d0b036fe1e9c96a6c690bf6cf5e4b5488f0e"}, + {file = "bitarray-3.8.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4da256fc567a57ded2a4aa962fc9e9d430ab740e5c67be9e98a63ef4eb467f2f"}, + {file = "bitarray-3.8.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:b46b7aec9272fd81c984e723e599957629a91204120b3e7f0933f138e0792fdf"}, + {file = "bitarray-3.8.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:2dc07dab252c63c4f6600e200b26fa05207db6b650d41ae88ab0cec4d6c59459"}, + {file = "bitarray-3.8.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:29c8c10a49d6a9586f592116618b99c3dabcb24d881b7a649e0691ef87f314c4"}, + {file = "bitarray-3.8.1-cp312-cp312-win32.whl", hash = "sha256:67125404d12547443d74113862a80c10310cf875aff8dbfc5548fee1d9737123"}, + {file = "bitarray-3.8.1-cp312-cp312-win_amd64.whl", hash = "sha256:ba0339d6aa80615a17f47fabc5700485e9469121d658458f95cdd2003288c28b"}, + {file = "bitarray-3.8.1-cp312-cp312-win_arm64.whl", hash = "sha256:c0b367a00e8c88a714b2384c97dedcc85340547b3a54b6037a42fca5554d0576"}, + {file = "bitarray-3.8.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:55f4b105a1686eb486069a9e578d502d1998e890d8144012225de9e0450aeabd"}, + {file = "bitarray-3.8.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b3118ec012a799456f7fca6cc002c078590578b7640fbaab52d8ecb9a651f1c1"}, + {file = "bitarray-3.8.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2762db8049b230520358ac742cbc57bceaacebe34e5d25c096f2b4bc3887a3a8"}, + {file = "bitarray-3.8.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5b67b869f860eb19055e2560844d8c7d0935245938935bdb764b3e683e2014e2"}, + {file = "bitarray-3.8.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0a661f3492462e7adf8a054fb7414a22fc8251f1e18b9d8cbcf008d2dc85f012"}, + {file = "bitarray-3.8.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:300e3026d17ae3328320ba78d3165bdb1c43d0dfdbc461a69ebbdc005d9ce0b3"}, + {file = "bitarray-3.8.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ad5a71c1ef4a2e404c2c888db09226c821d9d14eff8813e1da873572f5fbb89d"}, + {file = "bitarray-3.8.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:78cbda57a2808d994517b53571eaa2d9299359f63aa71cf4bc94210169aad8b1"}, + {file = "bitarray-3.8.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:89c7c125a0913d71ba9cc1fa8e14c7cfe1517b1c1f45416e1f9babcedd3b545d"}, + {file = "bitarray-3.8.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7875abfd90f2ae3aa22d50f3fa1c93bbae456458cc73d3179b838f07bed1fc10"}, + {file = "bitarray-3.8.1-cp313-cp313-win32.whl", hash = "sha256:21add0aa968496a2bd8341d85720d09808e22e0adc7dbefc1e0f8f67c4b83f36"}, + {file = "bitarray-3.8.1-cp313-cp313-win_amd64.whl", hash = "sha256:40d1b57012bf9b4fefd25345aaa95aab3ca510cc693f33c2cb02a4b771d8e51a"}, + {file = "bitarray-3.8.1-cp313-cp313-win_arm64.whl", hash = "sha256:72b32d8c471930c95d49640ec99f7694f9b040ca1342ff03ed69d3aea90f9339"}, + {file = "bitarray-3.8.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fe989bbed9d6f332c1e24d333936f3fa1375f380cd8028da0b985dcdefa6015a"}, + {file = "bitarray-3.8.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:75e33c9187da271d1dbeb2582ab2df2e441346492098f67559b09173ea4edde4"}, + {file = "bitarray-3.8.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fd7e3158be382f8f140caccc0dc7742a7553ce4bf2978982abe3054d2cedd705"}, + {file = "bitarray-3.8.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9fa5620f7f352f9706924c0e2071a212be36421f09ee064b0fd7e1128289fcdb"}, + {file = "bitarray-3.8.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:190b20cbffc9cd7f308f7a57d406119c3af3ae197613325fd2d92d99c8882ad6"}, + {file = "bitarray-3.8.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ec3d0a6c37a816ea6e3550697c60d90861c9b0f982a98a40b59ac1f7a360bfa9"}, + {file = "bitarray-3.8.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:746e25f17ba4203b5933773782cf2d30bca5cdb66a9ba5d48a53a6c795aedc57"}, + {file = "bitarray-3.8.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ab363a5baae965fb3438f2137583853ad9c77d7e45f2a62ba63e609a34d792ea"}, + {file = "bitarray-3.8.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5e30d8e399f38ae1ec86aa9be76d20ba15872dd0c41b4b46d1b78905857363b9"}, + {file = "bitarray-3.8.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:0f099a4a77daf9bb99787070854894fe588c7d6988ea729f970ba2b3b82c7559"}, + {file = "bitarray-3.8.1-cp314-cp314-win32.whl", hash = "sha256:539880ddf9a8cc54c9e6126e7d072c991563f0c90ef73b3519a783d53df00352"}, + {file = "bitarray-3.8.1-cp314-cp314-win_amd64.whl", hash = "sha256:c08cd5b19c570e1e9e094a6ce70d35bb39d12360e0763474ed9374229f174fcc"}, + {file = "bitarray-3.8.1-cp314-cp314-win_arm64.whl", hash = "sha256:0da5f17bed67ffe1d72f79fbf98403513a6e51a4f9b8293c1ff8a64e121242be"}, + {file = "bitarray-3.8.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:154a19e1dcd430494fdad7d1a0fb36383baaa363e1cb9d5a7b744cd2418c44d2"}, + {file = "bitarray-3.8.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:814bb54db2a016026efc055a3527461e5eb551c0d91b32eeade003829ff84311"}, + {file = "bitarray-3.8.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac49519fcfeb4a7ecdf6b7d0ec6cac409e59f94c1bb54630db577a97893b6e38"}, + {file = "bitarray-3.8.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:329b994944993c45c3845047476ef4f231fe1a53972f18f8d005fd12fac163e1"}, + {file = "bitarray-3.8.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1d7b786a1ddd9b8dda17c445060a94a465cba2e113603ae7bdc5364efc1efd11"}, + {file = "bitarray-3.8.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd9b848c17ef034f2ae31b2a1bd9276710c2baf03509f1f3fa4dc4382b0a1b53"}, + {file = "bitarray-3.8.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0a33f8931ac91ebc23ce4decb99ed8fdddba2bafd2af3bb2781bcfd9878d4822"}, + {file = "bitarray-3.8.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:07626f76a248fce5ebbb10fb0d4899d3c7f908ba21cb2fb4f5a7a9daf24c20cd"}, + {file = "bitarray-3.8.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:18f3a2c8908e63a66d3994808254397a5f989b1fb91087c33739f62bf1a1a064"}, + {file = "bitarray-3.8.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ced27af6aee28782260bfa5643797937e96a6489bca972202834017208cf74f5"}, + {file = "bitarray-3.8.1-cp314-cp314t-win32.whl", hash = "sha256:cf99e36c0f6ae5643ecef7ad7e1194aeb4a9798d9cff60b20ac041533fa6db0a"}, + {file = "bitarray-3.8.1-cp314-cp314t-win_amd64.whl", hash = "sha256:9befda0dbd27ed95fba1c26be4bf98a49ba166b3c91beb5fc04364c130ce950c"}, + {file = "bitarray-3.8.1-cp314-cp314t-win_arm64.whl", hash = "sha256:4b7d7d10a1c82050efbb9a83d7a43974f70cf8f021afb86463b42e4ac4e5a46b"}, + {file = "bitarray-3.8.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fd6b5b6df14f98b2e7e474c1c7ea55fc32dcab038b3b34b76a591dec8ba50915"}, + {file = "bitarray-3.8.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:eb9fa02b9f5bbdb1d036a0c68999337793fa244528e0ce825e4b97cb7f7db99f"}, + {file = "bitarray-3.8.1-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6956ef0259a037f10da767741aca82925f6f9978bb6dceb5344e56ce0629ab07"}, + {file = "bitarray-3.8.1-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:78ab0d4166cf35c73054d1e04f224af1edc3cb4d75da8b6f74f4cff7c300f358"}, + {file = "bitarray-3.8.1-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:10c0caabff00ab0631d1e4fd25f56c7a5cf0f068426e5860d28dbbb972b509bf"}, + {file = "bitarray-3.8.1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:430fe5150816445c8294a36ce2612360037342d750cea179efe5de38c66670a8"}, + {file = "bitarray-3.8.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:c3387c314695f9790dce12fcf44357197ebf773651b6a4195f5e091cf500ae73"}, + {file = "bitarray-3.8.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:a681bbf9f94027d66e15974cd207cec1a2993837b9c45acf5f6b22a67632b1c2"}, + {file = "bitarray-3.8.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:4c7ce072191ba23a4a4876452ccd5f2a67b926e66a248d052d39e9969cd3ab47"}, + {file = "bitarray-3.8.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:03fe327549f177040b32f7faa736dc152be936d8b264d8b84f94c75f1379bfa1"}, + {file = "bitarray-3.8.1-cp38-cp38-win32.whl", hash = "sha256:2b9916867fa1ed815739e3e37dda458f397dee25a0e293b808839cfc2a396ca0"}, + {file = "bitarray-3.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:69c8298e8197b113f765a2ea60f49ceb8e1ea9eb308140b3cdc611e0d1de70b8"}, + {file = "bitarray-3.8.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cac0145491619287ff893853bf3ca4d98d5ef94b617271184a5af68a06ac301a"}, + {file = "bitarray-3.8.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fd68db1a0f5d9374a7b735414efe48d2b3ecbf0adea39299bb48030988f16149"}, + {file = "bitarray-3.8.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9adacf6fdadeeb96e6c902aef08d02d2f45429fdbf0a75b80307e435156066f8"}, + {file = "bitarray-3.8.1-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d7d5f7f6f80388ce94849775da5f4082ab5e123e259972961970e190d60f5d2b"}, + {file = "bitarray-3.8.1-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3a5e594b4be2dbfe021cee8d6d7d96e9bb19dee7ed7be351f43bca7a0619b978"}, + {file = "bitarray-3.8.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:190a3482818d69faef176171c7cae10d55cb4dd0c686b5aced7f592b5e5591c1"}, + {file = "bitarray-3.8.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4fb869faf4b484cb213199ced1e2732091559107637d429fc25d0a9731f5f630"}, + {file = "bitarray-3.8.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:70f70ea138e69ec3159e4a38fef52443cb8eb81388aeb241b273265ea16387c5"}, + {file = "bitarray-3.8.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:0256d57e294414bfe4fec4f852fd1d9ae361228c71b082332bf81c8b8fc69f80"}, + {file = "bitarray-3.8.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ef123b6aead12e0784f72970e8d94a96ac0d0aa4438c7ab9235e2f8669a0a5ae"}, + {file = "bitarray-3.8.1-cp39-cp39-win32.whl", hash = "sha256:c263ed9922942353a954cfbcd5f81b7626c0e20dc7f3e53d4926e8bc560ab845"}, + {file = "bitarray-3.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:7c133052737c7c75bfa49f5ba71918166fe988995b26a0d2f263a79bf8fed58a"}, + {file = "bitarray-3.8.1-cp39-cp39-win_arm64.whl", hash = "sha256:20e412527ec1aac7e3a6542b32a9c34bb852c954676b05008f0e3d58c390a0ac"}, + {file = "bitarray-3.8.1.tar.gz", hash = "sha256:f90bb3c680804ec9630bcf8c0965e54b4de84d33b17d7da57c87c30f0c64c6f5"}, +] + +[[package]] +name = "bitstring" +version = "4.4.0" +description = "Simple construction, analysis and modification of binary data." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "bitstring-4.4.0-py3-none-any.whl", hash = "sha256:feac49524fcf3ef27e6081e86f02b10d2adf6c3773bf22fbe0e7eea9534bc737"}, + {file = "bitstring-4.4.0.tar.gz", hash = "sha256:e682ac522bb63e041d16cbc9d0ca86a4f00194db16d0847c7efe066f836b2e37"}, +] + +[package.dependencies] +bitarray = ">=3.0.0,<4.0" +tibs = ">=0.5.6,<0.6" + +[[package]] +name = "cffi" +version = "2.0.0" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44"}, + {file = "cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453"}, + {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495"}, + {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5"}, + {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb"}, + {file = "cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a"}, + {file = "cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739"}, + {file = "cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe"}, + {file = "cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26"}, + {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9"}, + {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414"}, + {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743"}, + {file = "cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5"}, + {file = "cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5"}, + {file = "cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d"}, + {file = "cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d"}, + {file = "cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba"}, + {file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94"}, + {file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187"}, + {file = "cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18"}, + {file = "cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5"}, + {file = "cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6"}, + {file = "cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb"}, + {file = "cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26"}, + {file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c"}, + {file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b"}, + {file = "cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27"}, + {file = "cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75"}, + {file = "cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91"}, + {file = "cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5"}, + {file = "cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13"}, + {file = "cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b"}, + {file = "cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c"}, + {file = "cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef"}, + {file = "cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775"}, + {file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205"}, + {file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1"}, + {file = "cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f"}, + {file = "cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25"}, + {file = "cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad"}, + {file = "cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9"}, + {file = "cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d"}, + {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c"}, + {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8"}, + {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc"}, + {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592"}, + {file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512"}, + {file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4"}, + {file = "cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e"}, + {file = "cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6"}, + {file = "cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9"}, + {file = "cffi-2.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf"}, + {file = "cffi-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63"}, + {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2"}, + {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65"}, + {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322"}, + {file = "cffi-2.0.0-cp39-cp39-win32.whl", hash = "sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a"}, + {file = "cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9"}, + {file = "cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529"}, +] + +[package.dependencies] +pycparser = {version = "*", markers = "implementation_name != \"PyPy\""} + +[[package]] +name = "coincurve" +version = "20.0.0" +description = "Cross-platform Python CFFI bindings for libsecp256k1" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "coincurve-20.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d559b22828638390118cae9372a1bb6f6594f5584c311deb1de6a83163a0919b"}, + {file = "coincurve-20.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:33d7f6ebd90fcc550f819f7f2cce2af525c342aac07f0ccda46ad8956ad9d99b"}, + {file = "coincurve-20.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22d70dd55d13fd427418eb41c20fde0a20a5e5f016e2b1bb94710701e759e7e0"}, + {file = "coincurve-20.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46f18d481eaae72c169f334cde1fd22011a884e0c9c6adc3fdc1fd13df8236a3"}, + {file = "coincurve-20.0.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9de1ec57f43c3526bc462be58fb97910dc1fdd5acab6c71eda9f9719a5bd7489"}, + {file = "coincurve-20.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a6f007c44c726b5c0b3724093c0d4fb8e294f6b6869beb02d7473b21777473a3"}, + {file = "coincurve-20.0.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0ff1f3b81330db5092c24da2102e4fcba5094f14945b3eb40746456ceabdd6d9"}, + {file = "coincurve-20.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:82f7de97694d9343f26bd1c8e081b168e5f525894c12445548ce458af227f536"}, + {file = "coincurve-20.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:e905b4b084b4f3b61e5a5d58ac2632fd1d07b7b13b4c6d778335a6ca1dafd7a3"}, + {file = "coincurve-20.0.0-cp310-cp310-win_arm64.whl", hash = "sha256:3657bb5ed0baf1cf8cf356e7d44aa90a7902cc3dd4a435c6d4d0bed0553ad4f7"}, + {file = "coincurve-20.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:44087d1126d43925bf9a2391ce5601bf30ce0dba4466c239172dc43226696018"}, + {file = "coincurve-20.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ccf0ba38b0f307a9b3ce28933f6c71dc12ef3a0985712ca09f48591afd597c8"}, + {file = "coincurve-20.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:566bc5986debdf8572b6be824fd4de03d533c49f3de778e29f69017ae3fe82d8"}, + {file = "coincurve-20.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4d70283168e146f025005c15406086513d5d35e89a60cf4326025930d45013a"}, + {file = "coincurve-20.0.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:763c6122dd7d5e7a81c86414ce360dbe9a2d4afa1ca6c853ee03d63820b3d0c5"}, + {file = "coincurve-20.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f00c361c356bcea386d47a191bb8ac60429f4b51c188966a201bfecaf306ff7f"}, + {file = "coincurve-20.0.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4af57bdadd2e64d117dd0b33cfefe76e90c7a6c496a7b034fc65fd01ec249b15"}, + {file = "coincurve-20.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a26437b7cbde13fb6e09261610b788ca2a0ca2195c62030afd1e1e0d1a62e035"}, + {file = "coincurve-20.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:ed51f8bba35e6c7676ad65539c3dbc35acf014fc402101fa24f6b0a15a74ab9e"}, + {file = "coincurve-20.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:594b840fc25d74118407edbbbc754b815f1bba9759dbf4f67f1c2b78396df2d3"}, + {file = "coincurve-20.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4df4416a6c0370d777aa725a25b14b04e45aa228da1251c258ff91444643f688"}, + {file = "coincurve-20.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1ccc3e4db55abf3fc0e604a187fdb05f0702bc5952e503d9a75f4ae6eeb4cb3a"}, + {file = "coincurve-20.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac8335b1658a2ef5b3eb66d52647742fe8c6f413ad5b9d5310d7ea6d8060d40f"}, + {file = "coincurve-20.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7ac025e485a0229fd5394e0bf6b4a75f8a4f6cee0dcf6f0b01a2ef05c5210ff"}, + {file = "coincurve-20.0.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e46e3f1c21b3330857bcb1a3a5b942f645c8bce912a8a2b252216f34acfe4195"}, + {file = "coincurve-20.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:df9ff9b17a1d27271bf476cf3fa92df4c151663b11a55d8cea838b8f88d83624"}, + {file = "coincurve-20.0.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4155759f071375699282e03b3d95fb473ee05c022641c077533e0d906311e57a"}, + {file = "coincurve-20.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0530b9dd02fc6f6c2916716974b79bdab874227f560c422801ade290e3fc5013"}, + {file = "coincurve-20.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:eacf9c0ce8739c84549a89c083b1f3526c8780b84517ee75d6b43d276e55f8a0"}, + {file = "coincurve-20.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:52a67bfddbd6224dfa42085c88ad176559801b57d6a8bd30d92ee040de88b7b3"}, + {file = "coincurve-20.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:61e951b1d695b62376f60519a84c4facaf756eeb9c5aff975bea0942833f185d"}, + {file = "coincurve-20.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4e9e548db77f4ea34c0d748dddefc698adb0ee3fab23ed19f80fb2118dac70f6"}, + {file = "coincurve-20.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8cdbf0da0e0809366fdfff236b7eb6e663669c7b1f46361a4c4d05f5b7e94c57"}, + {file = "coincurve-20.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d72222b4ecd3952e8ffcbf59bc7e0d1b181161ba170b60e5c8e1f359a43bbe7e"}, + {file = "coincurve-20.0.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9add43c4807f0c17a940ce4076334c28f51d09c145cd478400e89dcfb83fb59d"}, + {file = "coincurve-20.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bcc94cceea6ec8863815134083e6221a034b1ecef822d0277cf6ad2e70009b7f"}, + {file = "coincurve-20.0.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ffbdfef6a6d147988eabaed681287a9a7e6ba45ecc0a8b94ba62ad0a7656d97"}, + {file = "coincurve-20.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:13335c19c7e5f36eaba2a53c68073d981980d7dc7abfee68d29f2da887ccd24e"}, + {file = "coincurve-20.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:7fbfb8d16cf2bea2cf48fc5246d4cb0a06607d73bb5c57c007c9aed7509f855e"}, + {file = "coincurve-20.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4870047704cddaae7f0266a549c927407c2ba0ec92d689e3d2b511736812a905"}, + {file = "coincurve-20.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:81ce41263517b0a9f43cd570c87720b3c13324929584fa28d2e4095969b6015d"}, + {file = "coincurve-20.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:572083ccce6c7b514d482f25f394368f4ae888f478bd0b067519d33160ea2fcc"}, + {file = "coincurve-20.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee5bc78a31a2f1370baf28aaff3949bc48f940a12b0359d1cd2c4115742874e6"}, + {file = "coincurve-20.0.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2895d032e281c4e747947aae4bcfeef7c57eabfd9be22886c0ca4e1365c7c1f"}, + {file = "coincurve-20.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d3e2f21957ada0e1742edbde117bb41758fa8691b69c8d186c23e9e522ea71cd"}, + {file = "coincurve-20.0.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c2baa26b1aad1947ca07b3aa9e6a98940c5141c6bdd0f9b44d89e36da7282ffa"}, + {file = "coincurve-20.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7eacc7944ddf9e2b7448ecbe84753841ab9874b8c332a4f5cc3b2f184db9f4a2"}, + {file = "coincurve-20.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:c293c095dc690178b822cadaaeb81de3cc0d28f8bdf8216ed23551dcce153a26"}, + {file = "coincurve-20.0.0-cp39-cp39-win_arm64.whl", hash = "sha256:11a47083a0b7092d3eb50929f74ffd947c4a5e7035796b81310ea85289088c7a"}, + {file = "coincurve-20.0.0.tar.gz", hash = "sha256:872419e404300302e938849b6b92a196fabdad651060b559dc310e52f8392829"}, +] + +[package.dependencies] +asn1crypto = "*" +cffi = ">=1.3.0" + +[package.extras] +dev = ["coverage", "pytest", "pytest-benchmark"] + +[[package]] +name = "cryptography" +version = "48.0.0" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +optional = false +python-versions = "!=3.9.0,!=3.9.1,>=3.9" +groups = ["main"] +files = [ + {file = "cryptography-48.0.0-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:0c558d2cdffd8f4bbb30fc7134c74d2ca9a476f830bb053074498fbc86f41ed6"}, + {file = "cryptography-48.0.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f5333311663ea94f75dd408665686aaf426563556bb5283554a3539177e03b8c"}, + {file = "cryptography-48.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7995ef305d7165c3f11ae07f2517e5a4f1d5c18da1376a0a9ed496336b69e5f3"}, + {file = "cryptography-48.0.0-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:40ba1f85eaa6959837b1d51c9767e230e14612eea4ef110ee8854ada22da1bf5"}, + {file = "cryptography-48.0.0-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:369a6348999f94bbd53435c894377b20ab95f25a9065c283570e70150d8abc3c"}, + {file = "cryptography-48.0.0-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a0e692c683f4df67815a2d258b324e66f4738bd7a96a218c826dce4f4bd05d8f"}, + {file = "cryptography-48.0.0-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:18349bbc56f4743c8b12dc32e2bccb2cf83ee8b69a3bba74ef8ae857e26b3d25"}, + {file = "cryptography-48.0.0-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:7e8eac43dfca5c4cccc6dad9a80504436fca53bb9bc3100a2386d730fbe6b602"}, + {file = "cryptography-48.0.0-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:9ccdac7d40688ecb5a3b4a604b8a88c8002e3442d6c60aead1db2a89a041560c"}, + {file = "cryptography-48.0.0-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:bd72e68b06bb1e96913f97dd4901119bc17f39d4586a5adf2d3e47bc2b9d58b5"}, + {file = "cryptography-48.0.0-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:59baa2cb386c4f0b9905bd6eb4c2a79a69a128408fd31d32ca4d7102d4156321"}, + {file = "cryptography-48.0.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9249e3cd978541d665967ac2cb2787fd6a62bddf1e75b3e347a594d7dacf4f74"}, + {file = "cryptography-48.0.0-cp311-abi3-win32.whl", hash = "sha256:9c459db21422be75e2809370b829a87eb37f74cd785fc4aa9ea1e5f43b47cda4"}, + {file = "cryptography-48.0.0-cp311-abi3-win_amd64.whl", hash = "sha256:5b012212e08b8dd5edc78ef54da83dd9892fd9105323b3993eff6bea65dc21d7"}, + {file = "cryptography-48.0.0-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:3cb07a3ed6431663cd321ea8a000a1314c74211f823e4177fefa2255e057d1ec"}, + {file = "cryptography-48.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8c7378637d7d88016fa6791c159f698b3d3eed28ebf844ac36b9dc04a14dae18"}, + {file = "cryptography-48.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc90c0b39b2e3c65ef52c804b72e3c58f8a04ab2a1871272798e5f9572c17d20"}, + {file = "cryptography-48.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:76341972e1eff8b4bea859f09c0d3e64b96ce931b084f9b9b7db8ef364c30eff"}, + {file = "cryptography-48.0.0-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:55b7718303bf06a5753dcdccf2f3945cf18ad7bffde41b61226e4db31ab89a9c"}, + {file = "cryptography-48.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:a64697c641c7b1b2178e573cbc31c7c6684cd56883a478d75143dbb7118036db"}, + {file = "cryptography-48.0.0-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:561215ea3879cb1cbbf272867e2efda62476f240fb58c64de6b393ae19246741"}, + {file = "cryptography-48.0.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:ad64688338ed4bc1a6618076ba75fd7194a5f1797ac60b47afe926285adb3166"}, + {file = "cryptography-48.0.0-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:906cbf0670286c6e0044156bc7d4af9cbb0ef6db9f73e52c3ec56ba6bdde5336"}, + {file = "cryptography-48.0.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:ea8990436d914540a40ab24b6a77c0969695ed52f4a4874c5137ccf7045a7057"}, + {file = "cryptography-48.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c18684a7f0cc9a3cb60328f496b8e3372def7c5d2df39ac267878b05565aaaae"}, + {file = "cryptography-48.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9be5aafa5736574f8f15f262adc81b2a9869e2cfe9014d52a44633905b40d52c"}, + {file = "cryptography-48.0.0-cp314-cp314t-win32.whl", hash = "sha256:c17dfe85494deaeddc5ce251aebd1d60bbe6afc8b62071bb0b469431a000124f"}, + {file = "cryptography-48.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27241b1dc9962e056062a8eef1991d02c3a24569c95975bd2322a8a52c6e5e12"}, + {file = "cryptography-48.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:58d00498e8933e4a194f3076aee1b4a97dfec1a6da444535755822fe5d8b0b86"}, + {file = "cryptography-48.0.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:614d0949f4790582d2cc25553abd09dd723025f0c0e7c67376a1d77196743d6e"}, + {file = "cryptography-48.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7ce4bfae76319a532a2dc68f82cc32f5676ee792a983187dac07183690e5c66f"}, + {file = "cryptography-48.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:2eb992bbd4661238c5a397594c83f5b4dc2bc5b848c365c8f991b6780efcc5c7"}, + {file = "cryptography-48.0.0-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:22a5cb272895dce158b2cacdfdc3debd299019659f42947dbdac6f32d68fe832"}, + {file = "cryptography-48.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2b4d59804e8408e2fea7d1fbaf218e5ec984325221db76e6a241a9abd6cdd95c"}, + {file = "cryptography-48.0.0-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:984a20b0f62a26f48a3396c72e4bc34c66e356d356bf370053066b3b6d54634a"}, + {file = "cryptography-48.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:5a5ed8fde7a1d09376ca0b40e68cd59c69fe23b1f9768bd5824f54681626032a"}, + {file = "cryptography-48.0.0-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:8cd666227ef7af430aa5914a9910e0ddd703e75f039cef0825cd0da71b6b711a"}, + {file = "cryptography-48.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:9071196d81abc88b3516ac8cdfad32e2b66dd4a5393a8e68a961e9161ddc6239"}, + {file = "cryptography-48.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1e2d54c8be6152856a36f0882ab231e70f8ec7f14e93cf87db8a2ed056bf160c"}, + {file = "cryptography-48.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a5da777e32ffed6f85a7b2b3f7c5cbc88c146bfcd0a1d7baf5fcc6c52ee35dd4"}, + {file = "cryptography-48.0.0-cp39-abi3-win32.whl", hash = "sha256:77a2ccbbe917f6710e05ba9adaa25fb5075620bf3ea6fb751997875aff4ae4bd"}, + {file = "cryptography-48.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:16cd65b9330583e4619939b3a3843eec1e6e789744bb01e7c7e2e62e33c239c8"}, + {file = "cryptography-48.0.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:84cf79f0dc8b36ac5da873481716e87aef31fcfa0444f9e1d8b4b2cece142855"}, + {file = "cryptography-48.0.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:fdfef35d751d510fcef5252703621574364fec16418c4a1e5e1055248401054b"}, + {file = "cryptography-48.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:0890f502ddf7d9c6426129c3f49f5c0a39278ed7cd6322c8755ffca6ee675a13"}, + {file = "cryptography-48.0.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:ecde28a596bead48b0cfd2a1b4416c3d43074c2d785e3a398d7ec1fc4d0f7fbb"}, + {file = "cryptography-48.0.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:4defde8685ae324a9eb9d818717e93b4638ef67070ac9bc15b8ca85f63048355"}, + {file = "cryptography-48.0.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:db63bf618e5dea46c07de12e900fe1cdd2541e6dc9dbae772a70b7d4d4765f6a"}, + {file = "cryptography-48.0.0.tar.gz", hash = "sha256:5c3932f4436d1cccb036cb0eaef46e6e2db91035166f1ad6505c3c9d5a635920"}, +] + +[package.dependencies] +cffi = {version = ">=2.0.0", markers = "platform_python_implementation != \"PyPy\""} +typing-extensions = {version = ">=4.13.2", markers = "python_full_version < \"3.11.0\""} + +[package.extras] +ssh = ["bcrypt (>=3.1.5)"] + +[[package]] +name = "pycparser" +version = "3.0" +description = "C parser in Python" +optional = false +python-versions = ">=3.10" +groups = ["main"] +markers = "implementation_name != \"PyPy\"" +files = [ + {file = "pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992"}, + {file = "pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29"}, +] + +[[package]] +name = "pyln-bolt7" +version = "1.0.246" +description = "BOLT7" +optional = false +python-versions = ">=3.7,<4.0" +groups = ["main"] +files = [ + {file = "pyln-bolt7-1.0.246.tar.gz", hash = "sha256:2b53744fa21c1b12d2c9c9df153651b122e38fa65d4a5c3f2957317ee148e089"}, + {file = "pyln_bolt7-1.0.246-py3-none-any.whl", hash = "sha256:54d48ec27fdc8751762cb068b0a9f2757a58fb57933c6d8f8255d02c27eb63c5"}, +] + +[[package]] +name = "pyln-client" +version = "23.11" +description = "Client library and plugin library for Core Lightning" +optional = false +python-versions = ">=3.8,<4.0" +groups = ["main"] +files = [ + {file = "pyln_client-23.11-py3-none-any.whl", hash = "sha256:98ff5a24232e7041970e7f1d631fd1e5044b3bb91c7cfae6f66d3894c82db2f0"}, + {file = "pyln_client-23.11.tar.gz", hash = "sha256:4102792bbdca545d5fbfa1fb1371222744e7157ec3d2c162edb03e8786db9823"}, +] + +[package.dependencies] +pyln-bolt7 = ">=1.0" +pyln-proto = ">=23" + +[[package]] +name = "pyln-proto" +version = "26.6.1" +description = "This package implements some of the Lightning Network protocol in pure python. It is intended for protocol testing and some minor tooling only. It is not deemed secure enough to handle any amount of real funds (you have been warned!)." +optional = false +python-versions = "<4.0,>=3.10" +groups = ["main"] +files = [ + {file = "pyln_proto-26.6.1-py3-none-any.whl", hash = "sha256:834ee3b7c68604cb2a95baef45e6fd470f4ede1d6d1c6172e761d5658a5517c9"}, + {file = "pyln_proto-26.6.1.tar.gz", hash = "sha256:b56b3577e5b6b3488cd232b6191116323758aa51835fe925853f0a69576d51b7"}, +] + +[package.dependencies] +base58 = ">=2.1.1" +bitstring = ">=4.3.0" +coincurve = "20.0.0" +cryptography = ">=46" +pysocks = ">=1" + +[[package]] +name = "pysocks" +version = "1.7.1" +description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["main"] +files = [ + {file = "PySocks-1.7.1-py27-none-any.whl", hash = "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299"}, + {file = "PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5"}, + {file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"}, +] + +[[package]] +name = "tibs" +version = "0.5.7" +description = "A sleek Python library for binary data." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "tibs-0.5.7-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:01ea5258bdf942d21560dc07d532082cd04f07cfef65fedd58ae84f7d0d2562a"}, + {file = "tibs-0.5.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f5eea45851c960628a2bd29847765d55e19a687c5374456ad2c8cf6410eb1efa"}, + {file = "tibs-0.5.7-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a9feed5931b881809a950eca0e01e757113e2383a2af06a3e6982f110c869e2"}, + {file = "tibs-0.5.7-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:501728d096e10d9a165aa526743d47418a6bbfd7b084fa47ecb22be7641d3edb"}, + {file = "tibs-0.5.7-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77103a9f1af72ac4cf5006828d0fb21578d19ce55fd990e9a1c8e46fd549561f"}, + {file = "tibs-0.5.7-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f95d5db62960205a1e9eba73ce67dc14e7366ae080cd4e5b6f005ebd90faf02"}, + {file = "tibs-0.5.7-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ace018a057459e3dccd06a4aae1c5c8cd57e352b263dcef534ae39bf3e03b5cf"}, + {file = "tibs-0.5.7-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2a618de62004d9217d2d2ab0f7f9bbdd098c12642dc01f07b3fb00f0b5f3131a"}, + {file = "tibs-0.5.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42725200f1b02687ed6e6a1c01e0ec150dc829d21d901ffc74cc0ac4d821f57f"}, + {file = "tibs-0.5.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:63255749f937c5e6fedcc7d54e7bd359aef711017e6855f373b0510a14ee2215"}, + {file = "tibs-0.5.7-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:4b7510235379368b7523f624d46e0680f3706e3a3965877a6583cdcb598b8bac"}, + {file = "tibs-0.5.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29480bf03e3372a5f9cc59ea0541f76f8efd696d4f0d214715e94247c342a037"}, + {file = "tibs-0.5.7-cp314-cp314t-win32.whl", hash = "sha256:b9535dc7b7484904a58b51bd8e64da7efbf1d8466ff7e84ed1d78f4ddc561c99"}, + {file = "tibs-0.5.7-cp314-cp314t-win_amd64.whl", hash = "sha256:1906729038b85c3b4c040aa28a456d85bc976d0c5007177350eb73374ffa0fd0"}, + {file = "tibs-0.5.7-cp314-cp314t-win_arm64.whl", hash = "sha256:7d6592ed93c6748acd39df484c1ee24d40ee247c2a20ca38ba03363506fd24f3"}, + {file = "tibs-0.5.7-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:859f05315ffb307d3474c505d694f3a547f00730a024c982f5f60316a5505b3c"}, + {file = "tibs-0.5.7-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:a883ca13a922a66b2c1326a9c188123a574741a72510a4bf52fd6f97db191e44"}, + {file = "tibs-0.5.7-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f70bd250769381c73110d6f24feaf8b6fcd44f680b3cb28a20ea06db3d04fb6f"}, + {file = "tibs-0.5.7-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76746f01b3db9dbd802f5e615f11f68df7a29ecef521b082dca53f3fa7d0084f"}, + {file = "tibs-0.5.7-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:847709c108800ad6a45efaf9a040628278956938a4897f7427a2587013dc3b98"}, + {file = "tibs-0.5.7-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad61df93b50f875b277ab736c5d37b6bce56f9abce489a22f4e02d9daa2966e3"}, + {file = "tibs-0.5.7-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e13b9c7ff2604b0146772025e1ac6f85c8c625bf6ac73736ff671eaf357dda41"}, + {file = "tibs-0.5.7-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0a7ce857ef05c59dc61abadc31c4b9b1e3c62f9e5fb29217988c308936aea71e"}, + {file = "tibs-0.5.7-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1d5521cc6768bfa6282a0c591ba06b079ab91b5c7d5696925ad2abac59779a54"}, + {file = "tibs-0.5.7-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:477608f9b87e24a22ab6d50b81da04a5cb59bfa49598ff7ec5165035a18fb392"}, + {file = "tibs-0.5.7-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:ac0aa2aae38f7325c91c261ce1d18f769c4c7033c98d6ea3ea5534585cf16452"}, + {file = "tibs-0.5.7-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1b56583db148e5094d781c3d746815dbcbb6378c6f813c8ce291efd4ab21da8b"}, + {file = "tibs-0.5.7-cp38-abi3-win32.whl", hash = "sha256:d4f3ff613d486650816bc5516760c0382a2cc0ca8aeddd8914d011bc3b81d9a2"}, + {file = "tibs-0.5.7-cp38-abi3-win_amd64.whl", hash = "sha256:a61d36155f8ab8642e1b6744e13822f72050fc7ec4f86ec6965295afa04949e2"}, + {file = "tibs-0.5.7-cp38-abi3-win_arm64.whl", hash = "sha256:130bc68ff500fc8185677df7a97350b5d5339e6ba7e325bc3031337f6424ede7"}, + {file = "tibs-0.5.7.tar.gz", hash = "sha256:173dfbecb2309edd9771f453580c88cf251e775613461566b23dbd756b3d54cb"}, +] + +[package.extras] +dev = ["build", "hypothesis (>=6.151.0)", "pyright (>=1.1.389)", "pytest (>=9.0.0)", "pytest-benchmark (>=5.2.0)"] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +description = "Backported and Experimental Type Hints for Python 3.9+" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version == \"3.10\"" +files = [ + {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, + {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, +] + +[metadata] +lock-version = "2.1" +python-versions = "^3.10" +content-hash = "b48950ea4d9650c3a44225fb9c3a1678fcb8e2e8fb1a2a4f3319483634a36cbc" diff --git a/tests/data/recklessrepo/lightningd/testplugreqopts/requirements.txt b/tests/data/recklessrepo/lightningd/testplugreqopts/requirements.txt new file mode 100644 index 000000000000..0096004b4a8d --- /dev/null +++ b/tests/data/recklessrepo/lightningd/testplugreqopts/requirements.txt @@ -0,0 +1 @@ +pyln-client diff --git a/tests/data/recklessrepo/lightningd/testplugreqopts/testplugreqopts.py b/tests/data/recklessrepo/lightningd/testplugreqopts/testplugreqopts.py new file mode 100644 index 000000000000..959a7e70f9fc --- /dev/null +++ b/tests/data/recklessrepo/lightningd/testplugreqopts/testplugreqopts.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 +"""Plugin that requires a mandatory option. Exits immediately when the +option is absent - as happens when reckless runs the plugin standalone +outside of a CLN connection.""" + +import sys + +from pyln.client import Plugin + +plugin = Plugin() + + +@plugin.init() +def init(options, configuration, plugin, **kwargs): + if "required-opt" not in options: + plugin.log("required option 'required-opt' is not configured") + sys.exit(1) + plugin.log("testplugreqopts initialized") + + +plugin.add_option("required-opt", None, "required option") +plugin.run() diff --git a/tests/data/recklessrepo/rkls_api_lightningd_plugins.json b/tests/data/recklessrepo/rkls_api_lightningd_plugins.json deleted file mode 100644 index a91c4844d898..000000000000 --- a/tests/data/recklessrepo/rkls_api_lightningd_plugins.json +++ /dev/null @@ -1,38 +0,0 @@ -[ - { - "name": "testplugpass", - "path": "testplugpass", - "url": "https://api.github.com/repos/lightningd/plugins/contents/webhook?ref=master", - "html_url": "https://github.com/lightningd/plugins/tree/master/testplugpass", - "git_url": "https://api.github.com/repos/lightningd/plugins/git/trees/testplugpass", - "download_url": null, - "type": "dir" - }, - { - "name": "testpluguv", - "path": "testpluguv", - "url": "https://api.github.com/repos/lightningd/plugins/contents/webhook?ref=master", - "html_url": "https://github.com/lightningd/plugins/tree/master/testpluguv", - "git_url": "https://api.github.com/repos/lightningd/plugins/git/trees/testpluguv", - "download_url": null, - "type": "dir" - }, - { - "name": "testplugfail", - "path": "testplugfail", - "url": "https://api.github.com/repos/lightningd/plugins/contents/testplugfail?ref=master", - "html_url": "https://github.com/lightningd/plugins/tree/master/testplugfail", - "git_url": "https://api.github.com/repos/lightningd/plugins/git/trees/testplugfail", - "download_url": null, - "type": "dir" - }, - { - "name": "testplugpyproj", - "path": "testplugpyproj", - "url": "https://api.github.com/repos/lightningd/plugins/contents/webhook?ref=master", - "html_url": "https://github.com/lightningd/plugins/tree/master/testplugpyproj", - "git_url": "https://api.github.com/repos/lightningd/plugins/git/trees/testplugpyproj", - "download_url": null, - "type": "dir" - } -] diff --git a/tests/rkls_github_canned_server.py b/tests/rkls_github_canned_server.py deleted file mode 100644 index a01366f9a8cb..000000000000 --- a/tests/rkls_github_canned_server.py +++ /dev/null @@ -1,43 +0,0 @@ -import flask -import json -import os -from markupsafe import escape - - -def create_app(test_config=None): - app = flask.Flask(__name__) - - @app.route("/api/repos///contents/") - def github_plugins_repo_api(github_user, github_repo): - '''This emulates api.github.com calls to lightningd/plugins''' - user = escape(github_user) - repo = escape(github_repo) - canned_api = os.environ.get('REDIR_GITHUB') + f'/rkls_api_{user}_{repo}.json' - with open(canned_api, 'rb') as f: - canned_data = f.read(-1) - print(f'serving canned api data from {canned_api}') - resp = flask.Response(response=canned_data, - headers={'Content-Type': 'application/json; charset=utf-8'}) - return resp - - @app.route("/api/repos///git/trees/") - def github_plugin_tree_api(github_user, github_repo, plugin_name): - dir_json = \ - { - "url": f"https://api.github.com/repos/{github_user}/{github_repo}/git/trees/{plugin_name}", - "tree": [] - } - # FIXME: Pull contents from directory - for file in os.listdir(f'tests/data/recklessrepo/{github_user}/{plugin_name}'): - dir_json["tree"].append({"path": file}) - resp = flask.Response(response=json.dumps(dir_json), - headers={'Content-Type': 'application/json; charset=utf-8'}) - return resp - - return app - - -if __name__ == '__main__': - app = create_app() - with app.app_context(): - app.run(debug=True) diff --git a/tests/test_reckless.py b/tests/test_reckless.py index c7c7f426bccc..28362c371814 100644 --- a/tests/test_reckless.py +++ b/tests/test_reckless.py @@ -1,110 +1,90 @@ +import json + +from pyln.client.lightning import RpcError + from fixtures import * # noqa: F401,F403 import subprocess -from pathlib import PosixPath, Path -import socket -from pyln.testing.utils import TIMEOUT, VALGRIND -import pytest +from pathlib import Path +from pyln.testing.utils import VALGRIND import os import re -import shutil import time import unittest +import pytest @pytest.fixture(autouse=True) def canned_github_server(directory): global NETWORK - NETWORK = os.environ.get('TEST_NETWORK') + NETWORK = os.environ.get("TEST_NETWORK") if NETWORK is None: - NETWORK = 'regtest' + NETWORK = "regtest" FILE_PATH = Path(os.path.dirname(os.path.realpath(__file__))) - if os.environ.get('LIGHTNING_CLI') is None: - os.environ['LIGHTNING_CLI'] = str(FILE_PATH.parent / 'cli/lightning-cli') - print('LIGHTNING_CALL: ', os.environ.get('LIGHTNING_CLI')) - # Use socket to provision a random free port - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - sock.bind(('localhost', 0)) - free_port = str(sock.getsockname()[1]) - sock.close() + if os.environ.get("LIGHTNING_CLI") is None: + os.environ["LIGHTNING_CLI"] = str(FILE_PATH.parent / "cli/lightning-cli") + print("LIGHTNING_CALL: ", os.environ.get("LIGHTNING_CLI")) global my_env my_env = os.environ.copy() - # This tells reckless to redirect to the canned server rather than github. - my_env['REDIR_GITHUB_API'] = f'http://127.0.0.1:{free_port}/api' - my_env['REDIR_GITHUB'] = directory - my_env['FLASK_RUN_PORT'] = free_port - my_env['FLASK_APP'] = str(FILE_PATH / 'rkls_github_canned_server') - server = subprocess.Popen(["python3", "-m", "flask", "run"], - env=my_env) + os.environ["REDIR_GITHUB"] = os.path.join(directory, "lightningd") # Generate test plugin repository to test reckless against. repo_dir = os.path.join(directory, "lightningd") os.mkdir(repo_dir, 0o777) - plugins_path = str(FILE_PATH / 'data/recklessrepo/lightningd') + plugins_path = str(FILE_PATH / "data/recklessrepo/lightningd") # Create requirements.txt file for the testpluginpass # with pyln-client installed from the local source - requirements_file_path = os.path.join(plugins_path, 'testplugpass', 'requirements.txt') - with open(requirements_file_path, 'w') as f: - pyln_client_path = os.path.abspath(os.path.join(FILE_PATH, '..', 'contrib', 'pyln-client')) + requirements_file_path = os.path.join( + plugins_path, "testplugpass", "requirements.txt" + ) + with open(requirements_file_path, "w") as f: + pyln_client_path = os.path.abspath( + os.path.join(FILE_PATH, "..", "contrib", "pyln-client") + ) f.write(f"pyln-client @ file://{pyln_client_path}\n") # This lets us temporarily set .gitconfig user info in order to commit - my_env['HOME'] = directory - with open(os.path.join(directory, '.gitconfig'), 'w') as conf: - conf.write(("[user]\n" - "\temail = reckless@example.com\n" - "\tname = reckless CI\n" - "\t[init]\n" - "\tdefaultBranch = master")) - - with open(os.path.join(directory, '.gitconfig'), 'r') as conf: + my_env["HOME"] = directory + with open(os.path.join(directory, ".gitconfig"), "w") as conf: + conf.write( + ( + "[user]\n" + "\temail = reckless@example.com\n" + "\tname = reckless CI\n" + "\t[init]\n" + "\tdefaultBranch = master" + ) + ) + + with open(os.path.join(directory, ".gitconfig"), "r") as conf: print(conf.readlines()) # Bare repository must be initialized prior to setting other git env vars - subprocess.check_output(['git', 'init', '--bare', 'plugins'], cwd=repo_dir, - env=my_env) - - my_env['GIT_DIR'] = os.path.join(repo_dir, 'plugins') - my_env['GIT_WORK_TREE'] = repo_dir - my_env['GIT_INDEX_FILE'] = os.path.join(repo_dir, 'scratch-index') - repo_initialization = (f'cp -r {plugins_path}/* .;' - 'git add --all;' - 'git commit -m "initial commit - autogenerated by test_reckless.py";') - tag_and_update = ('git tag v1;' - "sed -i 's/v1/v2/g' testplugpass/testplugpass.py;" - 'git add testplugpass/testplugpass.py;' - 'git commit -m "update to v2";' - 'git tag v2;') - subprocess.check_output([repo_initialization], env=my_env, shell=True, - cwd=repo_dir) - subprocess.check_output([tag_and_update], env=my_env, - shell=True, cwd=repo_dir) - del my_env['HOME'] - del my_env['GIT_DIR'] - del my_env['GIT_WORK_TREE'] - del my_env['GIT_INDEX_FILE'] - # We also need the github api data for the repo which will be served via http - shutil.copyfile(str(FILE_PATH / 'data/recklessrepo/rkls_api_lightningd_plugins.json'), os.path.join(directory, 'rkls_api_lightningd_plugins.json')) - - # Flask can be slow to start listening under CI load; make sure the - # first reckless invocation doesn't race it and get connection refused. - start = time.time() - while True: - assert server.poll() is None, "canned github server died" - try: - with socket.create_connection(('127.0.0.1', int(free_port)), - timeout=5): - break - except OSError: - if time.time() >= start + TIMEOUT: - server.terminate() - raise RuntimeError("canned github server never started listening") - time.sleep(0.2) + subprocess.check_output(["git", "init"], cwd=repo_dir, env=my_env) + + repo_initialization = ( + f"cp -r {plugins_path}/* .;" + "git add --all;" + 'git commit -m "initial commit - autogenerated by test_reckless.py";' + "git remote add origin ./;" + "git fetch origin;" + "git checkout -B master origin/master;" + ) + tag_and_update = ( + "git tag v1;" + "sed -i.bak 's/v1/v2/g' testplugpass/testplugpass.py;" + "rm -f testplugpass/testplugpass.py.bak;" + "git add testplugpass/testplugpass.py;" + 'git commit -m "update to v2";' + "git tag v2;" + ) + subprocess.check_output([repo_initialization], env=my_env, shell=True, cwd=repo_dir) + subprocess.check_output([tag_and_update], env=my_env, shell=True, cwd=repo_dir) + del my_env["HOME"] yield # Delete requirements.txt from the testplugpass directory - with open(requirements_file_path, 'w') as f: - f.write(f"pyln-client\n\n") - server.terminate() + with open(requirements_file_path, "w") as f: + f.write("pyln-client\n\n") class RecklessResult: @@ -115,7 +95,7 @@ def __init__(self, process, returncode, stdout, stderr): self.stderr = stderr def __repr__(self): - return f'self.returncode, self.stdout, self.stderr' + return "self.returncode, self.stdout, self.stderr" def search_stdout(self, regex): """return the matching regex line from reckless output.""" @@ -126,286 +106,352 @@ def search_stdout(self, regex): matching.append(line) return matching - def check_stderr(self): - def output_okay(out): - for warning in ['[notice]', 'WARNING:', 'npm WARN', - 'npm notice', 'DEPRECATION:', 'Creating virtualenv', - 'config file not found:', 'press [Y]']: - if out.startswith(warning): - return True - return False - for e in self.stderr: - if len(e) < 1: - continue - # Don't err on verbosity from pip, npm - if not output_okay(e): - raise Exception(f'reckless stderr contains `{e}`') - - -def reckless(cmds: list, dir: PosixPath = None, - autoconfirm=True, timeout: int = 60): - '''Call the reckless executable, optionally with a directory.''' - if dir is not None: - cmds.insert(0, "-l") - cmds.insert(1, str(dir)) - cmds.insert(0, "tools/reckless") - if autoconfirm: - process_input = 'Y\n' - else: - process_input = None - r = subprocess.run(cmds, capture_output=True, encoding='utf-8', env=my_env, - input=process_input, timeout=timeout) - stdout = r.stdout.splitlines() - stderr = r.stderr.splitlines() - print(" ".join(r.args), "\n") - print("***RECKLESS STDOUT***") - for l in stdout: - print(l) - print('\n') - print("***RECKLESS STDERR***") - for l in stderr: - print(l) - print('\n') - return RecklessResult(r, r.returncode, stdout, stderr) - - -def get_reckless_node(node_factory): - '''This may be unnecessary, but a preconfigured lightning dir - is useful for reckless testing.''' - node = node_factory.get_node(options={}, start=False) - return node - - -def test_basic_help(): - '''Validate that argparse provides basic help info. - This requires no config options passed to reckless.''' - r = reckless(["-h"]) - assert r.returncode == 0 - assert r.search_stdout("positional arguments:") - assert r.search_stdout("options:") or r.search_stdout("optional arguments:") - - -def test_contextual_help(node_factory): - n = get_reckless_node(node_factory) - for subcmd in ['install', 'uninstall', 'search', - 'enable', 'disable', 'source']: - r = reckless([subcmd, "-h"], dir=n.lightning_dir) - assert r.returncode == 0 - assert r.search_stdout("positional arguments:") + +def check_stderr(logs): + def output_okay(out): + for warning in [ + "[notice]", + "WARNING:", + "npm WARN", + "npm notice", + "DEPRECATION:", + "Creating virtualenv", + "config file not found:", + "press [Y]", + ]: + if out.startswith(warning): + return True + return False + + for e in logs: + if len(e) < 1: + continue + # Don't err on verbosity from pip, npm + if not output_okay(e): + raise Exception(f"reckless stderr contains `{e}`") + + +SUBCOMMANDS = [ + "install", + "uninstall", + "listavailable", + "enable", + "disable", + "source", + "update", + "listinstalled", +] + + +def test_help(node_factory): + """Validate that reckless provides overall and subcommand help.""" + node = node_factory.get_node(options={}) + + r = node.rpc.call("reckless", ["help"], filter={"format-hint": True}) + assert "Usage: reckless [OPTIONS] [COMMAND]" in r["result"] + for subcommand in SUBCOMMANDS: + assert subcommand in r["result"] + + r = node.rpc.call("reckless", [], filter={"format-hint": True}) + assert "Usage: reckless [OPTIONS] [COMMAND]" in r["result"] + for subcommand in SUBCOMMANDS: + assert subcommand in r["result"] + + for subcmd in SUBCOMMANDS: + r = node.rpc.call("reckless", ["help", subcmd], filter={"format-hint": True}) + assert f"Usage: {subcmd}" in r["result"] def test_sources(node_factory): """add additional sources and search through them""" - n = get_reckless_node(node_factory) - r = reckless(["source", "-h"], dir=n.lightning_dir) - assert r.returncode == 0 - r = reckless(["source", "list"], dir=n.lightning_dir) - print(r.stdout) - assert r.returncode == 0 + n = node_factory.get_node(options={}) + r = n.rpc.call("reckless", ["source", "list", "-v"]) + print(r) + assert "https://github.com/lightningd/plugins" in r["sources"] print(n.lightning_dir) - reckless_dir = Path(n.lightning_dir) / 'reckless' + reckless_dir = Path(n.lightning_dir) / "reckless" print(dir(reckless_dir)) - assert (reckless_dir / '.sources').exists() + assert (reckless_dir / ".sources").exists() print(os.listdir(reckless_dir)) - print(reckless_dir / '.sources') - plugin_dir = str(os.path.join(n.lightning_dir, '..', 'lightningd')) - r = reckless([f"--network={NETWORK}", "-v", "source", "add", - f'{plugin_dir}/testplugfail'], - dir=n.lightning_dir) - r = reckless([f"--network={NETWORK}", "-v", "source", "add", - f'{plugin_dir}/testplugpass'], - dir=n.lightning_dir) - with open(reckless_dir / '.sources') as sources: + print(reckless_dir / ".sources") + plugin_dir = str(os.path.join(n.lightning_dir, "..", "lightningd")) + r = n.rpc.call("reckless", ["source", "-v", "add", f"{plugin_dir}/testplugfail"]) + r = n.rpc.call("reckless", ["source", "-v", "add", f"{plugin_dir}/testplugpass"]) + with open(reckless_dir / ".sources") as sources: contents = [c.strip() for c in sources.readlines()] - print('contents:', contents) - assert 'https://github.com/lightningd/plugins' in contents - assert f'{plugin_dir}/testplugfail' in contents - assert f'{plugin_dir}/testplugpass' in contents - r = reckless([f"--network={NETWORK}", "-v", "source", "remove", - f'{plugin_dir}/testplugfail'], - dir=n.lightning_dir) - with open(reckless_dir / '.sources') as sources: + print("contents:", contents) + assert "https://github.com/lightningd/plugins" in contents + assert f"{plugin_dir}/testplugfail" in contents + assert f"{plugin_dir}/testplugpass" in contents + r = n.rpc.call( + "reckless", + [ + "source", + "-v", + "remove", + f"{plugin_dir}/testplugfail", + ], + ) + print(r) + with open(reckless_dir / ".sources") as sources: contents = [c.strip() for c in sources.readlines()] - print('contents:', contents) - assert f'{plugin_dir}/testplugfail' not in contents - assert f'{plugin_dir}/testplugpass' in contents - - -def test_search(node_factory): - """add additional sources and search through them""" - n = get_reckless_node(node_factory) - r = reckless([f"--network={NETWORK}", "search", "testplugpass"], dir=n.lightning_dir) - assert r.returncode == 0 - assert r.search_stdout('found testplugpass in source: https://github.com/lightningd/plugins') + print("contents:", contents) + assert f"{plugin_dir}/testplugfail" not in contents + assert f"{plugin_dir}/testplugpass" in contents -def test_search_partial_match(node_factory): - """test that partial/substring search returns multiple matches""" - n = get_reckless_node(node_factory) +def test_list_partial_match(node_factory): + """test that partial/substring listavailable returns matches""" + n = node_factory.get_node(options={}) # Search for partial name "testplug" - should find all test plugins - r = reckless([f"--network={NETWORK}", "search", "testplug"], dir=n.lightning_dir) + r = n.rpc.call("reckless", ["listavailable", "-v", "testplug"]) # Should show the "Plugins matching" header - assert r.search_stdout("Plugins matching 'testplug':") + assert "INFO: Plugins matching 'testplug':" in r["log"] # Should list multiple plugins (all start with "testplug") - assert r.search_stdout('testplugpass') - assert r.search_stdout('testplugfail') - assert r.search_stdout('testplugpyproj') - assert r.search_stdout('testpluguv') + assert any("testplugpass" in line for line in r["log"]) + assert any("testplugfail" in line for line in r["log"]) + assert any("testplugpyproj" in line for line in r["log"]) + assert any("testpluguv" in line for line in r["log"]) # Search for "pass" - should find testplugpass - r = reckless([f"--network={NETWORK}", "search", "pass"], dir=n.lightning_dir) - assert r.search_stdout("Plugins matching 'pass':") - assert r.search_stdout('testplugpass') + r = n.rpc.call("reckless", ["listavailable", "-v", "pass"]) + assert "INFO: Plugins matching 'pass':" in r["log"] + assert any("testplugpass" in line for line in r["log"]) # Should not find plugins without "pass" in name - assert not r.search_stdout('testplugfail') + assert all("testplugfail" not in line for line in r["log"]) # Search for something that doesn't exist - r = reckless([f"--network={NETWORK}", "search", "nonexistent"], dir=n.lightning_dir) - assert r.search_stdout("Search exhausted all sources") + r = n.rpc.call("reckless", ["listavailable", "-v", "nonexistent"]) + assert "INFO: Search exhausted all sources" in r["log"] +@unittest.skipIf(VALGRIND, "virtual environment triggers memleak detection") def test_install(node_factory): """test search, git clone, and installation to folder.""" - n = get_reckless_node(node_factory) - r = reckless([f"--network={NETWORK}", "-v", "install", "testplugpass"], dir=n.lightning_dir) - assert r.returncode == 0 - assert r.search_stdout('dependencies installed successfully') - assert r.search_stdout('plugin installed:') - assert r.search_stdout('testplugpass enabled') - r.check_stderr() - plugin_path = Path(n.lightning_dir) / 'reckless/testplugpass' + n = node_factory.get_node(options={}) + r = n.rpc.call("reckless", ["install", "-v", "testplugpass"]) + assert r["install"]["enabled"] + assert r["install"]["plugin_name"] == "testplugpass" + assert any("dependencies installed successfully" in line for line in r["log"]) + assert any("plugin installed:" in line for line in r["log"]) + assert any("testplugpass enabled" in line for line in r["log"]) + # check_stderr(r["log"]) TODO: check logs + plugin_path = Path(n.lightning_dir) / "reckless/testplugpass" print(plugin_path) assert os.path.exists(plugin_path) + # Try to install again - should result in an error. + with pytest.raises(RpcError, match="already installed"): + n.rpc.call("reckless", ["install", "-v", "testplugpass"]) + n.daemon.wait_for_log("testplugpass is already installed") + + +@unittest.skipIf(VALGRIND, "virtual environment triggers memleak detection") +def test_install_cleanup(node_factory): + """test failed start which should give a chance to enable with options and""" + """a failed installation which should cleanup the plugin folder""" + n = node_factory.get_node( + options={}, + broken_log=".*uv failed.*|.*sofijowesifjwoiefjow.*|.*unsatisfiable.*|.*could not read metadata for testpluginvaliddeps.*", + ) + r = n.rpc.call("reckless", ["install", "-v", "testplugreqopts"]) + assert not r["install"]["enabled"] + assert r["install"]["plugin_name"] == "testplugreqopts" + assert any("testplugreqopts failed to start" in line for line in r["log"]) + + plugin_path = Path(n.lightning_dir) / "reckless/testplugreqopts" + assert os.path.exists(plugin_path) + + with pytest.raises(RpcError, match="command .* failed"): + n.rpc.call("reckless", ["install", "-v", "testpluginvaliddeps"]) + + plugin_path = Path(n.lightning_dir) / "reckless/testpluginvaliddeps" + assert not os.path.exists(plugin_path) + @unittest.skipIf(VALGRIND, "virtual environment triggers memleak detection") def test_poetry_install(node_factory): """test search, git clone, and installation to folder.""" - n = get_reckless_node(node_factory) - r = reckless([f"--network={NETWORK}", "-v", "install", "testplugpyproj"], dir=n.lightning_dir) - assert r.returncode == 0 - assert r.search_stdout('dependencies installed successfully') - assert r.search_stdout('plugin installed:') - assert r.search_stdout('testplugpyproj enabled') - r.check_stderr() - plugin_path = Path(n.lightning_dir) / 'reckless/testplugpyproj' + n = node_factory.get_node(options={}) + r = n.rpc.call("reckless", ["install", "-v", "testplugpyproj"]) + assert any("dependencies installed successfully" in line for line in r["log"]) + assert any("plugin installed:" in line for line in r["log"]) + # time.sleep(120) + assert any("testplugpyproj enabled" in line for line in r["log"]) + # check_stderr(r["log"]) TODO: check logs + plugin_path = Path(n.lightning_dir) / "reckless/testplugpyproj" print(plugin_path) assert os.path.exists(plugin_path) - n.start() print(n.rpc.testmethod()) - assert n.daemon.is_in_log(r'plugin-manager: started\([0-9].*\) /tmp/ltests-[a-z0-9_].*/test_poetry_install_1/lightning-1/reckless/testplugpyproj/testplugpyproj.py') - assert n.rpc.testmethod() == 'I live.' + assert n.daemon.is_in_log( + r"plugin-manager: started\([0-9].*\) /tmp/ltests-[a-z0-9_].*/test_poetry_install_1/lightning-1/reckless/testplugpyproj/testplugpyproj.py" + ) + assert n.rpc.testmethod() == "I live." @unittest.skipIf(VALGRIND, "virtual environment triggers memleak detection") def test_local_dir_install(node_factory): """Test search and install from local directory source.""" - n = get_reckless_node(node_factory) - n.start() - source_dir = str(Path(n.lightning_dir / '..' / 'lightningd' / 'testplugpass').resolve()) - r = reckless([f"--network={NETWORK}", "-v", "source", "add", source_dir], dir=n.lightning_dir) - assert r.returncode == 0 - r = reckless([f"--network={NETWORK}", "-v", "install", "testplugpass"], dir=n.lightning_dir) - assert r.returncode == 0 - assert r.search_stdout('testplugpass enabled') - plugin_path = Path(n.lightning_dir) / 'reckless/testplugpass' + n = node_factory.get_node(options={}) + source_dir = str( + Path(n.lightning_dir / ".." / "lightningd" / "testplugpass").resolve() + ) + r = n.rpc.call("reckless", ["source", "-v", "add", source_dir]) + r = n.rpc.call("reckless", ["install", "-v", "testplugpass"]) + assert any("testplugpass enabled" in line for line in r["log"]) + plugin_path = Path(n.lightning_dir) / "reckless/testplugpass" print(plugin_path) assert os.path.exists(plugin_path) # Retry with a direct install passing the full path to the local source - r = reckless(['uninstall', 'testplugpass', '-v'], dir=n.lightning_dir) + r = n.rpc.call("reckless", ["uninstall", "-v", "testplugpass"]) assert not os.path.exists(plugin_path) - r = reckless(['source', 'remove', source_dir], dir=n.lightning_dir) - assert r.search_stdout('plugin source removed') - r = reckless(['install', '-v', source_dir], dir=n.lightning_dir) - assert r.search_stdout('testplugpass enabled') + r = n.rpc.call("reckless", ["source", "-v", "remove", source_dir]) + assert source_dir not in r["sources"] + r = n.rpc.call("reckless", ["install", "-v", source_dir]) + print(r) + assert any("testplugpass enabled" in line for line in r["log"]) assert os.path.exists(plugin_path) @unittest.skipIf(VALGRIND, "virtual environment triggers memleak detection") def test_disable_enable(node_factory): """test search, git clone, and installation to folder.""" - n = get_reckless_node(node_factory) + n = node_factory.get_node(options={}) # Test case-insensitive search as well - r = reckless([f"--network={NETWORK}", "-v", "install", "testPlugPass"], - dir=n.lightning_dir) - assert r.returncode == 0 - assert r.search_stdout('dependencies installed successfully') - assert r.search_stdout('plugin installed:') - assert r.search_stdout('testplugpass enabled') - r.check_stderr() - plugin_path = Path(n.lightning_dir) / 'reckless/testplugpass' + r = n.rpc.call("reckless", ["install", "-v", "testPlugPass"]) + assert r["install"]["enabled"] + assert r["install"]["plugin_name"] == "testplugpass" + assert any("dependencies installed successfully" in line for line in r["log"]) + assert any("plugin installed:" in line for line in r["log"]) + assert any("testplugpass enabled" in line for line in r["log"]) + # r.check_stderr() TODO: check logs + plugin_path = Path(n.lightning_dir) / "reckless/testplugpass" print(plugin_path) assert os.path.exists(plugin_path) - r = reckless([f"--network={NETWORK}", "-v", "disable", "testPlugPass"], - dir=n.lightning_dir) - assert r.returncode == 0 - n.start() + r = n.rpc.call("reckless", ["disable", "-v", "testPlugPass"]) + assert r["disable"]["plugin_name"] == "testplugpass" + # Should find it with or without the file extension - r = reckless([f"--network={NETWORK}", "-v", "enable", "testplugpass.py"], - dir=n.lightning_dir) - assert r.returncode == 0 - assert r.search_stdout('testplugpass enabled') - test_plugin = {'name': str(plugin_path / 'testplugpass.py'), - 'active': True, 'dynamic': True} + r = n.rpc.call("reckless", ["enable", "-v", "testplugpass.py"]) + assert r["enable"]["plugin_name"] == "testplugpass" + assert any("testplugpass enabled" in line for line in r["log"]) + test_plugin = { + "name": str((plugin_path / "testplugpass.py").resolve()), + "active": True, + "dynamic": True, + } time.sleep(1) - print(n.rpc.plugin_list()['plugins']) - assert test_plugin in n.rpc.plugin_list()['plugins'] + print(n.rpc.plugin_list()["plugins"]) + assert test_plugin in n.rpc.plugin_list()["plugins"] @unittest.skipIf(VALGRIND, "virtual environment triggers memleak detection") def test_tag_install(node_factory): "install a plugin from a specific commit hash or tag" - node = get_reckless_node(node_factory) - node.start() - r = reckless([f"--network={NETWORK}", "-v", "install", "testPlugPass"], - dir=node.lightning_dir) - assert r.returncode == 0 - metadata = node.lightning_dir / "reckless/testplugpass/.metadata" - with open(metadata, "r") as md: - header = '' - for line in md.readlines(): - line = line.strip() - if header == 'requested commit': - assert line == 'None' - header = line + node = node_factory.get_node(options={}) + r = node.rpc.call("reckless", ["install", "-v", "testPlugPass"]) + assert r["install"]["enabled"] + assert r["install"]["plugin_name"] == "testplugpass" + metadata_file = node.lightning_dir / "reckless/testplugpass/.metadata.json" + with open(metadata_file, "r") as md: + metadata = json.load(md) + assert "requested_commit" not in metadata["metadata"] # should install v2 (latest) without specifying version = node.rpc.gettestplugversion() - assert version == 'v2' - r = reckless([f"--network={NETWORK}", "-v", "uninstall", "testplugpass"], - dir=node.lightning_dir) - r = reckless([f"--network={NETWORK}", "-v", "install", "testplugpass@v1"], - dir=node.lightning_dir) - assert r.returncode == 0 + assert version == "v2" + r = node.rpc.call("reckless", ["uninstall", "-v", "testplugpass"]) + assert r["uninstall"]["plugin_name"] == "testplugpass" + r = node.rpc.call("reckless", ["install", "-v", "testplugpass@v1"]) + assert r["install"]["enabled"] + assert r["install"]["plugin_name"] == "testplugpass" + assert r["install"]["installed_commit"] == "v1" # v1 should now be checked out. version = node.rpc.gettestplugversion() - assert version == 'v1' - installed_path = Path(node.lightning_dir) / 'reckless/testplugpass' + assert version == "v1" + installed_path = Path(node.lightning_dir) / "reckless/testplugpass" assert installed_path.is_dir() - with open(metadata, "r") as md: - header = '' - for line in md.readlines(): - line = line.strip() - if header == 'requested commit': - assert line == 'v1' - header = line + with open(metadata_file, "r") as md: + metadata = json.load(md) + assert metadata["metadata"]["requested_commit"] == "v1" + assert metadata["metadata"]["installed_commit"] == "v1" + + +@unittest.skipIf(VALGRIND, "virtual environment triggers memleak detection") +def test_install_plugin_requiring_opts(node_factory): + """A plugin that exits non-zero when run standalone (e.g. because a + required option is not yet configured) should still install successfully.""" + node = node_factory.get_node(options={}) + r = node.rpc.call("reckless", ["install", "-v", "testplugreqopts"]) + assert not r["install"]["enabled"] + assert r["install"]["plugin_name"] == "testplugreqopts" + assert any("plugin installed:" in line for line in r["log"]) + assert any("testplugreqopts failed to start" in line for line in r["log"]) + assert all("testplugreqopts enabled" not in line for line in r["log"]) + assert any("may require options" in line for line in r["log"]) + plugin_path = Path(node.lightning_dir) / "reckless/testplugreqopts" + assert plugin_path.exists() + + r = node.rpc.call( + "reckless", ["enable", "-v", "testplugreqopts", "required-opt=foo"] + ) + assert r["enable"]["plugin_name"] == "testplugreqopts" + assert any("testplugreqopts enabled" in line for line in r["log"]) + + r = node.rpc.call("reckless", ["uninstall", "-v", "testplugreqopts"]) + assert r["uninstall"]["plugin_name"] == "testplugreqopts" + assert not plugin_path.exists() + + r = node.rpc.call( + "reckless", ["install", "-v", "testplugreqopts", "required-opt=foo"] + ) + assert r["install"]["enabled"] + assert r["install"]["plugin_name"] == "testplugreqopts" + assert any("plugin installed:" in line for line in r["log"]) + assert any("testplugreqopts enabled" in line for line in r["log"]) # Note: uv timeouts from the GH network seem to happen? @pytest.mark.slow_test -@pytest.mark.flaky(reruns=3) +@pytest.mark.flaky(max_runs=3, min_passes=1) def test_reckless_uv_install(node_factory): - node = get_reckless_node(node_factory) - node.start() - r = reckless([f"--network={NETWORK}", "-v", "install", "testpluguv"], - dir=node.lightning_dir) - assert r.returncode == 0 - installed_path = Path(node.lightning_dir) / 'reckless/testpluguv' + node = node_factory.get_node(options={}) + r = node.rpc.call("reckless", ["install", "-v", "testpluguv"]) + assert r["install"]["enabled"] + assert r["install"]["plugin_name"] == "testpluguv" + installed_path = Path(node.lightning_dir) / "reckless/testpluguv" assert installed_path.is_dir() - assert node.rpc.uvplugintest() == 'I live.' + assert node.rpc.uvplugintest() == "I live." version = node.rpc.getuvpluginversion() - assert version == 'v1' + assert version == "v1" + + assert any("using installer pythonuv" in line for line in r["log"]) + # r.check_stderr() TODO: check logs + + +@unittest.skipIf(VALGRIND, "virtual environment triggers memleak detection") +def test_reckless_manifest(node_factory): + node, l2 = node_factory.line_graph(2, wait_for_announce=True) + + bolt12 = l2.rpc.call("offer", ["any"])["bolt12"] + + r = node.rpc.call("reckless", ["install", "-v", "testplugmani"]) + assert r["install"]["enabled"] + assert r["install"]["plugin_name"] == "testplugmani" + assert node.rpc.testmethod() == "I live." + + manifest = node.lightning_dir / "reckless/testplugmani/.metadata.json" + with open(manifest, "r") as f: + data = json.load(f) + + data["manifest"]["offer"] = bolt12 + + with open(manifest, "w") as f: + json.dump(data, f, indent=4) - assert r.search_stdout('using installer pythonuv') - r.check_stderr() + r = node.rpc.call("reckless", ["tip", "-v", "testplugmani", 1000]) + assert any( + "Successfully sent 1000msat to testplugmani author!" in line + for line in r["log"] + ) diff --git a/tools/reckless b/tools/reckless deleted file mode 100755 index 62bfe6259773..000000000000 --- a/tools/reckless +++ /dev/null @@ -1,2145 +0,0 @@ -#!/usr/bin/env python3 - -import sys -import argparse -import copy -import datetime -from enum import Enum -import json -import logging -import os -from pathlib import Path, PosixPath -import shutil -from subprocess import Popen, PIPE, TimeoutExpired, run -import tempfile -import time -import types -from typing import Union -from urllib.parse import urlparse -from urllib.request import urlopen -from urllib.error import HTTPError -import venv - - -__VERSION__ = 'v26.06.6' - -logging.basicConfig( - level=logging.INFO, - format='[%(asctime)s] %(levelname)s: %(message)s', - handlers=[logging.StreamHandler(stream=sys.stdout)], -) - -LAST_FOUND = None - - -def chunk_string(string: str, size: int): - for i in range(0, len(string), size): - yield string[i: i + size] - - -def ratelimit_output(output: str): - sys.stdout.reconfigure(encoding='utf-8') - for i in chunk_string(output, 1024): - sys.stdout.write(i) - sys.stdout.flush() - time.sleep(0.01) - - -class Logger: - """Redirect logging output to a json object or stdout as appropriate.""" - def __init__(self, capture: bool = False): - self.json_output = {"result": [], - "log": []} - self.capture = capture - - def str_esc(self, raw_string: str) -> str: - assert isinstance(raw_string, str) - return json.dumps(raw_string)[1:-1] - - def debug(self, to_log: str): - assert isinstance(to_log, str) or hasattr(to_log, "__repr__") - if logging.root.level > logging.DEBUG: - return - if self.capture: - self.json_output['log'].append(self.str_esc(f"DEBUG: {to_log}")) - else: - logging.debug(to_log) - - def info(self, to_log: str): - assert isinstance(to_log, str) or hasattr(to_log, "__repr__") - if logging.root.level > logging.INFO: - return - if self.capture: - self.json_output['log'].append(self.str_esc(f"INFO: {to_log}")) - else: - print(to_log) - - def warning(self, to_log: str): - assert isinstance(to_log, str) or hasattr(to_log, "__repr__") - if logging.root.level > logging.WARNING: - return - if self.capture: - self.json_output['log'].append(self.str_esc(f"WARNING: {to_log}")) - else: - logging.warning(to_log) - - def error(self, to_log: str): - assert isinstance(to_log, str) or hasattr(to_log, "__repr__") - if logging.root.level > logging.ERROR: - return - if self.capture: - self.json_output['log'].append(self.str_esc(f"ERROR: {to_log}")) - else: - logging.error(to_log) - - def add_result(self, result: Union[str, None]): - assert json.dumps(result), "result must be json serializable" - self.json_output["result"].append(result) - - def reply_json(self): - """json output to stdout with accumulated result.""" - if len(log.json_output["result"]) == 1 and \ - isinstance(log.json_output["result"][0], list): - # unpack sources output - log.json_output["result"] = log.json_output["result"][0] - output = json.dumps(log.json_output, indent=3) + '\n' - ratelimit_output(output) - - -log = Logger() - -repos = ['https://github.com/lightningd/plugins'] - - -def reckless_abort(err: str): - log.error(err) - log.add_result(None) - log.reply_json() - sys.exit(1) - - -def py_entry_guesses(name) -> list: - return [name, f'{name}.py', '__init__.py'] - - -def unsupported_entry(name) -> list: - return [f'{name}.go', f'{name}.sh'] - - -def entry_guesses(name: str) -> list: - guesses = [] - for inst in INSTALLERS: - for entry in inst.entries: - guesses.append(entry.format(name=name)) - return guesses - - -class Installer: - ''' - The identification of a plugin language, compiler or interpreter - availability, and the install procedures. - ''' - def __init__(self, name: str, - exe: Union[str, None] = None, - compiler: Union[str, None] = None, - manager: Union[str, None] = None, - entry: Union[str, None] = None): - self.name = name - self.entries = [] - if entry: - self.entries.append(entry) - self.exe = exe # interpreter (if required) - self.compiler = compiler # compiler bin (if required) - self.manager = manager # dependency manager (if required) - self.dependency_file = None - self.dependency_call = None - - def __repr__(self): - return (f'') - - def executable(self) -> bool: - '''Validate the necessary bins are available to execute the plugin.''' - if self.exe: - if shutil.which(self.exe): - # This should arguably not be checked here. - if self.manager: - if shutil.which(self.manager): - return True - return False - return True - return False - return True - - def installable(self) -> bool: - '''Validate the necessary compiler and package manager executables are - available to install. If these are defined, they are considered - mandatory even though the user may have the requisite packages already - installed.''' - if self.compiler and not shutil.which(self.compiler): - return False - if self.manager and not shutil.which(self.manager): - return False - return True - - def add_entrypoint(self, entry: str): - assert isinstance(entry, str) - self.entries.append(entry) - - def get_entrypoints(self, name: str): - guesses = [] - for entry in self.entries: - guesses.append(entry.format(name=name)) - return guesses - - def add_dependency_file(self, dep: str): - assert isinstance(dep, str) - self.dependency_file = dep - - def add_dependency_call(self, call: list): - if self.dependency_call is None: - self.dependency_call = [] - self.dependency_call.append(call) - - def copy(self): - return copy.deepcopy(self) - - -class InstInfo: - def __init__(self, name: str, location: str, git_url: str): - self.name = name - self.source_loc = str(location) # Used for 'git clone' - self.git_url: str = git_url # API access for github repos - self.srctype: Source = Source.get_type(location) - self.entry: SourceFile = None # relative to source_loc or subdir - self.deps: str = None - self.subdir: str = None - self.commit: str = None - - def __repr__(self): - return (f'InstInfo({self.name}, {self.source_loc}, {self.git_url}, ' - f'{self.entry}, {self.deps}, {self.subdir})') - - def get_repo_commit(self) -> Union[str, None]: - """The latest commit from a remote repo or the HEAD of a local repo.""" - if self.srctype in [Source.LOCAL_REPO, Source.GIT_LOCAL_CLONE]: - git = run(['git', 'rev-parse', 'HEAD'], cwd=str(self.source_loc), - stdout=PIPE, stderr=PIPE, text=True, check=False, timeout=10) - if git.returncode != 0: - return None - return git.stdout.splitlines()[0] - - if self.srctype == Source.GITHUB_REPO: - parsed_url = urlparse(self.source_loc) - if 'github.com' not in parsed_url.netloc: - return None - if len(parsed_url.path.split('/')) < 2: - return None - start = 1 - # Maybe we were passed an api.github.com/repo/ url - if 'api' in parsed_url.netloc: - start += 1 - repo_user = parsed_url.path.split('/')[start] - repo_name = parsed_url.path.split('/')[start + 1] - api_url = f'{API_GITHUB_COM}/repos/{repo_user}/{repo_name}/commits?ref=HEAD' - r = urlopen(api_url, timeout=5) - if r.status != 200: - return None - try: - return json.loads(r.read().decode())['0']['sha'] - except: - return None - - def get_inst_details(self) -> bool: - """Search the source_loc for plugin install details. - This may be necessary if a contents api is unavailable. - Extracts entrypoint and dependencies if searchable, otherwise - matches a directory to the plugin name and stops.""" - if self.srctype == Source.DIRECTORY: - assert Path(self.source_loc).exists() - assert os.path.isdir(self.source_loc) - target = SourceDir(self.source_loc, srctype=self.srctype) - # Set recursion for how many directories deep we should search - depth = 0 - if self.srctype in [Source.DIRECTORY, Source.LOCAL_REPO, - Source.GIT_LOCAL_CLONE]: - depth = 5 - elif self.srctype == Source.GITHUB_REPO: - depth = 1 - - def search_dir(self, sub: SourceDir, subdir: bool, - recursion: int) -> Union[SourceDir, None]: - assert isinstance(recursion, int) - # carveout for archived plugins in lightningd/plugins. Other repos - # are only searched by API at the top level. - if recursion == 0 and 'archive' in sub.name.lower(): - pass - # If unable to search deeper, resort to matching directory name - elif recursion < 1: - if sub.name.lower() == self.name.lower(): - # Partial success (can't check for entrypoint) - self.name = sub.name - return sub - return None - sub.populate() - - if sub.name.lower() == self.name.lower(): - # Directory matches the name we're trying to install, so check - # for entrypoint and dependencies. - for inst in INSTALLERS: - for g in inst.get_entrypoints(self.name): - found_entry = sub.find(g, ftype=SourceFile) - if found_entry: - break - # FIXME: handle a list of dependencies - found_dep = sub.find(inst.dependency_file, - ftype=SourceFile) - if found_entry: - # Success! - if found_dep: - self.name = sub.name - self.entry = found_entry.name - self.deps = found_dep.name - return sub - log.debug(f"missing dependency for {self}") - found_entry = None - for file in sub.contents: - if isinstance(file, SourceDir): - assert file.relative - success = search_dir(self, file, True, recursion - 1) - if success: - return success - return None - - try: - result = search_dir(self, target, False, depth) - # Using the rest API of github.com may result in a - # "Error 403: rate limit exceeded" or other access issues. - # Fall back to cloning and searching the local copy instead. - except HTTPError: - result = None - if self.srctype == Source.GITHUB_REPO: - # clone source to reckless dir - target = copy_remote_git_source(self) - if not target: - log.warning(f"could not clone github source {self}") - return False - log.debug(f"falling back to cloning remote repo {self}") - # Update to reflect use of a local clone - self.source_loc = str(target.location) - self.srctype = target.srctype - result = search_dir(self, target, False, 5) - - if not result: - return False - - if result: - if result != target: - if result.relative: - self.subdir = result.relative - else: - # populate() should always assign a relative path - # if not in the top-level source directory - assert self.subdir == result.name - return True - return False - - -def create_dir(directory: PosixPath) -> bool: - try: - Path(directory).mkdir(parents=False, exist_ok=True) - return True - # Okay if directory already exists - except FileExistsError: - return True - # Parent directory missing - except FileNotFoundError: - return False - - -def remove_dir(directory: str) -> bool: - try: - shutil.rmtree(directory) - return True - except NotADirectoryError: - log.warning(f"Tried to remove directory {directory} that " - "does not exist.") - except PermissionError: - log.warning(f"Permission denied removing dir: {directory}") - return False - - -class Source(Enum): - DIRECTORY = 1 - LOCAL_REPO = 2 - GITHUB_REPO = 3 - OTHER_URL = 4 - UNKNOWN = 5 - # Cloned from remote source before searching (rather than github API) - GIT_LOCAL_CLONE = 6 - - @classmethod - def get_type(cls, source: str): - if Path(os.path.realpath(source)).exists(): - if os.path.isdir(os.path.realpath(source)): - # returns 0 if git repository - proc = run(['git', '-C', source, 'rev-parse'], - cwd=os.path.realpath(source), stdout=PIPE, - stderr=PIPE, text=True, timeout=5) - if proc.returncode == 0: - return cls(2) - return cls(1) - if 'github.com' in source.lower(): - return cls(3) - if 'http://' in source.lower() or 'https://' in source.lower(): - return cls(4) - return cls(5) - - @classmethod - def get_github_user_repo(cls, source: str) -> (str, str): - 'extract a github username and repository name' - if 'github.com/' not in source.lower(): - return None, None - trailing = Path(source.lower().partition('github.com/')[2]).parts - if len(trailing) < 2: - return None, None - return trailing[0], trailing[1] - - -class SourceDir(): - """Structure to search source contents.""" - def __init__(self, location: str, srctype: Source = None, name: str = None, - relative: str = None): - self.location = str(location) - if name: - self.name = name - else: - self.name = Path(location).name - self.contents = [] - self.srctype = srctype - self.prepopulated = False - self.relative = relative # location relative to source - - def populate(self): - """populates contents of the directory at least one level""" - if self.prepopulated: - return - if not self.srctype: - self.srctype = Source.get_type(self.location) - if self.srctype == Source.DIRECTORY: - self.contents = populate_local_dir(self.location) - elif self.srctype in [Source.LOCAL_REPO, Source.GIT_LOCAL_CLONE]: - self.contents = populate_local_repo(self.location) - elif self.srctype == Source.GITHUB_REPO: - self.contents = populate_github_repo(self.location) - else: - raise Exception("populate method undefined for {self.srctype}") - # Ensure the relative path of the contents is inherited. - for c in self.contents: - if self.relative is None: - c.relative = c.name - else: - c.relative = str(Path(self.relative) / c.name) - - def find(self, name: str, ftype: type = None) -> str: - """Match a SourceFile or SourceDir to the provided name - (case insentive) and return its filename.""" - assert isinstance(name, str) - if len(self.contents) == 0: - return None - for c in self.contents: - if ftype and not isinstance(c, ftype): - continue - if c.name.lower() == name.lower(): - return c - return None - - def __repr__(self): - return f"" - - def __eq__(self, compared): - if isinstance(compared, str): - return self.name == compared - if isinstance(compared, SourceDir): - return (self.name == compared.name and - self.location == compared.location) - return False - - -class SourceFile(): - def __init__(self, location: str): - self.location = str(location) - self.name = Path(location).name - - def __repr__(self): - return f"" - - def __eq__(self, compared): - if isinstance(compared, str): - return self.name == compared - if isinstance(compared, SourceFile): - return (self.name == compared.name and - self.location == compared.location) - return False - - -def populate_local_dir(path: str) -> list: - assert Path(os.path.realpath(path)).exists() - contents = [] - for c in os.listdir(path): - fullpath = Path(path) / c - if os.path.isdir(fullpath): - # Inheriting type saves a call to test if it's a git repo - contents.append(SourceDir(fullpath, srctype=Source.DIRECTORY)) - else: - contents.append(SourceFile(fullpath)) - return contents - - -def populate_local_repo(path: str, parent=None) -> list: - assert Path(os.path.realpath(path)).exists() - if parent is None: - basedir = SourceDir('base') - else: - assert isinstance(parent, SourceDir) - basedir = parent - - def populate_source_path(parent: SourceDir, mypath: PosixPath, - relative: str = None): - """`git ls-tree` lists all files with their full path. - This populates all intermediate directories and the file.""" - parentdir = parent - if mypath == '.': - log.debug(' asked to populate root dir') - return - # reverse the parents - pdirs = mypath - revpath = [] - child = parentdir - while pdirs.parent.name != '': - revpath.append(pdirs.parent.name) - pdirs = pdirs.parent - for p in reversed(revpath): - child = parentdir.find(p) - if child: - parentdir = child - else: - if p == revpath[-1]: - relative_path = None - if parentdir.relative: - relative_path = parentdir.relative - elif parentdir.relative: - relative_path = str(Path(parentdir.relative) / - parentdir.name) - else: - relative_path = parentdir.name - child = SourceDir(p, srctype=Source.LOCAL_REPO, - relative=relative_path) - # ls-tree lists every file in the repo with full path. - # No need to populate each directory individually. - child.prepopulated = True - parentdir.contents.append(child) - parentdir = child - newfile = SourceFile(mypath.name) - child.contents.append(newfile) - - # Submodules contents are populated separately - proc = run(['git', '-C', path, 'submodule', 'status'], - stdout=PIPE, stderr=PIPE, text=True, timeout=5) - if proc.returncode != 0: - log.debug(f"'git submodule status' of repo {path} failed") - return None - submodules = [] - for sub in proc.stdout.splitlines(): - submodules.append(sub.split()[1]) - - # FIXME: Pass in tag or commit hash - ver = 'HEAD' - git_call = ['git', '-C', path, 'ls-tree', '--full-tree', '-r', - '--name-only', ver] - proc = run(git_call, stdout=PIPE, stderr=PIPE, text=True, timeout=5) - if proc.returncode != 0: - log.debug(f'ls-tree of repo {path} failed') - return None - - for filepath in proc.stdout.splitlines(): - if filepath in submodules: - if parent is None: - relative_path = filepath - elif basedir.relative: - relative_path = str(Path(basedir.relative) / filepath) - assert relative_path - submodule_dir = SourceDir(filepath, srctype=Source.LOCAL_REPO, - relative=relative_path) - populate_local_repo(Path(path) / filepath, parent=submodule_dir) - submodule_dir.prepopulated = True - basedir.contents.append(submodule_dir) - else: - populate_source_path(basedir, Path(filepath)) - return basedir.contents - - -def source_element_from_repo_api(member: dict): - # api accessed via /contents/ - if 'type' in member and 'name' in member and 'git_url' in member: - if member['type'] == 'dir': - return SourceDir(member['git_url'], srctype=Source.GITHUB_REPO, - name=member['name']) - elif member['type'] == 'file': - # Likely a submodule - if member['size'] == 0: - return SourceDir(None, srctype=Source.GITHUB_REPO, - name=member['name']) - return SourceFile(member['name']) - elif member['type'] == 'commit': - # No path is given by the api here - return SourceDir(None, srctype=Source.GITHUB_REPO, - name=member['name']) - # git_url with /tree/ presents results a little differently - elif 'type' in member and 'path' in member and 'url' in member: - if member['type'] not in ['tree', 'blob']: - log.debug(f' skipping {member["path"]} type={member["type"]}') - if member['type'] == 'tree': - return SourceDir(member['url'], srctype=Source.GITHUB_REPO, - name=member['path']) - elif member['type'] == 'blob': - # This can be a submodule - if member['size'] == 0: - return SourceDir(member['git_url'], srctype=Source.GITHUB_REPO, - name=member['name']) - return SourceFile(member['path']) - elif member['type'] == 'commit': - # No path is given by the api here - return SourceDir(None, srctype=Source.GITHUB_REPO, - name=member['name']) - return None - - -def populate_github_repo(url: str) -> list: - """populate one level of a github repository via REST API""" - # Forces search to clone remote repos (for blackbox testing) - if GITHUB_API_FALLBACK: - with tempfile.NamedTemporaryFile() as tmp: - raise HTTPError(url, 403, 'simulated ratelimit', {}, tmp) - # FIXME: This probably contains leftover cruft. - repo = url.split('/') - while '' in repo: - repo.remove('') - repo_name = None - parsed_url = urlparse(url) - if 'github.com' not in parsed_url.netloc: - return None - if len(parsed_url.path.split('/')) < 2: - return None - start = 1 - # Maybe we were passed an api.github.com/repo/ url - if 'api' in parsed_url.netloc: - start += 1 - repo_user = parsed_url.path.split('/')[start] - repo_name = parsed_url.path.split('/')[start + 1] - - # Get details from the github API. - if API_GITHUB_COM in url: - api_url = url - else: - api_url = f'{API_GITHUB_COM}/repos/{repo_user}/{repo_name}/contents/' - - git_url = api_url - if "api.github.com" in git_url: - # This lets us redirect to handle blackbox testing - log.debug(f'fetching from gh API: {git_url}') - git_url = (API_GITHUB_COM + git_url.split("api.github.com")[-1]) - # Ratelimiting occurs for non-authenticated GH API calls at 60 in 1 hour. - r = urlopen(git_url, timeout=5) - if r.status != 200: - return False - if 'git/tree' in git_url: - tree = json.loads(r.read().decode())['tree'] - else: - tree = json.loads(r.read().decode()) - contents = [] - for sub in tree: - if source_element_from_repo_api(sub): - contents.append(source_element_from_repo_api(sub)) - return contents - - -def copy_remote_git_source(github_source: InstInfo): - """clone or fetch & checkout a local copy of a remote git repo""" - user, repo = Source.get_github_user_repo(github_source.source_loc) - if not user or not repo: - log.warning('could not extract github user and repo ' - f'name for {github_source.source_loc}') - return None - local_path = RECKLESS_DIR / '.remote_sources' / user - create_dir(RECKLESS_DIR / '.remote_sources') - if not create_dir(local_path): - log.warning(f'could not provision dir {local_path} to ' - f'clone remote source {github_source.source_loc}') - return None - local_path = local_path / repo - if local_path.exists(): - # Fetch the latest - assert _git_update(github_source, local_path) - else: - _git_clone(github_source, local_path) - return SourceDir(local_path, srctype=Source.GIT_LOCAL_CLONE) - - -class Config(): - """A generic class for procuring, reading and editing config files""" - def obtain_config(self, - config_path: str, - default_text: str, - warn: bool = False) -> str: - """Return a config file from the desired location. Create one with - default_text if it cannot be found.""" - if isinstance(config_path, type(None)): - raise Exception("Generic config must be passed a config_path.") - assert isinstance(config_path, str) - # FIXME: warn if reckless dir exists, but conf not found - if Path(config_path).exists(): - with open(config_path, 'r+') as f: - config_content = f.readlines() - return config_content - # redirecting the prompts to stderr is kinder for json consumers - tmp = sys.stdout - sys.stdout = sys.stderr - print(f'config file not found: {config_path}') - if warn: - confirm = input('press [Y] to create one now.\n').upper() == 'Y' - else: - confirm = True - sys.stdout = tmp - if not confirm: - reckless_abort(f"config file required: {config_path}") - parent_path = Path(config_path).parent - # Create up to one parent in the directory tree. - if create_dir(parent_path): - with open(self.conf_fp, 'w') as f: - f.write(default_text) - # FIXME: Handle write failure - return default_text - else: - log.warning('could not create the parent directory ' + - parent_path) - raise FileNotFoundError('invalid parent directory') - - def editConfigFile(self, addline: Union[str, None], - removeline: Union[str, None]): - """Idempotent function to add and/or remove a single line each.""" - remove_these_lines = [] - with open(self.conf_fp, 'r') as reckless_conf: - original = reckless_conf.readlines() - empty_lines = [] - write_required = False - for n, l in enumerate(original): - if removeline and l.strip() == removeline.strip(): - write_required = True - remove_these_lines.append(n) - continue - if l.strip() == '': - empty_lines.append(n) - if n-1 in empty_lines: - # The white space is getting excessive. - remove_these_lines.append(n) - continue - if not addline and not write_required: - return - # No write necessary if addline is already in config. - if addline and not write_required: - for line in original: - if line.strip() == addline.strip(): - return - with open(self.conf_fp, 'w') as conf_write: - # no need to write if passed 'None' - line_exists = not bool(addline) - for n, l in enumerate(original): - if n not in remove_these_lines: - if n > 0: - conf_write.write(f'\n{l.strip()}') - else: - conf_write.write(l.strip()) - if addline and addline.strip() == l.strip(): - # addline is idempotent - line_exists = True - if not line_exists: - conf_write.write(f'\n{addline}') - - def __init__(self, path: Union[str, None] = None, - default_text: Union[str, None] = None, - warn: bool = False): - assert path is not None - assert default_text is not None - self.conf_fp = path - self.content = self.obtain_config(self.conf_fp, default_text, - warn=warn) - - -class RecklessConfig(Config): - """Reckless config (by default, specific to the bitcoin network only.) - This is inherited by the lightningd config and contains all reckless - maintained plugins.""" - - def enable_plugin(self, plugin_path: str): - """Handle persistent plugin loading via config""" - self.editConfigFile(f'plugin={plugin_path}', - f'disable-plugin={plugin_path}') - - def disable_plugin(self, plugin_path: str): - """Handle persistent plugin disabling via config""" - self.editConfigFile(f'disable-plugin={plugin_path}', - f'plugin={plugin_path}') - - def __init__(self, path: Union[str, None] = None, - default_text: Union[str, None] = None): - if path is None: - path = Path(LIGHTNING_DIR) / 'reckless' / 'bitcoin-reckless.conf' - if default_text is None: - default_text = ( - '# This configuration file is managed by reckless to activate ' - 'and disable\n# reckless-installed plugins\n\n' - ) - Config.__init__(self, path=str(path), default_text=default_text) - self.reckless_dir = Path(path).parent - - -class LightningBitcoinConfig(Config): - """lightningd config specific to the bitcoin network. This is inherited by - the main lightningd config and in turn, inherits bitcoin-reckless.conf.""" - - def __init__(self, path: Union[str, None] = None, - default_text: Union[str, None] = None, - warn: bool = True): - if path is None: - path = Path(LIGHTNING_DIR).joinpath('bitcoin', 'config') - if default_text is None: - default_text = "# This config was autopopulated by reckless\n\n" - Config.__init__(self, path=str(path), - default_text=default_text, warn=warn) - - -class NotFoundError(Exception): - """Raised by InferInstall when a source/entrypoint cannot be located.""" - - -class InferInstall(): - """Once a plugin is installed, we may need its directory and entrypoint""" - def __init__(self, name: str): - reck_contents = os.listdir(RECKLESS_CONFIG.reckless_dir) - reck_contents_lower = {} - for f in reck_contents: - reck_contents_lower.update({f.lower(): f}) - - def match_name(name) -> str: - for tier in range(0, 10): - # Look for each installers preferred entrypoint format first - for inst in INSTALLERS: - # All of this installer's entrypoint options exhausted. - if tier >= len(inst.entries): - continue - fmt = inst.entries[tier] - if '{name}' in fmt: - pre = fmt.split('{name}')[0] - post = fmt.split('{name}')[-1] - if name.startswith(pre) and name.endswith(post): - return name.lstrip(pre).rstrip(post) - else: - if fmt == name: - return name - return name - - name = match_name(name) - if name.lower() in reck_contents_lower.keys(): - actual_name = reck_contents_lower[name.lower()] - self.dir = Path(RECKLESS_CONFIG.reckless_dir).joinpath(actual_name) - else: - raise NotFoundError("Could not find a reckless directory " - f"for {name}") - plug_dir = Path(RECKLESS_CONFIG.reckless_dir).joinpath(actual_name) - for guess in entry_guesses(actual_name): - for content in plug_dir.iterdir(): - if content.name == guess: - self.entry = str(content) - self.name = actual_name - return - raise NotFoundError(f'plugin entrypoint not found in {self.dir}') - - -class InstallationFailure(Exception): - "raised when pip fails to complete dependency installation" - - -def create_python3_venv(staged_plugin: InstInfo) -> InstInfo: - "Create a virtual environment, install dependencies and test plugin." - env_path = Path('.venv') - env_path_full = Path(staged_plugin.source_loc) / env_path - assert staged_plugin.subdir # relative dir of original source - plugin_path = Path(staged_plugin.source_loc) / staged_plugin.subdir - - if shutil.which('poetry') and staged_plugin.deps == 'pyproject.toml': - log.debug('configuring a python virtual environment (poetry) in ' - f'{env_path_full}') - # The virtual environment should be located with the plugin. - # This installs it to .venv instead of in the global location. - mod_poetry_env = os.environ - mod_poetry_env['POETRY_VIRTUALENVS_IN_PROJECT'] = 'true' - # This ensures poetry installs to a new venv even though one may - # already be active (i.e., under CI) - if 'VIRTUAL_ENV' in mod_poetry_env: - del mod_poetry_env['VIRTUAL_ENV'] - # to avoid relocating and breaking the venv, symlink pyroject.toml - # to the location of poetry's .venv dir - (Path(staged_plugin.source_loc) / 'pyproject.toml') \ - .symlink_to(plugin_path / 'pyproject.toml') - (Path(staged_plugin.source_loc) / 'poetry.lock') \ - .symlink_to(plugin_path / 'poetry.lock') - - # Avoid redirecting stdout in order to stream progress. - # Timeout excluded as armv7 grpcio build/install can take 1hr. - pip = run(['poetry', 'install', '--no-root'], check=False, - cwd=staged_plugin.source_loc, env=mod_poetry_env, - stdout=stdout_redirect, stderr=stderr_redirect) - - (Path(staged_plugin.source_loc) / 'pyproject.toml').unlink() - (Path(staged_plugin.source_loc) / 'poetry.lock').unlink() - - else: - builder = venv.EnvBuilder(with_pip=True) - builder.create(env_path_full) - log.debug('configuring a python virtual environment (pip) in ' - f'{env_path_full}') - log.debug(f'virtual environment created in {env_path_full}.') - if staged_plugin.deps == 'pyproject.toml': - pip = run(['bin/pip', 'install', str(plugin_path)], - check=False, cwd=plugin_path) - elif staged_plugin.deps == 'requirements.txt': - pip = run([str(env_path_full / 'bin/pip'), 'install', '-r', - str(plugin_path / 'requirements.txt')], - check=False, cwd=plugin_path, - stdout=stdout_redirect, stderr=stderr_redirect) - else: - log.debug("no python dependency file") - if pip and pip.returncode != 0: - log.error('error encountered installing dependencies') - raise InstallationFailure - - staged_plugin.venv = env_path - log.info('dependencies installed successfully') - return staged_plugin - - -def create_wrapper(plugin: InstInfo): - '''The wrapper will activate the virtual environment for this plugin and - then run the plugin from within the same process.''' - assert hasattr(plugin, 'venv') - venv_full_path = Path(plugin.source_loc) / plugin.venv - with open(Path(plugin.source_loc) / plugin.entry, 'w') as wrapper: - wrapper.write((f"#!{venv_full_path}/bin/python\n" - "import sys\n" - "import runpy\n\n" - f"if '{plugin.source_loc}/{plugin.subdir}' not in " - "sys.path:\n" - f" sys.path.append('{plugin.source_loc}/" - f"{plugin.subdir}')\n" - f"if '{plugin.source_loc}' in sys.path:\n" - f" sys.path.remove('{plugin.source_loc}')\n" - f"runpy.run_module(\"{plugin.name}\", " - "{}, \"__main__\")")) - wrapper_file = Path(plugin.source_loc) / plugin.entry - wrapper_file.chmod(0o755) - - -def install_to_python_virtual_environment(cloned_plugin: InstInfo): - '''Called during install in place of a subprocess.run list''' - # Delete symlink so that a venv wrapper can take it's place - (Path(cloned_plugin.source_loc) / cloned_plugin.entry).unlink() - create_python3_venv(cloned_plugin) - if not hasattr(cloned_plugin, 'venv'): - raise InstallationFailure - log.debug('virtual environment for cloned plugin: ' - f'{cloned_plugin.venv}') - create_wrapper(cloned_plugin) - return cloned_plugin - - -def cargo_installation(cloned_plugin: InstInfo): - call = ['cargo', 'build', '--release', '-vv'] - # FIXME: the symlinked Cargo.toml allows the installer to identify a valid - # plugin directory, but is unneeded, and actually confuses cargo if not - # removed prior to installing. - cargo_toml_path = Path(cloned_plugin.source_loc) / 'Cargo.toml' - if cargo_toml_path.exists(): - cargo_toml_path.unlink() - - # source_loc now contains a symlink to the entrypoint and 'source/plugin/' - source = Path(cloned_plugin.source_loc) / 'source' / cloned_plugin.name - log.debug(f'cargo installing from {source}') - if logging.root.level < logging.INFO and not log.capture: - cargo = run(call, cwd=str(source), text=True) - else: - cargo = run(call, cwd=str(source), stdout=PIPE, - stderr=PIPE, text=True) - - if cargo.returncode == 0: - log.debug('rust project compiled successfully') - else: - log.error(cargo.stderr if cargo.stderr else - 'error encountered during build, cargo exited with return ' - f'code {cargo.returncode}') - - log.debug(f'removing {cloned_plugin.source_loc}') - remove_dir(cloned_plugin.source_loc) - raise InstallationFailure - - # We do need to symlink to the executable binary though. - (Path(cloned_plugin.source_loc) / cloned_plugin.name).\ - symlink_to(source / f'target/release/{cloned_plugin.name}') - cloned_plugin.entry = cloned_plugin.name - - return cloned_plugin - - -def install_python_uv(cloned_plugin: InstInfo): - """This uses the rust-based python plugin manager uv to manage the python - installation and create a virtual environment.""" - - source = Path(cloned_plugin.source_loc) / 'source' / cloned_plugin.name - # This virtual env path matches the other python installations and allows - # creating the wrapper in the same manner. Otherwise uv would build it in - # the source/{name} subdirectory. - cloned_plugin.venv = Path('.venv') - - # We want the virtual env at the head of our directory structure and uv - # will need a pyproject.toml there in order to get started. - (Path(cloned_plugin.source_loc) / 'pyproject.toml').\ - symlink_to(source / 'pyproject.toml') - - call = ['uv', '-v', 'sync'] - uv = run(call, cwd=str(cloned_plugin.source_loc), stdout=PIPE, stderr=PIPE, - text=True, check=False) - if uv.returncode != 0: - for line in uv.stderr.splitlines(): - log.debug(line) - log.error('Failed to install virtual environment') - raise InstallationFailure('Failed to create virtual environment!') - - # Delete entrypoint symlink so that a venv wrapper can take it's place - (Path(cloned_plugin.source_loc) / cloned_plugin.entry).unlink() - - create_wrapper(cloned_plugin) - return cloned_plugin - - -def install_python_uv_legacy(cloned_plugin: InstInfo): - """Install a python plugin with uv that was created with a requirements.txt. - This requires creating a bare virtual environment with uv first.""" - source = Path(cloned_plugin.source_loc) / 'source' / cloned_plugin.name - cloned_plugin.venv = Path('.venv') - (Path(cloned_plugin.source_loc) / 'pyproject.toml').\ - symlink_to(source / 'pyproject.toml') - (Path(cloned_plugin.source_loc) / 'requirements.txt').\ - symlink_to(source / 'requirements.txt') - - venv = run(['uv', 'venv'], cwd=str(cloned_plugin.source_loc), - stdout=PIPE, stderr=PIPE, text=True, check=False) - if venv.returncode != 0: - for line in venv.stderr.splitlines(): - log.debug(line) - log.error('Failed to create virtual environment') - raise InstallationFailure('Failed to create virtual environment!') - for line in venv.stdout.splitlines(): - log.debug(line) - for line in venv.stderr.splitlines(): - log.debug(line) - # Running this as a shell allows overriding any active virtual environment - # which would make uv skip installing packages already present in the - # current env. - call = ['. .venv/bin/activate; uv pip install -r requirements.txt'] - uv = run(call, shell=True, cwd=str(cloned_plugin.source_loc), - stdout=PIPE, stderr=PIPE, text=True, check=False) - if uv.returncode != 0: - for line in uv.stderr.splitlines(): - log.debug(line) - log.error('Failed to install virtual environment') - raise InstallationFailure('Failed to create virtual environment!') - for line in uv.stdout.splitlines(): - log.debug(line) - for line in uv.stderr.splitlines(): - log.debug(line) - - # Delete entrypoint symlink so that a venv wrapper can take it's place - (Path(cloned_plugin.source_loc) / cloned_plugin.entry).unlink() - - create_wrapper(cloned_plugin) - log.info('dependencies installed successfully') - return cloned_plugin - - -python3venv = Installer('python3venv', exe='python3', - manager='pip', entry='{name}.py') -python3venv.add_entrypoint('{name}') -python3venv.add_entrypoint('__init__.py') -python3venv.add_dependency_file('requirements.txt') -python3venv.dependency_call = install_to_python_virtual_environment - -poetryvenv = Installer('poetryvenv', exe='python3', - manager='poetry', entry='{name}.py') -poetryvenv.add_entrypoint('{name}') -poetryvenv.add_entrypoint('__init__.py') -poetryvenv.add_dependency_file('poetry.lock') -poetryvenv.add_dependency_file('pyproject.toml') -poetryvenv.dependency_call = install_to_python_virtual_environment - -pyprojectViaPip = Installer('pyprojectViaPip', exe='python3', - manager='pip', entry='{name}.py') -pyprojectViaPip.add_entrypoint('{name}') -pyprojectViaPip.add_entrypoint('__init__.py') -pyprojectViaPip.add_dependency_file('pyproject.toml') -pyprojectViaPip.dependency_call = install_to_python_virtual_environment - -pythonuv = Installer('pythonuv', exe='python3', manager='uv', entry="{name}.py") -pythonuv.add_dependency_file('uv.lock') -pythonuv.dependency_call = install_python_uv - -pythonuvlegacy = Installer('pythonuvlegacy', exe='python3', manager='uv', entry='{name}.py') -pythonuvlegacy.add_dependency_file('requirements.txt') -pythonuvlegacy.dependency_call = install_python_uv_legacy - -# Nodejs plugin installer -nodejs = Installer('nodejs', exe='node', - manager='npm', entry='{name}.js') -nodejs.add_entrypoint('{name}') -nodejs.add_dependency_call(['npm', 'install', '--omit=dev']) -nodejs.add_dependency_file('package.json') - -# This entrypoint is used to identify a candidate directory, don't call it. -rust_cargo = Installer('rust', manager='cargo', entry='Cargo.toml') -rust_cargo.add_dependency_file('Cargo.toml') -rust_cargo.dependency_call = cargo_installation - -INSTALLERS = [pythonuv, pythonuvlegacy, python3venv, poetryvenv, - pyprojectViaPip, nodejs, rust_cargo] - - -def help_alias(targets: list): - if len(targets) == 0: - parser.print_help(sys.stdout) - else: - log.info('try "reckless {} -h"'.format(' '.join(targets))) - sys.exit(1) - - -def _source_search(name: str, src: str) -> Union[InstInfo, None]: - """Identify source type, retrieve contents, and populate InstInfo - if the relevant contents are found.""" - root_dir = SourceDir(src) - source = InstInfo(name, root_dir.location, None) - - # If a local clone of a github source already exists, prefer searching - # that instead of accessing the github API. - if source.srctype == Source.GITHUB_REPO: - # Do we have a local copy already? Use that. - user, repo = Source.get_github_user_repo(src) - assert user - assert repo - local_clone_location = RECKLESS_DIR / '.remote_sources' / user / repo - if local_clone_location.exists(): - # Make sure it's the correct remote source and fetch any updates. - if _git_update(source, local_clone_location): - log.debug(f"Using local clone of {src}: " - f"{local_clone_location}") - source.source_loc = str(local_clone_location) - source.srctype = Source.GIT_LOCAL_CLONE - - if source.get_inst_details(): - return source - return None - - -def _git_clone(src: InstInfo, dest: Union[PosixPath, str]) -> bool: - log.info(f'cloning {src.srctype} {src}') - if src.srctype == Source.GITHUB_REPO: - assert 'github.com' in src.source_loc - source = f"{GITHUB_COM}" + src.source_loc.split("github.com")[-1] - elif src.srctype in [Source.LOCAL_REPO, Source.OTHER_URL, - Source.GIT_LOCAL_CLONE]: - source = src.source_loc - else: - return False - git = run(['git', 'clone', '--recurse-submodules', source, str(dest)], - stdout=PIPE, stderr=PIPE, text=True, check=False, timeout=180) - if git.returncode != 0: - for line in git.stderr.splitlines(): - log.debug(line) - if Path(dest).exists(): - remove_dir(str(dest)) - log.error('Failed to clone repo') - return False - return True - - -def _git_update(github_source: InstInfo, local_copy: PosixPath): - # Ensure this is the correct source - git = run(['git', 'remote', 'set-url', 'origin', github_source.source_loc], - cwd=str(local_copy), stdout=PIPE, stderr=PIPE, text=True, - check=False, timeout=60) - assert git.returncode == 0 - if git.returncode != 0: - return False - - # Fetch the latest from the remote - git = run(['git', 'fetch', 'origin', '--recurse-submodules=on-demand'], - cwd=str(local_copy), stdout=PIPE, stderr=PIPE, text=True, - check=False, timeout=60) - assert git.returncode == 0 - if git.returncode != 0: - return False - - # Find default branch - git = run(['git', 'symbolic-ref', 'refs/remotes/origin/HEAD', '--short'], - cwd=str(local_copy), stdout=PIPE, stderr=PIPE, text=True, - check=False, timeout=60) - assert git.returncode == 0 - if git.returncode != 0: - return False - default_branch = git.stdout.splitlines()[0] - if default_branch != 'origin/master': - log.debug(f'UNUSUAL: fetched default branch {default_branch} for ' - f'{github_source.source_loc}') - - # Checkout default branch - git = run(['git', 'checkout', default_branch], - cwd=str(local_copy), stdout=PIPE, stderr=PIPE, text=True, - check=False, timeout=60) - assert git.returncode == 0 - if git.returncode != 0: - return False - - return True - - -def get_temp_reckless_dir() -> PosixPath: - random_dir = 'reckless-{}'.format(str(hash(os.times()))[-9:]) - new_path = Path(tempfile.mkdtemp(prefix=random_dir)) - return new_path - - -def add_installation_metadata(installed: InstInfo, - original_request: InstInfo): - """Document the install request and installation details for use when - updating the plugin.""" - install_dir = Path(installed.source_loc) - assert install_dir.is_dir() - if urlparse(original_request.source_loc).scheme in ['http', 'https']: - abs_source_path = original_request.source_loc - else: - abs_source_path = Path(original_request.source_loc).resolve() - data = ('installation date\n' - f'{datetime.date.today().isoformat()}\n' - 'installation time\n' - f'{int(time.time())}\n' - 'original source\n' - f'{abs_source_path}\n' - 'requested commit\n' - f'{original_request.commit}\n' - 'installed commit\n' - f'{installed.commit}\n') - with open(install_dir / '.metadata', 'w') as metadata: - metadata.write(data) - - -def _checkout_commit(orig_src: InstInfo, - cloned_src: InstInfo, - cloned_path: PosixPath): - # Check out and verify commit/tag if source was a repository - if orig_src.srctype in [Source.LOCAL_REPO, Source.GITHUB_REPO, - Source.OTHER_URL, Source.GIT_LOCAL_CLONE]: - if orig_src.commit: - log.debug(f"Checking out {orig_src.commit}") - checkout = Popen(['git', 'checkout', orig_src.commit], - cwd=str(cloned_path), - stdout=PIPE, stderr=PIPE) - checkout.wait() - if checkout.returncode != 0: - log.warning('failed to checkout referenced ' - f'commit {orig_src.commit}') - return None - else: - log.debug("using latest commit of default branch") - - # Log the commit we actually used (for installation metadata) - git = run(['git', 'rev-parse', 'HEAD'], cwd=str(cloned_path), - stdout=PIPE, stderr=PIPE, text=True, check=False, timeout=60) - if git.returncode == 0: - head_commit = git.stdout.splitlines()[0] - log.debug(f'checked out HEAD: {head_commit}') - cloned_src.commit = head_commit - else: - log.debug(f'unable to collect commit: {git.stderr}') - else: - if orig_src.commit: - log.warning("unable to checkout commit/tag on non-repository " - "source") - return cloned_path - - if cloned_src.subdir is not None: - return Path(cloned_src.source_loc) / cloned_src.subdir - return cloned_path - - -def _install_plugin(src: InstInfo) -> Union[InstInfo, None]: - """make sure the repo exists and clone it.""" - log.debug(f'Install requested from {src}.') - if RECKLESS_CONFIG is None: - log.error('reckless install directory unavailable') - return None - - # Use a unique directory for each cloned repo. - tmp_path = get_temp_reckless_dir() - if not create_dir(tmp_path): - log.debug(f'failed to create {tmp_path}') - return None - clone_path = tmp_path / 'clone' - if not create_dir(tmp_path): - log.debug(f'failed to create {clone_path}') - return None - # we rename the original repo here. - plugin_path = clone_path / src.name - inst_path = Path(RECKLESS_CONFIG.reckless_dir) / src.name - if Path(clone_path).exists(): - log.debug(f'{clone_path} already exists - deleting') - shutil.rmtree(clone_path) - if src.srctype == Source.DIRECTORY: - full_source_path = Path(src.source_loc) - if src.subdir: - full_source_path /= src.subdir - log.debug(("copying local directory contents from" - f" {full_source_path}")) - create_dir(clone_path) - shutil.copytree(full_source_path, plugin_path) - elif src.srctype in [Source.LOCAL_REPO, Source.GITHUB_REPO, - Source.OTHER_URL, Source.GIT_LOCAL_CLONE]: - # clone git repository to /tmp/reckless-... - if not _git_clone(src, plugin_path): - return None - # FIXME: Validate path was cloned successfully. - # Depending on how we accessed the original source, there may be install - # details missing. Searching the cloned repo makes sure we have it. - cloned_src = _source_search(src.name, str(clone_path)) - log.debug(f'cloned_src: {cloned_src}') - if not cloned_src: - log.warning('failed to find plugin after cloning repo.') - return None - - # If a specific commit or tag was requested, check it out now. - plugin_path = _checkout_commit(src, cloned_src, plugin_path) - if not plugin_path: - return None - - # Find a suitable installer - INSTALLER = None - for inst_method in INSTALLERS: - if not (inst_method.installable() and inst_method.executable()): - continue - if inst_method.dependency_file is not None: - if inst_method.dependency_file not in os.listdir(plugin_path): - continue - log.debug(f"using installer {inst_method.name}") - INSTALLER = inst_method - break - if not INSTALLER: - log.warning('Could not find a suitable installer method for ' - f'{src.name}') - return None - if not cloned_src.entry: - # The plugin entrypoint may not be discernable prior to cloning. - # Need to search the newly cloned directory, not the original - cloned_src.source_loc = str(plugin_path) - - # Relocate plugin to a staging directory prior to testing - if not Path(inst_path).exists(): - log.debug(f'creating {inst_path}') - create_dir(inst_path) - if not Path(inst_path / 'source').exists(): - log.debug(f'creating {inst_path / "source"}') - create_dir(inst_path / 'source') - staging_path = inst_path / 'source' / src.name - log.debug(f'copying {plugin_path} tree to {staging_path}') - shutil.copytree(str(plugin_path), staging_path) - staged_src = cloned_src - # Because the source files are copied to a 'source' directory, the - # get_inst_details function no longer works. (dir must match plugin name) - # Set these manually instead. - staged_src.source_loc = str(inst_path) - staged_src.srctype = Source.DIRECTORY - # Use subdir to redirect the symlink to the actual executable location - staged_src.subdir = f'source/{src.name}' - # Create symlink in staging tree to redirect to the plugins entrypoint - log.debug(f"linking source {staging_path / cloned_src.entry} to " - f"{Path(staged_src.source_loc) / cloned_src.entry}") - log.debug(staged_src) - (Path(staged_src.source_loc) / cloned_src.entry).\ - symlink_to(staging_path / cloned_src.entry) - - # try it out - if INSTALLER.dependency_call: - if isinstance(INSTALLER.dependency_call, types.FunctionType): - try: - staged_src = INSTALLER.dependency_call(staged_src) - except InstallationFailure: - return None - else: - for call in INSTALLER.dependency_call: - log.debug(f"Install: invoking '{' '.join(call)}'") - if logging.root.level < logging.INFO: - pip = Popen(call, cwd=staging_path, text=True) - else: - pip = Popen(call, cwd=staging_path, stdout=PIPE, - stderr=PIPE, text=True) - pip.wait() - # FIXME: handle output of multiple calls - - if pip.returncode == 0: - log.info('dependencies installed successfully') - else: - log.error('error encountered installing dependencies') - if pip.stdout: - log.debug(pip.stdout.read()) - remove_dir(clone_path) - remove_dir(inst_path) - return None - staged_src.subdir = None - test_log = [] - try: - test = run([Path(staged_src.source_loc).joinpath(staged_src.entry)], - cwd=str(staging_path), stdout=PIPE, stderr=PIPE, - text=True, timeout=10) - for line in test.stderr.splitlines(): - test_log.append(line) - returncode = test.returncode - except TimeoutExpired: - # If the plugin is still running, it's assumed to be okay. - returncode = 0 - if returncode != 0: - log.debug("plugin testing error:") - for line in test_log: - log.debug(f' {line}') - log.error('plugin testing failed') - remove_dir(clone_path) - remove_dir(inst_path) - return None - - add_installation_metadata(staged_src, src) - log.info(f'plugin installed: {inst_path}') - remove_dir(clone_path) - return staged_src - - -def location_from_name(plugin_name: str) -> (str, str): - """Maybe the location was passed in place of the plugin name. Check - if this looks like a filepath or URL and return that as well as the - plugin name.""" - if not Path(plugin_name).exists(): - try: - parsed = urlparse(plugin_name) - if parsed.scheme in ['http', 'https']: - return (plugin_name, Path(plugin_name).with_suffix('').name) - except ValueError: - pass - # No path included, return the name only. - return (None, plugin_name) - - # Directory containing the plugin? The plugin name should match the dir. - if os.path.isdir(plugin_name): - return (Path(plugin_name).parent, Path(plugin_name).name) - - # Possibly the entrypoint itself was passed? - elif os.path.isfile(plugin_name): - if Path(plugin_name).with_suffix('').name != Path(plugin_name).parent.name or \ - not Path(plugin_name).parent.parent.exists(): - # If the directory is not named for the plugin, we can't infer what - # should be done. - # FIXME: return InstInfo with entrypoint rather than source str. - return (None, plugin_name) - # We have to make inferences as to the naming here. - return (Path(plugin_name).parent.parent, Path(plugin_name).with_suffix('').name) - - -def _enable_installed(installed: InstInfo, plugin_name: str) -> Union[str, None]: - """Enable the plugin in the active config file and dynamically activate - if a lightningd rpc is available.""" - if not installed: - log.warning(f'{plugin_name}: installation aborted') - return None - - if enable(installed.name): - return f"{installed.source_loc}" - - log.error(('dynamic activation failed: ' - f'{installed.name} not found in reckless directory')) - return None - -def install(plugin_name: str) -> Union[str, None]: - """Downloads plugin from source repos, installs and activates plugin. - Returns the location of the installed plugin or "None" in the case of - failure.""" - assert isinstance(plugin_name, str) - # Specify a tag or commit to checkout by adding @ to plugin name - if '@' in plugin_name: - log.debug("testing for a commit/tag in plugin name") - name, commit = plugin_name.split('@', 1) - else: - name = plugin_name - commit = None - # Is the install request specifying a path to the plugin? - direct_location, name = location_from_name(name) - src = None - if direct_location: - logging.debug(f"install of {name} requested from {direct_location}") - src = InstInfo(name, direct_location, name) - # Treating a local git repo as a directory allows testing - # uncommitted changes. - if src and src.srctype == Source.LOCAL_REPO: - src.srctype = Source.DIRECTORY - if not src.get_inst_details(): - src = None - if not direct_location or not src: - log.debug(f"Searching for {name}") - if search(name): - global LAST_FOUND - src = LAST_FOUND - LAST_FOUND = None - src.commit = commit - log.debug(f'Retrieving {src.name} from {src.source_loc}') - else: - LAST_FOUND = None - return None - - try: - installed = _install_plugin(src) - except FileExistsError as err: - log.error(f'File exists: {err.filename}') - return None - return _enable_installed(installed, plugin_name) - - - -def uninstall(plugin_name: str) -> str: - """dDisables plugin and deletes the plugin's reckless dir. Returns the - status of the uninstall attempt.""" - assert isinstance(plugin_name, str) - log.debug(f'Uninstalling plugin {plugin_name}') - disable(plugin_name) - try: - inst = InferInstall(plugin_name) - except NotFoundError as err: - log.error(err) - return "uninstall failed" - if not Path(inst.entry).exists(): - log.error("cannot find installed plugin at expected path" - f"{inst.entry}") - return "uninstall failed" - log.debug(f'looking for {str(Path(inst.entry).parent)}') - if remove_dir(str(Path(inst.entry).parent)): - log.info(f"{inst.name} uninstalled successfully.") - else: - return "uninstall failed" - return "uninstalled" - - -def _get_all_plugins_from_source(src: str) -> list: - """Get all plugin directories from a source repository. - Returns a list of (plugin_name, source_url) tuples.""" - plugins = [] - srctype = Source.get_type(src) - if srctype == Source.UNKNOWN: - return plugins - - try: - root = SourceDir(src, srctype=srctype) - root.populate() - except Exception as e: - log.debug(f"Failed to populate source {src}: {e}") - return plugins - - plugins.append((root.name, src)) - - for item in root.contents: - if isinstance(item, SourceDir): - # Skip archive directories - if 'archive' in item.name.lower(): - continue - plugins.append((item.name, src)) - return plugins - - -def search(plugin_name: str) -> Union[InstInfo, None]: - """searches plugin index for plugin""" - ordered_sources = RECKLESS_SOURCES.copy() - - for src in RECKLESS_SOURCES: - # Search repos named after the plugin before collections - if Source.get_type(src) == Source.GITHUB_REPO: - if src.split('/')[-1].lower() == plugin_name.lower(): - ordered_sources.remove(src) - ordered_sources.insert(0, src) - # Check locally before reaching out to remote repositories - for src in RECKLESS_SOURCES: - if Source.get_type(src) in [Source.DIRECTORY, Source.LOCAL_REPO]: - ordered_sources.remove(src) - ordered_sources.insert(0, src) - - # First, collect all partial matches to display to user - partial_matches = [] - for source in ordered_sources: - for plugin_name_found, src_url in _get_all_plugins_from_source(source): - if plugin_name.lower() in plugin_name_found.lower(): - partial_matches.append((plugin_name_found, src_url)) - - # Display all partial matches - if partial_matches: - log.info(f"Plugins matching '{plugin_name}':") - for name, src_url in partial_matches: - log.info(f" {name} ({src_url})") - - # Now try exact match for installation purposes - exact_match = None - for source in ordered_sources: - srctype = Source.get_type(source) - if srctype == Source.UNKNOWN: - log.debug(f'cannot search {srctype} {source}') - continue - if srctype in [Source.DIRECTORY, Source.LOCAL_REPO, - Source.GITHUB_REPO, Source.OTHER_URL]: - found = _source_search(plugin_name, source) - if found: - log.debug(f"{found}, {found.srctype}") - exact_match = found - break - - if exact_match: - log.info(f"found {exact_match.name} in source: {exact_match.source_loc}") - log.debug(f"entry: {exact_match.entry}") - if exact_match.subdir: - log.debug(f'sub-directory: {exact_match.subdir}') - global LAST_FOUND - # Stashing the search result saves install() a call to _source_search. - LAST_FOUND = exact_match - return str(exact_match.source_loc) - - if not partial_matches: - log.info("Search exhausted all sources") - return None - - -class RPCError(Exception): - """lightning-cli fails to connect to lightningd RPC""" - def __init__(self, err): - self.err = err - - def __str__(self): - return 'RPCError({self.err})' - - -class CLIError(Exception): - """lightningd error response""" - def __init__(self, code, message): - self.code = code - self.message = message - - def __str__(self): - return f'CLIError({self.code} {self.message})' - - -def lightning_cli(*cli_args, timeout: int = 15) -> dict: - """Interfaces with Core-Lightning via CLI using any configured options.""" - cmd = LIGHTNING_CLI_CALL.copy() - cmd.extend(cli_args) - clncli = run(cmd, stdout=PIPE, stderr=PIPE, check=False, timeout=timeout) - out = clncli.stdout.decode() - if len(out) > 0 and out[0] == '{': - # If all goes well, a json object is typically returned - out = json.loads(out.replace('\n', '')) - else: - # help, -V, etc. may not return json, so stash it here. - out = {'content': out} - if clncli.returncode == 0: - return out - if clncli.returncode == 1: - # RPC doesn't like our input - # output contains 'code' and 'message' - raise CLIError(out['code'], out['message']) - # RPC may not be available - i.e., lightningd not running, using - # alternate config. - err = clncli.stderr.decode() - raise RPCError(err) - - -def enable(plugin_name: str): - """dynamically activates plugin and adds to config (persistent)""" - assert isinstance(plugin_name, str) - try: - inst = InferInstall(plugin_name) - except NotFoundError as err: - log.error(err) - return None - path = inst.entry - if not Path(path).exists(): - log.error(f'cannot find installed plugin at expected path {path}') - return None - log.debug(f'activating {plugin_name}') - try: - lightning_cli('plugin', 'start', path) - except CLIError as err: - if 'already registered' in err.message: - log.debug(f'{inst.name} is already running') - return None - else: - log.error(f'reckless: {inst.name} failed to start!') - log.error(err) - return None - except RPCError: - log.info(('lightningd rpc unavailable. ' - 'Skipping dynamic activation.')) - RECKLESS_CONFIG.enable_plugin(path) - log.info(f'{inst.name} enabled') - return 'enabled' - - -def disable(plugin_name: str): - """reckless disable - deactivates an installed plugin""" - assert isinstance(plugin_name, str) - try: - inst = InferInstall(plugin_name) - except NotFoundError as err: - log.warning(f'failed to disable: {err}') - return None - path = inst.entry - if not Path(path).exists(): - sys.stderr.write(f'Could not find plugin at {path}\n') - return None - log.debug(f'deactivating {plugin_name}') - try: - lightning_cli('plugin', 'stop', path) - except CLIError as err: - if err.code == -32602: - log.debug('plugin not currently running') - else: - log.error('lightning-cli plugin stop failed') - logging.error(err) - return None - except RPCError: - log.debug(('lightningd rpc unavailable. ' - 'Skipping dynamic deactivation.')) - RECKLESS_CONFIG.disable_plugin(path) - log.info(f'{inst.name} disabled') - return 'disabled' - - -def load_config(reckless_dir: Union[str, None] = None, - network: str = 'bitcoin') -> Config: - """Initial directory discovery and config file creation.""" - net_conf = None - # Does the lightning-cli already reference an explicit config? - try: - active_config = lightning_cli('listconfigs', timeout=10)['configs'] - if 'conf' in active_config: - net_conf = LightningBitcoinConfig(path=active_config['conf'] - ['value_str']) - except RPCError: - pass - if reckless_dir is None: - reckless_dir = Path(LIGHTNING_DIR) / 'reckless' - else: - if not os.path.isabs(reckless_dir): - reckless_dir = Path.cwd() / reckless_dir - if LIGHTNING_CONFIG: - network_path = LIGHTNING_CONFIG - else: - network_path = Path(LIGHTNING_DIR) / network / 'config' - reck_conf_path = Path(reckless_dir) / f'{network}-reckless.conf' - if net_conf: - if str(network_path) != net_conf.conf_fp: - reckless_abort('reckless configuration does not match lightningd:\n' - f'reckless network config path: {network_path}\n' - f'lightningd active config: {net_conf.conf_fp}') - else: - # The network-specific config file (bitcoin by default) - net_conf = LightningBitcoinConfig(path=network_path) - # Reckless manages plugins here. - try: - reckless_conf = RecklessConfig(path=reck_conf_path) - except FileNotFoundError: - reckless_abort('reckless config file could not be written: ' - + str(reck_conf_path)) - if not net_conf: - reckless_abort('Error: could not load or create the network specific lightningd' - ' config (default .lightning/bitcoin)') - net_conf.editConfigFile(f'include {reckless_conf.conf_fp}', None) - return reckless_conf - - -def get_sources_file() -> str: - return str(RECKLESS_DIR / '.sources') - - -def sources_from_file() -> list: - sources_file = get_sources_file() - read_sources = [] - with open(sources_file, 'r') as f: - for src in f.readlines(): - if len(src.strip()) > 0: - read_sources.append(src.strip()) - return read_sources - - -def load_sources() -> list: - """Look for the repo sources file.""" - sources_file = get_sources_file() - # This would have been created if possible - if not Path(sources_file).exists(): - log.debug('Warning: Reckless requires write access') - Config(path=str(sources_file), - default_text='https://github.com/lightningd/plugins') - return ['https://github.com/lightningd/plugins'] - return sources_from_file() - - -def add_source(src: str): - """Additional git repositories, directories, etc. are passed here.""" - assert isinstance(src, str) - # Is it a file? - maybe_path = os.path.realpath(src) - sources = Config(path=str(get_sources_file()), - default_text='https://github.com/lightningd/plugins') - if Path(maybe_path).exists(): - if os.path.isdir(maybe_path): - sources.editConfigFile(src, None) - elif 'github.com' in src or 'http://' in src or 'https://' in src: - sources.editConfigFile(src, None) - else: - log.warning(f'failed to add source {src}') - return None - return sources_from_file() - - -def remove_source(src: str): - """Remove a source from the sources file.""" - assert isinstance(src, str) - if src in sources_from_file(): - my_file = Config(path=get_sources_file(), - default_text='https://github.com/lightningd/plugins') - my_file.editConfigFile(None, src) - log.info('plugin source removed') - else: - log.warning(f'source not found: {src}') - return sources_from_file() - - -def list_source(): - """Provide the user with all stored source repositories.""" - for src in sources_from_file(): - log.info(src) - return sources_from_file() - - -class UpdateStatus(Enum): - SUCCESS = 0 - LATEST = 1 - UNINSTALLED = 2 - ERROR = 3 - METADATA_MISSING = 4 - REFUSING_UPDATE = 5 - - -def update_plugin(plugin_name: str) -> tuple: - """Check for an installed plugin, if metadata for it exists, update - to the latest available while using the same source.""" - log.info(f"updating {plugin_name}") - if not (Path(RECKLESS_CONFIG.reckless_dir) / plugin_name).exists(): - log.error(f'{plugin_name} is not installed') - return (None, UpdateStatus.UNINSTALLED) - metadata_file = Path(RECKLESS_CONFIG.reckless_dir) / plugin_name / '.metadata' - if not metadata_file.exists(): - log.warning(f"no metadata file for {plugin_name}") - return (None, UpdateStatus.METADATA_MISSING) - - metadata = {'installation date': None, - 'installation time': None, - 'original source': None, - 'requested commit': None, - 'installed commit': None, - } - with open(metadata_file, "r") as meta: - metadata_lines = meta.readlines() - for line_no, line in enumerate(metadata_lines): - if line_no > 0 and metadata_lines[line_no - 1].strip() in metadata: - metadata.update({metadata_lines[line_no - 1].strip(): line.strip()}) - for key in metadata: - if metadata[key].lower() == 'none': - metadata[key] = None - log.debug(f'{plugin_name} previous installation metadata: {str(metadata)}') - if metadata['requested commit']: - log.warning(f'refusing to upgrade {plugin_name}@{metadata["requested commit"]} due to previously requested tag/commit') - return (None, UpdateStatus.REFUSING_UPDATE) - - src = InstInfo(plugin_name, - metadata['original source'], None) - if not src.get_inst_details(): - log.error(f'cannot locate {plugin_name} in original source {metadata["original_source"]}') - return (None, UpdateStatus.ERROR) - repo_commit = src.get_repo_commit() - if not repo_commit: - log.debug('source commit not available') - else: - log.debug(f'source commit: {repo_commit}') - if repo_commit and repo_commit == metadata['installed commit']: - log.info(f'Installed {plugin_name} is already latest @{repo_commit}') - return (None, UpdateStatus.LATEST) - uninstall(plugin_name) - try: - installed = _install_plugin(src) - except FileExistsError as err: - log.error(f'File exists: {err.filename}') - return (None, UpdateStatus.ERROR) - result = _enable_installed(installed, plugin_name) - if result: - return (result, UpdateStatus.SUCCESS) - return (result, UpdateStatus.ERROR) - - -def update_plugins(plugin_name: str): - """user requested plugin upgrade(s)""" - if plugin_name: - installed = update_plugin(plugin_name) - if not installed[0] and installed[1] != UpdateStatus.LATEST: - log.error(f'{plugin_name} update aborted') - return installed[0] - - log.info("updating all plugins") - update_results = [] - for plugin in os.listdir(RECKLESS_CONFIG.reckless_dir): - if not (Path(RECKLESS_CONFIG.reckless_dir) / plugin).is_dir(): - continue - if len(plugin) > 0 and plugin[0] == '.': - continue - update_results.append(update_plugin(plugin)[0]) - return update_results - - -def report_version() -> str: - """return reckless version""" - log.info(__VERSION__) - log.add_result(__VERSION__) - - -def unpack_json_arg(json_target: str) -> list: - """validate json for any command line targets passes as a json array""" - try: - targets = json.loads(json_target) - except json.decoder.JSONDecodeError: - return None - if isinstance(targets, list): - return targets - log.warning(f'input {target_list} is not a json array') - return None - - -class StoreIdempotent(argparse.Action): - """Make the option idempotent. This adds a secondary argument that doesn't - get reinitialized. The downside is it""" - def __init__(self, option_strings, dest, nargs=None, **kwargs): - super().__init__(option_strings, dest, **kwargs) - - def __call__(self, parser, namespace, values, option_string=None): - if option_string: - setattr(namespace, self.dest, values) - setattr(namespace, f'{self.dest}_idempotent', values) - - -class StoreTrueIdempotent(argparse._StoreConstAction): - """Make the option idempotent""" - def __init__(self, option_strings, dest, default=False, - required=False, nargs=None, const=None, help=None): - super().__init__(option_strings=option_strings, dest=dest, - const=const, help=help) - - def __call__(self, parser, namespace, values, option_string=None): - if option_string: - setattr(namespace, self.dest, True) - setattr(namespace, f'{self.dest}_idempotent', True) - - -def process_idempotent_args(args): - """Swap idempotently set arguments back in for the default arg names.""" - original_args = dict(vars(args)) - for arg, value in original_args.items(): - if f"{arg}_idempotent" in vars(args): - setattr(args, f"{arg}", vars(args)[f"{arg}_idempotent"]) - delattr(args, f"{arg}_idempotent") - return args - - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - cmd1 = parser.add_subparsers(dest='cmd1', help='command', - required=False) - - install_cmd = cmd1.add_parser('install', help='search for and install a ' - 'plugin, then test and activate') - install_cmd.add_argument('targets', type=str, nargs='*') - install_cmd.set_defaults(func=install) - - uninstall_cmd = cmd1.add_parser('uninstall', help='deactivate a plugin ' - 'and remove it from the directory') - uninstall_cmd.add_argument('targets', type=str, nargs='*') - uninstall_cmd.set_defaults(func=uninstall) - - search_cmd = cmd1.add_parser('search', help='search for a plugin from ' - 'the available source repositories') - search_cmd.add_argument('targets', type=str, nargs='*') - search_cmd.set_defaults(func=search) - - enable_cmd = cmd1.add_parser('enable', help='dynamically enable a plugin ' - 'and update config') - enable_cmd.add_argument('targets', type=str, nargs='*') - enable_cmd.set_defaults(func=enable) - disable_cmd = cmd1.add_parser('disable', help='disable a plugin') - disable_cmd.add_argument('targets', type=str, nargs='*') - disable_cmd.set_defaults(func=disable) - source_parser = cmd1.add_parser('source', help='manage plugin search ' - 'sources') - source_subs = source_parser.add_subparsers(dest='source_subs', - required=True) - list_parse = source_subs.add_parser('list', help='list available plugin ' - 'sources (repositories)') - list_parse.set_defaults(func=list_source) - source_add = source_subs.add_parser('add', help='add a source repository') - source_add.add_argument('targets', type=str, nargs='*') - source_add.set_defaults(func=add_source) - source_rem = source_subs.add_parser('remove', aliases=['rem', 'rm'], - help='remove a plugin source ' - 'repository') - source_rem.add_argument('targets', type=str, nargs='*') - source_rem.set_defaults(func=remove_source) - update = cmd1.add_parser('update', help='update plugins to lastest version') - update.add_argument('targets', type=str, nargs='*') - update.set_defaults(func=update_plugins) - - help_cmd = cmd1.add_parser('help', help='for contextual help, use ' - '"reckless -h"') - help_cmd.add_argument('targets', type=str, nargs='*') - help_cmd.set_defaults(func=help_alias) - parser.add_argument('-V', '--version', - action=StoreTrueIdempotent, const=None, - help='print version and exit') - - all_parsers = [parser, install_cmd, uninstall_cmd, search_cmd, enable_cmd, - disable_cmd, list_parse, source_add, source_rem, help_cmd, - update] - for p in all_parsers: - # This default depends on the .lightning directory - p.add_argument('-d', '--reckless-dir', action=StoreIdempotent, - help='specify a data directory for reckless to use', - type=str, default=None) - p.add_argument('-l', '--lightning', type=str, action=StoreIdempotent, - help='lightning data directory ' - '(default:~/.lightning)', - default=Path.home().joinpath('.lightning')) - p.add_argument('-c', '--conf', action=StoreIdempotent, - help=' config file used by lightningd', - type=str, - default=None) - p.add_argument('-r', '--regtest', action=StoreTrueIdempotent) - p.add_argument('--network', action=StoreIdempotent, - help="specify a network to use (default: bitcoin)", - type=str) - p.add_argument('-v', '--verbose', action=StoreTrueIdempotent, - const=None) - p.add_argument('-j', '--json', action=StoreTrueIdempotent, - help='output in json format') - - args = parser.parse_args() - args = process_idempotent_args(args) - - if args.json: - log.capture = True - stdout_redirect = PIPE - stderr_redirect = PIPE - else: - stdout_redirect = None - stderr_redirect = None - - if args.verbose: - logging.root.setLevel(logging.DEBUG) - else: - logging.root.setLevel(logging.INFO) - - NETWORK = 'regtest' if args.regtest else 'bitcoin' - SUPPORTED_NETWORKS = ['bitcoin', 'regtest', 'liquid', 'liquid-regtest', - 'signet', 'testnet', 'testnet4'] - if args.version: - report_version() - elif args.cmd1 is None: - parser.print_help(sys.stdout) - sys.exit(1) - if args.network: - if args.network in SUPPORTED_NETWORKS: - NETWORK = args.network - else: - log.error(f"{args.network} network not supported") - LIGHTNING_DIR = Path(args.lightning) - # This env variable is set under CI testing - LIGHTNING_CLI_CALL = [os.environ.get('LIGHTNING_CLI')] - if LIGHTNING_CLI_CALL == [None]: - LIGHTNING_CLI_CALL = ['lightning-cli'] - if NETWORK != 'bitcoin': - LIGHTNING_CLI_CALL.append(f'--network={NETWORK}') - if LIGHTNING_DIR != Path.home().joinpath('.lightning'): - LIGHTNING_CLI_CALL.append(f'--lightning-dir={LIGHTNING_DIR}') - if args.reckless_dir: - RECKLESS_DIR = Path(args.reckless_dir) - else: - RECKLESS_DIR = Path(LIGHTNING_DIR) / 'reckless' - LIGHTNING_CONFIG = args.conf - RECKLESS_CONFIG = load_config(reckless_dir=str(RECKLESS_DIR), - network=NETWORK) - RECKLESS_SOURCES = load_sources() - API_GITHUB_COM = 'https://api.github.com' - GITHUB_COM = 'https://github.com' - # Used for blackbox testing to avoid hitting github servers - if 'REDIR_GITHUB_API' in os.environ: - API_GITHUB_COM = os.environ['REDIR_GITHUB_API'] - if 'REDIR_GITHUB' in os.environ: - GITHUB_COM = os.environ['REDIR_GITHUB'] - - GITHUB_API_FALLBACK = False - if 'GITHUB_API_FALLBACK' in os.environ: - GITHUB_API_FALLBACK = os.environ['GITHUB_API_FALLBACK'] - - if 'targets' in args: # and len(args.targets) > 0: - if args.func.__name__ == 'help_alias': - args.func(args.targets) - sys.exit(0) - # Catch a missing argument so that we can overload functions. - if len(args.targets) == 0: - args.targets=[None] - for target in args.targets: - # Accept single item arguments, or a json array - try: - target_list = unpack_json_arg(target) - if target_list: - for tar in target_list: - log.add_result(args.func(tar)) - else: - log.add_result(args.func(target)) - except TypeError: - if len(args.targets) == 1: - log.add_result(args.func(target)) - elif 'func' in args: - log.add_result(args.func()) - - if log.capture: - log.reply_json() From 6fec586352cd32ae8ade1bfe767aafb7a1180288 Mon Sep 17 00:00:00 2001 From: ScuttoZ Date: Fri, 24 Jul 2026 11:05:36 +0200 Subject: [PATCH 02/20] typo: changed "lintintalled" instances to "listinstalled" --- .msggen.json | 30 +- cln-grpc/proto/node.proto | 4 +- cln-grpc/src/convert.rs | 8 +- contrib/msggen/msggen/schema.json | 2 +- contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py | 316 +++++++++--------- contrib/pyln-testing/pyln/testing/grpc2py.py | 4 +- doc/schemas/reckless.json | 2 +- 7 files changed, 183 insertions(+), 183 deletions(-) diff --git a/.msggen.json b/.msggen.json index d86be6191f54..7a139886be01 100644 --- a/.msggen.json +++ b/.msggen.json @@ -4005,13 +4005,13 @@ "Reckless.listavailable[].manifest.required_options[]": 7, "Reckless.listavailable[].manifest.short_description": 8 }, - "RecklessListintalled": { - "Reckless.listintalled[].installation_date": 1, - "Reckless.listintalled[].installation_time": 2, - "Reckless.listintalled[].installed_commit": 3, - "Reckless.listintalled[].original_source": 4, - "Reckless.listintalled[].plugin_name": 5, - "Reckless.listintalled[].requested_commit": 6 + "RecklessListinstalled": { + "Reckless.listinstalled[].installation_date": 1, + "Reckless.listinstalled[].installation_time": 2, + "Reckless.listinstalled[].installed_commit": 3, + "Reckless.listinstalled[].original_source": 4, + "Reckless.listinstalled[].plugin_name": 5, + "Reckless.listinstalled[].requested_commit": 6 }, "RecklessLogNotification": { "reckless_log.level": 1, @@ -4034,7 +4034,7 @@ "Reckless.enable": 2, "Reckless.install": 3, "Reckless.listavailable[]": 4, - "Reckless.listintalled[]": 5, + "Reckless.listinstalled[]": 5, "Reckless.log[]": 6, "Reckless.sources[]": 7, "Reckless.tip": 8, @@ -13756,31 +13756,31 @@ "added": "v26.09", "deprecated": null }, - "Reckless.listintalled[]": { + "Reckless.listinstalled[]": { "added": "v26.09", "deprecated": null }, - "Reckless.listintalled[].installation_date": { + "Reckless.listinstalled[].installation_date": { "added": "v26.09", "deprecated": null }, - "Reckless.listintalled[].installation_time": { + "Reckless.listinstalled[].installation_time": { "added": "v26.09", "deprecated": null }, - "Reckless.listintalled[].installed_commit": { + "Reckless.listinstalled[].installed_commit": { "added": "v26.09", "deprecated": null }, - "Reckless.listintalled[].original_source": { + "Reckless.listinstalled[].original_source": { "added": "v26.09", "deprecated": null }, - "Reckless.listintalled[].plugin_name": { + "Reckless.listinstalled[].plugin_name": { "added": "v26.09", "deprecated": null }, - "Reckless.listintalled[].requested_commit": { + "Reckless.listinstalled[].requested_commit": { "added": "v26.09", "deprecated": null }, diff --git a/cln-grpc/proto/node.proto b/cln-grpc/proto/node.proto index 533fdf36b56c..05b56fd32292 100644 --- a/cln-grpc/proto/node.proto +++ b/cln-grpc/proto/node.proto @@ -4698,7 +4698,7 @@ message RecklessResponse { optional RecklessEnable enable = 2; optional RecklessInstall install = 3; repeated RecklessListavailable listavailable = 4; - repeated RecklessListintalled listintalled = 5; + repeated RecklessListinstalled listinstalled = 5; repeated string log = 6; repeated string sources = 7; optional RecklessTip tip = 8; @@ -4751,7 +4751,7 @@ message RecklessListavailableManifest { optional string short_description = 8; } -message RecklessListintalled { +message RecklessListinstalled { string installation_date = 1; double installation_time = 2; optional string installed_commit = 3; diff --git a/cln-grpc/src/convert.rs b/cln-grpc/src/convert.rs index 8e38f7f06cba..abaf0436005b 100644 --- a/cln-grpc/src/convert.rs +++ b/cln-grpc/src/convert.rs @@ -5157,8 +5157,8 @@ impl From for pb::RecklessListavailable { } #[allow(unused_variables)] -impl From for pb::RecklessListintalled { - fn from(c: responses::RecklessListintalled) -> Self { +impl From for pb::RecklessListinstalled { + fn from(c: responses::RecklessListinstalled) -> Self { Self { installation_date: c.installation_date, // Rule #2 for type string installation_time: c.installation_time, // Rule #2 for type number @@ -5212,8 +5212,8 @@ impl From for pb::RecklessResponse { install: c.install.map(|v| v.into()), // Field: Reckless.listavailable[] listavailable: c.listavailable.map(|arr| arr.into_iter().map(|i| i.into()).collect()).unwrap_or(vec![]), // Rule #3 - // Field: Reckless.listintalled[] - listintalled: c.listintalled.map(|arr| arr.into_iter().map(|i| i.into()).collect()).unwrap_or(vec![]), // Rule #3 + // Field: Reckless.listinstalled[] + listinstalled: c.listinstalled.map(|arr| arr.into_iter().map(|i| i.into()).collect()).unwrap_or(vec![]), // Rule #3 // Field: Reckless.log[] log: c.log.into_iter().map(|i| i.into()).collect(), // Rule #3 for type string // Field: Reckless.sources[] diff --git a/contrib/msggen/msggen/schema.json b/contrib/msggen/msggen/schema.json index 15d710544ef9..cafe011fb380 100644 --- a/contrib/msggen/msggen/schema.json +++ b/contrib/msggen/msggen/schema.json @@ -33931,7 +33931,7 @@ "additionalProperties": false } }, - "listintalled": { + "listinstalled": { "type": "array", "added": "v26.09", "items": { diff --git a/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py b/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py index 482bc4de8a57..e5c61bf6cd94 100644 --- a/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py +++ b/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py @@ -25,7 +25,7 @@ from pyln.grpc import primitives_pb2 as primitives__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\nnode.proto\x12\x03\x63ln\x1a\x10primitives.proto\"\x10\n\x0eGetinfoRequest\"\xb1\x04\n\x0fGetinfoResponse\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\r\n\x05\x61lias\x18\x02 \x01(\t\x12\r\n\x05\x63olor\x18\x03 \x01(\x0c\x12\x11\n\tnum_peers\x18\x04 \x01(\r\x12\x1c\n\x14num_pending_channels\x18\x05 \x01(\r\x12\x1b\n\x13num_active_channels\x18\x06 \x01(\r\x12\x1d\n\x15num_inactive_channels\x18\x07 \x01(\r\x12\x0f\n\x07version\x18\x08 \x01(\t\x12\x15\n\rlightning_dir\x18\t \x01(\t\x12\x32\n\x0cour_features\x18\n \x01(\x0b\x32\x17.cln.GetinfoOurFeaturesH\x00\x88\x01\x01\x12\x13\n\x0b\x62lockheight\x18\x0b \x01(\r\x12\x0f\n\x07network\x18\x0c \x01(\t\x12(\n\x13\x66\x65\x65s_collected_msat\x18\r \x01(\x0b\x32\x0b.cln.Amount\x12$\n\x07\x61\x64\x64ress\x18\x0e \x03(\x0b\x32\x13.cln.GetinfoAddress\x12$\n\x07\x62inding\x18\x0f \x03(\x0b\x32\x13.cln.GetinfoBinding\x12\"\n\x15warning_bitcoind_sync\x18\x10 \x01(\tH\x01\x88\x01\x01\x12$\n\x17warning_lightningd_sync\x18\x11 \x01(\tH\x02\x88\x01\x01\x42\x0f\n\r_our_featuresB\x18\n\x16_warning_bitcoind_syncB\x1a\n\x18_warning_lightningd_sync\"\xc4\x01\n\x0eGetinfoAddress\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.GetinfoAddress.GetinfoAddressType\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x00\x88\x01\x01\"G\n\x12GetinfoAddressType\x12\x07\n\x03\x44NS\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x42\n\n\x08_address\"\xac\x02\n\x0eGetinfoBinding\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.GetinfoBinding.GetinfoBindingType\x12\x14\n\x07\x61\x64\x64ress\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04port\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06socket\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x14\n\x07subtype\x18\x05 \x01(\tH\x03\x88\x01\x01\"_\n\x12GetinfoBindingType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x12\r\n\tWEBSOCKET\x10\x05\x42\n\n\x08_addressB\x07\n\x05_portB\t\n\x07_socketB\n\n\x08_subtype\"R\n\x12GetinfoOurFeatures\x12\x0c\n\x04init\x18\x01 \x01(\x0c\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x0f\n\x07\x63hannel\x18\x03 \x01(\x0c\x12\x0f\n\x07invoice\x18\x04 \x01(\x0c\"\xb5\x01\n\x10ListpeersRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x38\n\x05level\x18\x02 \x01(\x0e\x32$.cln.ListpeersRequest.ListpeersLevelH\x01\x88\x01\x01\"E\n\x0eListpeersLevel\x12\x06\n\x02IO\x10\x00\x12\t\n\x05\x44\x45\x42UG\x10\x01\x12\x08\n\x04INFO\x10\x02\x12\x0b\n\x07UNUSUAL\x10\x03\x12\t\n\x05TRACE\x10\x04\x42\x05\n\x03_idB\x08\n\x06_level\"7\n\x11ListpeersResponse\x12\"\n\x05peers\x18\x01 \x03(\x0b\x32\x13.cln.ListpeersPeers\"\xc9\x01\n\x0eListpeersPeers\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x11\n\tconnected\x18\x02 \x01(\x08\x12#\n\x03log\x18\x03 \x03(\x0b\x32\x16.cln.ListpeersPeersLog\x12\x0f\n\x07netaddr\x18\x05 \x03(\t\x12\x15\n\x08\x66\x65\x61tures\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12\x18\n\x0bremote_addr\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x0cnum_channels\x18\x08 \x01(\rB\x0b\n\t_featuresB\x0e\n\x0c_remote_addr\"\x88\x03\n\x11ListpeersPeersLog\x12?\n\titem_type\x18\x01 \x01(\x0e\x32,.cln.ListpeersPeersLog.ListpeersPeersLogType\x12\x18\n\x0bnum_skipped\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04time\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06source\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x10\n\x03log\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x07node_id\x18\x06 \x01(\x0cH\x04\x88\x01\x01\x12\x11\n\x04\x64\x61ta\x18\x07 \x01(\x0cH\x05\x88\x01\x01\"t\n\x15ListpeersPeersLogType\x12\x0b\n\x07SKIPPED\x10\x00\x12\n\n\x06\x42ROKEN\x10\x01\x12\x0b\n\x07UNUSUAL\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\t\n\x05\x44\x45\x42UG\x10\x04\x12\t\n\x05IO_IN\x10\x05\x12\n\n\x06IO_OUT\x10\x06\x12\t\n\x05TRACE\x10\x07\x42\x0e\n\x0c_num_skippedB\x07\n\x05_timeB\t\n\x07_sourceB\x06\n\x04_logB\n\n\x08_node_idB\x07\n\x05_data\"0\n\x10ListfundsRequest\x12\x12\n\x05spent\x18\x01 \x01(\x08H\x00\x88\x01\x01\x42\x08\n\x06_spent\"e\n\x11ListfundsResponse\x12&\n\x07outputs\x18\x01 \x03(\x0b\x32\x15.cln.ListfundsOutputs\x12(\n\x08\x63hannels\x18\x02 \x03(\x0b\x32\x16.cln.ListfundsChannels\"\x97\x02\n\x11ListfundsChannels\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12$\n\x0four_amount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66unding_txid\x18\x04 \x01(\x0c\x12\x16\n\x0e\x66unding_output\x18\x05 \x01(\r\x12\x11\n\tconnected\x18\x06 \x01(\x08\x12 \n\x05state\x18\x07 \x01(\x0e\x32\x11.cln.ChannelState\x12\x1d\n\x10short_channel_id\x18\x08 \x01(\tH\x00\x88\x01\x01\x12\x12\n\nchannel_id\x18\t \x01(\x0c\x42\x13\n\x11_short_channel_id\"\xb9\x03\n\x10ListfundsOutputs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06output\x18\x02 \x01(\r\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0cscriptpubkey\x18\x04 \x01(\x0c\x12\x14\n\x07\x61\x64\x64ress\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0credeemscript\x18\x06 \x01(\x0cH\x01\x88\x01\x01\x12<\n\x06status\x18\x07 \x01(\x0e\x32,.cln.ListfundsOutputs.ListfundsOutputsStatus\x12\x18\n\x0b\x62lockheight\x18\x08 \x01(\rH\x02\x88\x01\x01\x12\x10\n\x08reserved\x18\t \x01(\x08\x12\x1e\n\x11reserved_to_block\x18\n \x01(\rH\x03\x88\x01\x01\"Q\n\x16ListfundsOutputsStatus\x12\x0f\n\x0bUNCONFIRMED\x10\x00\x12\r\n\tCONFIRMED\x10\x01\x12\t\n\x05SPENT\x10\x02\x12\x0c\n\x08IMMATURE\x10\x03\x42\n\n\x08_addressB\x0f\n\r_redeemscriptB\x0e\n\x0c_blockheightB\x14\n\x12_reserved_to_block\"\xbb\x03\n\x0eSendpayRequest\x12 \n\x05route\x18\x01 \x03(\x0b\x32\x11.cln.SendpayRoute\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x12\n\x05label\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x1b\n\x0epayment_secret\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x13\n\x06partid\x18\x07 \x01(\x04H\x03\x88\x01\x01\x12\x14\n\x07groupid\x18\t \x01(\x04H\x04\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\x0b \x01(\x0cH\x06\x88\x01\x01\x12\x1d\n\x10payment_metadata\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\r \x01(\tH\x08\x88\x01\x01\x42\x08\n\x06_labelB\t\n\x07_bolt11B\x11\n\x0f_payment_secretB\t\n\x07_partidB\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x13\n\x11_payment_metadataB\x0e\n\x0c_description\"\x96\x05\n\x0fSendpayResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x07groupid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x32\n\x06status\x18\x04 \x01(\x0e\x32\".cln.SendpayResponse.SendpayStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06partid\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x14\n\x07message\x18\x0e \x01(\tH\x08\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0f \x01(\x04H\t\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\n\x88\x01\x01\"*\n\rSendpayStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x42\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\n\n\x08_messageB\x0f\n\r_completed_atB\x10\n\x0e_updated_index\"\xe6\x02\n\x0cSendpayRoute\x12\x0f\n\x02id\x18\x02 \x01(\x0cH\x00\x88\x01\x01\x12\x12\n\x05\x64\x65lay\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x14\n\x07\x63hannel\x18\x04 \x01(\tH\x02\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12!\n\x14short_channel_id_dir\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x18\n\x0bnode_id_out\x18\x07 \x01(\x0cH\x05\x88\x01\x01\x12)\n\x0f\x61mount_out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x15\n\x08\x63ltv_out\x18\t \x01(\rH\x07\x88\x01\x01\x42\x05\n\x03_idB\x08\n\x06_delayB\n\n\x08_channelB\x0e\n\x0c_amount_msatB\x17\n\x15_short_channel_id_dirB\x0e\n\x0c_node_id_outB\x12\n\x10_amount_out_msatB\x0b\n\t_cltv_out\"\x93\x01\n\x13ListchannelsRequest\x12\x1d\n\x10short_channel_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06source\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x42\x13\n\x11_short_channel_idB\t\n\x07_sourceB\x0e\n\x0c_destination\"C\n\x14ListchannelsResponse\x12+\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x19.cln.ListchannelsChannels\"\xb3\x03\n\x14ListchannelsChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\x0e\n\x06public\x18\x04 \x01(\x08\x12 \n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x15\n\rmessage_flags\x18\x06 \x01(\r\x12\x15\n\rchannel_flags\x18\x07 \x01(\r\x12\x0e\n\x06\x61\x63tive\x18\x08 \x01(\x08\x12\x13\n\x0blast_update\x18\t \x01(\r\x12\x1d\n\x15\x62\x61se_fee_millisatoshi\x18\n \x01(\r\x12\x19\n\x11\x66\x65\x65_per_millionth\x18\x0b \x01(\r\x12\r\n\x05\x64\x65lay\x18\x0c \x01(\r\x12&\n\x11htlc_minimum_msat\x18\r \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x11htlc_maximum_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x10\n\x08\x66\x65\x61tures\x18\x0f \x01(\x0c\x12\x11\n\tdirection\x18\x10 \x01(\rB\x14\n\x12_htlc_maximum_msat\"#\n\x10\x41\x64\x64gossipRequest\x12\x0f\n\x07message\x18\x01 \x01(\x0c\"\x13\n\x11\x41\x64\x64gossipResponse\"\xaf\x01\n\x14\x41\x64\x64psbtoutputRequest\x12\x1f\n\x07satoshi\x18\x01 \x01(\x0b\x32\x0e.cln.AmountSat\x12\x15\n\x08locktime\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x18\n\x0binitialpsbt\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x04 \x01(\tH\x02\x88\x01\x01\x42\x0b\n\t_locktimeB\x0e\n\x0c_initialpsbtB\x0e\n\x0c_destination\"U\n\x15\x41\x64\x64psbtoutputResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x1e\n\x16\x65stimated_added_weight\x18\x02 \x01(\r\x12\x0e\n\x06outnum\x18\x03 \x01(\r\"O\n\x14\x41utocleanonceRequest\x12*\n\tsubsystem\x18\x01 \x01(\x0e\x32\x17.cln.AutocleanSubsystem\x12\x0b\n\x03\x61ge\x18\x02 \x01(\x04\"G\n\x15\x41utocleanonceResponse\x12.\n\tautoclean\x18\x01 \x01(\x0b\x32\x1b.cln.AutocleanonceAutoclean\"\x89\x05\n\x16\x41utocleanonceAutoclean\x12L\n\x11succeededforwards\x18\x01 \x01(\x0b\x32,.cln.AutocleanonceAutocleanSucceededforwardsH\x00\x88\x01\x01\x12\x46\n\x0e\x66\x61iledforwards\x18\x02 \x01(\x0b\x32).cln.AutocleanonceAutocleanFailedforwardsH\x01\x88\x01\x01\x12\x44\n\rsucceededpays\x18\x03 \x01(\x0b\x32(.cln.AutocleanonceAutocleanSucceededpaysH\x02\x88\x01\x01\x12>\n\nfailedpays\x18\x04 \x01(\x0b\x32%.cln.AutocleanonceAutocleanFailedpaysH\x03\x88\x01\x01\x12\x42\n\x0cpaidinvoices\x18\x05 \x01(\x0b\x32\'.cln.AutocleanonceAutocleanPaidinvoicesH\x04\x88\x01\x01\x12H\n\x0f\x65xpiredinvoices\x18\x06 \x01(\x0b\x32*.cln.AutocleanonceAutocleanExpiredinvoicesH\x05\x88\x01\x01\x12\x44\n\rnetworkevents\x18\x07 \x01(\x0b\x32(.cln.AutocleanonceAutocleanNetworkeventsH\x06\x88\x01\x01\x42\x14\n\x12_succeededforwardsB\x11\n\x0f_failedforwardsB\x10\n\x0e_succeededpaysB\r\n\x0b_failedpaysB\x0f\n\r_paidinvoicesB\x12\n\x10_expiredinvoicesB\x10\n\x0e_networkevents\"K\n%AutocleanonceAutocleanExpiredinvoices\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"J\n$AutocleanonceAutocleanFailedforwards\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"F\n AutocleanonceAutocleanFailedpays\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"I\n#AutocleanonceAutocleanNetworkevents\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"H\n\"AutocleanonceAutocleanPaidinvoices\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"M\n\'AutocleanonceAutocleanSucceededforwards\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"I\n#AutocleanonceAutocleanSucceededpays\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"W\n\x16\x41utocleanstatusRequest\x12/\n\tsubsystem\x18\x01 \x01(\x0e\x32\x17.cln.AutocleanSubsystemH\x00\x88\x01\x01\x42\x0c\n\n_subsystem\"K\n\x17\x41utocleanstatusResponse\x12\x30\n\tautoclean\x18\x01 \x01(\x0b\x32\x1d.cln.AutocleanstatusAutoclean\"\x99\x05\n\x18\x41utocleanstatusAutoclean\x12N\n\x11succeededforwards\x18\x01 \x01(\x0b\x32..cln.AutocleanstatusAutocleanSucceededforwardsH\x00\x88\x01\x01\x12H\n\x0e\x66\x61iledforwards\x18\x02 \x01(\x0b\x32+.cln.AutocleanstatusAutocleanFailedforwardsH\x01\x88\x01\x01\x12\x46\n\rsucceededpays\x18\x03 \x01(\x0b\x32*.cln.AutocleanstatusAutocleanSucceededpaysH\x02\x88\x01\x01\x12@\n\nfailedpays\x18\x04 \x01(\x0b\x32\'.cln.AutocleanstatusAutocleanFailedpaysH\x03\x88\x01\x01\x12\x44\n\x0cpaidinvoices\x18\x05 \x01(\x0b\x32).cln.AutocleanstatusAutocleanPaidinvoicesH\x04\x88\x01\x01\x12J\n\x0f\x65xpiredinvoices\x18\x06 \x01(\x0b\x32,.cln.AutocleanstatusAutocleanExpiredinvoicesH\x05\x88\x01\x01\x12\x46\n\rnetworkevents\x18\x07 \x01(\x0b\x32*.cln.AutocleanstatusAutocleanNetworkeventsH\x06\x88\x01\x01\x42\x14\n\x12_succeededforwardsB\x11\n\x0f_failedforwardsB\x10\n\x0e_succeededpaysB\r\n\x0b_failedpaysB\x0f\n\r_paidinvoicesB\x12\n\x10_expiredinvoicesB\x10\n\x0e_networkevents\"e\n\'AutocleanstatusAutocleanExpiredinvoices\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"d\n&AutocleanstatusAutocleanFailedforwards\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"`\n\"AutocleanstatusAutocleanFailedpays\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"c\n%AutocleanstatusAutocleanNetworkevents\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"b\n$AutocleanstatusAutocleanPaidinvoices\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"g\n)AutocleanstatusAutocleanSucceededforwards\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"c\n%AutocleanstatusAutocleanSucceededpays\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"U\n\x13\x43heckmessageRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\r\n\x05zbase\x18\x02 \x01(\t\x12\x13\n\x06pubkey\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x42\t\n\x07_pubkey\"8\n\x14\x43heckmessageResponse\x12\x10\n\x08verified\x18\x01 \x01(\x08\x12\x0e\n\x06pubkey\x18\x02 \x01(\x0c\"\xcb\x02\n\x0c\x43loseRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x1e\n\x11unilateraltimeout\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\tH\x01\x88\x01\x01\x12!\n\x14\x66\x65\x65_negotiation_step\x18\x04 \x01(\tH\x02\x88\x01\x01\x12)\n\rwrong_funding\x18\x05 \x01(\x0b\x32\r.cln.OutpointH\x03\x88\x01\x01\x12\x1f\n\x12\x66orce_lease_closed\x18\x06 \x01(\x08H\x04\x88\x01\x01\x12\x1e\n\x08\x66\x65\x65range\x18\x07 \x03(\x0b\x32\x0c.cln.FeerateB\x14\n\x12_unilateraltimeoutB\x0e\n\x0c_destinationB\x17\n\x15_fee_negotiation_stepB\x10\n\x0e_wrong_fundingB\x15\n\x13_force_lease_closed\"\x93\x01\n\rCloseResponse\x12/\n\titem_type\x18\x01 \x01(\x0e\x32\x1c.cln.CloseResponse.CloseType\x12\x0b\n\x03txs\x18\x04 \x03(\x0c\x12\r\n\x05txids\x18\x05 \x03(\x0c\"5\n\tCloseType\x12\n\n\x06MUTUAL\x10\x00\x12\x0e\n\nUNILATERAL\x10\x01\x12\x0c\n\x08UNOPENED\x10\x02\"T\n\x0e\x43onnectRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\x04host\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04port\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x07\n\x05_hostB\x07\n\x05_port\"\xb4\x01\n\x0f\x43onnectResponse\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x10\n\x08\x66\x65\x61tures\x18\x02 \x01(\x0c\x12\x38\n\tdirection\x18\x03 \x01(\x0e\x32%.cln.ConnectResponse.ConnectDirection\x12$\n\x07\x61\x64\x64ress\x18\x04 \x01(\x0b\x32\x13.cln.ConnectAddress\"#\n\x10\x43onnectDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\"\xfb\x01\n\x0e\x43onnectAddress\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.ConnectAddress.ConnectAddressType\x12\x13\n\x06socket\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04port\x18\x04 \x01(\rH\x02\x88\x01\x01\"P\n\x12\x43onnectAddressType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x42\t\n\x07_socketB\n\n\x08_addressB\x07\n\x05_port\"J\n\x14\x43reateinvoiceRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12\x10\n\x08preimage\x18\x03 \x01(\x0c\"\xe6\x05\n\x15\x43reateinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x06\x62olt11\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x04 \x01(\x0c\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12>\n\x06status\x18\x06 \x01(\x0e\x32..cln.CreateinvoiceResponse.CreateinvoiceStatus\x12\x13\n\x0b\x64\x65scription\x18\x07 \x01(\t\x12\x12\n\nexpires_at\x18\x08 \x01(\x04\x12\x16\n\tpay_index\x18\t \x01(\x04H\x03\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x06\x88\x01\x01\x12\x1b\n\x0elocal_offer_id\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0f \x01(\tH\x08\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12:\n\rpaid_outpoint\x18\x11 \x01(\x0b\x32\x1e.cln.CreateinvoicePaidOutpointH\t\x88\x01\x01\"8\n\x13\x43reateinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x11\n\x0f_local_offer_idB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_paid_outpoint\"9\n\x19\x43reateinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\xb4\x02\n\x10\x44\x61tastoreRequest\x12\x10\n\x03hex\x18\x02 \x01(\x0cH\x00\x88\x01\x01\x12\x36\n\x04mode\x18\x03 \x01(\x0e\x32#.cln.DatastoreRequest.DatastoreModeH\x01\x88\x01\x01\x12\x17\n\ngeneration\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\t\x12\x13\n\x06string\x18\x06 \x01(\tH\x03\x88\x01\x01\"p\n\rDatastoreMode\x12\x0f\n\x0bMUST_CREATE\x10\x00\x12\x10\n\x0cMUST_REPLACE\x10\x01\x12\x15\n\x11\x43REATE_OR_REPLACE\x10\x02\x12\x0f\n\x0bMUST_APPEND\x10\x03\x12\x14\n\x10\x43REATE_OR_APPEND\x10\x04\x42\x06\n\x04_hexB\x07\n\x05_modeB\r\n\x0b_generationB\t\n\x07_string\"\x82\x01\n\x11\x44\x61tastoreResponse\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\tB\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"$\n\x15\x44\x61tastoreusageRequest\x12\x0b\n\x03key\x18\x01 \x03(\t\"S\n\x16\x44\x61tastoreusageResponse\x12\x39\n\x0e\x64\x61tastoreusage\x18\x01 \x01(\x0b\x32!.cln.DatastoreusageDatastoreusage\"@\n\x1c\x44\x61tastoreusageDatastoreusage\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x13\n\x0btotal_bytes\x18\x02 \x01(\x04\"\x9d\x01\n\x12\x43reateonionRequest\x12\"\n\x04hops\x18\x01 \x03(\x0b\x32\x14.cln.CreateonionHops\x12\x11\n\tassocdata\x18\x02 \x01(\x0c\x12\x18\n\x0bsession_key\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x17\n\nonion_size\x18\x04 \x01(\rH\x01\x88\x01\x01\x42\x0e\n\x0c_session_keyB\r\n\x0b_onion_size\"<\n\x13\x43reateonionResponse\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12\x16\n\x0eshared_secrets\x18\x02 \x03(\x0c\"2\n\x0f\x43reateonionHops\x12\x0e\n\x06pubkey\x18\x01 \x01(\x0c\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\"J\n\x13\x44\x65ldatastoreRequest\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x0b\n\x03key\x18\x03 \x03(\tB\r\n\x0b_generation\"\x85\x01\n\x14\x44\x65ldatastoreResponse\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\tB\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"\xb6\x01\n\x11\x44\x65linvoiceRequest\x12\r\n\x05label\x18\x01 \x01(\t\x12\x37\n\x06status\x18\x02 \x01(\x0e\x32\'.cln.DelinvoiceRequest.DelinvoiceStatus\x12\x15\n\x08\x64\x65sconly\x18\x03 \x01(\x08H\x00\x88\x01\x01\"5\n\x10\x44\x65linvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\x0b\n\t_desconly\"\xcf\x05\n\x12\x44\x65linvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x06\x62olt11\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x03 \x01(\tH\x01\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x06 \x01(\x0c\x12\x38\n\x06status\x18\x07 \x01(\x0e\x32(.cln.DelinvoiceResponse.DelinvoiceStatus\x12\x12\n\nexpires_at\x18\x08 \x01(\x04\x12\x1b\n\x0elocal_offer_id\x18\t \x01(\x0cH\x04\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0c \x01(\x04\x12\x1a\n\rupdated_index\x18\r \x01(\x04H\x06\x88\x01\x01\x12\x16\n\tpay_index\x18\x0e \x01(\x04H\x07\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x12\x14\n\x07paid_at\x18\x10 \x01(\x04H\t\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x11 \x01(\x0cH\n\x88\x01\x01\"5\n\x10\x44\x65linvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x0e\n\x0c_descriptionB\x11\n\x0f_local_offer_idB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_updated_indexB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimage\"\x9f\x01\n\x17\x44\x65vforgetchannelRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x17\n\nchannel_id\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\x05\x66orce\x18\x04 \x01(\x08H\x02\x88\x01\x01\x42\x13\n\x11_short_channel_idB\r\n\x0b_channel_idB\x08\n\x06_force\"Y\n\x18\x44\x65vforgetchannelResponse\x12\x0e\n\x06\x66orced\x18\x01 \x01(\x08\x12\x17\n\x0f\x66unding_unspent\x18\x02 \x01(\x08\x12\x14\n\x0c\x66unding_txid\x18\x03 \x01(\x0c\"\x19\n\x17\x45mergencyrecoverRequest\")\n\x18\x45mergencyrecoverResponse\x12\r\n\x05stubs\x18\x01 \x03(\x0c\" \n\x1eGetemergencyrecoverdataRequest\"\x8a\x01\n\x1fGetemergencyrecoverdataResponse\x12\x10\n\x08\x66iledata\x18\x01 \x01(\x0c\x12\x1f\n\x12\x63\x61n_create_penalty\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x1d\n\x15\x62\x61\x63ked_up_channel_ids\x18\x03 \x03(\x0c\x42\x15\n\x13_can_create_penalty\"Q\n\x13\x45xposesecretRequest\x12\x12\n\npassphrase\x18\x01 \x01(\t\x12\x17\n\nidentifier\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\r\n\x0b_identifier\"_\n\x14\x45xposesecretResponse\x12\x12\n\nidentifier\x18\x01 \x01(\t\x12\x0f\n\x07\x63odex32\x18\x02 \x01(\t\x12\x15\n\x08mnemonic\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x0b\n\t_mnemonic\"#\n\x0eRecoverRequest\x12\x11\n\thsmsecret\x18\x01 \x01(\t\"x\n\x0fRecoverResponse\x12\x32\n\x06result\x18\x01 \x01(\x0e\x32\".cln.RecoverResponse.RecoverResult\"1\n\rRecoverResult\x12 \n\x1cRECOVERY_RESTART_IN_PROGRESS\x10\x00\"$\n\x15RecoverchannelRequest\x12\x0b\n\x03scb\x18\x01 \x03(\x0c\"\'\n\x16RecoverchannelResponse\x12\r\n\x05stubs\x18\x01 \x03(\t\"\x99\x02\n\x0eInvoiceRequest\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\r\n\x05label\x18\x03 \x01(\t\x12\x11\n\tfallbacks\x18\x04 \x03(\t\x12\x15\n\x08preimage\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x12\x11\n\x04\x63ltv\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06\x65xpiry\x18\x07 \x01(\x04H\x02\x88\x01\x01\x12\x1d\n\x15\x65xposeprivatechannels\x18\x08 \x03(\t\x12\x19\n\x0c\x64\x65schashonly\x18\t \x01(\x08H\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x10.cln.AmountOrAnyB\x0b\n\t_preimageB\x07\n\x05_cltvB\t\n\x07_expiryB\x0f\n\r_deschashonly\"\xfe\x02\n\x0fInvoiceResponse\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x16\n\x0epayment_secret\x18\x03 \x01(\x0c\x12\x12\n\nexpires_at\x18\x04 \x01(\x04\x12\x1d\n\x10warning_capacity\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x1c\n\x0fwarning_offline\x18\x06 \x01(\tH\x01\x88\x01\x01\x12\x1d\n\x10warning_deadends\x18\x07 \x01(\tH\x02\x88\x01\x01\x12#\n\x16warning_private_unused\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x18\n\x0bwarning_mpp\x18\t \x01(\tH\x04\x88\x01\x01\x12\x15\n\rcreated_index\x18\n \x01(\x04\x42\x13\n\x11_warning_capacityB\x12\n\x10_warning_offlineB\x13\n\x11_warning_deadendsB\x19\n\x17_warning_private_unusedB\x0e\n\x0c_warning_mpp\"\xe1\x01\n\x15InvoicerequestRequest\x12\x1b\n\x06\x61mount\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x13\n\x06issuer\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05label\x18\x04 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0f\x61\x62solute_expiry\x18\x05 \x01(\x04H\x02\x88\x01\x01\x12\x17\n\nsingle_use\x18\x06 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_issuerB\x08\n\x06_labelB\x12\n\x10_absolute_expiryB\r\n\x0b_single_use\"\x8b\x01\n\x16InvoicerequestResponse\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"1\n\x1c\x44isableinvoicerequestRequest\x12\x11\n\tinvreq_id\x18\x01 \x01(\t\"\x92\x01\n\x1d\x44isableinvoicerequestResponse\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"l\n\x1aListinvoicerequestsRequest\x12\x16\n\tinvreq_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x61\x63tive_only\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\x0c\n\n_invreq_idB\x0e\n\x0c_active_only\"_\n\x1bListinvoicerequestsResponse\x12@\n\x0finvoicerequests\x18\x01 \x03(\x0b\x32\'.cln.ListinvoicerequestsInvoicerequests\"\x97\x01\n\"ListinvoicerequestsInvoicerequests\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"#\n\x14ListdatastoreRequest\x12\x0b\n\x03key\x18\x02 \x03(\t\"G\n\x15ListdatastoreResponse\x12.\n\tdatastore\x18\x01 \x03(\x0b\x32\x1b.cln.ListdatastoreDatastore\"\x87\x01\n\x16ListdatastoreDatastore\x12\x0b\n\x03key\x18\x01 \x03(\t\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x42\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"\xde\x02\n\x13ListinvoicesRequest\x12\x12\n\x05label\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tinvstring\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x12\x15\n\x08offer_id\x18\x04 \x01(\tH\x03\x88\x01\x01\x12>\n\x05index\x18\x05 \x01(\x0e\x32*.cln.ListinvoicesRequest.ListinvoicesIndexH\x04\x88\x01\x01\x12\x12\n\x05start\x18\x06 \x01(\x04H\x05\x88\x01\x01\x12\x12\n\x05limit\x18\x07 \x01(\rH\x06\x88\x01\x01\"-\n\x11ListinvoicesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x42\x08\n\x06_labelB\x0c\n\n_invstringB\x0f\n\r_payment_hashB\x0b\n\t_offer_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListinvoicesResponse\x12+\n\x08invoices\x18\x01 \x03(\x0b\x32\x19.cln.ListinvoicesInvoices\"\xbc\x06\n\x14ListinvoicesInvoices\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x44\n\x06status\x18\x04 \x01(\x0e\x32\x34.cln.ListinvoicesInvoices.ListinvoicesInvoicesStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x1b\n\x0elocal_offer_id\x18\t \x01(\x0cH\x04\x88\x01\x01\x12\x16\n\tpay_index\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x14\n\x07paid_at\x18\r \x01(\x04H\x07\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0e \x01(\x0cH\x08\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0f \x01(\tH\t\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\n\x88\x01\x01\x12\x41\n\rpaid_outpoint\x18\x12 \x01(\x0b\x32%.cln.ListinvoicesInvoicesPaidOutpointH\x0b\x88\x01\x01\"?\n\x1aListinvoicesInvoicesStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x11\n\x0f_local_offer_idB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\"@\n ListinvoicesInvoicesPaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\xf6\x03\n\x10SendonionRequest\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12)\n\tfirst_hop\x18\x02 \x01(\x0b\x32\x16.cln.SendonionFirstHop\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x12\n\x05label\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x16\n\x0eshared_secrets\x18\x05 \x03(\x0c\x12\x13\n\x06partid\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\t \x01(\x0cH\x03\x88\x01\x01\x12\x14\n\x07groupid\x18\x0b \x01(\x04H\x04\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\r \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0e \x01(\tH\x07\x88\x01\x01\x12+\n\x11total_amount_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x42\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\x0e\n\x0c_destinationB\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x0e\n\x0c_descriptionB\x14\n\x12_total_amount_msat\"\xd0\x04\n\x11SendonionResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x36\n\x06status\x18\x03 \x01(\x0e\x32&.cln.SendonionResponse.SendonionStatus\x12%\n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\ncreated_at\x18\x06 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\x08 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\n \x01(\tH\x04\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0b \x01(\x0cH\x05\x88\x01\x01\x12\x14\n\x07message\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x13\n\x06partid\x18\r \x01(\x04H\x07\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0e \x01(\x04\x12\x1a\n\rupdated_index\x18\x0f \x01(\x04H\x08\x88\x01\x01\",\n\x0fSendonionStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x42\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\n\n\x08_messageB\t\n\x07_partidB\x10\n\x0e_updated_index\"P\n\x11SendonionFirstHop\x12\n\n\x02id\x18\x01 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\r\n\x05\x64\x65lay\x18\x03 \x01(\r\"\xa0\x03\n\x13ListsendpaysRequest\x12\x13\n\x06\x62olt11\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12@\n\x06status\x18\x03 \x01(\x0e\x32+.cln.ListsendpaysRequest.ListsendpaysStatusH\x02\x88\x01\x01\x12>\n\x05index\x18\x04 \x01(\x0e\x32*.cln.ListsendpaysRequest.ListsendpaysIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\"-\n\x11ListsendpaysIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\";\n\x12ListsendpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x42\t\n\x07_bolt11B\x0f\n\r_payment_hashB\t\n\x07_statusB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListsendpaysResponse\x12+\n\x08payments\x18\x01 \x03(\x0b\x32\x19.cln.ListsendpaysPayments\"\xe5\x05\n\x14ListsendpaysPayments\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x0f\n\x07groupid\x18\x02 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x44\n\x06status\x18\x04 \x01(\x0e\x32\x34.cln.ListsendpaysPayments.ListsendpaysPaymentsStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\n \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0b \x01(\tH\x04\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x05\x88\x01\x01\x12\x17\n\nerroronion\x18\r \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0e \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06partid\x18\x0f \x01(\x04H\x08\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\t\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x12 \x01(\x04H\n\x88\x01\x01\"C\n\x1aListsendpaysPaymentsStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\r\n\x0b_erroronionB\x0e\n\x0c_descriptionB\t\n\x07_partidB\x10\n\x0e_updated_indexB\x0f\n\r_completed_at\"\x19\n\x17ListtransactionsRequest\"S\n\x18ListtransactionsResponse\x12\x37\n\x0ctransactions\x18\x01 \x03(\x0b\x32!.cln.ListtransactionsTransactions\"\xf8\x01\n\x1cListtransactionsTransactions\x12\x0c\n\x04hash\x18\x01 \x01(\x0c\x12\r\n\x05rawtx\x18\x02 \x01(\x0c\x12\x13\n\x0b\x62lockheight\x18\x03 \x01(\r\x12\x0f\n\x07txindex\x18\x04 \x01(\r\x12\x10\n\x08locktime\x18\x07 \x01(\r\x12\x0f\n\x07version\x18\x08 \x01(\r\x12\x37\n\x06inputs\x18\t \x03(\x0b\x32\'.cln.ListtransactionsTransactionsInputs\x12\x39\n\x07outputs\x18\n \x03(\x0b\x32(.cln.ListtransactionsTransactionsOutputs\"S\n\"ListtransactionsTransactionsInputs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\r\n\x05index\x18\x02 \x01(\r\x12\x10\n\x08sequence\x18\x03 \x01(\r\"l\n#ListtransactionsTransactionsOutputs\x12\r\n\x05index\x18\x01 \x01(\r\x12\x14\n\x0cscriptPubKey\x18\x03 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\"M\n\x11MakesecretRequest\x12\x10\n\x03hex\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x13\n\x06string\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x06\n\x04_hexB\t\n\x07_string\"$\n\x12MakesecretResponse\x12\x0e\n\x06secret\x18\x01 \x01(\x0c\"\xc7\x04\n\nPayRequest\x12\x12\n\x06\x62olt11\x18\x01 \x01(\tB\x02\x18\x01\x12\x16\n\x05label\x18\x03 \x01(\tB\x02\x18\x01H\x00\x88\x01\x01\x12\x1e\n\rmaxfeepercent\x18\x04 \x01(\x01\x42\x02\x18\x01H\x01\x88\x01\x01\x12\x1a\n\tretry_for\x18\x05 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x19\n\x08maxdelay\x18\x06 \x01(\rB\x02\x18\x01H\x03\x88\x01\x01\x12\'\n\texemptfee\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x04\x88\x01\x01\x12\x1b\n\nriskfactor\x18\x08 \x01(\x01\x42\x02\x18\x01H\x05\x88\x01\x01\x12\x13\n\x07\x65xclude\x18\n \x03(\tB\x02\x18\x01\x12$\n\x06maxfee\x18\x0b \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x06\x88\x01\x01\x12\x1c\n\x0b\x64\x65scription\x18\x0c \x01(\tB\x02\x18\x01H\x07\x88\x01\x01\x12)\n\x0b\x61mount_msat\x18\r \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x08\x88\x01\x01\x12\x1e\n\rlocalinvreqid\x18\x0e \x01(\x0c\x42\x02\x18\x01H\t\x88\x01\x01\x12*\n\x0cpartial_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\n\x88\x01\x01\x42\x08\n\x06_labelB\x10\n\x0e_maxfeepercentB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\x0c\n\n_exemptfeeB\r\n\x0b_riskfactorB\t\n\x07_maxfeeB\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x0f\n\r_partial_msat\"\xab\x03\n\x0bPayResponse\x12\x1c\n\x10payment_preimage\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x1c\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x42\x02\x18\x01H\x00\x88\x01\x01\x12\x18\n\x0cpayment_hash\x18\x03 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\ncreated_at\x18\x04 \x01(\x01\x42\x02\x18\x01\x12\x11\n\x05parts\x18\x05 \x01(\rB\x02\x18\x01\x12$\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12)\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12+\n\x1awarning_partial_completion\x18\x08 \x01(\tB\x02\x18\x01H\x01\x88\x01\x01\x12.\n\x06status\x18\t \x01(\x0e\x32\x1a.cln.PayResponse.PayStatusB\x02\x18\x01\">\n\tPayStatus\x12\x10\n\x08\x43OMPLETE\x10\x00\x1a\x02\x08\x01\x12\x0f\n\x07PENDING\x10\x01\x1a\x02\x08\x01\x12\x0e\n\x06\x46\x41ILED\x10\x02\x1a\x02\x08\x01\x42\x0e\n\x0c_destinationB\x1d\n\x1b_warning_partial_completion\"*\n\x10ListnodesRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x42\x05\n\x03_id\"7\n\x11ListnodesResponse\x12\"\n\x05nodes\x18\x01 \x03(\x0b\x32\x13.cln.ListnodesNodes\"\xb8\x02\n\x0eListnodesNodes\x12\x0e\n\x06nodeid\x18\x01 \x01(\x0c\x12\x1b\n\x0elast_timestamp\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x12\n\x05\x61lias\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x12\n\x05\x63olor\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x12\x15\n\x08\x66\x65\x61tures\x18\x05 \x01(\x0cH\x03\x88\x01\x01\x12/\n\taddresses\x18\x06 \x03(\x0b\x32\x1c.cln.ListnodesNodesAddresses\x12@\n\x10option_will_fund\x18\x07 \x01(\x0b\x32!.cln.ListnodesNodesOptionWillFundH\x04\x88\x01\x01\x42\x11\n\x0f_last_timestampB\x08\n\x06_aliasB\x08\n\x06_colorB\x0b\n\t_featuresB\x13\n\x11_option_will_fund\"\xe8\x01\n\x17ListnodesNodesAddresses\x12K\n\titem_type\x18\x01 \x01(\x0e\x32\x38.cln.ListnodesNodesAddresses.ListnodesNodesAddressesType\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x00\x88\x01\x01\"P\n\x1bListnodesNodesAddressesType\x12\x07\n\x03\x44NS\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x42\n\n\x08_address\"\xf2\x01\n\x1cListnodesNodesOptionWillFund\x12(\n\x13lease_fee_base_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x17\n\x0flease_fee_basis\x18\x02 \x01(\r\x12\x16\n\x0e\x66unding_weight\x18\x03 \x01(\r\x12.\n\x19\x63hannel_fee_max_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x30\n(channel_fee_max_proportional_thousandths\x18\x05 \x01(\r\x12\x15\n\rcompact_lease\x18\x06 \x01(\x0c\"g\n\x15WaitanyinvoiceRequest\x12\x1a\n\rlastpay_index\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x02 \x01(\x04H\x01\x88\x01\x01\x42\x10\n\x0e_lastpay_indexB\n\n\x08_timeout\"\xbc\x05\n\x16WaitanyinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12@\n\x06status\x18\x04 \x01(\x0e\x32\x30.cln.WaitanyinvoiceResponse.WaitanyinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tpay_index\x18\t \x01(\x04H\x04\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x15\n\rcreated_index\x18\r \x01(\x04\x12\x1a\n\rupdated_index\x18\x0e \x01(\x04H\x08\x88\x01\x01\x12;\n\rpaid_outpoint\x18\x0f \x01(\x0b\x32\x1f.cln.WaitanyinvoicePaidOutpointH\t\x88\x01\x01\"-\n\x14WaitanyinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\":\n\x1aWaitanyinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"#\n\x12WaitinvoiceRequest\x12\r\n\x05label\x18\x01 \x01(\t\"\xad\x05\n\x13WaitinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.WaitinvoiceResponse.WaitinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tpay_index\x18\t \x01(\x04H\x04\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x15\n\rcreated_index\x18\r \x01(\x04\x12\x1a\n\rupdated_index\x18\x0e \x01(\x04H\x08\x88\x01\x01\x12\x38\n\rpaid_outpoint\x18\x0f \x01(\x0b\x32\x1c.cln.WaitinvoicePaidOutpointH\t\x88\x01\x01\"*\n\x11WaitinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\"7\n\x17WaitinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\x8e\x01\n\x12WaitsendpayRequest\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x13\n\x06partid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x14\n\x07groupid\x18\x04 \x01(\x04H\x02\x88\x01\x01\x42\t\n\x07_partidB\n\n\x08_timeoutB\n\n\x08_groupid\"\xf7\x04\n\x13WaitsendpayResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x07groupid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.WaitsendpayResponse.WaitsendpayStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06partid\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0e \x01(\x01H\x08\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0f \x01(\x04\x12\x1a\n\rupdated_index\x18\x10 \x01(\x04H\t\x88\x01\x01\"!\n\x11WaitsendpayStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x42\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\x0f\n\r_completed_atB\x10\n\x0e_updated_index\"\x97\x01\n\x0eNewaddrRequest\x12@\n\x0b\x61\x64\x64resstype\x18\x01 \x01(\x0e\x32&.cln.NewaddrRequest.NewaddrAddresstypeH\x00\x88\x01\x01\"3\n\x12NewaddrAddresstype\x12\n\n\x06\x42\x45\x43H32\x10\x00\x12\x07\n\x03\x41LL\x10\x02\x12\x08\n\x04P2TR\x10\x03\x42\x0e\n\x0c_addresstype\"M\n\x0fNewaddrResponse\x12\x13\n\x06\x62\x65\x63h32\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04p2tr\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\t\n\x07_bech32B\x07\n\x05_p2tr\"\xbc\x01\n\x0fWithdrawRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\t\x12$\n\x07satoshi\x18\x02 \x01(\x0b\x32\x13.cln.AmountSatOrAll\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\"\n\x07\x66\x65\x65rate\x18\x05 \x01(\x0b\x32\x0c.cln.FeerateH\x01\x88\x01\x01\x42\n\n\x08_minconfB\n\n\x08_feerate\":\n\x10WithdrawResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x0c\n\x04psbt\x18\x03 \x01(\t\"\xd7\x03\n\x0eKeysendRequest\x12\x17\n\x0b\x64\x65stination\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\x05label\x18\x03 \x01(\tB\x02\x18\x01H\x00\x88\x01\x01\x12\x1e\n\rmaxfeepercent\x18\x04 \x01(\x01\x42\x02\x18\x01H\x01\x88\x01\x01\x12\x1a\n\tretry_for\x18\x05 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x19\n\x08maxdelay\x18\x06 \x01(\rB\x02\x18\x01H\x03\x88\x01\x01\x12\'\n\texemptfee\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x04\x88\x01\x01\x12/\n\nroutehints\x18\x08 \x01(\x0b\x32\x12.cln.RoutehintListB\x02\x18\x01H\x05\x88\x01\x01\x12*\n\textratlvs\x18\t \x01(\x0b\x32\x0e.cln.TlvStreamB\x02\x18\x01H\x06\x88\x01\x01\x12$\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12$\n\x06maxfee\x18\x0b \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x07\x88\x01\x01\x42\x08\n\x06_labelB\x10\n\x0e_maxfeepercentB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\x0c\n\n_exemptfeeB\r\n\x0b_routehintsB\x0c\n\n_extratlvsB\t\n\x07_maxfee\"\x9a\x03\n\x0fKeysendResponse\x12\x1c\n\x10payment_preimage\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x1c\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x42\x02\x18\x01H\x00\x88\x01\x01\x12\x18\n\x0cpayment_hash\x18\x03 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\ncreated_at\x18\x04 \x01(\x01\x42\x02\x18\x01\x12\x11\n\x05parts\x18\x05 \x01(\rB\x02\x18\x01\x12$\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12)\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12+\n\x1awarning_partial_completion\x18\x08 \x01(\tB\x02\x18\x01H\x01\x88\x01\x01\x12\x36\n\x06status\x18\t \x01(\x0e\x32\".cln.KeysendResponse.KeysendStatusB\x02\x18\x01\"!\n\rKeysendStatus\x12\x10\n\x08\x43OMPLETE\x10\x00\x1a\x02\x08\x01\x42\x0e\n\x0c_destinationB\x1d\n\x1b_warning_partial_completion\"\xa7\x03\n\x0f\x46undpsbtRequest\x12$\n\x07satoshi\x18\x01 \x01(\x0b\x32\x13.cln.AmountSatOrAll\x12\x1d\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.Feerate\x12\x13\n\x0bstartweight\x18\x03 \x01(\r\x12\x14\n\x07minconf\x18\x04 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x07reserve\x18\x05 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08locktime\x18\x06 \x01(\rH\x02\x88\x01\x01\x12\x1f\n\x12min_witness_weight\x18\x07 \x01(\rH\x03\x88\x01\x01\x12\x1d\n\x10\x65xcess_as_change\x18\x08 \x01(\x08H\x04\x88\x01\x01\x12\x17\n\nnonwrapped\x18\t \x01(\x08H\x05\x88\x01\x01\x12#\n\x16opening_anchor_channel\x18\n \x01(\x08H\x06\x88\x01\x01\x42\n\n\x08_minconfB\n\n\x08_reserveB\x0b\n\t_locktimeB\x15\n\x13_min_witness_weightB\x13\n\x11_excess_as_changeB\r\n\x0b_nonwrappedB\x19\n\x17_opening_anchor_channel\"\xd9\x01\n\x10\x46undpsbtResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x16\n\x0e\x66\x65\x65rate_per_kw\x18\x02 \x01(\r\x12\x1e\n\x16\x65stimated_final_weight\x18\x03 \x01(\r\x12 \n\x0b\x65xcess_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1a\n\rchange_outnum\x18\x05 \x01(\rH\x00\x88\x01\x01\x12/\n\x0creservations\x18\x06 \x03(\x0b\x32\x19.cln.FundpsbtReservationsB\x10\n\x0e_change_outnum\"u\n\x14\x46undpsbtReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x19\n\x11reserved_to_block\x18\x05 \x01(\r\"A\n\x0fSendpsbtRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x14\n\x07reserve\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_reserve\",\n\x10SendpsbtResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"1\n\x0fSignpsbtRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x10\n\x08signonly\x18\x02 \x03(\r\"\'\n\x10SignpsbtResponse\x12\x13\n\x0bsigned_psbt\x18\x01 \x01(\t\"\xa3\x03\n\x0fUtxopsbtRequest\x12$\n\x07satoshi\x18\x01 \x01(\x0b\x32\x13.cln.AmountSatOrAll\x12\x1d\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.Feerate\x12\x13\n\x0bstartweight\x18\x03 \x01(\r\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\x14\n\x07reserve\x18\x05 \x01(\rH\x00\x88\x01\x01\x12\x15\n\x08locktime\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x1f\n\x12min_witness_weight\x18\x07 \x01(\rH\x02\x88\x01\x01\x12\x17\n\nreservedok\x18\x08 \x01(\x08H\x03\x88\x01\x01\x12\x1d\n\x10\x65xcess_as_change\x18\t \x01(\x08H\x04\x88\x01\x01\x12#\n\x16opening_anchor_channel\x18\n \x01(\x08H\x05\x88\x01\x01\x42\n\n\x08_reserveB\x0b\n\t_locktimeB\x15\n\x13_min_witness_weightB\r\n\x0b_reservedokB\x13\n\x11_excess_as_changeB\x19\n\x17_opening_anchor_channel\"\xd9\x01\n\x10UtxopsbtResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x16\n\x0e\x66\x65\x65rate_per_kw\x18\x02 \x01(\r\x12\x1e\n\x16\x65stimated_final_weight\x18\x03 \x01(\r\x12 \n\x0b\x65xcess_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1a\n\rchange_outnum\x18\x05 \x01(\rH\x00\x88\x01\x01\x12/\n\x0creservations\x18\x06 \x03(\x0b\x32\x19.cln.UtxopsbtReservationsB\x10\n\x0e_change_outnum\"u\n\x14UtxopsbtReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x19\n\x11reserved_to_block\x18\x05 \x01(\r\" \n\x10TxdiscardRequest\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\"6\n\x11TxdiscardResponse\x12\x13\n\x0bunsigned_tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"\xa4\x01\n\x10TxprepareRequest\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12 \n\x07outputs\x18\x05 \x03(\x0b\x32\x0f.cln.OutputDescB\n\n\x08_feerateB\n\n\x08_minconf\"D\n\x11TxprepareResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x13\n\x0bunsigned_tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"\x1d\n\rTxsendRequest\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\"8\n\x0eTxsendResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\n\n\x02tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"\x8d\x01\n\x17ListpeerchannelsRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nchannel_id\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x42\x05\n\x03_idB\x13\n\x11_short_channel_idB\r\n\x0b_channel_id\"K\n\x18ListpeerchannelsResponse\x12/\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x1d.cln.ListpeerchannelsChannels\"\xd1\x1a\n\x18ListpeerchannelsChannels\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x16\n\x0epeer_connected\x18\x02 \x01(\x08\x12 \n\x05state\x18\x03 \x01(\x0e\x32\x11.cln.ChannelState\x12\x19\n\x0cscratch_txid\x18\x04 \x01(\x0cH\x00\x88\x01\x01\x12\x43\n\x0c\x63hannel_type\x18\x05 \x01(\x0b\x32(.cln.ListpeerchannelsChannelsChannelTypeH\x01\x88\x01\x01\x12:\n\x07\x66\x65\x65rate\x18\x06 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsFeerateH\x02\x88\x01\x01\x12\x12\n\x05owner\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x08 \x01(\tH\x04\x88\x01\x01\x12\x17\n\nchannel_id\x18\t \x01(\x0cH\x05\x88\x01\x01\x12\x19\n\x0c\x66unding_txid\x18\n \x01(\x0cH\x06\x88\x01\x01\x12\x1b\n\x0e\x66unding_outnum\x18\x0b \x01(\rH\x07\x88\x01\x01\x12\x1c\n\x0finitial_feerate\x18\x0c \x01(\tH\x08\x88\x01\x01\x12\x19\n\x0clast_feerate\x18\r \x01(\tH\t\x88\x01\x01\x12\x19\n\x0cnext_feerate\x18\x0e \x01(\tH\n\x88\x01\x01\x12\x1a\n\rnext_fee_step\x18\x0f \x01(\rH\x0b\x88\x01\x01\x12\x37\n\x08inflight\x18\x10 \x03(\x0b\x32%.cln.ListpeerchannelsChannelsInflight\x12\x15\n\x08\x63lose_to\x18\x11 \x01(\x0cH\x0c\x88\x01\x01\x12\x14\n\x07private\x18\x12 \x01(\x08H\r\x88\x01\x01\x12 \n\x06opener\x18\x13 \x01(\x0e\x32\x10.cln.ChannelSide\x12%\n\x06\x63loser\x18\x14 \x01(\x0e\x32\x10.cln.ChannelSideH\x0e\x88\x01\x01\x12:\n\x07\x66unding\x18\x16 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsFundingH\x0f\x88\x01\x01\x12$\n\nto_us_msat\x18\x17 \x01(\x0b\x32\x0b.cln.AmountH\x10\x88\x01\x01\x12(\n\x0emin_to_us_msat\x18\x18 \x01(\x0b\x32\x0b.cln.AmountH\x11\x88\x01\x01\x12(\n\x0emax_to_us_msat\x18\x19 \x01(\x0b\x32\x0b.cln.AmountH\x12\x88\x01\x01\x12$\n\ntotal_msat\x18\x1a \x01(\x0b\x32\x0b.cln.AmountH\x13\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x1b \x01(\x0b\x32\x0b.cln.AmountH\x14\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x1c \x01(\rH\x15\x88\x01\x01\x12)\n\x0f\x64ust_limit_msat\x18\x1d \x01(\x0b\x32\x0b.cln.AmountH\x16\x88\x01\x01\x12,\n\x12their_reserve_msat\x18\x1f \x01(\x0b\x32\x0b.cln.AmountH\x17\x88\x01\x01\x12*\n\x10our_reserve_msat\x18 \x01(\x0b\x32\x0b.cln.AmountH\x18\x88\x01\x01\x12(\n\x0espendable_msat\x18! \x01(\x0b\x32\x0b.cln.AmountH\x19\x88\x01\x01\x12)\n\x0freceivable_msat\x18\" \x01(\x0b\x32\x0b.cln.AmountH\x1a\x88\x01\x01\x12.\n\x14minimum_htlc_in_msat\x18# \x01(\x0b\x32\x0b.cln.AmountH\x1b\x88\x01\x01\x12/\n\x15minimum_htlc_out_msat\x18$ \x01(\x0b\x32\x0b.cln.AmountH\x1c\x88\x01\x01\x12/\n\x15maximum_htlc_out_msat\x18% \x01(\x0b\x32\x0b.cln.AmountH\x1d\x88\x01\x01\x12 \n\x13their_to_self_delay\x18& \x01(\rH\x1e\x88\x01\x01\x12\x1e\n\x11our_to_self_delay\x18\' \x01(\rH\x1f\x88\x01\x01\x12\x1f\n\x12max_accepted_htlcs\x18( \x01(\rH \x88\x01\x01\x12\x36\n\x05\x61lias\x18) \x01(\x0b\x32\".cln.ListpeerchannelsChannelsAliasH!\x88\x01\x01\x12@\n\rstate_changes\x18* \x03(\x0b\x32).cln.ListpeerchannelsChannelsStateChanges\x12\x0e\n\x06status\x18+ \x03(\t\x12 \n\x13in_payments_offered\x18, \x01(\x04H\"\x88\x01\x01\x12)\n\x0fin_offered_msat\x18- \x01(\x0b\x32\x0b.cln.AmountH#\x88\x01\x01\x12\"\n\x15in_payments_fulfilled\x18. \x01(\x04H$\x88\x01\x01\x12+\n\x11in_fulfilled_msat\x18/ \x01(\x0b\x32\x0b.cln.AmountH%\x88\x01\x01\x12!\n\x14out_payments_offered\x18\x30 \x01(\x04H&\x88\x01\x01\x12*\n\x10out_offered_msat\x18\x31 \x01(\x0b\x32\x0b.cln.AmountH\'\x88\x01\x01\x12#\n\x16out_payments_fulfilled\x18\x32 \x01(\x04H(\x88\x01\x01\x12,\n\x12out_fulfilled_msat\x18\x33 \x01(\x0b\x32\x0b.cln.AmountH)\x88\x01\x01\x12\x31\n\x05htlcs\x18\x34 \x03(\x0b\x32\".cln.ListpeerchannelsChannelsHtlcs\x12\x1a\n\rclose_to_addr\x18\x35 \x01(\tH*\x88\x01\x01\x12\x1e\n\x11ignore_fee_limits\x18\x36 \x01(\x08H+\x88\x01\x01\x12:\n\x07updates\x18\x37 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsUpdatesH,\x88\x01\x01\x12#\n\x16last_stable_connection\x18\x38 \x01(\x04H-\x88\x01\x01\x12\x17\n\nlost_state\x18\x39 \x01(\x08H.\x88\x01\x01\x12\x1a\n\rreestablished\x18: \x01(\x08H/\x88\x01\x01\x12*\n\x10last_tx_fee_msat\x18; \x01(\x0b\x32\x0b.cln.AmountH0\x88\x01\x01\x12\x16\n\tdirection\x18< \x01(\rH1\x88\x01\x01\x12=\n#their_max_htlc_value_in_flight_msat\x18= \x01(\x0b\x32\x0b.cln.AmountH2\x88\x01\x01\x12;\n!our_max_htlc_value_in_flight_msat\x18> \x01(\x0b\x32\x0b.cln.AmountH3\x88\x01\x01\x12\x10\n\x08\x66\x65\x61tures\x18? \x03(\tB\x0f\n\r_scratch_txidB\x0f\n\r_channel_typeB\n\n\x08_feerateB\x08\n\x06_ownerB\x13\n\x11_short_channel_idB\r\n\x0b_channel_idB\x0f\n\r_funding_txidB\x11\n\x0f_funding_outnumB\x12\n\x10_initial_feerateB\x0f\n\r_last_feerateB\x0f\n\r_next_feerateB\x10\n\x0e_next_fee_stepB\x0b\n\t_close_toB\n\n\x08_privateB\t\n\x07_closerB\n\n\x08_fundingB\r\n\x0b_to_us_msatB\x11\n\x0f_min_to_us_msatB\x11\n\x0f_max_to_us_msatB\r\n\x0b_total_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x12\n\x10_dust_limit_msatB\x15\n\x13_their_reserve_msatB\x13\n\x11_our_reserve_msatB\x11\n\x0f_spendable_msatB\x12\n\x10_receivable_msatB\x17\n\x15_minimum_htlc_in_msatB\x18\n\x16_minimum_htlc_out_msatB\x18\n\x16_maximum_htlc_out_msatB\x16\n\x14_their_to_self_delayB\x14\n\x12_our_to_self_delayB\x15\n\x13_max_accepted_htlcsB\x08\n\x06_aliasB\x16\n\x14_in_payments_offeredB\x12\n\x10_in_offered_msatB\x18\n\x16_in_payments_fulfilledB\x14\n\x12_in_fulfilled_msatB\x17\n\x15_out_payments_offeredB\x13\n\x11_out_offered_msatB\x19\n\x17_out_payments_fulfilledB\x15\n\x13_out_fulfilled_msatB\x10\n\x0e_close_to_addrB\x14\n\x12_ignore_fee_limitsB\n\n\x08_updatesB\x19\n\x17_last_stable_connectionB\r\n\x0b_lost_stateB\x10\n\x0e_reestablishedB\x13\n\x11_last_tx_fee_msatB\x0c\n\n_directionB&\n$_their_max_htlc_value_in_flight_msatB$\n\"_our_max_htlc_value_in_flight_msat\"]\n\x1dListpeerchannelsChannelsAlias\x12\x12\n\x05local\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06remote\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_localB\t\n\x07_remote\"X\n#ListpeerchannelsChannelsChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"?\n\x1fListpeerchannelsChannelsFeerate\x12\r\n\x05perkw\x18\x01 \x01(\r\x12\r\n\x05perkb\x18\x02 \x01(\r\"\xdd\x02\n\x1fListpeerchannelsChannelsFunding\x12%\n\x0bpushed_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12%\n\x10local_funds_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11remote_funds_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\'\n\rfee_paid_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\'\n\rfee_rcvd_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x11\n\x04psbt\x18\x06 \x01(\tH\x03\x88\x01\x01\x12\x15\n\x08withheld\x18\x07 \x01(\x08H\x04\x88\x01\x01\x42\x0e\n\x0c_pushed_msatB\x10\n\x0e_fee_paid_msatB\x10\n\x0e_fee_rcvd_msatB\x07\n\x05_psbtB\x0b\n\t_withheld\"\xf9\x02\n\x1dListpeerchannelsChannelsHtlcs\x12\\\n\tdirection\x18\x01 \x01(\x0e\x32I.cln.ListpeerchannelsChannelsHtlcs.ListpeerchannelsChannelsHtlcsDirection\x12\n\n\x02id\x18\x02 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06\x65xpiry\x18\x04 \x01(\r\x12\x14\n\x0cpayment_hash\x18\x05 \x01(\x0c\x12\x1a\n\rlocal_trimmed\x18\x06 \x01(\x08H\x00\x88\x01\x01\x12\x13\n\x06status\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x1d\n\x05state\x18\x08 \x01(\x0e\x32\x0e.cln.HtlcState\"9\n&ListpeerchannelsChannelsHtlcsDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\x42\x10\n\x0e_local_trimmedB\t\n\x07_status\"\xf4\x01\n ListpeerchannelsChannelsInflight\x12\x14\n\x0c\x66unding_txid\x18\x01 \x01(\x0c\x12\x16\n\x0e\x66unding_outnum\x18\x02 \x01(\r\x12\x0f\n\x07\x66\x65\x65rate\x18\x03 \x01(\t\x12\'\n\x12total_funding_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10our_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x0cscratch_txid\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12\x15\n\rsplice_amount\x18\x07 \x01(\x12\x42\x0f\n\r_scratch_txid\"\xf0\x02\n$ListpeerchannelsChannelsStateChanges\x12\x11\n\ttimestamp\x18\x01 \x01(\t\x12$\n\told_state\x18\x02 \x01(\x0e\x32\x11.cln.ChannelState\x12$\n\tnew_state\x18\x03 \x01(\x0e\x32\x11.cln.ChannelState\x12\x62\n\x05\x63\x61use\x18\x04 \x01(\x0e\x32S.cln.ListpeerchannelsChannelsStateChanges.ListpeerchannelsChannelsStateChangesCause\x12\x0f\n\x07message\x18\x05 \x01(\t\"t\n)ListpeerchannelsChannelsStateChangesCause\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05LOCAL\x10\x01\x12\x08\n\x04USER\x10\x02\x12\n\n\x06REMOTE\x10\x03\x12\x0c\n\x08PROTOCOL\x10\x04\x12\x0b\n\x07ONCHAIN\x10\x05\"\xa7\x01\n\x1fListpeerchannelsChannelsUpdates\x12\x38\n\x05local\x18\x01 \x01(\x0b\x32).cln.ListpeerchannelsChannelsUpdatesLocal\x12?\n\x06remote\x18\x02 \x01(\x0b\x32*.cln.ListpeerchannelsChannelsUpdatesRemoteH\x00\x88\x01\x01\x42\t\n\x07_remote\"\xda\x01\n$ListpeerchannelsChannelsUpdatesLocal\x12&\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x11\x63ltv_expiry_delta\x18\x03 \x01(\r\x12\"\n\rfee_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x05 \x01(\r\"\xdb\x01\n%ListpeerchannelsChannelsUpdatesRemote\x12&\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x11\x63ltv_expiry_delta\x18\x03 \x01(\r\x12\"\n\rfee_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x05 \x01(\r\"3\n\x19ListclosedchannelsRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x42\x05\n\x03_id\"[\n\x1aListclosedchannelsResponse\x12=\n\x0e\x63losedchannels\x18\x01 \x03(\x0b\x32%.cln.ListclosedchannelsClosedchannels\"\xae\x0b\n ListclosedchannelsClosedchannels\x12\x14\n\x07peer_id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x12\n\nchannel_id\x18\x02 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x01\x88\x01\x01\x12>\n\x05\x61lias\x18\x04 \x01(\x0b\x32*.cln.ListclosedchannelsClosedchannelsAliasH\x02\x88\x01\x01\x12 \n\x06opener\x18\x05 \x01(\x0e\x32\x10.cln.ChannelSide\x12%\n\x06\x63loser\x18\x06 \x01(\x0e\x32\x10.cln.ChannelSideH\x03\x88\x01\x01\x12\x0f\n\x07private\x18\x07 \x01(\x08\x12K\n\x0c\x63hannel_type\x18\x08 \x01(\x0b\x32\x30.cln.ListclosedchannelsClosedchannelsChannelTypeH\x04\x88\x01\x01\x12\x1f\n\x17total_local_commitments\x18\t \x01(\x04\x12 \n\x18total_remote_commitments\x18\n \x01(\x04\x12\x18\n\x10total_htlcs_sent\x18\x0b \x01(\x04\x12\x14\n\x0c\x66unding_txid\x18\x0c \x01(\x0c\x12\x16\n\x0e\x66unding_outnum\x18\r \x01(\r\x12\x0e\n\x06leased\x18\x0e \x01(\x08\x12/\n\x15\x66unding_fee_paid_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12/\n\x15\x66unding_fee_rcvd_msat\x18\x10 \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12-\n\x13\x66unding_pushed_msat\x18\x11 \x01(\x0b\x32\x0b.cln.AmountH\x07\x88\x01\x01\x12\x1f\n\ntotal_msat\x18\x12 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x66inal_to_us_msat\x18\x13 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0emin_to_us_msat\x18\x14 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0emax_to_us_msat\x18\x15 \x01(\x0b\x32\x0b.cln.Amount\x12!\n\x14last_commitment_txid\x18\x16 \x01(\x0cH\x08\x88\x01\x01\x12\x32\n\x18last_commitment_fee_msat\x18\x17 \x01(\x0b\x32\x0b.cln.AmountH\t\x88\x01\x01\x12\x65\n\x0b\x63lose_cause\x18\x18 \x01(\x0e\x32P.cln.ListclosedchannelsClosedchannels.ListclosedchannelsClosedchannelsCloseCause\x12#\n\x16last_stable_connection\x18\x19 \x01(\x04H\n\x88\x01\x01\x12\x19\n\x0c\x66unding_psbt\x18\x1a \x01(\tH\x0b\x88\x01\x01\x12\x1d\n\x10\x66unding_withheld\x18\x1b \x01(\x08H\x0c\x88\x01\x01\"u\n*ListclosedchannelsClosedchannelsCloseCause\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05LOCAL\x10\x01\x12\x08\n\x04USER\x10\x02\x12\n\n\x06REMOTE\x10\x03\x12\x0c\n\x08PROTOCOL\x10\x04\x12\x0b\n\x07ONCHAIN\x10\x05\x42\n\n\x08_peer_idB\x13\n\x11_short_channel_idB\x08\n\x06_aliasB\t\n\x07_closerB\x0f\n\r_channel_typeB\x18\n\x16_funding_fee_paid_msatB\x18\n\x16_funding_fee_rcvd_msatB\x16\n\x14_funding_pushed_msatB\x17\n\x15_last_commitment_txidB\x1b\n\x19_last_commitment_fee_msatB\x19\n\x17_last_stable_connectionB\x0f\n\r_funding_psbtB\x13\n\x11_funding_withheld\"e\n%ListclosedchannelsClosedchannelsAlias\x12\x12\n\x05local\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06remote\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_localB\t\n\x07_remote\"`\n+ListclosedchannelsClosedchannelsChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x1f\n\rDecodeRequest\x12\x0e\n\x06string\x18\x01 \x01(\t\"\xbd.\n\x0e\x44\x65\x63odeResponse\x12\x31\n\titem_type\x18\x01 \x01(\x0e\x32\x1e.cln.DecodeResponse.DecodeType\x12\r\n\x05valid\x18\x02 \x01(\x08\x12\x15\n\x08offer_id\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x14\n\x0coffer_chains\x18\x04 \x03(\x0c\x12\x1b\n\x0eoffer_metadata\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12\x1b\n\x0eoffer_currency\x18\x06 \x01(\tH\x02\x88\x01\x01\x12+\n\x1ewarning_unknown_offer_currency\x18\x07 \x01(\tH\x03\x88\x01\x01\x12 \n\x13\x63urrency_minor_unit\x18\x08 \x01(\rH\x04\x88\x01\x01\x12\x19\n\x0coffer_amount\x18\t \x01(\x04H\x05\x88\x01\x01\x12+\n\x11offer_amount_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x1e\n\x11offer_description\x18\x0b \x01(\tH\x07\x88\x01\x01\x12\x19\n\x0coffer_issuer\x18\x0c \x01(\tH\x08\x88\x01\x01\x12\x1b\n\x0eoffer_features\x18\r \x01(\x0cH\t\x88\x01\x01\x12\"\n\x15offer_absolute_expiry\x18\x0e \x01(\x04H\n\x88\x01\x01\x12\x1f\n\x12offer_quantity_max\x18\x0f \x01(\x04H\x0b\x88\x01\x01\x12*\n\x0boffer_paths\x18\x10 \x03(\x0b\x32\x15.cln.DecodeOfferPaths\x12\x39\n\x10offer_recurrence\x18\x12 \x01(\x0b\x32\x1a.cln.DecodeOfferRecurrenceH\x0c\x88\x01\x01\x12\x37\n\x12unknown_offer_tlvs\x18\x13 \x03(\x0b\x32\x1b.cln.DecodeUnknownOfferTlvs\x12.\n!warning_invalid_offer_description\x18\x15 \x01(\tH\r\x88\x01\x01\x12.\n!warning_missing_offer_description\x18\x16 \x01(\tH\x0e\x88\x01\x01\x12+\n\x1ewarning_invalid_offer_currency\x18\x17 \x01(\tH\x0f\x88\x01\x01\x12)\n\x1cwarning_invalid_offer_issuer\x18\x18 \x01(\tH\x10\x88\x01\x01\x12\x1c\n\x0finvreq_metadata\x18\x19 \x01(\x0cH\x11\x88\x01\x01\x12\x1c\n\x0finvreq_payer_id\x18\x1a \x01(\x0cH\x12\x88\x01\x01\x12\x19\n\x0cinvreq_chain\x18\x1b \x01(\x0cH\x13\x88\x01\x01\x12,\n\x12invreq_amount_msat\x18\x1c \x01(\x0b\x32\x0b.cln.AmountH\x14\x88\x01\x01\x12\x1c\n\x0finvreq_features\x18\x1d \x01(\x0cH\x15\x88\x01\x01\x12\x1c\n\x0finvreq_quantity\x18\x1e \x01(\x04H\x16\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x1f \x01(\tH\x17\x88\x01\x01\x12&\n\x19invreq_recurrence_counter\x18 \x01(\rH\x18\x88\x01\x01\x12$\n\x17invreq_recurrence_start\x18! \x01(\rH\x19\x88\x01\x01\x12J\n\x1cunknown_invoice_request_tlvs\x18\" \x03(\x0b\x32$.cln.DecodeUnknownInvoiceRequestTlvs\x12,\n\x1fwarning_missing_invreq_metadata\x18# \x01(\tH\x1a\x88\x01\x01\x12,\n\x1fwarning_missing_invreq_payer_id\x18$ \x01(\tH\x1b\x88\x01\x01\x12.\n!warning_invalid_invreq_payer_note\x18% \x01(\tH\x1c\x88\x01\x01\x12\x36\n)warning_missing_invoice_request_signature\x18& \x01(\tH\x1d\x88\x01\x01\x12\x36\n)warning_invalid_invoice_request_signature\x18\' \x01(\tH\x1e\x88\x01\x01\x12.\n\rinvoice_paths\x18( \x03(\x0b\x32\x17.cln.DecodeInvoicePaths\x12\x1f\n\x12invoice_created_at\x18) \x01(\x04H\x1f\x88\x01\x01\x12$\n\x17invoice_relative_expiry\x18* \x01(\rH \x88\x01\x01\x12!\n\x14invoice_payment_hash\x18+ \x01(\x0cH!\x88\x01\x01\x12-\n\x13invoice_amount_msat\x18, \x01(\x0b\x32\x0b.cln.AmountH\"\x88\x01\x01\x12\x36\n\x11invoice_fallbacks\x18- \x03(\x0b\x32\x1b.cln.DecodeInvoiceFallbacks\x12\x1d\n\x10invoice_features\x18. \x01(\x0cH#\x88\x01\x01\x12\x1c\n\x0finvoice_node_id\x18/ \x01(\x0cH$\x88\x01\x01\x12(\n\x1binvoice_recurrence_basetime\x18\x30 \x01(\x04H%\x88\x01\x01\x12;\n\x14unknown_invoice_tlvs\x18\x31 \x03(\x0b\x32\x1d.cln.DecodeUnknownInvoiceTlvs\x12*\n\x1dwarning_missing_invoice_paths\x18\x32 \x01(\tH&\x88\x01\x01\x12/\n\"warning_missing_invoice_blindedpay\x18\x33 \x01(\tH\'\x88\x01\x01\x12/\n\"warning_missing_invoice_created_at\x18\x34 \x01(\tH(\x88\x01\x01\x12\x31\n$warning_missing_invoice_payment_hash\x18\x35 \x01(\tH)\x88\x01\x01\x12+\n\x1ewarning_missing_invoice_amount\x18\x36 \x01(\tH*\x88\x01\x01\x12\x38\n+warning_missing_invoice_recurrence_basetime\x18\x37 \x01(\tH+\x88\x01\x01\x12,\n\x1fwarning_missing_invoice_node_id\x18\x38 \x01(\tH,\x88\x01\x01\x12.\n!warning_missing_invoice_signature\x18\x39 \x01(\tH-\x88\x01\x01\x12.\n!warning_invalid_invoice_signature\x18: \x01(\tH.\x88\x01\x01\x12\'\n\tfallbacks\x18; \x03(\x0b\x32\x14.cln.DecodeFallbacks\x12\x17\n\ncreated_at\x18< \x01(\x04H/\x88\x01\x01\x12\x13\n\x06\x65xpiry\x18= \x01(\x04H0\x88\x01\x01\x12\x12\n\x05payee\x18> \x01(\x0cH1\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18? \x01(\x0cH2\x88\x01\x01\x12\x1d\n\x10\x64\x65scription_hash\x18@ \x01(\x0cH3\x88\x01\x01\x12\"\n\x15min_final_cltv_expiry\x18\x41 \x01(\rH4\x88\x01\x01\x12\x1b\n\x0epayment_secret\x18\x42 \x01(\x0cH5\x88\x01\x01\x12\x1d\n\x10payment_metadata\x18\x43 \x01(\x0cH6\x88\x01\x01\x12\x1f\n\x05\x65xtra\x18\x45 \x03(\x0b\x32\x10.cln.DecodeExtra\x12\x16\n\tunique_id\x18\x46 \x01(\tH7\x88\x01\x01\x12\x14\n\x07version\x18G \x01(\tH8\x88\x01\x01\x12\x13\n\x06string\x18H \x01(\tH9\x88\x01\x01\x12-\n\x0crestrictions\x18I \x03(\x0b\x32\x17.cln.DecodeRestrictions\x12&\n\x19warning_rune_invalid_utf8\x18J \x01(\tH:\x88\x01\x01\x12\x10\n\x03hex\x18K \x01(\x0cH;\x88\x01\x01\x12\x16\n\tdecrypted\x18L \x01(\x0cH<\x88\x01\x01\x12\x16\n\tsignature\x18M \x01(\tH=\x88\x01\x01\x12\x15\n\x08\x63urrency\x18N \x01(\tH>\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18O \x01(\x0b\x32\x0b.cln.AmountH?\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18P \x01(\tH@\x88\x01\x01\x12\x15\n\x08\x66\x65\x61tures\x18Q \x01(\x0cHA\x88\x01\x01\x12-\n\x06routes\x18R \x01(\x0b\x32\x18.cln.DecodeRoutehintListHB\x88\x01\x01\x12\x1c\n\x0foffer_issuer_id\x18S \x01(\x0cHC\x88\x01\x01\x12,\n\x1fwarning_missing_offer_issuer_id\x18T \x01(\tHD\x88\x01\x01\x12,\n\x0cinvreq_paths\x18U \x03(\x0b\x32\x16.cln.DecodeInvreqPaths\x12\'\n\x1awarning_empty_blinded_path\x18V \x01(\tHE\x88\x01\x01\x12=\n\x13invreq_bip_353_name\x18W \x01(\x0b\x32\x1b.cln.DecodeInvreqBip353NameHF\x88\x01\x01\x12\x35\n(warning_invreq_bip_353_name_name_invalid\x18X \x01(\tHG\x88\x01\x01\x12\x37\n*warning_invreq_bip_353_name_domain_invalid\x18Y \x01(\tHH\x88\x01\x01\x12%\n\x18invreq_recurrence_cancel\x18Z \x01(\x08HI\x88\x01\x01\x12=\n0warning_invreq_recurrence_cancel_without_counter\x18[ \x01(\tHJ\x88\x01\x01\x12?\n2warning_invreq_recurrence_cancel_with_zero_counter\x18\\ \x01(\tHK\x88\x01\x01\x12\x1b\n\x0eproof_preimage\x18] \x01(\x0cHL\x88\x01\x01\x12\x1a\n\x12proof_omitted_tlvs\x18^ \x03(\x04\x12\x1c\n\x14proof_missing_hashes\x18_ \x03(\x0c\x12\x19\n\x11proof_leaf_hashes\x18` \x03(\x0c\x12\x17\n\nproof_note\x18\x61 \x01(\tHM\x88\x01\x01\x12\x1c\n\x0fproof_signature\x18\x62 \x01(\tHN\x88\x01\x01\x12\x42\n\x18unknown_payer_proof_tlvs\x18\x63 \x03(\x0b\x32 .cln.DecodeUnknownPayerProofTlvs\"\x9b\x01\n\nDecodeType\x12\x10\n\x0c\x42OLT12_OFFER\x10\x00\x12\x12\n\x0e\x42OLT12_INVOICE\x10\x01\x12\x1a\n\x16\x42OLT12_INVOICE_REQUEST\x10\x02\x12\x12\n\x0e\x42OLT11_INVOICE\x10\x03\x12\x08\n\x04RUNE\x10\x04\x12\x15\n\x11\x45MERGENCY_RECOVER\x10\x05\x12\x16\n\x12\x42OLT12_PAYER_PROOF\x10\x06\x42\x0b\n\t_offer_idB\x11\n\x0f_offer_metadataB\x11\n\x0f_offer_currencyB!\n\x1f_warning_unknown_offer_currencyB\x16\n\x14_currency_minor_unitB\x0f\n\r_offer_amountB\x14\n\x12_offer_amount_msatB\x14\n\x12_offer_descriptionB\x0f\n\r_offer_issuerB\x11\n\x0f_offer_featuresB\x18\n\x16_offer_absolute_expiryB\x15\n\x13_offer_quantity_maxB\x13\n\x11_offer_recurrenceB$\n\"_warning_invalid_offer_descriptionB$\n\"_warning_missing_offer_descriptionB!\n\x1f_warning_invalid_offer_currencyB\x1f\n\x1d_warning_invalid_offer_issuerB\x12\n\x10_invreq_metadataB\x12\n\x10_invreq_payer_idB\x0f\n\r_invreq_chainB\x15\n\x13_invreq_amount_msatB\x12\n\x10_invreq_featuresB\x12\n\x10_invreq_quantityB\x14\n\x12_invreq_payer_noteB\x1c\n\x1a_invreq_recurrence_counterB\x1a\n\x18_invreq_recurrence_startB\"\n _warning_missing_invreq_metadataB\"\n _warning_missing_invreq_payer_idB$\n\"_warning_invalid_invreq_payer_noteB,\n*_warning_missing_invoice_request_signatureB,\n*_warning_invalid_invoice_request_signatureB\x15\n\x13_invoice_created_atB\x1a\n\x18_invoice_relative_expiryB\x17\n\x15_invoice_payment_hashB\x16\n\x14_invoice_amount_msatB\x13\n\x11_invoice_featuresB\x12\n\x10_invoice_node_idB\x1e\n\x1c_invoice_recurrence_basetimeB \n\x1e_warning_missing_invoice_pathsB%\n#_warning_missing_invoice_blindedpayB%\n#_warning_missing_invoice_created_atB\'\n%_warning_missing_invoice_payment_hashB!\n\x1f_warning_missing_invoice_amountB.\n,_warning_missing_invoice_recurrence_basetimeB\"\n _warning_missing_invoice_node_idB$\n\"_warning_missing_invoice_signatureB$\n\"_warning_invalid_invoice_signatureB\r\n\x0b_created_atB\t\n\x07_expiryB\x08\n\x06_payeeB\x0f\n\r_payment_hashB\x13\n\x11_description_hashB\x18\n\x16_min_final_cltv_expiryB\x11\n\x0f_payment_secretB\x13\n\x11_payment_metadataB\x0c\n\n_unique_idB\n\n\x08_versionB\t\n\x07_stringB\x1c\n\x1a_warning_rune_invalid_utf8B\x06\n\x04_hexB\x0c\n\n_decryptedB\x0c\n\n_signatureB\x0b\n\t_currencyB\x0e\n\x0c_amount_msatB\x0e\n\x0c_descriptionB\x0b\n\t_featuresB\t\n\x07_routesB\x12\n\x10_offer_issuer_idB\"\n _warning_missing_offer_issuer_idB\x1d\n\x1b_warning_empty_blinded_pathB\x16\n\x14_invreq_bip_353_nameB+\n)_warning_invreq_bip_353_name_name_invalidB-\n+_warning_invreq_bip_353_name_domain_invalidB\x1b\n\x19_invreq_recurrence_cancelB3\n1_warning_invreq_recurrence_cancel_without_counterB5\n3_warning_invreq_recurrence_cancel_with_zero_counterB\x11\n\x0f_proof_preimageB\r\n\x0b_proof_noteB\x12\n\x10_proof_signature\"(\n\x0b\x44\x65\x63odeExtra\x12\x0b\n\x03tag\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\t\"\xc4\x01\n\x0f\x44\x65\x63odeFallbacks\x12;\n\titem_type\x18\x02 \x01(\x0e\x32(.cln.DecodeFallbacks.DecodeFallbacksType\x12\x11\n\x04\x61\x64\x64r\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x0b\n\x03hex\x18\x04 \x01(\x0c\"K\n\x13\x44\x65\x63odeFallbacksType\x12\t\n\x05P2PKH\x10\x00\x12\x08\n\x04P2SH\x10\x01\x12\n\n\x06P2WPKH\x10\x02\x12\t\n\x05P2WSH\x10\x03\x12\x08\n\x04P2TR\x10\x04\x42\x07\n\x05_addr\"X\n\x16\x44\x65\x63odeInvoiceFallbacks\x12\x0f\n\x07version\x18\x01 \x01(\r\x12\x0b\n\x03hex\x18\x02 \x01(\x0c\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_address\"\xa6\x02\n\x12\x44\x65\x63odeInvoicePaths\x12)\n\x04path\x18\x01 \x03(\x0b\x32\x1b.cln.DecodeInvoicePathsPath\x12/\n\x07payinfo\x18\x02 \x01(\x0b\x32\x1e.cln.DecodeInvoicePathsPayinfo\x12\x1a\n\rfirst_node_id\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x1b\n\x0e\x66irst_path_key\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x12\x1b\n\x0e\x66irst_scid_dir\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x17\n\nfirst_scid\x18\x06 \x01(\tH\x03\x88\x01\x01\x42\x10\n\x0e_first_node_idB\x11\n\x0f_first_path_keyB\x11\n\x0f_first_scid_dirB\r\n\x0b_first_scid\"S\n\x16\x44\x65\x63odeInvoicePathsPath\x12\x17\n\x0f\x62linded_node_id\x18\x01 \x01(\x0c\x12 \n\x18\x65ncrypted_recipient_data\x18\x02 \x01(\x0c\"\x97\x02\n\x19\x44\x65\x63odeInvoicePathsPayinfo\x12+\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x10\n\x08\x66\x65\x61tures\x18\x02 \x01(\x0c\x12\"\n\rfee_base_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x04 \x01(\r\x12+\n\x11htlc_maximum_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x19\n\x11\x63ltv_expiry_delta\x18\x06 \x01(\rB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msat\"T\n\x16\x44\x65\x63odeInvreqBip353Name\x12\x11\n\x04name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x64omain\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x07\n\x05_nameB\t\n\x07_domain\"\xf3\x01\n\x11\x44\x65\x63odeInvreqPaths\x12\x1b\n\x0e\x66irst_scid_dir\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x1a\n\rfirst_node_id\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x17\n\nfirst_scid\x18\x04 \x01(\tH\x02\x88\x01\x01\x12(\n\x04path\x18\x05 \x03(\x0b\x32\x1a.cln.DecodeInvreqPathsPath\x12\x1b\n\x0e\x66irst_path_key\x18\x06 \x01(\x0cH\x03\x88\x01\x01\x42\x11\n\x0f_first_scid_dirB\x10\n\x0e_first_node_idB\r\n\x0b_first_scidB\x11\n\x0f_first_path_key\"R\n\x15\x44\x65\x63odeInvreqPathsPath\x12\x17\n\x0f\x62linded_node_id\x18\x01 \x01(\x0c\x12 \n\x18\x65ncrypted_recipient_data\x18\x02 \x01(\x0c\"\xf1\x01\n\x10\x44\x65\x63odeOfferPaths\x12\x1a\n\rfirst_node_id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\'\n\x04path\x18\x03 \x03(\x0b\x32\x19.cln.DecodeOfferPathsPath\x12\x1b\n\x0e\x66irst_scid_dir\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x17\n\nfirst_scid\x18\x05 \x01(\tH\x02\x88\x01\x01\x12\x1b\n\x0e\x66irst_path_key\x18\x06 \x01(\x0cH\x03\x88\x01\x01\x42\x10\n\x0e_first_node_idB\x11\n\x0f_first_scid_dirB\r\n\x0b_first_scidB\x11\n\x0f_first_path_key\"Q\n\x14\x44\x65\x63odeOfferPathsPath\x12\x17\n\x0f\x62linded_node_id\x18\x01 \x01(\x0c\x12 \n\x18\x65ncrypted_recipient_data\x18\x02 \x01(\x0c\"\xab\x02\n\x15\x44\x65\x63odeOfferRecurrence\x12\x11\n\ttime_unit\x18\x01 \x01(\r\x12\x1d\n\x10\x63ompulsory_field\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x1b\n\x0etime_unit_name\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0e\n\x06period\x18\x04 \x01(\r\x12\x15\n\x08\x62\x61setime\x18\x05 \x01(\x04H\x02\x88\x01\x01\x12;\n\tpaywindow\x18\x06 \x01(\x0b\x32#.cln.DecodeOfferRecurrencePaywindowH\x03\x88\x01\x01\x12\x12\n\x05limit\x18\x07 \x01(\rH\x04\x88\x01\x01\x42\x13\n\x11_compulsory_fieldB\x11\n\x0f_time_unit_nameB\x0b\n\t_basetimeB\x0c\n\n_paywindowB\x08\n\x06_limit\"\x89\x01\n\x1e\x44\x65\x63odeOfferRecurrencePaywindow\x12\x16\n\x0eseconds_before\x18\x01 \x01(\r\x12\x15\n\rseconds_after\x18\x02 \x01(\r\x12 \n\x13proportional_amount\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\x16\n\x14_proportional_amount\";\n\x12\x44\x65\x63odeRestrictions\x12\x14\n\x0c\x61lternatives\x18\x01 \x03(\t\x12\x0f\n\x07summary\x18\x02 \x01(\t\"S\n\x1f\x44\x65\x63odeUnknownInvoiceRequestTlvs\x12\x11\n\titem_type\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\r\n\x05value\x18\x03 \x01(\x0c\"L\n\x18\x44\x65\x63odeUnknownInvoiceTlvs\x12\x11\n\titem_type\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\r\n\x05value\x18\x03 \x01(\x0c\"J\n\x16\x44\x65\x63odeUnknownOfferTlvs\x12\x11\n\titem_type\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\r\n\x05value\x18\x03 \x01(\x0c\"O\n\x1b\x44\x65\x63odeUnknownPayerProofTlvs\x12\x11\n\titem_type\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\r\n\x05value\x18\x03 \x01(\x0c\"\xc2\x01\n\rDelpayRequest\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12/\n\x06status\x18\x02 \x01(\x0e\x32\x1f.cln.DelpayRequest.DelpayStatus\x12\x13\n\x06partid\x18\x03 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07groupid\x18\x04 \x01(\x04H\x01\x88\x01\x01\"(\n\x0c\x44\x65lpayStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x42\t\n\x07_partidB\n\n\x08_groupid\"7\n\x0e\x44\x65lpayResponse\x12%\n\x08payments\x18\x01 \x03(\x0b\x32\x13.cln.DelpayPayments\"\xb4\x05\n\x0e\x44\x65lpayPayments\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\n\n\x02id\x18\x02 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x38\n\x06status\x18\x04 \x01(\x0e\x32(.cln.DelpayPayments.DelpayPaymentsStatus\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x06partid\x18\x06 \x01(\x04H\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x07 \x01(\x0cH\x01\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x12\n\ncreated_at\x18\t \x01(\x04\x12\x1a\n\rupdated_index\x18\n \x01(\x04H\x03\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0b \x01(\x04H\x04\x88\x01\x01\x12\x14\n\x07groupid\x18\x0c \x01(\x04H\x05\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x06\x88\x01\x01\x12\x12\n\x05label\x18\x0e \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0f \x01(\tH\x08\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x10 \x01(\tH\t\x88\x01\x01\x12\x17\n\nerroronion\x18\x11 \x01(\x0cH\n\x88\x01\x01\"=\n\x14\x44\x65lpayPaymentsStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\t\n\x07_partidB\x0e\n\x0c_destinationB\x0e\n\x0c_amount_msatB\x10\n\x0e_updated_indexB\x0f\n\r_completed_atB\n\n\x08_groupidB\x13\n\x11_payment_preimageB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\r\n\x0b_erroronion\"\xb3\x01\n\x11\x44\x65lforwardRequest\x12\x12\n\nin_channel\x18\x01 \x01(\t\x12\x12\n\nin_htlc_id\x18\x02 \x01(\x04\x12\x37\n\x06status\x18\x03 \x01(\x0e\x32\'.cln.DelforwardRequest.DelforwardStatus\"=\n\x10\x44\x65lforwardStatus\x12\x0b\n\x07SETTLED\x10\x00\x12\x10\n\x0cLOCAL_FAILED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\"\x14\n\x12\x44\x65lforwardResponse\"\'\n\x13\x44isableofferRequest\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\"\xdc\x01\n\x14\x44isableofferResponse\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x66orce_paths\x18\x08 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_descriptionB\x0e\n\x0c_force_paths\"&\n\x12\x45nableofferRequest\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\"\xdb\x01\n\x13\x45nableofferResponse\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x66orce_paths\x18\x08 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_descriptionB\x0e\n\x0c_force_paths\"=\n\x11\x44isconnectRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x12\n\x05\x66orce\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\x08\n\x06_force\"\x14\n\x12\x44isconnectResponse\"k\n\x0f\x46\x65\x65ratesRequest\x12\x31\n\x05style\x18\x01 \x01(\x0e\x32\".cln.FeeratesRequest.FeeratesStyle\"%\n\rFeeratesStyle\x12\t\n\x05PERKB\x10\x00\x12\t\n\x05PERKW\x10\x01\"\x9a\x02\n\x10\x46\x65\x65ratesResponse\x12%\n\x18warning_missing_feerates\x18\x01 \x01(\tH\x00\x88\x01\x01\x12&\n\x05perkb\x18\x02 \x01(\x0b\x32\x12.cln.FeeratesPerkbH\x01\x88\x01\x01\x12&\n\x05perkw\x18\x03 \x01(\x0b\x32\x12.cln.FeeratesPerkwH\x02\x88\x01\x01\x12\x44\n\x15onchain_fee_estimates\x18\x04 \x01(\x0b\x32 .cln.FeeratesOnchainFeeEstimatesH\x03\x88\x01\x01\x42\x1b\n\x19_warning_missing_feeratesB\x08\n\x06_perkbB\x08\n\x06_perkwB\x18\n\x16_onchain_fee_estimates\"\x99\x02\n\x1b\x46\x65\x65ratesOnchainFeeEstimates\x12 \n\x18opening_channel_satoshis\x18\x01 \x01(\x04\x12\x1d\n\x15mutual_close_satoshis\x18\x02 \x01(\x04\x12!\n\x19unilateral_close_satoshis\x18\x03 \x01(\x04\x12\x1d\n\x15htlc_timeout_satoshis\x18\x04 \x01(\x04\x12\x1d\n\x15htlc_success_satoshis\x18\x05 \x01(\x04\x12\x30\n#unilateral_close_nonanchor_satoshis\x18\x06 \x01(\x04H\x00\x88\x01\x01\x42&\n$_unilateral_close_nonanchor_satoshis\"\x84\x03\n\rFeeratesPerkb\x12\x16\n\x0emin_acceptable\x18\x01 \x01(\r\x12\x16\n\x0emax_acceptable\x18\x02 \x01(\r\x12\x14\n\x07opening\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x19\n\x0cmutual_close\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1d\n\x10unilateral_close\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x14\n\x07penalty\x18\x08 \x01(\rH\x03\x88\x01\x01\x12.\n\testimates\x18\t \x03(\x0b\x32\x1b.cln.FeeratesPerkbEstimates\x12\r\n\x05\x66loor\x18\n \x01(\r\x12$\n\x17unilateral_anchor_close\x18\x0b \x01(\rH\x04\x88\x01\x01\x12\x13\n\x06splice\x18\x0c \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_openingB\x0f\n\r_mutual_closeB\x13\n\x11_unilateral_closeB\n\n\x08_penaltyB\x1a\n\x18_unilateral_anchor_closeB\t\n\x07_splice\"W\n\x16\x46\x65\x65ratesPerkbEstimates\x12\x12\n\nblockcount\x18\x01 \x01(\r\x12\x0f\n\x07\x66\x65\x65rate\x18\x02 \x01(\r\x12\x18\n\x10smoothed_feerate\x18\x03 \x01(\r\"\x84\x03\n\rFeeratesPerkw\x12\x16\n\x0emin_acceptable\x18\x01 \x01(\r\x12\x16\n\x0emax_acceptable\x18\x02 \x01(\r\x12\x14\n\x07opening\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x19\n\x0cmutual_close\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1d\n\x10unilateral_close\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x14\n\x07penalty\x18\x08 \x01(\rH\x03\x88\x01\x01\x12.\n\testimates\x18\t \x03(\x0b\x32\x1b.cln.FeeratesPerkwEstimates\x12\r\n\x05\x66loor\x18\n \x01(\r\x12$\n\x17unilateral_anchor_close\x18\x0b \x01(\rH\x04\x88\x01\x01\x12\x13\n\x06splice\x18\x0c \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_openingB\x0f\n\r_mutual_closeB\x13\n\x11_unilateral_closeB\n\n\x08_penaltyB\x1a\n\x18_unilateral_anchor_closeB\t\n\x07_splice\"W\n\x16\x46\x65\x65ratesPerkwEstimates\x12\x12\n\nblockcount\x18\x01 \x01(\r\x12\x0f\n\x07\x66\x65\x65rate\x18\x02 \x01(\r\x12\x18\n\x10smoothed_feerate\x18\x03 \x01(\r\"%\n\x12\x46\x65tchbip353Request\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\"X\n\x13\x46\x65tchbip353Response\x12\r\n\x05proof\x18\x01 \x01(\t\x12\x32\n\x0cinstructions\x18\x02 \x03(\x0b\x32\x1c.cln.Fetchbip353Instructions\"\xf7\x01\n\x17\x46\x65tchbip353Instructions\x12\x18\n\x0b\x64\x65scription\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05offer\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x07onchain\x18\x03 \x01(\tH\x02\x88\x01\x01\x12!\n\x14offchain_amount_msat\x18\x04 \x01(\x04H\x03\x88\x01\x01\x12\x1f\n\x12onchain_amount_sat\x18\x05 \x01(\x04H\x04\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x08\n\x06_offerB\n\n\x08_onchainB\x17\n\x15_offchain_amount_msatB\x15\n\x13_onchain_amount_sat\"\xb9\x03\n\x13\x46\x65tchinvoiceRequest\x12\r\n\x05offer\x18\x01 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x15\n\x08quantity\x18\x03 \x01(\x04H\x01\x88\x01\x01\x12\x1f\n\x12recurrence_counter\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x1d\n\x10recurrence_start\x18\x05 \x01(\x01H\x03\x88\x01\x01\x12\x1d\n\x10recurrence_label\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x14\n\x07timeout\x18\x07 \x01(\x01H\x05\x88\x01\x01\x12\x17\n\npayer_note\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x1b\n\x0epayer_metadata\x18\t \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06\x62ip353\x18\n \x01(\tH\x08\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\x0b\n\t_quantityB\x15\n\x13_recurrence_counterB\x13\n\x11_recurrence_startB\x13\n\x11_recurrence_labelB\n\n\x08_timeoutB\r\n\x0b_payer_noteB\x11\n\x0f_payer_metadataB\t\n\x07_bip353\"\x99\x01\n\x14\x46\x65tchinvoiceResponse\x12\x0f\n\x07invoice\x18\x01 \x01(\t\x12)\n\x07\x63hanges\x18\x02 \x01(\x0b\x32\x18.cln.FetchinvoiceChanges\x12\x35\n\x0bnext_period\x18\x03 \x01(\x0b\x32\x1b.cln.FetchinvoiceNextPeriodH\x00\x88\x01\x01\x42\x0e\n\x0c_next_period\"\x82\x02\n\x13\x46\x65tchinvoiceChanges\x12!\n\x14\x64\x65scription_appended\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1b\n\x0evendor_removed\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06vendor\x18\x04 \x01(\tH\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x42\x17\n\x15_description_appendedB\x0e\n\x0c_descriptionB\x11\n\x0f_vendor_removedB\t\n\x07_vendorB\x0e\n\x0c_amount_msat\"}\n\x16\x46\x65tchinvoiceNextPeriod\x12\x0f\n\x07\x63ounter\x18\x01 \x01(\x04\x12\x11\n\tstarttime\x18\x02 \x01(\x04\x12\x0f\n\x07\x65ndtime\x18\x03 \x01(\x04\x12\x17\n\x0fpaywindow_start\x18\x04 \x01(\x04\x12\x15\n\rpaywindow_end\x18\x05 \x01(\x04\"\xe0\x01\n\x1d\x43\x61ncelrecurringinvoiceRequest\x12\r\n\x05offer\x18\x01 \x01(\t\x12\x1a\n\x12recurrence_counter\x18\x02 \x01(\x04\x12\x18\n\x10recurrence_label\x18\x03 \x01(\t\x12\x1d\n\x10recurrence_start\x18\x04 \x01(\x01H\x00\x88\x01\x01\x12\x17\n\npayer_note\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06\x62ip353\x18\x06 \x01(\tH\x02\x88\x01\x01\x42\x13\n\x11_recurrence_startB\r\n\x0b_payer_noteB\t\n\x07_bip353\"0\n\x1e\x43\x61ncelrecurringinvoiceResponse\x12\x0e\n\x06\x62olt12\x18\x01 \x01(\t\"&\n\x18\x46undchannelCancelRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\".\n\x19\x46undchannelCancelResponse\x12\x11\n\tcancelled\x18\x01 \x01(\t\"Z\n\x1a\x46undchannelCompleteRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\x12\x15\n\x08withhold\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\x0b\n\t_withhold\"N\n\x1b\x46undchannelCompleteResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x1b\n\x13\x63ommitments_secured\x18\x02 \x01(\x08\"\x84\x04\n\x12\x46undchannelRequest\x12#\n\x06\x61mount\x18\x01 \x01(\x0b\x32\x13.cln.AmountSatOrAll\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x15\n\x08\x61nnounce\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12#\n\tpush_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\tH\x03\x88\x01\x01\x12(\n\x0brequest_amt\x18\x07 \x01(\x0b\x32\x0e.cln.AmountSatH\x04\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x08 \x01(\tH\x05\x88\x01\x01\x12\n\n\x02id\x18\t \x01(\x0c\x12\x14\n\x07minconf\x18\n \x01(\rH\x06\x88\x01\x01\x12\x1c\n\x05utxos\x18\x0b \x03(\x0b\x32\r.cln.Outpoint\x12\x15\n\x08mindepth\x18\x0c \x01(\rH\x07\x88\x01\x01\x12$\n\x07reserve\x18\r \x01(\x0b\x32\x0e.cln.AmountSatH\x08\x88\x01\x01\x12\x14\n\x0c\x63hannel_type\x18\x0e \x03(\rB\n\n\x08_feerateB\x0b\n\t_announceB\x0c\n\n_push_msatB\x0b\n\t_close_toB\x0e\n\x0c_request_amtB\x10\n\x0e_compact_leaseB\n\n\x08_minconfB\x0b\n\t_mindepthB\n\n\x08_reserve\"\xce\x01\n\x13\x46undchannelResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x0e\n\x06outnum\x18\x03 \x01(\r\x12\x12\n\nchannel_id\x18\x04 \x01(\x0c\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x12\x15\n\x08mindepth\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x31\n\x0c\x63hannel_type\x18\x07 \x01(\x0b\x32\x1b.cln.FundchannelChannelTypeB\x0b\n\t_close_toB\x0b\n\t_mindepth\"K\n\x16\x46undchannelChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\xdc\x02\n\x17\x46undchannelStartRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x1e\n\x06\x61mount\x18\x02 \x01(\x0b\x32\x0e.cln.AmountSat\x12\"\n\x07\x66\x65\x65rate\x18\x03 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x15\n\x08\x61nnounce\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\tH\x02\x88\x01\x01\x12#\n\tpush_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x15\n\x08mindepth\x18\x07 \x01(\rH\x04\x88\x01\x01\x12$\n\x07reserve\x18\x08 \x01(\x0b\x32\x0e.cln.AmountSatH\x05\x88\x01\x01\x12\x14\n\x0c\x63hannel_type\x18\t \x03(\rB\n\n\x08_feerateB\x0b\n\t_announceB\x0b\n\t_close_toB\x0c\n\n_push_msatB\x0b\n\t_mindepthB\n\n\x08_reserve\"\xf6\x01\n\x18\x46undchannelStartResponse\x12\x17\n\x0f\x66unding_address\x18\x01 \x01(\t\x12\x14\n\x0cscriptpubkey\x18\x02 \x01(\x0c\x12;\n\x0c\x63hannel_type\x18\x03 \x01(\x0b\x32 .cln.FundchannelStartChannelTypeH\x00\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x12\x15\n\rwarning_usage\x18\x05 \x01(\t\x12\x15\n\x08mindepth\x18\x06 \x01(\rH\x02\x88\x01\x01\x42\x0f\n\r_channel_typeB\x0b\n\t_close_toB\x0b\n\t_mindepth\"P\n\x1b\x46undchannelStartChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x9d\x01\n\rGetlogRequest\x12\x32\n\x05level\x18\x01 \x01(\x0e\x32\x1e.cln.GetlogRequest.GetlogLevelH\x00\x88\x01\x01\"N\n\x0bGetlogLevel\x12\n\n\x06\x42ROKEN\x10\x00\x12\x0b\n\x07UNUSUAL\x10\x01\x12\x08\n\x04INFO\x10\x02\x12\t\n\x05\x44\x45\x42UG\x10\x03\x12\x06\n\x02IO\x10\x04\x12\t\n\x05TRACE\x10\x05\x42\x08\n\x06_level\"h\n\x0eGetlogResponse\x12\x12\n\ncreated_at\x18\x01 \x01(\t\x12\x12\n\nbytes_used\x18\x02 \x01(\r\x12\x11\n\tbytes_max\x18\x03 \x01(\r\x12\x1b\n\x03log\x18\x04 \x03(\x0b\x32\x0e.cln.GetlogLog\"\xe8\x02\n\tGetlogLog\x12/\n\titem_type\x18\x01 \x01(\x0e\x32\x1c.cln.GetlogLog.GetlogLogType\x12\x18\n\x0bnum_skipped\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04time\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06source\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x10\n\x03log\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x07node_id\x18\x06 \x01(\x0cH\x04\x88\x01\x01\x12\x11\n\x04\x64\x61ta\x18\x07 \x01(\x0cH\x05\x88\x01\x01\"l\n\rGetlogLogType\x12\x0b\n\x07SKIPPED\x10\x00\x12\n\n\x06\x42ROKEN\x10\x01\x12\x0b\n\x07UNUSUAL\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\t\n\x05\x44\x45\x42UG\x10\x04\x12\t\n\x05IO_IN\x10\x05\x12\n\n\x06IO_OUT\x10\x06\x12\t\n\x05TRACE\x10\x07\x42\x0e\n\x0c_num_skippedB\x07\n\x05_timeB\t\n\x07_sourceB\x06\n\x04_logB\n\n\x08_node_idB\x07\n\x05_data\"\xd9\x08\n\x13\x46underupdateRequest\x12@\n\x06policy\x18\x01 \x01(\x0e\x32+.cln.FunderupdateRequest.FunderupdatePolicyH\x00\x88\x01\x01\x12$\n\npolicy_mod\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0bleases_only\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x30\n\x16min_their_funding_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x30\n\x16max_their_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12.\n\x14per_channel_min_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12.\n\x14per_channel_max_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12+\n\x11reserve_tank_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x07\x88\x01\x01\x12\x19\n\x0c\x66uzz_percent\x18\t \x01(\rH\x08\x88\x01\x01\x12\x1d\n\x10\x66und_probability\x18\n \x01(\rH\t\x88\x01\x01\x12-\n\x13lease_fee_base_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\n\x88\x01\x01\x12\x1c\n\x0flease_fee_basis\x18\x0c \x01(\rH\x0b\x88\x01\x01\x12\x1b\n\x0e\x66unding_weight\x18\r \x01(\rH\x0c\x88\x01\x01\x12\x33\n\x19\x63hannel_fee_max_base_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\r\x88\x01\x01\x12\x35\n(channel_fee_max_proportional_thousandths\x18\x0f \x01(\rH\x0e\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x10 \x01(\x0cH\x0f\x88\x01\x01\"9\n\x12\x46underupdatePolicy\x12\t\n\x05MATCH\x10\x00\x12\r\n\tAVAILABLE\x10\x01\x12\t\n\x05\x46IXED\x10\x02\x42\t\n\x07_policyB\r\n\x0b_policy_modB\x0e\n\x0c_leases_onlyB\x19\n\x17_min_their_funding_msatB\x19\n\x17_max_their_funding_msatB\x17\n\x15_per_channel_min_msatB\x17\n\x15_per_channel_max_msatB\x14\n\x12_reserve_tank_msatB\x0f\n\r_fuzz_percentB\x13\n\x11_fund_probabilityB\x16\n\x14_lease_fee_base_msatB\x12\n\x10_lease_fee_basisB\x11\n\x0f_funding_weightB\x1c\n\x1a_channel_fee_max_base_msatB+\n)_channel_fee_max_proportional_thousandthsB\x10\n\x0e_compact_lease\"\xdf\x06\n\x14\x46underupdateResponse\x12\x0f\n\x07summary\x18\x01 \x01(\t\x12<\n\x06policy\x18\x02 \x01(\x0e\x32,.cln.FunderupdateResponse.FunderupdatePolicy\x12\x12\n\npolicy_mod\x18\x03 \x01(\r\x12\x13\n\x0bleases_only\x18\x04 \x01(\x08\x12+\n\x16min_their_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x16max_their_funding_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12)\n\x14per_channel_min_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12)\n\x14per_channel_max_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11reserve_tank_msat\x18\t \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66uzz_percent\x18\n \x01(\r\x12\x18\n\x10\x66und_probability\x18\x0b \x01(\r\x12-\n\x13lease_fee_base_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x1c\n\x0flease_fee_basis\x18\r \x01(\rH\x01\x88\x01\x01\x12\x1b\n\x0e\x66unding_weight\x18\x0e \x01(\rH\x02\x88\x01\x01\x12\x33\n\x19\x63hannel_fee_max_base_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x35\n(channel_fee_max_proportional_thousandths\x18\x10 \x01(\rH\x04\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x11 \x01(\x0cH\x05\x88\x01\x01\"9\n\x12\x46underupdatePolicy\x12\t\n\x05MATCH\x10\x00\x12\r\n\tAVAILABLE\x10\x01\x12\t\n\x05\x46IXED\x10\x02\x42\x16\n\x14_lease_fee_base_msatB\x12\n\x10_lease_fee_basisB\x11\n\x0f_funding_weightB\x1c\n\x1a_channel_fee_max_base_msatB+\n)_channel_fee_max_proportional_thousandthsB\x10\n\x0e_compact_lease\"\x8c\x02\n\x0fGetrouteRequest\x12\x0e\n\x02id\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\nriskfactor\x18\x03 \x01(\x04\x42\x02\x18\x01\x12\x15\n\x04\x63ltv\x18\x04 \x01(\rB\x02\x18\x01H\x00\x88\x01\x01\x12\x17\n\x06\x66romid\x18\x05 \x01(\x0c\x42\x02\x18\x01H\x01\x88\x01\x01\x12\x1c\n\x0b\x66uzzpercent\x18\x06 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x13\n\x07\x65xclude\x18\x07 \x03(\tB\x02\x18\x01\x12\x18\n\x07maxhops\x18\x08 \x01(\rB\x02\x18\x01H\x03\x88\x01\x01\x12$\n\x0b\x61mount_msat\x18\t \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x42\x07\n\x05_cltvB\t\n\x07_fromidB\x0e\n\x0c_fuzzpercentB\n\n\x08_maxhops\"9\n\x10GetrouteResponse\x12%\n\x05route\x18\x01 \x03(\x0b\x32\x12.cln.GetrouteRouteB\x02\x18\x01\"\xe1\x01\n\rGetrouteRoute\x12\x0e\n\x02id\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x13\n\x07\x63hannel\x18\x02 \x01(\tB\x02\x18\x01\x12\x15\n\tdirection\x18\x03 \x01(\rB\x02\x18\x01\x12$\n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12\x11\n\x05\x64\x65lay\x18\x05 \x01(\rB\x02\x18\x01\x12\x38\n\x05style\x18\x06 \x01(\x0e\x32%.cln.GetrouteRoute.GetrouteRouteStyleB\x02\x18\x01\"!\n\x12GetrouteRouteStyle\x12\x0b\n\x03TLV\x10\x00\x1a\x02\x08\x01\"t\n\x14ListaddressesRequest\x12\x14\n\x07\x61\x64\x64ress\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05start\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x03 \x01(\rH\x02\x88\x01\x01\x42\n\n\x08_addressB\x08\n\x06_startB\x08\n\x06_limit\"G\n\x15ListaddressesResponse\x12.\n\taddresses\x18\x01 \x03(\x0b\x32\x1b.cln.ListaddressesAddresses\"d\n\x16ListaddressesAddresses\x12\x0e\n\x06keyidx\x18\x01 \x01(\x04\x12\x13\n\x06\x62\x65\x63h32\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04p2tr\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\t\n\x07_bech32B\x07\n\x05_p2tr\"\xb7\x03\n\x13ListforwardsRequest\x12@\n\x06status\x18\x01 \x01(\x0e\x32+.cln.ListforwardsRequest.ListforwardsStatusH\x00\x88\x01\x01\x12\x17\n\nin_channel\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0bout_channel\x18\x03 \x01(\tH\x02\x88\x01\x01\x12>\n\x05index\x18\x04 \x01(\x0e\x32*.cln.ListforwardsRequest.ListforwardsIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\"-\n\x11ListforwardsIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\"L\n\x12ListforwardsStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\x10\n\x0cLOCAL_FAILED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x42\t\n\x07_statusB\r\n\x0b_in_channelB\x0e\n\x0c_out_channelB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListforwardsResponse\x12+\n\x08\x66orwards\x18\x01 \x03(\x0b\x32\x19.cln.ListforwardsForwards\"\x9d\x06\n\x14ListforwardsForwards\x12\x12\n\nin_channel\x18\x01 \x01(\t\x12\x1c\n\x07in_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x44\n\x06status\x18\x03 \x01(\x0e\x32\x34.cln.ListforwardsForwards.ListforwardsForwardsStatus\x12\x15\n\rreceived_time\x18\x04 \x01(\x01\x12\x18\n\x0bout_channel\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\"\n\x08\x66\x65\x65_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\"\n\x08out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12G\n\x05style\x18\t \x01(\x0e\x32\x33.cln.ListforwardsForwards.ListforwardsForwardsStyleH\x03\x88\x01\x01\x12\x17\n\nin_htlc_id\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x18\n\x0bout_htlc_id\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0c \x01(\x04\x12\x1a\n\rupdated_index\x18\r \x01(\x04H\x06\x88\x01\x01\x12\x1a\n\rresolved_time\x18\x0e \x01(\x01H\x07\x88\x01\x01\x12\x15\n\x08\x66\x61ilcode\x18\x0f \x01(\rH\x08\x88\x01\x01\x12\x17\n\nfailreason\x18\x10 \x01(\tH\t\x88\x01\x01\"T\n\x1aListforwardsForwardsStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\x10\n\x0cLOCAL_FAILED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\"0\n\x19ListforwardsForwardsStyle\x12\n\n\x06LEGACY\x10\x00\x12\x07\n\x03TLV\x10\x01\x42\x0e\n\x0c_out_channelB\x0b\n\t_fee_msatB\x0b\n\t_out_msatB\x08\n\x06_styleB\r\n\x0b_in_htlc_idB\x0e\n\x0c_out_htlc_idB\x10\n\x0e_updated_indexB\x10\n\x0e_resolved_timeB\x0b\n\t_failcodeB\r\n\x0b_failreason\"a\n\x11ListoffersRequest\x12\x15\n\x08offer_id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x18\n\x0b\x61\x63tive_only\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\x0b\n\t_offer_idB\x0e\n\x0c_active_only\";\n\x12ListoffersResponse\x12%\n\x06offers\x18\x01 \x03(\x0b\x32\x15.cln.ListoffersOffers\"\xd8\x01\n\x10ListoffersOffers\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x66orce_paths\x18\x08 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_descriptionB\x0e\n\x0c_force_paths\"\x84\x03\n\x0fListpaysRequest\x12\x13\n\x06\x62olt11\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12\x38\n\x06status\x18\x03 \x01(\x0e\x32#.cln.ListpaysRequest.ListpaysStatusH\x02\x88\x01\x01\x12\x36\n\x05index\x18\x04 \x01(\x0e\x32\".cln.ListpaysRequest.ListpaysIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\")\n\rListpaysIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\"7\n\x0eListpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x42\t\n\x07_bolt11B\x0f\n\r_payment_hashB\t\n\x07_statusB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"3\n\x10ListpaysResponse\x12\x1f\n\x04pays\x18\x01 \x03(\x0b\x32\x11.cln.ListpaysPays\"\xdb\x05\n\x0cListpaysPays\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x34\n\x06status\x18\x02 \x01(\x0e\x32$.cln.ListpaysPays.ListpaysPaysStatus\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x12\n\ncreated_at\x18\x04 \x01(\x04\x12\x12\n\x05label\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x06 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x07 \x01(\tH\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12*\n\x10\x61mount_sent_msat\x18\t \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x17\n\nerroronion\x18\n \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0b \x01(\tH\x07\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0c \x01(\x04H\x08\x88\x01\x01\x12\x15\n\x08preimage\x18\r \x01(\x0cH\t\x88\x01\x01\x12\x1c\n\x0fnumber_of_parts\x18\x0e \x01(\x04H\n\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x0f \x01(\x04H\x0b\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x10 \x01(\x04H\x0c\x88\x01\x01\";\n\x12ListpaysPaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x13\n\x11_amount_sent_msatB\r\n\x0b_erroronionB\x0e\n\x0c_descriptionB\x0f\n\r_completed_atB\x0b\n\t_preimageB\x12\n\x10_number_of_partsB\x10\n\x0e_created_indexB\x10\n\x0e_updated_index\"\xd6\x01\n\x10ListhtlcsRequest\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x38\n\x05index\x18\x02 \x01(\x0e\x32$.cln.ListhtlcsRequest.ListhtlcsIndexH\x01\x88\x01\x01\x12\x12\n\x05start\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\rH\x03\x88\x01\x01\"*\n\x0eListhtlcsIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x42\x05\n\x03_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"7\n\x11ListhtlcsResponse\x12\"\n\x05htlcs\x18\x01 \x03(\x0b\x32\x13.cln.ListhtlcsHtlcs\"\xe5\x02\n\x0eListhtlcsHtlcs\x12\x18\n\x10short_channel_id\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\x04\x12\x0e\n\x06\x65xpiry\x18\x03 \x01(\r\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12>\n\tdirection\x18\x05 \x01(\x0e\x32+.cln.ListhtlcsHtlcs.ListhtlcsHtlcsDirection\x12\x14\n\x0cpayment_hash\x18\x06 \x01(\x0c\x12\x1d\n\x05state\x18\x07 \x01(\x0e\x32\x0e.cln.HtlcState\x12\x1a\n\rcreated_index\x18\x08 \x01(\x04H\x00\x88\x01\x01\x12\x1a\n\rupdated_index\x18\t \x01(\x04H\x01\x88\x01\x01\"*\n\x17ListhtlcsHtlcsDirection\x12\x07\n\x03OUT\x10\x00\x12\x06\n\x02IN\x10\x01\x42\x10\n\x0e_created_indexB\x10\n\x0e_updated_index\"\xb2\x02\n\x17MultifundchannelRequest\x12\x37\n\x0c\x64\x65stinations\x18\x01 \x03(\x0b\x32!.cln.MultifundchannelDestinations\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\x12H\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\x18\n\x0bminchannels\x18\x05 \x01(\x12H\x02\x88\x01\x01\x12-\n\x12\x63ommitment_feerate\x18\x06 \x01(\x0b\x32\x0c.cln.FeerateH\x03\x88\x01\x01\x42\n\n\x08_feerateB\n\n\x08_minconfB\x0e\n\x0c_minchannelsB\x15\n\x13_commitment_feerate\"\x97\x01\n\x18MultifundchannelResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x34\n\x0b\x63hannel_ids\x18\x03 \x03(\x0b\x32\x1f.cln.MultifundchannelChannelIds\x12+\n\x06\x66\x61iled\x18\x04 \x03(\x0b\x32\x1b.cln.MultifundchannelFailed\"\x88\x03\n\x1cMultifundchannelDestinations\x12\n\n\x02id\x18\x01 \x01(\t\x12#\n\x06\x61mount\x18\x02 \x01(\x0b\x32\x13.cln.AmountSatOrAll\x12\x15\n\x08\x61nnounce\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12#\n\tpush_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\tH\x02\x88\x01\x01\x12(\n\x0brequest_amt\x18\x06 \x01(\x0b\x32\x0e.cln.AmountSatH\x03\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x07 \x01(\tH\x04\x88\x01\x01\x12\x15\n\x08mindepth\x18\x08 \x01(\rH\x05\x88\x01\x01\x12$\n\x07reserve\x18\t \x01(\x0b\x32\x0e.cln.AmountSatH\x06\x88\x01\x01\x42\x0b\n\t_announceB\x0c\n\n_push_msatB\x0b\n\t_close_toB\x0e\n\x0c_request_amtB\x10\n\x0e_compact_leaseB\x0b\n\t_mindepthB\n\n\x08_reserve\"\xb2\x01\n\x1aMultifundchannelChannelIds\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\x12\x12\n\nchannel_id\x18\x03 \x01(\x0c\x12@\n\x0c\x63hannel_type\x18\x04 \x01(\x0b\x32*.cln.MultifundchannelChannelIdsChannelType\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x42\x0b\n\t_close_to\"Z\n%MultifundchannelChannelIdsChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x93\x02\n\x16MultifundchannelFailed\x12\n\n\x02id\x18\x01 \x01(\x0c\x12H\n\x06method\x18\x02 \x01(\x0e\x32\x38.cln.MultifundchannelFailed.MultifundchannelFailedMethod\x12/\n\x05\x65rror\x18\x03 \x01(\x0b\x32 .cln.MultifundchannelFailedError\"r\n\x1cMultifundchannelFailedMethod\x12\x0b\n\x07\x43ONNECT\x10\x00\x12\x14\n\x10OPENCHANNEL_INIT\x10\x01\x12\x15\n\x11\x46UNDCHANNEL_START\x10\x02\x12\x18\n\x14\x46UNDCHANNEL_COMPLETE\x10\x03\"<\n\x1bMultifundchannelFailedError\x12\x0c\n\x04\x63ode\x18\x01 \x01(\x12\x12\x0f\n\x07message\x18\x02 \x01(\t\"\xa8\x01\n\x14MultiwithdrawRequest\x12 \n\x07outputs\x18\x01 \x03(\x0b\x32\x0f.cln.OutputDesc\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.OutpointB\n\n\x08_feerateB\n\n\x08_minconf\"1\n\x15MultiwithdrawResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"\xe2\x04\n\x0cOfferRequest\x12\x0e\n\x06\x61mount\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06issuer\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x12\n\x05label\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0cquantity_max\x18\x05 \x01(\x04H\x03\x88\x01\x01\x12\x1c\n\x0f\x61\x62solute_expiry\x18\x06 \x01(\x04H\x04\x88\x01\x01\x12\x17\n\nrecurrence\x18\x07 \x01(\tH\x05\x88\x01\x01\x12\x1c\n\x0frecurrence_base\x18\x08 \x01(\tH\x06\x88\x01\x01\x12!\n\x14recurrence_paywindow\x18\t \x01(\tH\x07\x88\x01\x01\x12\x1d\n\x10recurrence_limit\x18\n \x01(\rH\x08\x88\x01\x01\x12\x17\n\nsingle_use\x18\x0b \x01(\x08H\t\x88\x01\x01\x12 \n\x13proportional_amount\x18\r \x01(\x08H\n\x88\x01\x01\x12 \n\x13optional_recurrence\x18\x0e \x01(\x08H\x0b\x88\x01\x01\x12\x16\n\x0e\x66ronting_nodes\x18\x0f \x03(\x0c\x42\x0e\n\x0c_descriptionB\t\n\x07_issuerB\x08\n\x06_labelB\x0f\n\r_quantity_maxB\x12\n\x10_absolute_expiryB\r\n\x0b_recurrenceB\x12\n\x10_recurrence_baseB\x17\n\x15_recurrence_paywindowB\x13\n\x11_recurrence_limitB\r\n\x0b_single_useB\x16\n\x14_proportional_amountB\x16\n\x14_optional_recurrence\"\xbc\x01\n\rOfferResponse\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x0f\n\x07\x63reated\x18\x06 \x01(\x08\x12\x12\n\x05label\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x66orce_paths\x18\x08 \x01(\x08H\x01\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_force_paths\"-\n\x17OpenchannelAbortRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\"X\n\x18OpenchannelAbortResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x18\n\x10\x63hannel_canceled\x18\x02 \x01(\x08\x12\x0e\n\x06reason\x18\x03 \x01(\t\"\xa1\x01\n\x16OpenchannelBumpRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x13\n\x0binitialpsbt\x18\x02 \x01(\t\x12*\n\x0f\x66unding_feerate\x18\x03 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x1e\n\x06\x61mount\x18\x04 \x01(\x0b\x32\x0e.cln.AmountSatB\x12\n\x10_funding_feerate\"\xed\x01\n\x17OpenchannelBumpResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x35\n\x0c\x63hannel_type\x18\x02 \x01(\x0b\x32\x1f.cln.OpenchannelBumpChannelType\x12\x0c\n\x04psbt\x18\x03 \x01(\t\x12\x1b\n\x13\x63ommitments_secured\x18\x04 \x01(\x08\x12\x16\n\x0e\x66unding_serial\x18\x05 \x01(\x04\x12&\n\x19requires_confirmed_inputs\x18\x06 \x01(\x08H\x00\x88\x01\x01\x42\x1c\n\x1a_requires_confirmed_inputs\"O\n\x1aOpenchannelBumpChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\xa5\x03\n\x16OpenchannelInitRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x13\n\x0binitialpsbt\x18\x02 \x01(\t\x12-\n\x12\x63ommitment_feerate\x18\x03 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12*\n\x0f\x66unding_feerate\x18\x04 \x01(\x0b\x32\x0c.cln.FeerateH\x01\x88\x01\x01\x12\x15\n\x08\x61nnounce\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\tH\x03\x88\x01\x01\x12(\n\x0brequest_amt\x18\x07 \x01(\x0b\x32\x0e.cln.AmountSatH\x04\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x08 \x01(\x0cH\x05\x88\x01\x01\x12\x14\n\x0c\x63hannel_type\x18\t \x03(\r\x12\x1e\n\x06\x61mount\x18\n \x01(\x0b\x32\x0e.cln.AmountSatB\x15\n\x13_commitment_feerateB\x12\n\x10_funding_feerateB\x0b\n\t_announceB\x0b\n\t_close_toB\x0e\n\x0c_request_amtB\x10\n\x0e_compact_lease\"\xed\x01\n\x17OpenchannelInitResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\x12\x35\n\x0c\x63hannel_type\x18\x03 \x01(\x0b\x32\x1f.cln.OpenchannelInitChannelType\x12\x1b\n\x13\x63ommitments_secured\x18\x04 \x01(\x08\x12\x16\n\x0e\x66unding_serial\x18\x05 \x01(\x04\x12&\n\x19requires_confirmed_inputs\x18\x06 \x01(\x08H\x00\x88\x01\x01\x42\x1c\n\x1a_requires_confirmed_inputs\"O\n\x1aOpenchannelInitChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"C\n\x18OpenchannelSignedRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x13\n\x0bsigned_psbt\x18\x02 \x01(\t\"I\n\x19OpenchannelSignedResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\n\n\x02tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"<\n\x18OpenchannelUpdateRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\"\x95\x02\n\x19OpenchannelUpdateResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x37\n\x0c\x63hannel_type\x18\x02 \x01(\x0b\x32!.cln.OpenchannelUpdateChannelType\x12\x0c\n\x04psbt\x18\x03 \x01(\t\x12\x1b\n\x13\x63ommitments_secured\x18\x04 \x01(\x08\x12\x16\n\x0e\x66unding_outnum\x18\x05 \x01(\r\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12&\n\x19requires_confirmed_inputs\x18\x07 \x01(\x08H\x01\x88\x01\x01\x42\x0b\n\t_close_toB\x1c\n\x1a_requires_confirmed_inputs\"Q\n\x1cOpenchannelUpdateChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"Y\n\x0bPingRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x10\n\x03len\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x16\n\tpongbytes\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x06\n\x04_lenB\x0c\n\n_pongbytes\"\x1e\n\x0cPingResponse\x12\x0e\n\x06totlen\x18\x01 \x01(\r\"\x91\x01\n\rPluginRequest\x12)\n\nsubcommand\x18\x01 \x01(\x0e\x32\x15.cln.PluginSubcommand\x12\x13\n\x06plugin\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tdirectory\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0f\n\x07options\x18\x04 \x03(\tB\t\n\x07_pluginB\x0c\n\n_directory\"}\n\x0ePluginResponse\x12&\n\x07\x63ommand\x18\x01 \x01(\x0e\x32\x15.cln.PluginSubcommand\x12#\n\x07plugins\x18\x02 \x03(\x0b\x32\x12.cln.PluginPlugins\x12\x13\n\x06result\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_result\">\n\rPluginPlugins\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x0f\n\x07\x64ynamic\x18\x03 \x01(\x08\"@\n\x14RenepaystatusRequest\x12\x1a\n\tinvstring\x18\x01 \x01(\tB\x02\x18\x01H\x00\x88\x01\x01\x42\x0c\n\n_invstring\"K\n\x15RenepaystatusResponse\x12\x32\n\tpaystatus\x18\x01 \x03(\x0b\x32\x1b.cln.RenepaystatusPaystatusB\x02\x18\x01\"\x9a\x04\n\x16RenepaystatusPaystatus\x12\x12\n\x06\x62olt11\x18\x01 \x01(\tB\x02\x18\x01\x12!\n\x10payment_preimage\x18\x02 \x01(\x0c\x42\x02\x18\x01H\x00\x88\x01\x01\x12\x18\n\x0cpayment_hash\x18\x03 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\ncreated_at\x18\x04 \x01(\x01\x42\x02\x18\x01\x12\x13\n\x07groupid\x18\x05 \x01(\rB\x02\x18\x01\x12\x16\n\x05parts\x18\x06 \x01(\rB\x02\x18\x01H\x01\x88\x01\x01\x12$\n\x0b\x61mount_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12.\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x02\x88\x01\x01\x12L\n\x06status\x18\t \x01(\x0e\x32\x38.cln.RenepaystatusPaystatus.RenepaystatusPaystatusStatusB\x02\x18\x01\x12\x1c\n\x0b\x64\x65stination\x18\n \x01(\x0c\x42\x02\x18\x01H\x03\x88\x01\x01\x12\x11\n\x05notes\x18\x0b \x03(\tB\x02\x18\x01\"Q\n\x1cRenepaystatusPaystatusStatus\x12\x10\n\x08\x43OMPLETE\x10\x00\x1a\x02\x08\x01\x12\x0f\n\x07PENDING\x10\x01\x1a\x02\x08\x01\x12\x0e\n\x06\x46\x41ILED\x10\x02\x1a\x02\x08\x01\x42\x13\n\x11_payment_preimageB\x08\n\x06_partsB\x13\n\x11_amount_sent_msatB\x0e\n\x0c_destination\"\xfe\x02\n\x0eRenepayRequest\x12\x15\n\tinvstring\x18\x01 \x01(\tB\x02\x18\x01\x12)\n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x00\x88\x01\x01\x12$\n\x06maxfee\x18\x03 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x01\x88\x01\x01\x12\x19\n\x08maxdelay\x18\x04 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x1a\n\tretry_for\x18\x05 \x01(\rB\x02\x18\x01H\x03\x88\x01\x01\x12\x1c\n\x0b\x64\x65scription\x18\x06 \x01(\tB\x02\x18\x01H\x04\x88\x01\x01\x12\x16\n\x05label\x18\x07 \x01(\tB\x02\x18\x01H\x05\x88\x01\x01\x12\x1f\n\x0e\x64\x65v_use_shadow\x18\x08 \x01(\x08\x42\x02\x18\x01H\x06\x88\x01\x01\x12\x13\n\x07\x65xclude\x18\t \x03(\tB\x02\x18\x01\x42\x0e\n\x0c_amount_msatB\t\n\x07_maxfeeB\x0b\n\t_maxdelayB\x0c\n\n_retry_forB\x0e\n\x0c_descriptionB\x08\n\x06_labelB\x11\n\x0f_dev_use_shadow\"\xdd\x03\n\x0fRenepayResponse\x12\x1c\n\x10payment_preimage\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x18\n\x0cpayment_hash\x18\x02 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\ncreated_at\x18\x03 \x01(\x01\x42\x02\x18\x01\x12\x11\n\x05parts\x18\x04 \x01(\rB\x02\x18\x01\x12$\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12)\n\x10\x61mount_sent_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12\x36\n\x06status\x18\x07 \x01(\x0e\x32\".cln.RenepayResponse.RenepayStatusB\x02\x18\x01\x12\x1c\n\x0b\x64\x65stination\x18\x08 \x01(\x0c\x42\x02\x18\x01H\x00\x88\x01\x01\x12\x17\n\x06\x62olt11\x18\t \x01(\tB\x02\x18\x01H\x01\x88\x01\x01\x12\x17\n\x06\x62olt12\x18\n \x01(\tB\x02\x18\x01H\x02\x88\x01\x01\x12\x18\n\x07groupid\x18\x0b \x01(\x04\x42\x02\x18\x01H\x03\x88\x01\x01\"B\n\rRenepayStatus\x12\x10\n\x08\x43OMPLETE\x10\x00\x1a\x02\x08\x01\x12\x0f\n\x07PENDING\x10\x01\x1a\x02\x08\x01\x12\x0e\n\x06\x46\x41ILED\x10\x02\x1a\x02\x08\x01\x42\x0e\n\x0c_destinationB\t\n\x07_bolt11B\t\n\x07_bolt12B\n\n\x08_groupid\"l\n\x14ReserveinputsRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x16\n\texclusive\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x14\n\x07reserve\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x0c\n\n_exclusiveB\n\n\x08_reserve\"M\n\x15ReserveinputsResponse\x12\x34\n\x0creservations\x18\x01 \x03(\x0b\x32\x1e.cln.ReserveinputsReservations\"z\n\x19ReserveinputsReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x19\n\x11reserved_to_block\x18\x05 \x01(\r\"4\n\x14SendcustommsgRequest\x12\x0f\n\x07node_id\x18\x01 \x01(\x0c\x12\x0b\n\x03msg\x18\x02 \x01(\x0c\"\'\n\x15SendcustommsgResponse\x12\x0e\n\x06status\x18\x01 \x01(\t\"\xb0\x01\n\x12SendinvoiceRequest\x12\x0e\n\x06invreq\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08quantity\x18\x05 \x01(\x04H\x02\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\n\n\x08_timeoutB\x0b\n\t_quantity\"\xb8\x04\n\x13SendinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.SendinvoiceResponse.SendinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x15\n\rcreated_index\x18\x08 \x01(\x04\x12\x1a\n\rupdated_index\x18\t \x01(\x04H\x02\x88\x01\x01\x12\x16\n\tpay_index\x18\n \x01(\x04H\x03\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0c \x01(\x04H\x05\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x06\x88\x01\x01\"6\n\x11SendinvoiceStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\x0e\n\x0c_amount_msatB\t\n\x07_bolt12B\x10\n\x0e_updated_indexB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimage\"\xaa\x02\n\x11SetchannelRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12!\n\x07\x66\x65\x65\x62\x61se\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x13\n\x06\x66\x65\x65ppm\x18\x03 \x01(\rH\x01\x88\x01\x01\x12!\n\x07htlcmin\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12!\n\x07htlcmax\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x19\n\x0c\x65nforcedelay\x18\x06 \x01(\rH\x04\x88\x01\x01\x12\x1c\n\x0fignorefeelimits\x18\x07 \x01(\x08H\x05\x88\x01\x01\x42\n\n\x08_feebaseB\t\n\x07_feeppmB\n\n\x08_htlcminB\n\n\x08_htlcmaxB\x0f\n\r_enforcedelayB\x12\n\x10_ignorefeelimits\"?\n\x12SetchannelResponse\x12)\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x17.cln.SetchannelChannels\"\xaf\x03\n\x12SetchannelChannels\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x12\n\nchannel_id\x18\x02 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\"\n\rfee_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x05 \x01(\r\x12*\n\x15minimum_htlc_out_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12$\n\x17warning_htlcmin_too_low\x18\x07 \x01(\tH\x01\x88\x01\x01\x12*\n\x15maximum_htlc_out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x18warning_htlcmax_too_high\x18\t \x01(\tH\x02\x88\x01\x01\x12\x19\n\x11ignore_fee_limits\x18\n \x01(\x08\x42\x13\n\x11_short_channel_idB\x1a\n\x18_warning_htlcmin_too_lowB\x1b\n\x19_warning_htlcmax_too_high\"b\n\x10SetconfigRequest\x12\x0e\n\x06\x63onfig\x18\x01 \x01(\t\x12\x10\n\x03val\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttransient\x18\x03 \x01(\x08H\x01\x88\x01\x01\x42\x06\n\x04_valB\x0c\n\n_transient\"9\n\x11SetconfigResponse\x12$\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x14.cln.SetconfigConfig\"\xda\x02\n\x0fSetconfigConfig\x12\x0e\n\x06\x63onfig\x18\x01 \x01(\t\x12\x13\n\x06source\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0f\n\x07\x64ynamic\x18\x04 \x01(\x08\x12\x10\n\x03set\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x16\n\tvalue_str\x18\x06 \x01(\tH\x03\x88\x01\x01\x12$\n\nvalue_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x16\n\tvalue_int\x18\x08 \x01(\x12H\x05\x88\x01\x01\x12\x17\n\nvalue_bool\x18\t \x01(\x08H\x06\x88\x01\x01\x12\x0f\n\x07sources\x18\n \x03(\t\x12\x12\n\nvalues_str\x18\x0b \x03(\tB\t\n\x07_sourceB\t\n\x07_pluginB\x06\n\x04_setB\x0c\n\n_value_strB\r\n\x0b_value_msatB\x0c\n\n_value_intB\r\n\x0b_value_bool\"6\n\x15SetpsbtversionRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\r\"&\n\x16SetpsbtversionResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\"\'\n\x12SigninvoiceRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\"%\n\x13SigninvoiceResponse\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\"%\n\x12SignmessageRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\"F\n\x13SignmessageResponse\x12\x11\n\tsignature\x18\x01 \x01(\x0c\x12\r\n\x05recid\x18\x02 \x01(\x0c\x12\r\n\x05zbase\x18\x03 \x01(\t\"\xc8\x01\n\x11SpliceInitRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x17\n\x0frelative_amount\x18\x02 \x01(\x12\x12\x18\n\x0binitialpsbt\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1b\n\x0e\x66\x65\x65rate_per_kw\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1a\n\rforce_feerate\x18\x05 \x01(\x08H\x02\x88\x01\x01\x42\x0e\n\x0c_initialpsbtB\x11\n\x0f_feerate_per_kwB\x10\n\x0e_force_feerate\"\"\n\x12SpliceInitResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\"_\n\x13SpliceSignedRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\x12\x17\n\nsign_first\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\r\n\x0b_sign_first\"^\n\x14SpliceSignedResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x13\n\x06outnum\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x0c\n\x04psbt\x18\x04 \x01(\tB\t\n\x07_outnum\"7\n\x13SpliceUpdateRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\"y\n\x14SpliceUpdateResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x1b\n\x13\x63ommitments_secured\x18\x02 \x01(\x08\x12\x1f\n\x12signatures_secured\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\x15\n\x13_signatures_secured\"2\n\x0fSpliceinRequest\x12\x0f\n\x07\x63hannel\x18\x01 \x01(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\t\"b\n\x10SpliceinResponse\x12\x11\n\x04psbt\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x03 \x01(\tH\x02\x88\x01\x01\x42\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"\x8b\x01\n\x10SpliceoutRequest\x12\x0f\n\x07\x63hannel\x18\x01 \x01(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\t\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rforce_feerate\x18\x04 \x01(\x08H\x01\x88\x01\x01\x42\x0e\n\x0c_destinationB\x10\n\x0e_force_feerate\"c\n\x11SpliceoutResponse\x12\x11\n\x04psbt\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x03 \x01(\tH\x02\x88\x01\x01\x42\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"\xc6\x01\n\x10\x44\x65vspliceRequest\x12\x16\n\x0escript_or_json\x18\x01 \x01(\t\x12\x13\n\x06\x64ryrun\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x1a\n\rforce_feerate\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x16\n\tdebug_log\x18\x04 \x01(\x08H\x02\x88\x01\x01\x12\x17\n\ndev_wetrun\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_dryrunB\x10\n\x0e_force_feerateB\x0c\n\n_debug_logB\r\n\x0b_dev_wetrun\"\x80\x01\n\x11\x44\x65vspliceResponse\x12\x0e\n\x06\x64ryrun\x18\x01 \x03(\t\x12\x11\n\x04psbt\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03log\x18\x05 \x03(\tB\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"H\n\x16UnreserveinputsRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x14\n\x07reserve\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_reserve\"Q\n\x17UnreserveinputsResponse\x12\x36\n\x0creservations\x18\x01 \x03(\x0b\x32 .cln.UnreserveinputsReservations\"\x97\x01\n\x1bUnreserveinputsReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x1e\n\x11reserved_to_block\x18\x05 \x01(\rH\x00\x88\x01\x01\x42\x14\n\x12_reserved_to_block\"n\n\x14UpgradewalletRequest\x12\"\n\x07\x66\x65\x65rate\x18\x01 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x17\n\nreservedok\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\n\n\x08_feerateB\r\n\x0b_reservedok\"~\n\x15UpgradewalletResponse\x12\x15\n\rupgraded_outs\x18\x01 \x01(\x04\x12\x11\n\x04psbt\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"O\n\x16WaitblockheightRequest\x12\x13\n\x0b\x62lockheight\x18\x01 \x01(\r\x12\x14\n\x07timeout\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_timeout\".\n\x17WaitblockheightResponse\x12\x13\n\x0b\x62lockheight\x18\x01 \x01(\r\"\xb9\x02\n\x0bWaitRequest\x12\x31\n\tsubsystem\x18\x01 \x01(\x0e\x32\x1e.cln.WaitRequest.WaitSubsystem\x12\x31\n\tindexname\x18\x02 \x01(\x0e\x32\x1e.cln.WaitRequest.WaitIndexname\x12\x11\n\tnextvalue\x18\x03 \x01(\x04\"6\n\rWaitIndexname\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x12\x0b\n\x07\x44\x45LETED\x10\x02\"y\n\rWaitSubsystem\x12\x0c\n\x08INVOICES\x10\x00\x12\x0c\n\x08\x46ORWARDS\x10\x01\x12\x0c\n\x08SENDPAYS\x10\x02\x12\t\n\x05HTLCS\x10\x03\x12\x0e\n\nCHAINMOVES\x10\x04\x12\x10\n\x0c\x43HANNELMOVES\x10\x05\x12\x11\n\rNETWORKEVENTS\x10\x06\"\xf4\x05\n\x0cWaitResponse\x12\x32\n\tsubsystem\x18\x01 \x01(\x0e\x32\x1f.cln.WaitResponse.WaitSubsystem\x12\x14\n\x07\x63reated\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07updated\x18\x03 \x01(\x04H\x01\x88\x01\x01\x12\x14\n\x07\x64\x65leted\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12*\n\x07\x64\x65tails\x18\x05 \x01(\x0b\x32\x10.cln.WaitDetailsB\x02\x18\x01H\x03\x88\x01\x01\x12(\n\x08\x66orwards\x18\x06 \x01(\x0b\x32\x11.cln.WaitForwardsH\x04\x88\x01\x01\x12(\n\x08invoices\x18\x07 \x01(\x0b\x32\x11.cln.WaitInvoicesH\x05\x88\x01\x01\x12(\n\x08sendpays\x18\x08 \x01(\x0b\x32\x11.cln.WaitSendpaysH\x06\x88\x01\x01\x12\"\n\x05htlcs\x18\t \x01(\x0b\x32\x0e.cln.WaitHtlcsH\x07\x88\x01\x01\x12,\n\nchainmoves\x18\n \x01(\x0b\x32\x13.cln.WaitChainmovesH\x08\x88\x01\x01\x12\x30\n\x0c\x63hannelmoves\x18\x0b \x01(\x0b\x32\x15.cln.WaitChannelmovesH\t\x88\x01\x01\x12\x32\n\rnetworkevents\x18\x0c \x01(\x0b\x32\x16.cln.WaitNetworkeventsH\n\x88\x01\x01\"y\n\rWaitSubsystem\x12\x0c\n\x08INVOICES\x10\x00\x12\x0c\n\x08\x46ORWARDS\x10\x01\x12\x0c\n\x08SENDPAYS\x10\x02\x12\t\n\x05HTLCS\x10\x03\x12\x0e\n\nCHAINMOVES\x10\x04\x12\x10\n\x0c\x43HANNELMOVES\x10\x05\x12\x11\n\rNETWORKEVENTS\x10\x06\x42\n\n\x08_createdB\n\n\x08_updatedB\n\n\x08_deletedB\n\n\x08_detailsB\x0b\n\t_forwardsB\x0b\n\t_invoicesB\x0b\n\t_sendpaysB\x08\n\x06_htlcsB\r\n\x0b_chainmovesB\x0f\n\r_channelmovesB\x10\n\x0e_networkevents\"d\n\x0eWaitChainmoves\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\"f\n\x10WaitChannelmoves\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\"\xd0\x05\n\x0bWaitDetails\x12;\n\x06status\x18\x01 \x01(\x0e\x32\".cln.WaitDetails.WaitDetailsStatusB\x02\x18\x01H\x00\x88\x01\x01\x12\x16\n\x05label\x18\x02 \x01(\tB\x02\x18\x01H\x01\x88\x01\x01\x12\x1c\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x02\x18\x01H\x02\x88\x01\x01\x12\x17\n\x06\x62olt11\x18\x04 \x01(\tB\x02\x18\x01H\x03\x88\x01\x01\x12\x17\n\x06\x62olt12\x18\x05 \x01(\tB\x02\x18\x01H\x04\x88\x01\x01\x12\x17\n\x06partid\x18\x06 \x01(\x04\x42\x02\x18\x01H\x05\x88\x01\x01\x12\x18\n\x07groupid\x18\x07 \x01(\x04\x42\x02\x18\x01H\x06\x88\x01\x01\x12\x1d\n\x0cpayment_hash\x18\x08 \x01(\x0c\x42\x02\x18\x01H\x07\x88\x01\x01\x12\x1b\n\nin_channel\x18\t \x01(\tB\x02\x18\x01H\x08\x88\x01\x01\x12\x1b\n\nin_htlc_id\x18\n \x01(\x04\x42\x02\x18\x01H\t\x88\x01\x01\x12%\n\x07in_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\n\x88\x01\x01\x12\x1c\n\x0bout_channel\x18\x0c \x01(\tB\x02\x18\x01H\x0b\x88\x01\x01\"\xad\x01\n\x11WaitDetailsStatus\x12\x0e\n\x06UNPAID\x10\x00\x1a\x02\x08\x01\x12\x0c\n\x04PAID\x10\x01\x1a\x02\x08\x01\x12\x0f\n\x07\x45XPIRED\x10\x02\x1a\x02\x08\x01\x12\x0f\n\x07PENDING\x10\x03\x1a\x02\x08\x01\x12\x0e\n\x06\x46\x41ILED\x10\x04\x1a\x02\x08\x01\x12\x10\n\x08\x43OMPLETE\x10\x05\x1a\x02\x08\x01\x12\x0f\n\x07OFFERED\x10\x06\x1a\x02\x08\x01\x12\x0f\n\x07SETTLED\x10\x07\x1a\x02\x08\x01\x12\x14\n\x0cLOCAL_FAILED\x10\x08\x1a\x02\x08\x01\x42\t\n\x07_statusB\x08\n\x06_labelB\x0e\n\x0c_descriptionB\t\n\x07_bolt11B\t\n\x07_bolt12B\t\n\x07_partidB\n\n\x08_groupidB\x0f\n\r_payment_hashB\r\n\x0b_in_channelB\r\n\x0b_in_htlc_idB\n\n\x08_in_msatB\x0e\n\x0c_out_channel\"\xcb\x02\n\x0cWaitForwards\x12\x39\n\x06status\x18\x01 \x01(\x0e\x32$.cln.WaitForwards.WaitForwardsStatusH\x00\x88\x01\x01\x12\x17\n\nin_channel\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nin_htlc_id\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12!\n\x07in_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x18\n\x0bout_channel\x18\x05 \x01(\tH\x04\x88\x01\x01\"L\n\x12WaitForwardsStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x12\x10\n\x0cLOCAL_FAILED\x10\x03\x42\t\n\x07_statusB\r\n\x0b_in_channelB\r\n\x0b_in_htlc_idB\n\n\x08_in_msatB\x0e\n\x0c_out_channel\"\x8c\x03\n\tWaitHtlcs\x12\"\n\x05state\x18\x01 \x01(\x0e\x32\x0e.cln.HtlcStateH\x00\x88\x01\x01\x12\x14\n\x07htlc_id\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0b\x63ltv_expiry\x18\x04 \x01(\rH\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x39\n\tdirection\x18\x06 \x01(\x0e\x32!.cln.WaitHtlcs.WaitHtlcsDirectionH\x05\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x07 \x01(\x0cH\x06\x88\x01\x01\"%\n\x12WaitHtlcsDirection\x12\x07\n\x03OUT\x10\x00\x12\x06\n\x02IN\x10\x01\x42\x08\n\x06_stateB\n\n\x08_htlc_idB\x13\n\x11_short_channel_idB\x0e\n\x0c_cltv_expiryB\x0e\n\x0c_amount_msatB\x0c\n\n_directionB\x0f\n\r_payment_hash\"\x95\x02\n\x0cWaitInvoices\x12\x39\n\x06status\x18\x01 \x01(\x0e\x32$.cln.WaitInvoices.WaitInvoicesStatusH\x00\x88\x01\x01\x12\x12\n\x05label\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x05 \x01(\tH\x04\x88\x01\x01\"7\n\x12WaitInvoicesStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\t\n\x07_statusB\x08\n\x06_labelB\x0e\n\x0c_descriptionB\t\n\x07_bolt11B\t\n\x07_bolt12\"\x89\x02\n\x11WaitNetworkevents\x12\x1a\n\rcreated_index\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x44\n\titem_type\x18\x02 \x01(\x0e\x32,.cln.WaitNetworkevents.WaitNetworkeventsTypeH\x01\x88\x01\x01\x12\x14\n\x07peer_id\x18\x03 \x01(\x0cH\x02\x88\x01\x01\"P\n\x15WaitNetworkeventsType\x12\x0b\n\x07\x43ONNECT\x10\x00\x12\x10\n\x0c\x43ONNECT_FAIL\x10\x01\x12\x08\n\x04PING\x10\x02\x12\x0e\n\nDISCONNECT\x10\x03\x42\x10\n\x0e_created_indexB\x0c\n\n_item_typeB\n\n\x08_peer_id\"\xff\x01\n\x0cWaitSendpays\x12\x39\n\x06status\x18\x01 \x01(\x0e\x32$.cln.WaitSendpays.WaitSendpaysStatusH\x00\x88\x01\x01\x12\x13\n\x06partid\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x14\n\x07groupid\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x04 \x01(\x0cH\x03\x88\x01\x01\";\n\x12WaitSendpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\t\n\x07_statusB\t\n\x07_partidB\n\n\x08_groupidB\x0f\n\r_payment_hash\"4\n\x12ListconfigsRequest\x12\x13\n\x06\x63onfig\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_config\"P\n\x13ListconfigsResponse\x12-\n\x07\x63onfigs\x18\x01 \x01(\x0b\x32\x17.cln.ListconfigsConfigsH\x00\x88\x01\x01\x42\n\n\x08_configs\"\xed\x36\n\x12ListconfigsConfigs\x12.\n\x04\x63onf\x18\x01 \x01(\x0b\x32\x1b.cln.ListconfigsConfigsConfH\x00\x88\x01\x01\x12\x38\n\tdeveloper\x18\x02 \x01(\x0b\x32 .cln.ListconfigsConfigsDeveloperH\x01\x88\x01\x01\x12?\n\rclear_plugins\x18\x03 \x01(\x0b\x32#.cln.ListconfigsConfigsClearpluginsH\x02\x88\x01\x01\x12;\n\x0b\x64isable_mpp\x18\x04 \x01(\x0b\x32!.cln.ListconfigsConfigsDisablemppH\x03\x88\x01\x01\x12\x34\n\x07mainnet\x18\x05 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsMainnetH\x04\x88\x01\x01\x12\x34\n\x07regtest\x18\x06 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsRegtestH\x05\x88\x01\x01\x12\x32\n\x06signet\x18\x07 \x01(\x0b\x32\x1d.cln.ListconfigsConfigsSignetH\x06\x88\x01\x01\x12\x34\n\x07testnet\x18\x08 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsTestnetH\x07\x88\x01\x01\x12\x45\n\x10important_plugin\x18\t \x01(\x0b\x32&.cln.ListconfigsConfigsImportantpluginH\x08\x88\x01\x01\x12\x32\n\x06plugin\x18\n \x01(\x0b\x32\x1d.cln.ListconfigsConfigsPluginH\t\x88\x01\x01\x12\x39\n\nplugin_dir\x18\x0b \x01(\x0b\x32 .cln.ListconfigsConfigsPlugindirH\n\x88\x01\x01\x12?\n\rlightning_dir\x18\x0c \x01(\x0b\x32#.cln.ListconfigsConfigsLightningdirH\x0b\x88\x01\x01\x12\x34\n\x07network\x18\r \x01(\x0b\x32\x1e.cln.ListconfigsConfigsNetworkH\x0c\x88\x01\x01\x12N\n\x15\x61llow_deprecated_apis\x18\x0e \x01(\x0b\x32*.cln.ListconfigsConfigsAllowdeprecatedapisH\r\x88\x01\x01\x12\x35\n\x08rpc_file\x18\x0f \x01(\x0b\x32\x1e.cln.ListconfigsConfigsRpcfileH\x0e\x88\x01\x01\x12\x41\n\x0e\x64isable_plugin\x18\x10 \x01(\x0b\x32$.cln.ListconfigsConfigsDisablepluginH\x0f\x88\x01\x01\x12\x44\n\x10\x61lways_use_proxy\x18\x11 \x01(\x0b\x32%.cln.ListconfigsConfigsAlwaysuseproxyH\x10\x88\x01\x01\x12\x32\n\x06\x64\x61\x65mon\x18\x12 \x01(\x0b\x32\x1d.cln.ListconfigsConfigsDaemonH\x11\x88\x01\x01\x12\x32\n\x06wallet\x18\x13 \x01(\x0b\x32\x1d.cln.ListconfigsConfigsWalletH\x12\x88\x01\x01\x12\x41\n\x0elarge_channels\x18\x14 \x01(\x0b\x32$.cln.ListconfigsConfigsLargechannelsH\x13\x88\x01\x01\x12P\n\x16\x65xperimental_dual_fund\x18\x15 \x01(\x0b\x32+.cln.ListconfigsConfigsExperimentaldualfundH\x14\x88\x01\x01\x12S\n\x15\x65xperimental_splicing\x18\x16 \x01(\x0b\x32+.cln.ListconfigsConfigsExperimentalsplicingB\x02\x18\x01H\x15\x88\x01\x01\x12i\n#experimental_shutdown_wrong_funding\x18\x19 \x01(\x0b\x32\x37.cln.ListconfigsConfigsExperimentalshutdownwrongfundingH\x16\x88\x01\x01\x12Z\n\x19\x65xperimental_peer_storage\x18\x1a \x01(\x0b\x32..cln.ListconfigsConfigsExperimentalpeerstorageB\x02\x18\x01H\x17\x88\x01\x01\x12Q\n\x14\x65xperimental_anchors\x18\x1b \x01(\x0b\x32*.cln.ListconfigsConfigsExperimentalanchorsB\x02\x18\x01H\x18\x88\x01\x01\x12\x45\n\x10\x64\x61tabase_upgrade\x18\x1c \x01(\x0b\x32&.cln.ListconfigsConfigsDatabaseupgradeH\x19\x88\x01\x01\x12,\n\x03rgb\x18\x1d \x01(\x0b\x32\x1a.cln.ListconfigsConfigsRgbH\x1a\x88\x01\x01\x12\x30\n\x05\x61lias\x18\x1e \x01(\x0b\x32\x1c.cln.ListconfigsConfigsAliasH\x1b\x88\x01\x01\x12\x35\n\x08pid_file\x18\x1f \x01(\x0b\x32\x1e.cln.ListconfigsConfigsPidfileH\x1c\x88\x01\x01\x12\x46\n\x11ignore_fee_limits\x18 \x01(\x0b\x32&.cln.ListconfigsConfigsIgnorefeelimitsH\x1d\x88\x01\x01\x12\x45\n\x10watchtime_blocks\x18! \x01(\x0b\x32&.cln.ListconfigsConfigsWatchtimeblocksH\x1e\x88\x01\x01\x12N\n\x13max_locktime_blocks\x18\" \x01(\x0b\x32(.cln.ListconfigsConfigsMaxlocktimeblocksB\x02\x18\x01H\x1f\x88\x01\x01\x12\x45\n\x10\x66unding_confirms\x18# \x01(\x0b\x32&.cln.ListconfigsConfigsFundingconfirmsH \x88\x01\x01\x12\x39\n\ncltv_delta\x18$ \x01(\x0b\x32 .cln.ListconfigsConfigsCltvdeltaH!\x88\x01\x01\x12\x39\n\ncltv_final\x18% \x01(\x0b\x32 .cln.ListconfigsConfigsCltvfinalH\"\x88\x01\x01\x12;\n\x0b\x63ommit_time\x18& \x01(\x0b\x32!.cln.ListconfigsConfigsCommittimeH#\x88\x01\x01\x12\x35\n\x08\x66\x65\x65_base\x18\' \x01(\x0b\x32\x1e.cln.ListconfigsConfigsFeebaseH$\x88\x01\x01\x12\x32\n\x06rescan\x18( \x01(\x0b\x32\x1d.cln.ListconfigsConfigsRescanH%\x88\x01\x01\x12\x42\n\x0f\x66\x65\x65_per_satoshi\x18) \x01(\x0b\x32$.cln.ListconfigsConfigsFeepersatoshiH&\x88\x01\x01\x12L\n\x14max_concurrent_htlcs\x18* \x01(\x0b\x32).cln.ListconfigsConfigsMaxconcurrenthtlcsH\'\x88\x01\x01\x12\x46\n\x11htlc_minimum_msat\x18+ \x01(\x0b\x32&.cln.ListconfigsConfigsHtlcminimummsatH(\x88\x01\x01\x12\x46\n\x11htlc_maximum_msat\x18, \x01(\x0b\x32&.cln.ListconfigsConfigsHtlcmaximummsatH)\x88\x01\x01\x12X\n\x1bmax_dust_htlc_exposure_msat\x18- \x01(\x0b\x32..cln.ListconfigsConfigsMaxdusthtlcexposuremsatH*\x88\x01\x01\x12\x44\n\x10min_capacity_sat\x18. \x01(\x0b\x32%.cln.ListconfigsConfigsMincapacitysatH+\x88\x01\x01\x12.\n\x04\x61\x64\x64r\x18/ \x01(\x0b\x32\x1b.cln.ListconfigsConfigsAddrH,\x88\x01\x01\x12?\n\rannounce_addr\x18\x30 \x01(\x0b\x32#.cln.ListconfigsConfigsAnnounceaddrH-\x88\x01\x01\x12\x37\n\tbind_addr\x18\x31 \x01(\x0b\x32\x1f.cln.ListconfigsConfigsBindaddrH.\x88\x01\x01\x12\x34\n\x07offline\x18\x32 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsOfflineH/\x88\x01\x01\x12:\n\nautolisten\x18\x33 \x01(\x0b\x32!.cln.ListconfigsConfigsAutolistenH0\x88\x01\x01\x12\x30\n\x05proxy\x18\x34 \x01(\x0b\x32\x1c.cln.ListconfigsConfigsProxyH1\x88\x01\x01\x12;\n\x0b\x64isable_dns\x18\x35 \x01(\x0b\x32!.cln.ListconfigsConfigsDisablednsH2\x88\x01\x01\x12T\n\x18\x61nnounce_addr_discovered\x18\x36 \x01(\x0b\x32-.cln.ListconfigsConfigsAnnounceaddrdiscoveredH3\x88\x01\x01\x12]\n\x1d\x61nnounce_addr_discovered_port\x18\x37 \x01(\x0b\x32\x31.cln.ListconfigsConfigsAnnounceaddrdiscoveredportH4\x88\x01\x01\x12\x43\n\rencrypted_hsm\x18\x38 \x01(\x0b\x32#.cln.ListconfigsConfigsEncryptedhsmB\x02\x18\x01H5\x88\x01\x01\x12>\n\rrpc_file_mode\x18\x39 \x01(\x0b\x32\".cln.ListconfigsConfigsRpcfilemodeH6\x88\x01\x01\x12\x37\n\tlog_level\x18: \x01(\x0b\x32\x1f.cln.ListconfigsConfigsLoglevelH7\x88\x01\x01\x12\x39\n\nlog_prefix\x18; \x01(\x0b\x32 .cln.ListconfigsConfigsLogprefixH8\x88\x01\x01\x12\x35\n\x08log_file\x18< \x01(\x0b\x32\x1e.cln.ListconfigsConfigsLogfileH9\x88\x01\x01\x12\x41\n\x0elog_timestamps\x18= \x01(\x0b\x32$.cln.ListconfigsConfigsLogtimestampsH:\x88\x01\x01\x12\x41\n\x0e\x66orce_feerates\x18> \x01(\x0b\x32$.cln.ListconfigsConfigsForcefeeratesH;\x88\x01\x01\x12\x38\n\tsubdaemon\x18? \x01(\x0b\x32 .cln.ListconfigsConfigsSubdaemonH<\x88\x01\x01\x12Q\n\x16\x66\x65tchinvoice_noconnect\x18@ \x01(\x0b\x32,.cln.ListconfigsConfigsFetchinvoicenoconnectH=\x88\x01\x01\x12L\n\x14tor_service_password\x18\x42 \x01(\x0b\x32).cln.ListconfigsConfigsTorservicepasswordH>\x88\x01\x01\x12\x46\n\x11\x61nnounce_addr_dns\x18\x43 \x01(\x0b\x32&.cln.ListconfigsConfigsAnnounceaddrdnsH?\x88\x01\x01\x12T\n\x18require_confirmed_inputs\x18\x44 \x01(\x0b\x32-.cln.ListconfigsConfigsRequireconfirmedinputsH@\x88\x01\x01\x12\x39\n\ncommit_fee\x18\x45 \x01(\x0b\x32 .cln.ListconfigsConfigsCommitfeeHA\x88\x01\x01\x12N\n\x15\x63ommit_feerate_offset\x18\x46 \x01(\x0b\x32*.cln.ListconfigsConfigsCommitfeerateoffsetHB\x88\x01\x01\x12T\n\x18\x61utoconnect_seeker_peers\x18G \x01(\x0b\x32-.cln.ListconfigsConfigsAutoconnectseekerpeersHC\x88\x01\x01\x12R\n\x17\x63urrencyrate_add_source\x18J \x01(\x0b\x32,.cln.ListconfigsConfigsCurrencyrateaddsourceHD\x88\x01\x01\x12Z\n\x1b\x63urrencyrate_disable_source\x18K \x01(\x0b\x32\x30.cln.ListconfigsConfigsCurrencyratedisablesourceHE\x88\x01\x01\x12V\n\x19\x65xperimental_simple_close\x18L \x01(\x0b\x32..cln.ListconfigsConfigsExperimentalsimplecloseHF\x88\x01\x01\x12K\n\x14\x61\x63\x63\x65pt_htlc_tlv_type\x18M \x01(\x0b\x32(.cln.ListconfigsConfigsAccepthtlctlvtypeHG\x88\x01\x01\x12\x41\n\x0ehsm_passphrase\x18N \x01(\x0b\x32$.cln.ListconfigsConfigsHsmpassphraseHH\x88\x01\x01\x12`\n i_promise_to_fix_broken_api_user\x18O \x01(\x0b\x32\x31.cln.ListconfigsConfigsIpromisetofixbrokenapiuserHI\x88\x01\x01\x12V\n\x19invoices_onchain_fallback\x18P \x01(\x0b\x32..cln.ListconfigsConfigsInvoicesonchainfallbackHJ\x88\x01\x01\x12\x43\n\x0fmessage_padding\x18Q \x01(\x0b\x32%.cln.ListconfigsConfigsMessagepaddingHK\x88\x01\x01\x12H\n\x12min_emergency_msat\x18R \x01(\x0b\x32\'.cln.ListconfigsConfigsMinemergencymsatHL\x88\x01\x01\x12N\n\x15payment_fronting_node\x18S \x01(\x0b\x32*.cln.ListconfigsConfigsPaymentfrontingnodeHM\x88\x01\x01\x12\x34\n\x07recover\x18T \x01(\x0b\x32\x1e.cln.ListconfigsConfigsRecoverHN\x88\x01\x01\x12=\n\x0creckless_dir\x18U \x01(\x0b\x32\".cln.ListconfigsConfigsRecklessdirHO\x88\x01\x01\x42\x07\n\x05_confB\x0c\n\n_developerB\x10\n\x0e_clear_pluginsB\x0e\n\x0c_disable_mppB\n\n\x08_mainnetB\n\n\x08_regtestB\t\n\x07_signetB\n\n\x08_testnetB\x13\n\x11_important_pluginB\t\n\x07_pluginB\r\n\x0b_plugin_dirB\x10\n\x0e_lightning_dirB\n\n\x08_networkB\x18\n\x16_allow_deprecated_apisB\x0b\n\t_rpc_fileB\x11\n\x0f_disable_pluginB\x13\n\x11_always_use_proxyB\t\n\x07_daemonB\t\n\x07_walletB\x11\n\x0f_large_channelsB\x19\n\x17_experimental_dual_fundB\x18\n\x16_experimental_splicingB&\n$_experimental_shutdown_wrong_fundingB\x1c\n\x1a_experimental_peer_storageB\x17\n\x15_experimental_anchorsB\x13\n\x11_database_upgradeB\x06\n\x04_rgbB\x08\n\x06_aliasB\x0b\n\t_pid_fileB\x14\n\x12_ignore_fee_limitsB\x13\n\x11_watchtime_blocksB\x16\n\x14_max_locktime_blocksB\x13\n\x11_funding_confirmsB\r\n\x0b_cltv_deltaB\r\n\x0b_cltv_finalB\x0e\n\x0c_commit_timeB\x0b\n\t_fee_baseB\t\n\x07_rescanB\x12\n\x10_fee_per_satoshiB\x17\n\x15_max_concurrent_htlcsB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x1e\n\x1c_max_dust_htlc_exposure_msatB\x13\n\x11_min_capacity_satB\x07\n\x05_addrB\x10\n\x0e_announce_addrB\x0c\n\n_bind_addrB\n\n\x08_offlineB\r\n\x0b_autolistenB\x08\n\x06_proxyB\x0e\n\x0c_disable_dnsB\x1b\n\x19_announce_addr_discoveredB \n\x1e_announce_addr_discovered_portB\x10\n\x0e_encrypted_hsmB\x10\n\x0e_rpc_file_modeB\x0c\n\n_log_levelB\r\n\x0b_log_prefixB\x0b\n\t_log_fileB\x11\n\x0f_log_timestampsB\x11\n\x0f_force_feeratesB\x0c\n\n_subdaemonB\x19\n\x17_fetchinvoice_noconnectB\x17\n\x15_tor_service_passwordB\x14\n\x12_announce_addr_dnsB\x1b\n\x19_require_confirmed_inputsB\r\n\x0b_commit_feeB\x18\n\x16_commit_feerate_offsetB\x1b\n\x19_autoconnect_seeker_peersB\x1a\n\x18_currencyrate_add_sourceB\x1e\n\x1c_currencyrate_disable_sourceB\x1c\n\x1a_experimental_simple_closeB\x17\n\x15_accept_htlc_tlv_typeB\x11\n\x0f_hsm_passphraseB#\n!_i_promise_to_fix_broken_api_userB\x1c\n\x1a_invoices_onchain_fallbackB\x12\n\x10_message_paddingB\x15\n\x13_min_emergency_msatB\x18\n\x16_payment_fronting_nodeB\n\n\x08_recoverB\x0f\n\r_reckless_dir\"J\n#ListconfigsConfigsAccepthtlctlvtype\x12\x0f\n\x07sources\x18\x01 \x03(\t\x12\x12\n\nvalues_int\x18\x02 \x03(\r\"=\n\x16ListconfigsConfigsAddr\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"<\n\x17ListconfigsConfigsAlias\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"K\n%ListconfigsConfigsAllowdeprecatedapis\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"F\n ListconfigsConfigsAlwaysuseproxy\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"E\n\x1eListconfigsConfigsAnnounceaddr\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"\x80\x02\n(ListconfigsConfigsAnnounceaddrdiscovered\x12q\n\tvalue_str\x18\x01 \x01(\x0e\x32^.cln.ListconfigsConfigsAnnounceaddrdiscovered.ListconfigsConfigsAnnounceaddrdiscoveredValueStr\x12\x0e\n\x06source\x18\x02 \x01(\t\"Q\n0ListconfigsConfigsAnnounceaddrdiscoveredValueStr\x12\x08\n\x04TRUE\x10\x00\x12\t\n\x05\x46\x41LSE\x10\x01\x12\x08\n\x04\x41UTO\x10\x02\"Q\n,ListconfigsConfigsAnnounceaddrdiscoveredport\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"G\n!ListconfigsConfigsAnnounceaddrdns\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"M\n(ListconfigsConfigsAutoconnectseekerpeers\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1cListconfigsConfigsAutolisten\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"A\n\x1aListconfigsConfigsBindaddr\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"=\n\x1eListconfigsConfigsClearplugins\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsCltvdelta\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsCltvfinal\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsCommitfee\x12\x11\n\tvalue_int\x18\x01 \x01(\x04\x12\x0e\n\x06source\x18\x02 \x01(\t\"J\n%ListconfigsConfigsCommitfeerateoffset\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"A\n\x1cListconfigsConfigsCommittime\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"\xa2\x01\n\x16ListconfigsConfigsConf\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12H\n\x06source\x18\x02 \x01(\x0e\x32\x38.cln.ListconfigsConfigsConf.ListconfigsConfigsConfSource\"+\n\x1cListconfigsConfigsConfSource\x12\x0b\n\x07\x43MDLINE\x10\x00\"n\n\'ListconfigsConfigsCurrencyrateaddsource\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"r\n+ListconfigsConfigsCurrencyratedisablesource\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"7\n\x18ListconfigsConfigsDaemon\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"G\n!ListconfigsConfigsDatabaseupgrade\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\":\n\x1bListconfigsConfigsDeveloper\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\";\n\x1cListconfigsConfigsDisabledns\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"[\n\x1cListconfigsConfigsDisablempp\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"F\n\x1fListconfigsConfigsDisableplugin\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"E\n\x1eListconfigsConfigsEncryptedhsm\x12\x0f\n\x03set\x18\x01 \x01(\x08\x42\x02\x18\x01\x12\x12\n\x06source\x18\x02 \x01(\tB\x02\x18\x01\"L\n%ListconfigsConfigsExperimentalanchors\x12\x0f\n\x03set\x18\x01 \x01(\x08\x42\x02\x18\x01\x12\x12\n\x06source\x18\x02 \x01(\tB\x02\x18\x01\"E\n&ListconfigsConfigsExperimentaldualfund\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"P\n)ListconfigsConfigsExperimentalpeerstorage\x12\x0f\n\x03set\x18\x01 \x01(\x08\x42\x02\x18\x01\x12\x12\n\x06source\x18\x02 \x01(\tB\x02\x18\x01\"Q\n2ListconfigsConfigsExperimentalshutdownwrongfunding\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"H\n)ListconfigsConfigsExperimentalsimpleclose\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"M\n&ListconfigsConfigsExperimentalsplicing\x12\x0f\n\x03set\x18\x01 \x01(\x08\x42\x02\x18\x01\x12\x12\n\x06source\x18\x02 \x01(\tB\x02\x18\x01\">\n\x19ListconfigsConfigsFeebase\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"D\n\x1fListconfigsConfigsFeepersatoshi\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"f\n\'ListconfigsConfigsFetchinvoicenoconnect\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"D\n\x1fListconfigsConfigsForcefeerates\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"F\n!ListconfigsConfigsFundingconfirms\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x1fListconfigsConfigsHsmpassphrase\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"T\n!ListconfigsConfigsHtlcmaximummsat\x12\x1f\n\nvalue_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06source\x18\x02 \x01(\t\"T\n!ListconfigsConfigsHtlcminimummsat\x12\x1f\n\nvalue_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06source\x18\x02 \x01(\t\"S\n,ListconfigsConfigsIpromisetofixbrokenapiuser\x12\x0f\n\x07sources\x18\x01 \x03(\t\x12\x12\n\nvalues_str\x18\x02 \x03(\t\"G\n!ListconfigsConfigsIgnorefeelimits\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"H\n!ListconfigsConfigsImportantplugin\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"H\n)ListconfigsConfigsInvoicesonchainfallback\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x1fListconfigsConfigsLargechannels\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"C\n\x1eListconfigsConfigsLightningdir\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x19ListconfigsConfigsLogfile\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"?\n\x1aListconfigsConfigsLoglevel\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsLogprefix\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"E\n\x1fListconfigsConfigsLogtimestamps\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"8\n\x19ListconfigsConfigsMainnet\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"I\n$ListconfigsConfigsMaxconcurrenthtlcs\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"\\\n)ListconfigsConfigsMaxdusthtlcexposuremsat\x12\x1f\n\nvalue_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06source\x18\x02 \x01(\t\"P\n#ListconfigsConfigsMaxlocktimeblocks\x12\x15\n\tvalue_int\x18\x01 \x01(\rB\x02\x18\x01\x12\x12\n\x06source\x18\x02 \x01(\tB\x02\x18\x01\"F\n ListconfigsConfigsMessagepadding\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x12\n\nvalue_bool\x18\x02 \x01(\x08\"g\n ListconfigsConfigsMincapacitysat\x12\x11\n\tvalue_int\x18\x01 \x01(\x04\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x14\n\x07\x64ynamic\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\n\n\x08_dynamic\"U\n\"ListconfigsConfigsMinemergencymsat\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x1f\n\nvalue_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\">\n\x19ListconfigsConfigsNetwork\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"8\n\x19ListconfigsConfigsOffline\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"L\n%ListconfigsConfigsPaymentfrontingnode\x12\x0f\n\x07sources\x18\x01 \x03(\t\x12\x12\n\nvalues_str\x18\x02 \x03(\t\">\n\x19ListconfigsConfigsPidfile\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"?\n\x18ListconfigsConfigsPlugin\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"B\n\x1bListconfigsConfigsPlugindir\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"<\n\x17ListconfigsConfigsProxy\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1dListconfigsConfigsRecklessdir\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x11\n\tvalue_str\x18\x02 \x01(\t\">\n\x19ListconfigsConfigsRecover\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x11\n\tvalue_str\x18\x02 \x01(\t\"8\n\x19ListconfigsConfigsRegtest\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"N\n(ListconfigsConfigsRequireconfirmedinputs\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"=\n\x18ListconfigsConfigsRescan\x12\x11\n\tvalue_int\x18\x01 \x01(\x12\x12\x0e\n\x06source\x18\x02 \x01(\t\":\n\x15ListconfigsConfigsRgb\x12\x11\n\tvalue_str\x18\x01 \x01(\x0c\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x19ListconfigsConfigsRpcfile\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1dListconfigsConfigsRpcfilemode\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"7\n\x18ListconfigsConfigsSignet\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1bListconfigsConfigsSubdaemon\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"8\n\x19ListconfigsConfigsTestnet\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"I\n$ListconfigsConfigsTorservicepassword\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"=\n\x18ListconfigsConfigsWallet\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"F\n!ListconfigsConfigsWatchtimeblocks\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"\r\n\x0bStopRequest\"a\n\x0cStopResponse\x12,\n\x06result\x18\x01 \x01(\x0e\x32\x1c.cln.StopResponse.StopResult\"#\n\nStopResult\x12\x15\n\x11SHUTDOWN_COMPLETE\x10\x00\"/\n\x0bHelpRequest\x12\x14\n\x07\x63ommand\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_command\"\x95\x01\n\x0cHelpResponse\x12\x1b\n\x04help\x18\x01 \x03(\x0b\x32\r.cln.HelpHelp\x12:\n\x0b\x66ormat_hint\x18\x02 \x01(\x0e\x32 .cln.HelpResponse.HelpFormathintH\x00\x88\x01\x01\"\x1c\n\x0eHelpFormathint\x12\n\n\x06SIMPLE\x10\x00\x42\x0e\n\x0c_format_hint\"\x1b\n\x08HelpHelp\x12\x0f\n\x07\x63ommand\x18\x01 \x01(\t\"g\n\x18PreapprovekeysendRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\x0c\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\"\x1b\n\x19PreapprovekeysendResponse\"*\n\x18PreapproveinvoiceRequest\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\"\x1b\n\x19PreapproveinvoiceResponse\"\x15\n\x13StaticbackupRequest\"#\n\x14StaticbackupResponse\x12\x0b\n\x03scb\x18\x01 \x03(\x0c\"d\n\x16\x42kprchannelsapyRequest\x12\x17\n\nstart_time\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x02 \x01(\x04H\x01\x88\x01\x01\x42\r\n\x0b_start_timeB\x0b\n\t_end_time\"P\n\x17\x42kprchannelsapyResponse\x12\x35\n\x0c\x63hannels_apy\x18\x01 \x03(\x0b\x32\x1f.cln.BkprchannelsapyChannelsApy\"\xf9\x06\n\x1a\x42kprchannelsapyChannelsApy\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12$\n\x0frouted_out_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0erouted_in_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12(\n\x13lease_fee_paid_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12*\n\x15lease_fee_earned_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12$\n\x0fpushed_out_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0epushed_in_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x16our_start_balance_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12/\n\x1a\x63hannel_start_balance_msat\x18\t \x01(\x0b\x32\x0b.cln.Amount\x12\"\n\rfees_out_msat\x18\n \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x0c\x66\x65\x65s_in_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x17\n\x0futilization_out\x18\x0c \x01(\t\x12$\n\x17utilization_out_initial\x18\r \x01(\tH\x01\x88\x01\x01\x12\x16\n\x0eutilization_in\x18\x0e \x01(\t\x12#\n\x16utilization_in_initial\x18\x0f \x01(\tH\x02\x88\x01\x01\x12\x0f\n\x07\x61py_out\x18\x10 \x01(\t\x12\x1c\n\x0f\x61py_out_initial\x18\x11 \x01(\tH\x03\x88\x01\x01\x12\x0e\n\x06\x61py_in\x18\x12 \x01(\t\x12\x1b\n\x0e\x61py_in_initial\x18\x13 \x01(\tH\x04\x88\x01\x01\x12\x11\n\tapy_total\x18\x14 \x01(\t\x12\x1e\n\x11\x61py_total_initial\x18\x15 \x01(\tH\x05\x88\x01\x01\x12\x16\n\tapy_lease\x18\x16 \x01(\tH\x06\x88\x01\x01\x42\x0f\n\r_fees_in_msatB\x1a\n\x18_utilization_out_initialB\x19\n\x17_utilization_in_initialB\x12\n\x10_apy_out_initialB\x11\n\x0f_apy_in_initialB\x14\n\x12_apy_total_initialB\x0c\n\n_apy_lease\"\xd2\x01\n\x18\x42kprdumpincomecsvRequest\x12\x12\n\ncsv_format\x18\x01 \x01(\t\x12\x15\n\x08\x63sv_file\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x1d\n\x10\x63onsolidate_fees\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x17\n\nstart_time\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x05 \x01(\x04H\x03\x88\x01\x01\x42\x0b\n\t_csv_fileB\x13\n\x11_consolidate_feesB\r\n\x0b_start_timeB\x0b\n\t_end_time\"\xd4\x01\n\x19\x42kprdumpincomecsvResponse\x12\x10\n\x08\x63sv_file\x18\x01 \x01(\t\x12M\n\ncsv_format\x18\x02 \x01(\x0e\x32\x39.cln.BkprdumpincomecsvResponse.BkprdumpincomecsvCsvFormat\"V\n\x1a\x42kprdumpincomecsvCsvFormat\x12\x0f\n\x0b\x43OINTRACKER\x10\x00\x12\n\n\x06KOINLY\x10\x01\x12\x0b\n\x07HARMONY\x10\x02\x12\x0e\n\nQUICKBOOKS\x10\x03\"%\n\x12\x42kprinspectRequest\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\"7\n\x13\x42kprinspectResponse\x12 \n\x03txs\x18\x01 \x03(\x0b\x32\x13.cln.BkprinspectTxs\"\x9a\x01\n\x0e\x42kprinspectTxs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x18\n\x0b\x62lockheight\x18\x02 \x01(\rH\x00\x88\x01\x01\x12#\n\x0e\x66\x65\x65s_paid_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x07outputs\x18\x04 \x03(\x0b\x32\x1a.cln.BkprinspectTxsOutputsB\x0e\n\x0c_blockheight\"\xbc\x03\n\x15\x42kprinspectTxsOutputs\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x0e\n\x06outnum\x18\x02 \x01(\r\x12&\n\x11output_value_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x04 \x01(\t\x12%\n\x0b\x63redit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12$\n\ndebit_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12 \n\x13originating_account\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x17\n\noutput_tag\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tspend_tag\x18\t \x01(\tH\x04\x88\x01\x01\x12\x1a\n\rspending_txid\x18\n \x01(\x0cH\x05\x88\x01\x01\x12\x17\n\npayment_id\x18\x0b \x01(\x0cH\x06\x88\x01\x01\x42\x0e\n\x0c_credit_msatB\r\n\x0b_debit_msatB\x16\n\x14_originating_accountB\r\n\x0b_output_tagB\x0c\n\n_spend_tagB\x10\n\x0e_spending_txidB\r\n\x0b_payment_id\"h\n\x1c\x42kprlistaccounteventsRequest\x12\x14\n\x07\x61\x63\x63ount\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x17\n\npayment_id\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\n\n\x08_accountB\r\n\x0b_payment_id\"Q\n\x1d\x42kprlistaccounteventsResponse\x12\x30\n\x06\x65vents\x18\x01 \x03(\x0b\x32 .cln.BkprlistaccounteventsEvents\"\xcd\x05\n\x1b\x42kprlistaccounteventsEvents\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12S\n\titem_type\x18\x02 \x01(\x0e\x32@.cln.BkprlistaccounteventsEvents.BkprlistaccounteventsEventsType\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x06 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\r\x12\x15\n\x08outpoint\x18\x08 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\t \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06origin\x18\n \x01(\tH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\x0b \x01(\x0cH\x03\x88\x01\x01\x12\x11\n\x04txid\x18\x0c \x01(\x0cH\x04\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\r \x01(\tH\x05\x88\x01\x01\x12#\n\tfees_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x19\n\x0cis_rebalance\x18\x0f \x01(\x08H\x07\x88\x01\x01\x12\x14\n\x07part_id\x18\x10 \x01(\rH\x08\x88\x01\x01\x12\x19\n\x0c\x63urrencyrate\x18\x11 \x01(\x01H\t\x88\x01\x01\"J\n\x1f\x42kprlistaccounteventsEventsType\x12\x0f\n\x0bONCHAIN_FEE\x10\x00\x12\t\n\x05\x43HAIN\x10\x01\x12\x0b\n\x07\x43HANNEL\x10\x02\x42\x0b\n\t_outpointB\x0e\n\x0c_blockheightB\t\n\x07_originB\r\n\x0b_payment_idB\x07\n\x05_txidB\x0e\n\x0c_descriptionB\x0c\n\n_fees_msatB\x0f\n\r_is_rebalanceB\n\n\x08_part_idB\x0f\n\r_currencyrate\"\x19\n\x17\x42kprlistbalancesRequest\"K\n\x18\x42kprlistbalancesResponse\x12/\n\x08\x61\x63\x63ounts\x18\x01 \x03(\x0b\x32\x1d.cln.BkprlistbalancesAccounts\"\xc6\x02\n\x18\x42kprlistbalancesAccounts\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x37\n\x08\x62\x61lances\x18\x02 \x03(\x0b\x32%.cln.BkprlistbalancesAccountsBalances\x12\x14\n\x07peer_id\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x16\n\twe_opened\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x1b\n\x0e\x61\x63\x63ount_closed\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x1d\n\x10\x61\x63\x63ount_resolved\x18\x06 \x01(\x08H\x03\x88\x01\x01\x12\x1e\n\x11resolved_at_block\x18\x07 \x01(\rH\x04\x88\x01\x01\x42\n\n\x08_peer_idB\x0c\n\n_we_openedB\x11\n\x0f_account_closedB\x13\n\x11_account_resolvedB\x14\n\x12_resolved_at_block\"X\n BkprlistbalancesAccountsBalances\x12!\n\x0c\x62\x61lance_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\tcoin_type\x18\x02 \x01(\t\"\x97\x01\n\x15\x42kprlistincomeRequest\x12\x1d\n\x10\x63onsolidate_fees\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x17\n\nstart_time\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x03 \x01(\rH\x02\x88\x01\x01\x42\x13\n\x11_consolidate_feesB\r\n\x0b_start_timeB\x0b\n\t_end_time\"P\n\x16\x42kprlistincomeResponse\x12\x36\n\rincome_events\x18\x01 \x03(\x0b\x32\x1f.cln.BkprlistincomeIncomeEvents\"\xb4\x02\n\x1a\x42kprlistincomeIncomeEvents\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x0b\n\x03tag\x18\x02 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\r\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08outpoint\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\t \x01(\x0cH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\n \x01(\x0cH\x03\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0b\n\t_outpointB\x07\n\x05_txidB\r\n\x0b_payment_id\"P\n%BkpreditdescriptionbypaymentidRequest\x12\x12\n\npayment_id\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"e\n&BkpreditdescriptionbypaymentidResponse\x12;\n\x07updated\x18\x01 \x03(\x0b\x32*.cln.BkpreditdescriptionbypaymentidUpdated\"\xa3\x05\n%BkpreditdescriptionbypaymentidUpdated\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12g\n\titem_type\x18\x02 \x01(\x0e\x32T.cln.BkpreditdescriptionbypaymentidUpdated.BkpreditdescriptionbypaymentidUpdatedType\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x06 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\r\x12\x13\n\x0b\x64\x65scription\x18\x08 \x01(\t\x12\x15\n\x08outpoint\x18\t \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\n \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06origin\x18\x0b \x01(\tH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\x0c \x01(\x0cH\x03\x88\x01\x01\x12\x11\n\x04txid\x18\r \x01(\x0cH\x04\x88\x01\x01\x12#\n\tfees_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x19\n\x0cis_rebalance\x18\x0f \x01(\x08H\x06\x88\x01\x01\x12\x14\n\x07part_id\x18\x10 \x01(\rH\x07\x88\x01\x01\"C\n)BkpreditdescriptionbypaymentidUpdatedType\x12\t\n\x05\x43HAIN\x10\x00\x12\x0b\n\x07\x43HANNEL\x10\x01\x42\x0b\n\t_outpointB\x0e\n\x0c_blockheightB\t\n\x07_originB\r\n\x0b_payment_idB\x07\n\x05_txidB\x0c\n\n_fees_msatB\x0f\n\r_is_rebalanceB\n\n\x08_part_id\"M\n$BkpreditdescriptionbyoutpointRequest\x12\x10\n\x08outpoint\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"c\n%BkpreditdescriptionbyoutpointResponse\x12:\n\x07updated\x18\x01 \x03(\x0b\x32).cln.BkpreditdescriptionbyoutpointUpdated\"\x9f\x05\n$BkpreditdescriptionbyoutpointUpdated\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x65\n\titem_type\x18\x02 \x01(\x0e\x32R.cln.BkpreditdescriptionbyoutpointUpdated.BkpreditdescriptionbyoutpointUpdatedType\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x06 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\r\x12\x13\n\x0b\x64\x65scription\x18\x08 \x01(\t\x12\x15\n\x08outpoint\x18\t \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\n \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06origin\x18\x0b \x01(\tH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\x0c \x01(\x0cH\x03\x88\x01\x01\x12\x11\n\x04txid\x18\r \x01(\x0cH\x04\x88\x01\x01\x12#\n\tfees_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x19\n\x0cis_rebalance\x18\x0f \x01(\x08H\x06\x88\x01\x01\x12\x14\n\x07part_id\x18\x10 \x01(\rH\x07\x88\x01\x01\"B\n(BkpreditdescriptionbyoutpointUpdatedType\x12\t\n\x05\x43HAIN\x10\x00\x12\x0b\n\x07\x43HANNEL\x10\x01\x42\x0b\n\t_outpointB\x0e\n\x0c_blockheightB\t\n\x07_originB\r\n\x0b_payment_idB\x07\n\x05_txidB\x0c\n\n_fees_msatB\x0f\n\r_is_rebalanceB\n\n\x08_part_id\"\xb0\x01\n\x11\x42kprreportRequest\x12\x13\n\x06\x66ormat\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x07headers\x18\x02 \x03(\t\x12\x13\n\x06\x65scape\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nstart_time\x18\x04 \x01(\rH\x02\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x05 \x01(\rH\x03\x88\x01\x01\x42\t\n\x07_formatB\t\n\x07_escapeB\r\n\x0b_start_timeB\x0b\n\t_end_time\"$\n\x12\x42kprreportResponse\x12\x0e\n\x06report\x18\x01 \x03(\t\"n\n\x14\x42lacklistruneRequest\x12\x12\n\x05start\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03\x65nd\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x13\n\x06relist\x18\x03 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_startB\x06\n\x04_endB\t\n\x07_relist\"G\n\x15\x42lacklistruneResponse\x12.\n\tblacklist\x18\x01 \x03(\x0b\x32\x1b.cln.BlacklistruneBlacklist\"4\n\x16\x42lacklistruneBlacklist\x12\r\n\x05start\x18\x01 \x01(\x04\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x04\"p\n\x10\x43heckruneRequest\x12\x0c\n\x04rune\x18\x01 \x01(\t\x12\x13\n\x06nodeid\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06method\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0e\n\x06params\x18\x04 \x03(\tB\t\n\x07_nodeidB\t\n\x07_method\"\"\n\x11\x43heckruneResponse\x12\r\n\x05valid\x18\x01 \x01(\x08\"E\n\x11\x43reateruneRequest\x12\x11\n\x04rune\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0crestrictions\x18\x02 \x03(\tB\x07\n\x05_rune\"{\n\x12\x43reateruneResponse\x12\x0c\n\x04rune\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12&\n\x19warning_unrestricted_rune\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x1c\n\x1a_warning_unrestricted_rune\".\n\x10ShowrunesRequest\x12\x11\n\x04rune\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x07\n\x05_rune\"7\n\x11ShowrunesResponse\x12\"\n\x05runes\x18\x01 \x03(\x0b\x32\x13.cln.ShowrunesRunes\"\x9d\x02\n\x0eShowrunesRunes\x12\x0c\n\x04rune\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12\x35\n\x0crestrictions\x18\x03 \x03(\x0b\x32\x1f.cln.ShowrunesRunesRestrictions\x12\x1f\n\x17restrictions_as_english\x18\x04 \x01(\t\x12\x13\n\x06stored\x18\x05 \x01(\x08H\x00\x88\x01\x01\x12\x18\n\x0b\x62lacklisted\x18\x06 \x01(\x08H\x01\x88\x01\x01\x12\x16\n\tlast_used\x18\x07 \x01(\x01H\x02\x88\x01\x01\x12\x15\n\x08our_rune\x18\x08 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_storedB\x0e\n\x0c_blacklistedB\x0c\n\n_last_usedB\x0b\n\t_our_rune\"p\n\x1aShowrunesRunesRestrictions\x12\x41\n\x0c\x61lternatives\x18\x01 \x03(\x0b\x32+.cln.ShowrunesRunesRestrictionsAlternatives\x12\x0f\n\x07\x65nglish\x18\x02 \x01(\t\"n\n&ShowrunesRunesRestrictionsAlternatives\x12\x11\n\tfieldname\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\x12\x11\n\tcondition\x18\x03 \x01(\t\x12\x0f\n\x07\x65nglish\x18\x04 \x01(\t\"r\n\x17\x41skreneunreserveRequest\x12\'\n\x04path\x18\x01 \x03(\x0b\x32\x19.cln.AskreneunreservePath\x12\x1b\n\x0e\x64\x65v_remove_all\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\x11\n\x0f_dev_remove_all\"\x1a\n\x18\x41skreneunreserveResponse\"t\n\x14\x41skreneunreservePath\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1c\n\x14short_channel_id_dir\x18\x04 \x01(\t\x12\x12\n\x05layer\x18\x05 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_layer\"8\n\x18\x41skrenelistlayersRequest\x12\x12\n\x05layer\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_layer\"I\n\x19\x41skrenelistlayersResponse\x12,\n\x06layers\x18\x01 \x03(\x0b\x32\x1c.cln.AskrenelistlayersLayers\"\xe8\x03\n\x17\x41skrenelistlayersLayers\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x16\n\x0e\x64isabled_nodes\x18\x02 \x03(\x0c\x12\x45\n\x10\x63reated_channels\x18\x03 \x03(\x0b\x32+.cln.AskrenelistlayersLayersCreatedChannels\x12<\n\x0b\x63onstraints\x18\x04 \x03(\x0b\x32\'.cln.AskrenelistlayersLayersConstraints\x12\x12\n\npersistent\x18\x05 \x01(\x08\x12\x19\n\x11\x64isabled_channels\x18\x06 \x03(\t\x12\x43\n\x0f\x63hannel_updates\x18\x07 \x03(\x0b\x32*.cln.AskrenelistlayersLayersChannelUpdates\x12\x32\n\x06\x62iases\x18\x08 \x03(\x0b\x32\".cln.AskrenelistlayersLayersBiases\x12;\n\x0bnode_biases\x18\t \x03(\x0b\x32&.cln.AskrenelistlayersLayersNodeBiases\x12<\n\x0bimpressions\x18\n \x03(\x0b\x32\'.cln.AskrenelistlayersLayersImpressions\"\x9b\x01\n\x1d\x41skrenelistlayersLayersBiases\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\x0c\n\x04\x62ias\x18\x02 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttimestamp\x18\x04 \x01(\x04H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0c\n\n_timestamp\"\xa8\x03\n%AskrenelistlayersLayersChannelUpdates\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\x14\n\x07\x65nabled\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12+\n\x11htlc_minimum_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12+\n\x11htlc_maximum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x06 \x01(\rH\x04\x88\x01\x01\x12\x1e\n\x11\x63ltv_expiry_delta\x18\x07 \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_enabledB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x14\n\x12_cltv_expiry_delta\"\xda\x01\n\"AskrenelistlayersLayersConstraints\x12&\n\x0cmaximum_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12&\n\x0cminimum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x1c\n\x14short_channel_id_dir\x18\x05 \x01(\t\x12\x16\n\ttimestamp\x18\x06 \x01(\x04H\x02\x88\x01\x01\x42\x0f\n\r_maximum_msatB\x0f\n\r_minimum_msatB\x0c\n\n_timestamp\"\x8b\x01\n&AskrenelistlayersLayersCreatedChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\"\n\rcapacity_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\"w\n\"AskrenelistlayersLayersImpressions\x12 \n\x0b\x61mount_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\x04\"\x91\x01\n!AskrenelistlayersLayersNodeBiases\x12\x0c\n\x04node\x18\x01 \x01(\x0c\x12\x0f\n\x07in_bias\x18\x02 \x01(\x12\x12\x10\n\x08out_bias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x42\x0e\n\x0c_description\"R\n\x19\x41skrenecreatelayerRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x17\n\npersistent\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\r\n\x0b_persistent\"K\n\x1a\x41skrenecreatelayerResponse\x12-\n\x06layers\x18\x01 \x03(\x0b\x32\x1d.cln.AskrenecreatelayerLayers\"\xef\x03\n\x18\x41skrenecreatelayerLayers\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x12\n\npersistent\x18\x02 \x01(\x08\x12\x16\n\x0e\x64isabled_nodes\x18\x03 \x03(\x0c\x12\x19\n\x11\x64isabled_channels\x18\x04 \x03(\t\x12\x46\n\x10\x63reated_channels\x18\x05 \x03(\x0b\x32,.cln.AskrenecreatelayerLayersCreatedChannels\x12\x44\n\x0f\x63hannel_updates\x18\x06 \x03(\x0b\x32+.cln.AskrenecreatelayerLayersChannelUpdates\x12=\n\x0b\x63onstraints\x18\x07 \x03(\x0b\x32(.cln.AskrenecreatelayerLayersConstraints\x12\x33\n\x06\x62iases\x18\x08 \x03(\x0b\x32#.cln.AskrenecreatelayerLayersBiases\x12<\n\x0bnode_biases\x18\t \x03(\x0b\x32\'.cln.AskrenecreatelayerLayersNodeBiases\x12=\n\x0bimpressions\x18\n \x03(\x0b\x32(.cln.AskrenecreatelayerLayersImpressions\"\x9c\x01\n\x1e\x41skrenecreatelayerLayersBiases\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\x0c\n\x04\x62ias\x18\x02 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttimestamp\x18\x04 \x01(\x04H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0c\n\n_timestamp\"\xd1\x02\n&AskrenecreatelayerLayersChannelUpdates\x12+\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12+\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x04 \x01(\rH\x03\x88\x01\x01\x12\x12\n\x05\x64\x65lay\x18\x05 \x01(\rH\x04\x88\x01\x01\x42\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x08\n\x06_delay\"\xc4\x01\n#AskrenecreatelayerLayersConstraints\x12\x18\n\x10short_channel_id\x18\x01 \x01(\t\x12\x11\n\tdirection\x18\x02 \x01(\r\x12&\n\x0cmaximum_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12&\n\x0cminimum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x42\x0f\n\r_maximum_msatB\x0f\n\r_minimum_msat\"\x8c\x01\n\'AskrenecreatelayerLayersCreatedChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\"\n\rcapacity_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\"x\n#AskrenecreatelayerLayersImpressions\x12 \n\x0b\x61mount_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\x04\"\x92\x01\n\"AskrenecreatelayerLayersNodeBiases\x12\x0c\n\x04node\x18\x01 \x01(\x0c\x12\x0f\n\x07in_bias\x18\x02 \x01(\x12\x12\x10\n\x08out_bias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x42\x0e\n\x0c_description\"*\n\x19\x41skreneremovelayerRequest\x12\r\n\x05layer\x18\x01 \x01(\t\"\x1c\n\x1a\x41skreneremovelayerResponse\"P\n!AskreneremovechannelupdateRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\"$\n\"AskreneremovechannelupdateResponse\">\n\x15\x41skrenereserveRequest\x12%\n\x04path\x18\x01 \x03(\x0b\x32\x17.cln.AskrenereservePath\"\x18\n\x16\x41skrenereserveResponse\"r\n\x12\x41skrenereservePath\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1c\n\x14short_channel_id_dir\x18\x04 \x01(\t\x12\x12\n\x05layer\x18\x05 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_layer\"2\n\x11\x41skreneageRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0e\n\x06\x63utoff\x18\x02 \x01(\x04\"8\n\x12\x41skreneageResponse\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x13\n\x0bnum_removed\x18\x02 \x01(\x04\"\xe7\x01\n\x10GetroutesRequest\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06layers\x18\x04 \x03(\t\x12 \n\x0bmaxfee_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\nfinal_cltv\x18\x07 \x01(\r\x12\x15\n\x08maxdelay\x18\x08 \x01(\rH\x00\x88\x01\x01\x12\x15\n\x08maxparts\x18\t \x01(\rH\x01\x88\x01\x01\x42\x0b\n\t_maxdelayB\x0b\n\t_maxparts\"R\n\x11GetroutesResponse\x12\x17\n\x0fprobability_ppm\x18\x01 \x01(\x04\x12$\n\x06routes\x18\x02 \x03(\x0b\x32\x14.cln.GetroutesRoutes\"\x88\x01\n\x0fGetroutesRoutes\x12\x17\n\x0fprobability_ppm\x18\x01 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x04path\x18\x03 \x03(\x0b\x32\x18.cln.GetroutesRoutesPath\x12\x12\n\nfinal_cltv\x18\x04 \x01(\r\"\xd4\x03\n\x13GetroutesRoutesPath\x12)\n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x00\x88\x01\x01\x12\x1d\n\x0cnext_node_id\x18\x04 \x01(\x0c\x42\x02\x18\x01H\x01\x88\x01\x01\x12\x16\n\x05\x64\x65lay\x18\x05 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x1c\n\x14short_channel_id_dir\x18\x06 \x01(\t\x12(\n\x0e\x61mount_in_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12)\n\x0f\x61mount_out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x17\n\nnode_id_in\x18\t \x01(\x0cH\x05\x88\x01\x01\x12\x18\n\x0bnode_id_out\x18\n \x01(\x0cH\x06\x88\x01\x01\x12\x14\n\x07\x63ltv_in\x18\x0b \x01(\rH\x07\x88\x01\x01\x12\x15\n\x08\x63ltv_out\x18\x0c \x01(\rH\x08\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\x0f\n\r_next_node_idB\x08\n\x06_delayB\x11\n\x0f_amount_in_msatB\x12\n\x10_amount_out_msatB\r\n\x0b_node_id_inB\x0e\n\x0c_node_id_outB\n\n\x08_cltv_inB\x0b\n\t_cltv_out\"8\n\x19\x41skrenedisablenodeRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\x0c\"\x1c\n\x1a\x41skrenedisablenodeResponse\"\x8a\x02\n\x1b\x41skreneinformchannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x06 \x01(\t\x12 \n\x0b\x61mount_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12K\n\x06inform\x18\x08 \x01(\x0e\x32;.cln.AskreneinformchannelRequest.AskreneinformchannelInform\"O\n\x1a\x41skreneinformchannelInform\x12\x0f\n\x0b\x43ONSTRAINED\x10\x00\x12\x11\n\rUNCONSTRAINED\x10\x01\x12\r\n\tSUCCEEDED\x10\x02\"\x94\x01\n\x1c\x41skreneinformchannelResponse\x12\x39\n\x0b\x63onstraints\x18\x02 \x03(\x0b\x32$.cln.AskreneinformchannelConstraints\x12\x39\n\x0bimpressions\x18\x03 \x03(\x0b\x32$.cln.AskreneinformchannelImpressions\"\xd3\x01\n\x1f\x41skreneinformchannelConstraints\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\r\n\x05layer\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\x04\x12&\n\x0cmaximum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12&\n\x0cminimum_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x42\x0f\n\r_maximum_msatB\x0f\n\r_minimum_msat\"\x83\x01\n\x1f\x41skreneinformchannelImpressions\x12 \n\x0b\x61mount_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\r\n\x05layer\x18\x02 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x03 \x01(\t\x12\x11\n\ttimestamp\x18\x04 \x01(\x04\"\x8f\x01\n\x1b\x41skrenecreatechannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x03 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x04 \x01(\t\x12\"\n\rcapacity_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"\x1e\n\x1c\x41skrenecreatechannelResponse\"\xad\x03\n\x1b\x41skreneupdatechannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x14\n\x07\x65nabled\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12+\n\x11htlc_minimum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12+\n\x11htlc_maximum_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x07 \x01(\rH\x04\x88\x01\x01\x12\x1e\n\x11\x63ltv_expiry_delta\x18\x08 \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_enabledB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x14\n\x12_cltv_expiry_delta\"\x1e\n\x1c\x41skreneupdatechannelResponse\"\xa4\x01\n\x19\x41skrenebiaschannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x0c\n\x04\x62ias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08relative\x18\x05 \x01(\x08H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0b\n\t_relative\"K\n\x1a\x41skrenebiaschannelResponse\x12-\n\x06\x62iases\x18\x01 \x03(\x0b\x32\x1d.cln.AskrenebiaschannelBiases\"\xa5\x01\n\x18\x41skrenebiaschannelBiases\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x0c\n\x04\x62ias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttimestamp\x18\x05 \x01(\x04H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0c\n\n_timestamp\"\xa4\x01\n\x16\x41skrenebiasnodeRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x11\n\tdirection\x18\x03 \x01(\t\x12\x0c\n\x04\x62ias\x18\x04 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08relative\x18\x06 \x01(\x08H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0b\n\t_relative\"N\n\x17\x41skrenebiasnodeResponse\x12\x33\n\x0bnode_biases\x18\x01 \x03(\x0b\x32\x1e.cln.AskrenebiasnodeNodeBiases\"\x98\x01\n\x19\x41skrenebiasnodeNodeBiases\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x0f\n\x07in_bias\x18\x03 \x01(\x12\x12\x10\n\x08out_bias\x18\x04 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x06 \x01(\x04\x42\x0e\n\x0c_description\" \n\x1e\x41skrenelistreservationsRequest\"a\n\x1f\x41skrenelistreservationsResponse\x12>\n\x0creservations\x18\x01 \x03(\x0b\x32(.cln.AskrenelistreservationsReservations\"\x91\x01\n#AskrenelistreservationsReservations\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x16\n\x0e\x61ge_in_seconds\x18\x03 \x01(\x04\x12\x12\n\ncommand_id\x18\x04 \x01(\t\"\xf5\x02\n\x19InjectpaymentonionRequest\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x0b\x63ltv_expiry\x18\x04 \x01(\r\x12\x0e\n\x06partid\x18\x05 \x01(\x04\x12\x0f\n\x07groupid\x18\x06 \x01(\x04\x12\x12\n\x05label\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tinvstring\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\t \x01(\x0cH\x02\x88\x01\x01\x12*\n\x10\x64\x65stination_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x0b \x01(\x0cH\x04\x88\x01\x01\x42\x08\n\x06_labelB\x0c\n\n_invstringB\x10\n\x0e_localinvreqidB\x13\n\x11_destination_msatB\x0e\n\x0c_destination\"w\n\x1aInjectpaymentonionResponse\x12\x12\n\ncreated_at\x18\x01 \x01(\x04\x12\x14\n\x0c\x63ompleted_at\x18\x02 \x01(\x04\x12\x15\n\rcreated_index\x18\x03 \x01(\x04\x12\x18\n\x10payment_preimage\x18\x04 \x01(\x0c\">\n\x19InjectonionmessageRequest\x12\x10\n\x08path_key\x18\x01 \x01(\x0c\x12\x0f\n\x07message\x18\x02 \x01(\x0c\"\x1c\n\x1aInjectonionmessageResponse\"\xbb\x03\n\x0bXpayRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12 \n\x06maxfee\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x0e\n\x06layers\x18\x04 \x03(\t\x12\x16\n\tretry_for\x18\x05 \x01(\rH\x02\x88\x01\x01\x12&\n\x0cpartial_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x07 \x01(\rH\x04\x88\x01\x01\x12\x17\n\npayer_note\x18\x08 \x01(\tH\x05\x88\x01\x01\x12\x12\n\x05label\x18\t \x01(\tH\x06\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\n \x01(\x0cH\x07\x88\x01\x01\x12\x1b\n\x0e\x64\x65v_use_shadow\x18\x0b \x01(\x08H\x08\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\t\n\x07_maxfeeB\x0c\n\n_retry_forB\x0f\n\r_partial_msatB\x0b\n\t_maxdelayB\r\n\x0b_payer_noteB\x08\n\x06_labelB\x10\n\x0e_localinvreqidB\x11\n\x0f_dev_use_shadow\"\xa1\x01\n\x0cXpayResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x14\n\x0c\x66\x61iled_parts\x18\x02 \x01(\x04\x12\x18\n\x10successful_parts\x18\x03 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"=\n\x19SignmessagewithkeyRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t\"`\n\x1aSignmessagewithkeyResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x0e\n\x06pubkey\x18\x02 \x01(\x0c\x12\x11\n\tsignature\x18\x03 \x01(\x0c\x12\x0e\n\x06\x62\x61se64\x18\x04 \x01(\t\"\xcd\x01\n\x17ListchannelmovesRequest\x12\x46\n\x05index\x18\x01 \x01(\x0e\x32\x32.cln.ListchannelmovesRequest.ListchannelmovesIndexH\x00\x88\x01\x01\x12\x12\n\x05start\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x03 \x01(\rH\x02\x88\x01\x01\"$\n\x15ListchannelmovesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x42\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"S\n\x18ListchannelmovesResponse\x12\x37\n\x0c\x63hannelmoves\x18\x01 \x03(\x0b\x32!.cln.ListchannelmovesChannelmoves\"\xa9\x04\n\x1cListchannelmovesChannelmoves\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\x12\n\naccount_id\x18\x02 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x12]\n\x0bprimary_tag\x18\x06 \x01(\x0e\x32H.cln.ListchannelmovesChannelmoves.ListchannelmovesChannelmovesPrimaryTag\x12\x19\n\x0cpayment_hash\x18\x07 \x01(\x0cH\x00\x88\x01\x01\x12\x14\n\x07part_id\x18\x08 \x01(\x04H\x01\x88\x01\x01\x12\x15\n\x08group_id\x18\t \x01(\x04H\x02\x88\x01\x01\x12\x1e\n\tfees_msat\x18\n \x01(\x0b\x32\x0b.cln.Amount\"\x96\x01\n&ListchannelmovesChannelmovesPrimaryTag\x12\x0b\n\x07INVOICE\x10\x00\x12\n\n\x06ROUTED\x10\x01\x12\n\n\x06PUSHED\x10\x02\x12\r\n\tLEASE_FEE\x10\x03\x12\x14\n\x10\x43HANNEL_PROPOSED\x10\x04\x12\x0f\n\x0bPENALTY_ADJ\x10\x05\x12\x11\n\rJOURNAL_ENTRY\x10\x06\x42\x0f\n\r_payment_hashB\n\n\x08_part_idB\x0b\n\t_group_id\"\xc5\x01\n\x15ListchainmovesRequest\x12\x42\n\x05index\x18\x01 \x01(\x0e\x32..cln.ListchainmovesRequest.ListchainmovesIndexH\x00\x88\x01\x01\x12\x12\n\x05start\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x03 \x01(\rH\x02\x88\x01\x01\"\"\n\x13ListchainmovesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x42\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"K\n\x16ListchainmovesResponse\x12\x31\n\nchainmoves\x18\x01 \x03(\x0b\x32\x1d.cln.ListchainmovesChainmoves\"\xd4\x06\n\x18ListchainmovesChainmoves\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\x12\n\naccount_id\x18\x02 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x12U\n\x0bprimary_tag\x18\x06 \x01(\x0e\x32@.cln.ListchainmovesChainmoves.ListchainmovesChainmovesPrimaryTag\x12\x14\n\x07peer_id\x18\x08 \x01(\x0cH\x00\x88\x01\x01\x12 \n\x13originating_account\x18\t \x01(\tH\x01\x88\x01\x01\x12\x1a\n\rspending_txid\x18\n \x01(\x0cH\x02\x88\x01\x01\x12\x1b\n\x04utxo\x18\x0b \x01(\x0b\x32\r.cln.Outpoint\x12\x19\n\x0cpayment_hash\x18\x0c \x01(\x0cH\x03\x88\x01\x01\x12 \n\x0boutput_msat\x18\r \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x0coutput_count\x18\x0e \x01(\rH\x04\x88\x01\x01\x12\x13\n\x0b\x62lockheight\x18\x0f \x01(\r\x12\x12\n\nextra_tags\x18\x10 \x03(\t\"\x95\x02\n\"ListchainmovesChainmovesPrimaryTag\x12\x0b\n\x07\x44\x45POSIT\x10\x00\x12\x0e\n\nWITHDRAWAL\x10\x01\x12\x0b\n\x07PENALTY\x10\x02\x12\x10\n\x0c\x43HANNEL_OPEN\x10\x03\x12\x11\n\rCHANNEL_CLOSE\x10\x04\x12\x11\n\rDELAYED_TO_US\x10\x05\x12\x0b\n\x07HTLC_TX\x10\x06\x12\x10\n\x0cHTLC_TIMEOUT\x10\x07\x12\x10\n\x0cHTLC_FULFILL\x10\x08\x12\r\n\tTO_WALLET\x10\t\x12\n\n\x06\x41NCHOR\x10\n\x12\x0b\n\x07TO_THEM\x10\x0b\x12\r\n\tPENALIZED\x10\x0c\x12\n\n\x06STOLEN\x10\r\x12\x0b\n\x07IGNORED\x10\x0e\x12\x0c\n\x08TO_MINER\x10\x0f\x42\n\n\x08_peer_idB\x16\n\x14_originating_accountB\x10\n\x0e_spending_txidB\x0f\n\r_payment_hashB\x0f\n\r_output_count\"\xe9\x01\n\x18ListnetworkeventsRequest\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12H\n\x05index\x18\x02 \x01(\x0e\x32\x34.cln.ListnetworkeventsRequest.ListnetworkeventsIndexH\x01\x88\x01\x01\x12\x12\n\x05start\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\rH\x03\x88\x01\x01\"%\n\x16ListnetworkeventsIndex\x12\x0b\n\x07\x43REATED\x10\x00\x42\x05\n\x03_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"W\n\x19ListnetworkeventsResponse\x12:\n\rnetworkevents\x18\x01 \x03(\x0b\x32#.cln.ListnetworkeventsNetworkevents\"\xf2\x01\n\x1eListnetworkeventsNetworkevents\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\x11\n\ttimestamp\x18\x02 \x01(\x04\x12\x0f\n\x07peer_id\x18\x03 \x01(\x0c\x12\x11\n\titem_type\x18\x04 \x01(\t\x12\x13\n\x06reason\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rduration_nsec\x18\x06 \x01(\x04H\x01\x88\x01\x01\x12\x1e\n\x11\x63onnect_attempted\x18\x07 \x01(\x08H\x02\x88\x01\x01\x42\t\n\x07_reasonB\x10\n\x0e_duration_nsecB\x14\n\x12_connect_attempted\"/\n\x16\x44\x65lnetworkeventRequest\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\"\x19\n\x17\x44\x65lnetworkeventResponse\"\xf6\x01\n\x1a\x43lnrestregisterpathRequest\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x12\n\nrpc_method\x18\x02 \x01(\t\x12H\n\x11rune_restrictions\x18\x03 \x01(\x0b\x32(.cln.ClnrestregisterpathRuneRestrictionsH\x00\x88\x01\x01\x12\x1a\n\rrune_required\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x18\n\x0bhttp_method\x18\x05 \x01(\tH\x02\x88\x01\x01\x42\x14\n\x12_rune_restrictionsB\x10\n\x0e_rune_requiredB\x0e\n\x0c_http_method\"\x1d\n\x1b\x43lnrestregisterpathResponse\"\xda\x01\n#ClnrestregisterpathRuneRestrictions\x12\x13\n\x06nodeid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06method\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x44\n\x06params\x18\x03 \x03(\x0b\x32\x34.cln.ClnrestregisterpathRuneRestrictions.ParamsEntry\x1a-\n\x0bParamsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\t\n\x07_nodeidB\t\n\x07_method\",\n\x18ListcurrencyratesRequest\x12\x10\n\x08\x63urrency\x18\x01 \x01(\t\"W\n\x19ListcurrencyratesResponse\x12:\n\rcurrencyrates\x18\x01 \x03(\x0b\x32#.cln.ListcurrencyratesCurrencyrates\"@\n\x1eListcurrencyratesCurrencyrates\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\x01\":\n\x16\x43urrencyconvertRequest\x12\x0e\n\x06\x61mount\x18\x01 \x01(\x01\x12\x10\n\x08\x63urrency\x18\x02 \x01(\t\"4\n\x17\x43urrencyconvertResponse\x12\x19\n\x04msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\"G\n\x13\x43urrencyrateRequest\x12\x10\n\x08\x63urrency\x18\x01 \x01(\t\x12\x13\n\x06source\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_source\"$\n\x14\x43urrencyrateResponse\x12\x0c\n\x04rate\x18\x01 \x01(\x01\"\x95\x02\n\x11SendamountRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12 \n\x06maxfee\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x0e\n\x06layers\x18\x04 \x03(\t\x12\x16\n\tretry_for\x18\x05 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x06 \x01(\rH\x02\x88\x01\x01\x12\x17\n\npayer_note\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x12\n\x05label\x18\x08 \x01(\tH\x04\x88\x01\x01\x42\t\n\x07_maxfeeB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\r\n\x0b_payer_noteB\x08\n\x06_label\"\xa7\x01\n\x12SendamountResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x14\n\x0c\x66\x61iled_parts\x18\x02 \x01(\x04\x12\x18\n\x10successful_parts\x18\x03 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"e\n\x12\x43reateproofRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12\x11\n\x04note\x18\x02 \x01(\tH\x00\x88\x01\x01\x12 \n\x07include\x18\x03 \x03(\x0b\x32\x0f.cln.ProofFieldB\x07\n\x05_note\"=\n\x13\x43reateproofResponse\x12&\n\x06proofs\x18\x01 \x03(\x0b\x32\x16.cln.CreateproofProofs\"\xb6\x01\n\x11\x43reateproofProofs\x12\x0e\n\x06\x62olt12\x18\x01 \x01(\t\x12.\n\x15offer_fields_included\x18\x02 \x03(\x0b\x32\x0f.cln.ProofField\x12/\n\x16invreq_fields_included\x18\x03 \x03(\x0b\x32\x0f.cln.ProofField\x12\x30\n\x17invoice_fields_included\x18\x04 \x03(\x0b\x32\x0f.cln.ProofField\"\xd7\x02\n\x0fXkeysendRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\x03 \x01(\tH\x00\x88\x01\x01\x12 \n\x06maxfee\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x0e\n\x06layers\x18\x05 \x03(\t\x12\x16\n\tretry_for\x18\x06 \x01(\rH\x02\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x07 \x01(\rH\x03\x88\x01\x01\x12\x36\n\textratlvs\x18\x08 \x03(\x0b\x32#.cln.XkeysendRequest.ExtratlvsEntry\x1a\x30\n\x0e\x45xtratlvsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x08\n\x06_labelB\t\n\x07_maxfeeB\x0c\n\n_retry_forB\x0b\n\t_maxdelay\"\xa5\x01\n\x10XkeysendResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x14\n\x0c\x66\x61iled_parts\x18\x02 \x01(\x04\x12\x18\n\x10successful_parts\x18\x03 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"3\n\x0fGracefulRequest\x12\x14\n\x07timeout\x18\x01 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_timeout\"H\n\x10GracefulResponse\x12\x1d\n\x15pending_htlc_expiries\x18\x01 \x03(\r\x12\x15\n\rpending_peers\x18\x02 \x03(\x0c\"\xc0\x04\n\x0fRecklessRequest\x12%\n\x0b\x61mount_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x35\n\x07\x63ommand\x18\x02 \x01(\x0e\x32$.cln.RecklessRequest.RecklessCommand\x12\x16\n\tdeveloper\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x0f\n\x07options\x18\x04 \x03(\t\x12\x17\n\npayer_note\x18\x05 \x01(\tH\x02\x88\x01\x01\x12@\n\nsubcommand\x18\x06 \x01(\x0e\x32\'.cln.RecklessRequest.RecklessSubcommandH\x03\x88\x01\x01\x12\x13\n\x06target\x18\x07 \x01(\tH\x04\x88\x01\x01\x12\x14\n\x07verbose\x18\x08 \x01(\x08H\x05\x88\x01\x01\"\x97\x01\n\x0fRecklessCommand\x12\x0b\n\x07INSTALL\x10\x00\x12\n\n\x06UPDATE\x10\x01\x12\r\n\tUNINSTALL\x10\x02\x12\x11\n\rLISTAVAILABLE\x10\x03\x12\x11\n\rLISTINSTALLED\x10\x04\x12\n\n\x06\x45NABLE\x10\x05\x12\x0b\n\x07\x44ISABLE\x10\x06\x12\n\n\x06SOURCE\x10\x07\x12\x07\n\x03TIP\x10\x08\x12\x08\n\x04HELP\x10\t\"3\n\x12RecklessSubcommand\x12\x07\n\x03\x41\x44\x44\x10\x00\x12\x08\n\x04LIST\x10\x01\x12\n\n\x06REMOVE\x10\x02\x42\x0e\n\x0c_amount_msatB\x0c\n\n_developerB\r\n\x0b_payer_noteB\r\n\x0b_subcommandB\t\n\x07_targetB\n\n\x08_verbose\"\xc8\x03\n\x10RecklessResponse\x12*\n\x07\x64isable\x18\x01 \x01(\x0b\x32\x14.cln.RecklessDisableH\x00\x88\x01\x01\x12(\n\x06\x65nable\x18\x02 \x01(\x0b\x32\x13.cln.RecklessEnableH\x01\x88\x01\x01\x12*\n\x07install\x18\x03 \x01(\x0b\x32\x14.cln.RecklessInstallH\x02\x88\x01\x01\x12\x31\n\rlistavailable\x18\x04 \x03(\x0b\x32\x1a.cln.RecklessListavailable\x12/\n\x0clistintalled\x18\x05 \x03(\x0b\x32\x19.cln.RecklessListintalled\x12\x0b\n\x03log\x18\x06 \x03(\t\x12\x0f\n\x07sources\x18\x07 \x03(\t\x12\"\n\x03tip\x18\x08 \x01(\x0b\x32\x10.cln.RecklessTipH\x03\x88\x01\x01\x12.\n\tuninstall\x18\t \x01(\x0b\x32\x16.cln.RecklessUninstallH\x04\x88\x01\x01\x12#\n\x06update\x18\n \x03(\x0b\x32\x13.cln.RecklessUpdateB\n\n\x08_disableB\t\n\x07_enableB\n\n\x08_installB\x06\n\x04_tipB\x0c\n\n_uninstall\"&\n\x0fRecklessDisable\x12\x13\n\x0bplugin_name\x18\x01 \x01(\t\"%\n\x0eRecklessEnable\x12\x13\n\x0bplugin_name\x18\x01 \x01(\t\"k\n\x0fRecklessInstall\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x1d\n\x10installed_commit\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x0bplugin_name\x18\x03 \x01(\tB\x13\n\x11_installed_commit\"\xf5\x02\n\x15RecklessListavailable\x12L\n\tinstaller\x18\x01 \x01(\x0e\x32\x39.cln.RecklessListavailable.RecklessListavailableInstaller\x12\x34\n\x08manifest\x18\x02 \x01(\x0b\x32\".cln.RecklessListavailableManifest\x12\x0e\n\x06origin\x18\x03 \x01(\t\x12\x13\n\x0bplugin_name\x18\x04 \x01(\t\"\xb2\x01\n\x1eRecklessListavailableInstaller\x12\x0c\n\x08PYTHONUV\x10\x00\x12\x13\n\x0fPYTHONUVSHEBANG\x10\x01\x12\x12\n\x0ePYTHONUVLEGACY\x10\x02\x12\x0e\n\nPOETRYVENV\x10\x03\x12\x13\n\x0fPYPROJECTVIAPIP\x10\x04\x12\n\n\x06PYTHON\x10\x05\x12\n\n\x06NODEJS\x10\x06\x12\x08\n\x04RUST\x10\x07\x12\x06\n\x02GO\x10\x08\x12\n\n\x06\x43USTOM\x10\t\"\xaa\x02\n\x1dRecklessListavailableManifest\x12\x14\n\x0c\x64\x65pendencies\x18\x01 \x03(\t\x12\x12\n\nentrypoint\x18\x02 \x01(\t\x12\x13\n\x0binstall_cmd\x18\x03 \x03(\t\x12\x18\n\x0binstallable\x18\x04 \x01(\x08H\x00\x88\x01\x01\x12\x1d\n\x10long_description\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x12\n\x05offer\x18\x06 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x10required_options\x18\x07 \x03(\t\x12\x1e\n\x11short_description\x18\x08 \x01(\tH\x03\x88\x01\x01\x42\x0e\n\x0c_installableB\x13\n\x11_long_descriptionB\x08\n\x06_offerB\x14\n\x12_short_description\"\xe2\x01\n\x14RecklessListintalled\x12\x19\n\x11installation_date\x18\x01 \x01(\t\x12\x19\n\x11installation_time\x18\x02 \x01(\x01\x12\x1d\n\x10installed_commit\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x17\n\x0foriginal_source\x18\x04 \x01(\t\x12\x13\n\x0bplugin_name\x18\x05 \x01(\t\x12\x1d\n\x10requested_commit\x18\x06 \x01(\tH\x01\x88\x01\x01\x42\x13\n\x11_installed_commitB\x13\n\x11_requested_commit\"\xa0\x01\n\x0bRecklessTip\x12 \n\x0b\x61mount_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66\x61iled_parts\x18\x03 \x01(\x04\x12\x18\n\x10payment_preimage\x18\x04 \x01(\x0c\x12\x18\n\x10successful_parts\x18\x05 \x01(\x04\"(\n\x11RecklessUninstall\x12\x13\n\x0bplugin_name\x18\x01 \x01(\t\"j\n\x0eRecklessUpdate\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x1d\n\x10installed_commit\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x0bplugin_name\x18\x03 \x01(\tB\x13\n\x11_installed_commit\"\x1e\n\x1cStreamBalanceSnapshotRequest\"\x86\x01\n\x1b\x42\x61lanceSnapshotNotification\x12\x0f\n\x07node_id\x18\x01 \x01(\x0c\x12\x13\n\x0b\x62lockheight\x18\x02 \x01(\r\x12\x11\n\ttimestamp\x18\x03 \x01(\r\x12.\n\x08\x61\x63\x63ounts\x18\x04 \x03(\x0b\x32\x1c.cln.BalanceSnapshotAccounts\"c\n\x17\x42\x61lanceSnapshotAccounts\x12\x12\n\naccount_id\x18\x01 \x01(\t\x12!\n\x0c\x62\x61lance_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\tcoin_type\x18\x03 \x01(\t\"\x19\n\x17StreamBlockAddedRequest\"6\n\x16\x42lockAddedNotification\x12\x0c\n\x04hash\x18\x01 \x01(\x0c\x12\x0e\n\x06height\x18\x02 \x01(\r\" \n\x1eStreamChannelOpenFailedRequest\"3\n\x1d\x43hannelOpenFailedNotification\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\"\x1c\n\x1aStreamChannelOpenedRequest\"w\n\x19\x43hannelOpenedNotification\x12\n\n\x02id\x18\x01 \x01(\x0c\x12!\n\x0c\x66unding_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66unding_txid\x18\x03 \x01(\x0c\x12\x15\n\rchannel_ready\x18\x04 \x01(\x08\"\"\n StreamChannelStateChangedRequest\"\xc1\x03\n\x1f\x43hannelStateChangedNotification\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x12\n\nchannel_id\x18\x02 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x04 \x01(\t\x12)\n\told_state\x18\x05 \x01(\x0e\x32\x11.cln.ChannelStateH\x01\x88\x01\x01\x12$\n\tnew_state\x18\x06 \x01(\x0e\x32\x11.cln.ChannelState\x12L\n\x05\x63\x61use\x18\x07 \x01(\x0e\x32=.cln.ChannelStateChangedNotification.ChannelStateChangedCause\x12\x14\n\x07message\x18\x08 \x01(\tH\x02\x88\x01\x01\"c\n\x18\x43hannelStateChangedCause\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05LOCAL\x10\x01\x12\x08\n\x04USER\x10\x02\x12\n\n\x06REMOTE\x10\x03\x12\x0c\n\x08PROTOCOL\x10\x04\x12\x0b\n\x07ONCHAIN\x10\x05\x42\x13\n\x11_short_channel_idB\x0c\n\n_old_stateB\n\n\x08_message\"\x16\n\x14StreamConnectRequest\"\xbe\x01\n\x17PeerConnectNotification\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x44\n\tdirection\x18\x02 \x01(\x0e\x32\x31.cln.PeerConnectNotification.PeerConnectDirection\x12(\n\x07\x61\x64\x64ress\x18\x03 \x01(\x0b\x32\x17.cln.PeerConnectAddress\"\'\n\x14PeerConnectDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\"\x9a\x02\n\x12PeerConnectAddress\x12\x41\n\titem_type\x18\x01 \x01(\x0e\x32..cln.PeerConnectAddress.PeerConnectAddressType\x12\x13\n\x06socket\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04port\x18\x04 \x01(\rH\x02\x88\x01\x01\"c\n\x16PeerConnectAddressType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x12\r\n\tWEBSOCKET\x10\x05\x42\t\n\x07_socketB\n\n\x08_addressB\x07\n\x05_port\"\x1b\n\x19StreamCoinMovementRequest\"\xaf\x0b\n\x18\x43oinMovementNotification\x12\x0f\n\x07version\x18\x01 \x01(\r\x12\x11\n\tcoin_type\x18\x02 \x01(\t\x12\x0f\n\x07node_id\x18\x03 \x01(\x0c\x12\x41\n\titem_type\x18\x04 \x01(\x0e\x32..cln.CoinMovementNotification.CoinMovementType\x12\x1a\n\rcreated_index\x18\x05 \x01(\x04H\x00\x88\x01\x01\x12\x12\n\naccount_id\x18\x06 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\ttimestamp\x18\t \x01(\x04\x12\x10\n\x04tags\x18\n \x03(\tB\x02\x18\x01\x12N\n\x0bprimary_tag\x18\x0b \x01(\x0e\x32\x34.cln.CoinMovementNotification.CoinMovementPrimaryTagH\x01\x88\x01\x01\x12\x12\n\nextra_tags\x18\x0c \x03(\t\x12\x19\n\x0cpayment_hash\x18\r \x01(\x0cH\x02\x88\x01\x01\x12\x14\n\x07part_id\x18\x0e \x01(\x04H\x03\x88\x01\x01\x12\x15\n\x08group_id\x18\x0f \x01(\x04H\x04\x88\x01\x01\x12#\n\tfees_msat\x18\x10 \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12 \n\x04utxo\x18\x11 \x01(\x0b\x32\r.cln.OutpointH\x06\x88\x01\x01\x12\x14\n\x07peer_id\x18\x12 \x01(\x0cH\x07\x88\x01\x01\x12 \n\x13originating_account\x18\x13 \x01(\tH\x08\x88\x01\x01\x12\x15\n\x04txid\x18\x14 \x01(\x0c\x42\x02\x18\x01H\t\x88\x01\x01\x12\x1a\n\rspending_txid\x18\x15 \x01(\x0cH\n\x88\x01\x01\x12\x1a\n\tutxo_txid\x18\x16 \x01(\x0c\x42\x02\x18\x01H\x0b\x88\x01\x01\x12\x15\n\x04vout\x18\x17 \x01(\rB\x02\x18\x01H\x0c\x88\x01\x01\x12%\n\x0boutput_msat\x18\x18 \x01(\x0b\x32\x0b.cln.AmountH\r\x88\x01\x01\x12\x19\n\x0coutput_count\x18\x19 \x01(\rH\x0e\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\x1a \x01(\rH\x0f\x88\x01\x01\"\xf7\x02\n\x16\x43oinMovementPrimaryTag\x12\x0b\n\x07\x44\x45POSIT\x10\x00\x12\x0e\n\nWITHDRAWAL\x10\x01\x12\x0b\n\x07PENALTY\x10\x02\x12\x10\n\x0c\x43HANNEL_OPEN\x10\x03\x12\x11\n\rCHANNEL_CLOSE\x10\x04\x12\x11\n\rDELAYED_TO_US\x10\x05\x12\x0b\n\x07HTLC_TX\x10\x06\x12\x10\n\x0cHTLC_TIMEOUT\x10\x07\x12\x10\n\x0cHTLC_FULFILL\x10\x08\x12\r\n\tTO_WALLET\x10\t\x12\n\n\x06\x41NCHOR\x10\n\x12\x0b\n\x07TO_THEM\x10\x0b\x12\r\n\tPENALIZED\x10\x0c\x12\n\n\x06STOLEN\x10\r\x12\x0b\n\x07IGNORED\x10\x0e\x12\x0c\n\x08TO_MINER\x10\x0f\x12\x0b\n\x07INVOICE\x10\x10\x12\n\n\x06ROUTED\x10\x11\x12\n\n\x06PUSHED\x10\x12\x12\r\n\tLEASE_FEE\x10\x13\x12\x14\n\x10\x43HANNEL_PROPOSED\x10\x14\x12\x0f\n\x0bPENALTY_ADJ\x10\x15\x12\x11\n\rJOURNAL_ENTRY\x10\x16\"2\n\x10\x43oinMovementType\x12\x0f\n\x0b\x43HANNEL_MVT\x10\x00\x12\r\n\tCHAIN_MVT\x10\x01\x42\x10\n\x0e_created_indexB\x0e\n\x0c_primary_tagB\x0f\n\r_payment_hashB\n\n\x08_part_idB\x0b\n\t_group_idB\x0c\n\n_fees_msatB\x07\n\x05_utxoB\n\n\x08_peer_idB\x16\n\x14_originating_accountB\x07\n\x05_txidB\x10\n\x0e_spending_txidB\x0c\n\n_utxo_txidB\x07\n\x05_voutB\x0e\n\x0c_output_msatB\x0f\n\r_output_countB\x0e\n\x0c_blockheight\"\x18\n\x16StreamCustomMsgRequest\"9\n\x15\x43ustomMsgNotification\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\" \n\x1eStreamDeprecatedOneshotRequest\"6\n\x1d\x44\x65precatedOneshotNotification\x12\x15\n\rdeprecated_ok\x18\x01 \x01(\x08\"\x19\n\x17StreamDisconnectRequest\"$\n\x16\x44isconnectNotification\x12\n\n\x02id\x18\x01 \x01(\x0c\"\x1b\n\x19StreamForwardEventRequest\"\x88\x05\n\x18\x46orwardEventNotification\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x12\n\nin_channel\x18\x02 \x01(\t\x12\x18\n\x0bout_channel\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1c\n\x07in_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\"\n\x08out_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\"\n\x08\x66\x65\x65_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12@\n\x06status\x18\x07 \x01(\x0e\x32\x30.cln.ForwardEventNotification.ForwardEventStatus\x12\x15\n\x08\x66\x61ilcode\x18\x08 \x01(\rH\x03\x88\x01\x01\x12\x17\n\nfailreason\x18\t \x01(\tH\x04\x88\x01\x01\x12\x43\n\x05style\x18\n \x01(\x0e\x32/.cln.ForwardEventNotification.ForwardEventStyleH\x05\x88\x01\x01\x12\x15\n\rreceived_time\x18\x0b \x01(\x01\x12\x1a\n\rresolved_time\x18\x0c \x01(\x01H\x06\x88\x01\x01\"L\n\x12\x46orwardEventStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\x10\n\x0cLOCAL_FAILED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\"(\n\x11\x46orwardEventStyle\x12\n\n\x06LEGACY\x10\x00\x12\x07\n\x03TLV\x10\x01\x42\x0e\n\x0c_out_channelB\x0b\n\t_out_msatB\x0b\n\t_fee_msatB\x0b\n\t_failcodeB\r\n\x0b_failreasonB\x08\n\x06_styleB\x10\n\x0e_resolved_time\"\x1e\n\x1cStreamInvoiceCreationRequest\"\x8b\x01\n\x1bInvoiceCreationNotification\x12\x1e\n\x04msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x10\n\x08preimage\x18\x02 \x01(\x0c\x12\r\n\x05label\x18\x03 \x01(\t\x12\x15\n\x08offer_id\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x42\x07\n\x05_msatB\x0b\n\t_offer_id\"\x1d\n\x1bStreamInvoicePaymentRequest\"\x8b\x01\n\x1aInvoicePaymentNotification\x12\x19\n\x04msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08preimage\x18\x02 \x01(\x0c\x12$\n\x08outpoint\x18\x03 \x01(\x0b\x32\r.cln.OutpointH\x00\x88\x01\x01\x12\r\n\x05label\x18\x04 \x01(\tB\x0b\n\t_outpoint\"\x12\n\x10StreamLogRequest\"\xca\x01\n\x0fLogNotification\x12,\n\x05level\x18\x01 \x01(\x0e\x32\x1d.cln.LogNotification.LogLevel\x12\x0c\n\x04time\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\t\x12\x0e\n\x06source\x18\x04 \x01(\t\x12\x0b\n\x03log\x18\x05 \x01(\t\"K\n\x08LogLevel\x12\x06\n\x02IO\x10\x00\x12\t\n\x05TRACE\x10\x01\x12\t\n\x05\x44\x45\x42UG\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\x0b\n\x07UNUSUAL\x10\x04\x12\n\n\x06\x42ROKEN\x10\x05\"&\n$StreamOnionMessageForwardFailRequest\"\xef\x01\n#OnionMessageForwardFailNotification\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x10\n\x08incoming\x18\x02 \x01(\x0c\x12\x10\n\x08path_key\x18\x03 \x01(\x0c\x12\x15\n\x08outgoing\x18\x04 \x01(\x0cH\x00\x88\x01\x01\x12\x19\n\x0cnext_node_id\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12&\n\x19next_short_channel_id_dir\x18\x06 \x01(\tH\x02\x88\x01\x01\x42\x0b\n\t_outgoingB\x0f\n\r_next_node_idB\x1c\n\x1a_next_short_channel_id_dir\"\"\n StreamOpenChannelPeerSigsRequest\"J\n\x1fOpenChannelPeerSigsNotification\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x13\n\x0bsigned_psbt\x18\x02 \x01(\t\"\x1c\n\x1aStreamPluginStartedRequest\"V\n\x19PluginStartedNotification\x12\x13\n\x0bplugin_name\x18\x01 \x01(\t\x12\x13\n\x0bplugin_path\x18\x02 \x01(\t\x12\x0f\n\x07methods\x18\x03 \x03(\t\"\x1c\n\x1aStreamPluginStoppedRequest\"V\n\x19PluginStoppedNotification\x12\x13\n\x0bplugin_name\x18\x01 \x01(\t\x12\x13\n\x0bplugin_path\x18\x02 \x01(\t\x12\x0f\n\x07methods\x18\x03 \x03(\t\"\x1d\n\x1bStreamSendPayFailureRequest\"b\n\x1aSendPayFailureNotification\x12\x0c\n\x04\x63ode\x18\x01 \x01(\x12\x12\x0f\n\x07message\x18\x02 \x01(\t\x12%\n\x04\x64\x61ta\x18\x03 \x01(\x0b\x32\x17.cln.SendpayFailureData\"\xc1\t\n\x12SendpayFailureData\x12\x1a\n\rcreated_index\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x0f\n\x02id\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x12\x14\n\x07groupid\x18\x04 \x01(\x04H\x03\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x13\n\x06partid\x18\x06 \x01(\x04H\x05\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x07 \x01(\x0cH\x06\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x07\x88\x01\x01\x12*\n\x10\x61mount_sent_msat\x18\t \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x12\x17\n\ncreated_at\x18\n \x01(\x04H\t\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0b \x01(\x04H\n\x88\x01\x01\x12\x45\n\x06status\x18\x0c \x01(\x0e\x32\x30.cln.SendpayFailureData.SendpayFailureDataStatusH\x0b\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x0c\x88\x01\x01\x12\x12\n\x05label\x18\x0e \x01(\tH\r\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0f \x01(\tH\x0e\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x10 \x01(\tH\x0f\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x11 \x01(\tH\x10\x88\x01\x01\x12\x17\n\nerroronion\x18\x12 \x01(\x0cH\x11\x88\x01\x01\x12\x17\n\nonionreply\x18\x13 \x01(\x0cH\x12\x88\x01\x01\x12\x19\n\x0c\x65rring_index\x18\x14 \x01(\rH\x13\x88\x01\x01\x12\x15\n\x08\x66\x61ilcode\x18\x15 \x01(\rH\x14\x88\x01\x01\x12\x19\n\x0c\x66\x61ilcodename\x18\x16 \x01(\tH\x15\x88\x01\x01\x12\x18\n\x0b\x65rring_node\x18\x17 \x01(\x0cH\x16\x88\x01\x01\x12\x1b\n\x0e\x65rring_channel\x18\x18 \x01(\tH\x17\x88\x01\x01\x12\x1d\n\x10\x65rring_direction\x18\x19 \x01(\rH\x18\x88\x01\x01\x12\x18\n\x0braw_message\x18\x1a \x01(\x0cH\x19\x88\x01\x01\"A\n\x18SendpayFailureDataStatus\x12\n\n\x06\x46\x41ILED\x10\x00\x12\x0b\n\x07PENDING\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x10\n\x0e_created_indexB\x05\n\x03_idB\x0f\n\r_payment_hashB\n\n\x08_groupidB\x10\n\x0e_updated_indexB\t\n\x07_partidB\x0e\n\x0c_destinationB\x0e\n\x0c_amount_msatB\x13\n\x11_amount_sent_msatB\r\n\x0b_created_atB\x0f\n\r_completed_atB\t\n\x07_statusB\x13\n\x11_payment_preimageB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_descriptionB\r\n\x0b_erroronionB\r\n\x0b_onionreplyB\x0f\n\r_erring_indexB\x0b\n\t_failcodeB\x0f\n\r_failcodenameB\x0e\n\x0c_erring_nodeB\x11\n\x0f_erring_channelB\x13\n\x11_erring_directionB\x0e\n\x0c_raw_message\"\x1d\n\x1bStreamSendPaySuccessRequest\"\xcc\x05\n\x1aSendPaySuccessNotification\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\n\n\x02id\x18\x02 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x0f\n\x07groupid\x18\x04 \x01(\x04\x12\x1a\n\rupdated_index\x18\x05 \x01(\x04H\x00\x88\x01\x01\x12\x13\n\x06partid\x18\x06 \x01(\x04H\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x07 \x01(\x0cH\x02\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12%\n\x10\x61mount_sent_msat\x18\t \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\ncreated_at\x18\n \x01(\x04\x12\x19\n\x0c\x63ompleted_at\x18\x0b \x01(\x04H\x04\x88\x01\x01\x12\x44\n\x06status\x18\x0c \x01(\x0e\x32\x34.cln.SendPaySuccessNotification.SendpaySuccessStatus\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x05\x88\x01\x01\x12\x12\n\x05label\x18\x0e \x01(\tH\x06\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0f \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x10 \x01(\tH\x08\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x11 \x01(\tH\t\x88\x01\x01\x12\x17\n\nerroronion\x18\x12 \x01(\x0cH\n\x88\x01\x01\"$\n\x14SendpaySuccessStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x42\x10\n\x0e_updated_indexB\t\n\x07_partidB\x0e\n\x0c_destinationB\x0e\n\x0c_amount_msatB\x0f\n\r_completed_atB\x13\n\x11_payment_preimageB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_descriptionB\r\n\x0b_erroronion\"\x17\n\x15StreamShutdownRequest\"\x16\n\x14ShutdownNotification\"\x16\n\x14StreamWarningRequest\"\xae\x01\n\x13WarningNotification\x12\x34\n\x05level\x18\x01 \x01(\x0e\x32%.cln.WarningNotification.WarningLevel\x12\x0c\n\x04time\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\t\x12\x0e\n\x06source\x18\x04 \x01(\t\x12\x0b\n\x03log\x18\x05 \x01(\t\"#\n\x0cWarningLevel\x12\x08\n\x04WARN\x10\x00\x12\t\n\x05\x45RROR\x10\x01\"\x19\n\x17StreamPayPartEndRequest\"\xf1\x03\n\x16PayPartEndNotification\x12<\n\x06status\x18\x01 \x01(\x0e\x32,.cln.PayPartEndNotification.PayPartEndStatus\x12\x10\n\x08\x64uration\x18\x02 \x01(\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x0f\n\x07groupid\x18\x04 \x01(\x04\x12\x0e\n\x06partid\x18\x05 \x01(\x04\x12\x17\n\nfailed_msg\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12\x1b\n\x0e\x66\x61iled_node_id\x18\x07 \x01(\x0cH\x01\x88\x01\x01\x12$\n\x17\x66\x61iled_short_channel_id\x18\x08 \x01(\tH\x02\x88\x01\x01\x12\x1d\n\x10\x66\x61iled_direction\x18\t \x01(\rH\x03\x88\x01\x01\x12\x17\n\nerror_code\x18\n \x01(\rH\x04\x88\x01\x01\x12\x1a\n\rerror_message\x18\x0b \x01(\tH\x05\x88\x01\x01\",\n\x10PayPartEndStatus\x12\x0b\n\x07SUCCESS\x10\x00\x12\x0b\n\x07\x46\x41ILURE\x10\x01\x42\r\n\x0b_failed_msgB\x11\n\x0f_failed_node_idB\x1a\n\x18_failed_short_channel_idB\x13\n\x11_failed_directionB\r\n\x0b_error_codeB\x10\n\x0e_error_message\"\x1b\n\x19StreamPayPartStartRequest\"\xc2\x01\n\x18PayPartStartNotification\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x0f\n\x07groupid\x18\x02 \x01(\x04\x12\x0e\n\x06partid\x18\x03 \x01(\x04\x12\'\n\x12total_payment_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12!\n\x0c\x61ttempt_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x04hops\x18\x06 \x03(\x0b\x32\x15.cln.PayPartStartHops\"\x9f\x01\n\x10PayPartStartHops\x12\x11\n\tnext_node\x18\x01 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x02 \x01(\t\x12\x11\n\tdirection\x18\x03 \x01(\r\x12$\n\x0f\x63hannel_in_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x63hannel_out_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"\x1a\n\x18StreamRecklessLogRequest\"\xda\x01\n\x17RecklessLogNotification\x12<\n\x05level\x18\x01 \x01(\x0e\x32-.cln.RecklessLogNotification.RecklessLogLevel\x12\x0b\n\x03log\x18\x02 \x01(\t\x12\x0c\n\x04time\x18\x03 \x01(\t\x12\x11\n\ttimestamp\x18\x04 \x01(\t\"S\n\x10RecklessLogLevel\x12\x06\n\x02IO\x10\x00\x12\t\n\x05TRACE\x10\x01\x12\t\n\x05\x44\x45\x42UG\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\x0b\n\x07UNUSUAL\x10\x04\x12\n\n\x06\x42ROKEN\x10\x05\x32\xcei\n\x04Node\x12\x36\n\x07Getinfo\x12\x13.cln.GetinfoRequest\x1a\x14.cln.GetinfoResponse\"\x00\x12<\n\tListPeers\x12\x15.cln.ListpeersRequest\x1a\x16.cln.ListpeersResponse\"\x00\x12<\n\tListFunds\x12\x15.cln.ListfundsRequest\x1a\x16.cln.ListfundsResponse\"\x00\x12\x36\n\x07SendPay\x12\x13.cln.SendpayRequest\x1a\x14.cln.SendpayResponse\"\x00\x12\x45\n\x0cListChannels\x12\x18.cln.ListchannelsRequest\x1a\x19.cln.ListchannelsResponse\"\x00\x12<\n\tAddGossip\x12\x15.cln.AddgossipRequest\x1a\x16.cln.AddgossipResponse\"\x00\x12H\n\rAddPsbtOutput\x12\x19.cln.AddpsbtoutputRequest\x1a\x1a.cln.AddpsbtoutputResponse\"\x00\x12H\n\rAutoCleanOnce\x12\x19.cln.AutocleanonceRequest\x1a\x1a.cln.AutocleanonceResponse\"\x00\x12N\n\x0f\x41utoCleanStatus\x12\x1b.cln.AutocleanstatusRequest\x1a\x1c.cln.AutocleanstatusResponse\"\x00\x12\x45\n\x0c\x43heckMessage\x12\x18.cln.CheckmessageRequest\x1a\x19.cln.CheckmessageResponse\"\x00\x12\x30\n\x05\x43lose\x12\x11.cln.CloseRequest\x1a\x12.cln.CloseResponse\"\x00\x12:\n\x0b\x43onnectPeer\x12\x13.cln.ConnectRequest\x1a\x14.cln.ConnectResponse\"\x00\x12H\n\rCreateInvoice\x12\x19.cln.CreateinvoiceRequest\x1a\x1a.cln.CreateinvoiceResponse\"\x00\x12<\n\tDatastore\x12\x15.cln.DatastoreRequest\x1a\x16.cln.DatastoreResponse\"\x00\x12K\n\x0e\x44\x61tastoreUsage\x12\x1a.cln.DatastoreusageRequest\x1a\x1b.cln.DatastoreusageResponse\"\x00\x12\x42\n\x0b\x43reateOnion\x12\x17.cln.CreateonionRequest\x1a\x18.cln.CreateonionResponse\"\x00\x12\x45\n\x0c\x44\x65lDatastore\x12\x18.cln.DeldatastoreRequest\x1a\x19.cln.DeldatastoreResponse\"\x00\x12?\n\nDelInvoice\x12\x16.cln.DelinvoiceRequest\x1a\x17.cln.DelinvoiceResponse\"\x00\x12Q\n\x10\x44\x65vForgetChannel\x12\x1c.cln.DevforgetchannelRequest\x1a\x1d.cln.DevforgetchannelResponse\"\x00\x12Q\n\x10\x45mergencyRecover\x12\x1c.cln.EmergencyrecoverRequest\x1a\x1d.cln.EmergencyrecoverResponse\"\x00\x12\x66\n\x17GetEmergencyRecoverData\x12#.cln.GetemergencyrecoverdataRequest\x1a$.cln.GetemergencyrecoverdataResponse\"\x00\x12\x45\n\x0c\x45xposeSecret\x12\x18.cln.ExposesecretRequest\x1a\x19.cln.ExposesecretResponse\"\x00\x12\x36\n\x07Recover\x12\x13.cln.RecoverRequest\x1a\x14.cln.RecoverResponse\"\x00\x12K\n\x0eRecoverChannel\x12\x1a.cln.RecoverchannelRequest\x1a\x1b.cln.RecoverchannelResponse\"\x00\x12\x36\n\x07Invoice\x12\x13.cln.InvoiceRequest\x1a\x14.cln.InvoiceResponse\"\x00\x12Q\n\x14\x43reateInvoiceRequest\x12\x1a.cln.InvoicerequestRequest\x1a\x1b.cln.InvoicerequestResponse\"\x00\x12`\n\x15\x44isableInvoiceRequest\x12!.cln.DisableinvoicerequestRequest\x1a\".cln.DisableinvoicerequestResponse\"\x00\x12Z\n\x13ListInvoiceRequests\x12\x1f.cln.ListinvoicerequestsRequest\x1a .cln.ListinvoicerequestsResponse\"\x00\x12H\n\rListDatastore\x12\x19.cln.ListdatastoreRequest\x1a\x1a.cln.ListdatastoreResponse\"\x00\x12\x45\n\x0cListInvoices\x12\x18.cln.ListinvoicesRequest\x1a\x19.cln.ListinvoicesResponse\"\x00\x12<\n\tSendOnion\x12\x15.cln.SendonionRequest\x1a\x16.cln.SendonionResponse\"\x00\x12\x45\n\x0cListSendPays\x12\x18.cln.ListsendpaysRequest\x1a\x19.cln.ListsendpaysResponse\"\x00\x12Q\n\x10ListTransactions\x12\x1c.cln.ListtransactionsRequest\x1a\x1d.cln.ListtransactionsResponse\"\x00\x12?\n\nMakeSecret\x12\x16.cln.MakesecretRequest\x1a\x17.cln.MakesecretResponse\"\x00\x12*\n\x03Pay\x12\x0f.cln.PayRequest\x1a\x10.cln.PayResponse\"\x00\x12<\n\tListNodes\x12\x15.cln.ListnodesRequest\x1a\x16.cln.ListnodesResponse\"\x00\x12K\n\x0eWaitAnyInvoice\x12\x1a.cln.WaitanyinvoiceRequest\x1a\x1b.cln.WaitanyinvoiceResponse\"\x00\x12\x42\n\x0bWaitInvoice\x12\x17.cln.WaitinvoiceRequest\x1a\x18.cln.WaitinvoiceResponse\"\x00\x12\x42\n\x0bWaitSendPay\x12\x17.cln.WaitsendpayRequest\x1a\x18.cln.WaitsendpayResponse\"\x00\x12\x36\n\x07NewAddr\x12\x13.cln.NewaddrRequest\x1a\x14.cln.NewaddrResponse\"\x00\x12\x39\n\x08Withdraw\x12\x14.cln.WithdrawRequest\x1a\x15.cln.WithdrawResponse\"\x00\x12\x36\n\x07KeySend\x12\x13.cln.KeysendRequest\x1a\x14.cln.KeysendResponse\"\x00\x12\x39\n\x08\x46undPsbt\x12\x14.cln.FundpsbtRequest\x1a\x15.cln.FundpsbtResponse\"\x00\x12\x39\n\x08SendPsbt\x12\x14.cln.SendpsbtRequest\x1a\x15.cln.SendpsbtResponse\"\x00\x12\x39\n\x08SignPsbt\x12\x14.cln.SignpsbtRequest\x1a\x15.cln.SignpsbtResponse\"\x00\x12\x39\n\x08UtxoPsbt\x12\x14.cln.UtxopsbtRequest\x1a\x15.cln.UtxopsbtResponse\"\x00\x12<\n\tTxDiscard\x12\x15.cln.TxdiscardRequest\x1a\x16.cln.TxdiscardResponse\"\x00\x12<\n\tTxPrepare\x12\x15.cln.TxprepareRequest\x1a\x16.cln.TxprepareResponse\"\x00\x12\x33\n\x06TxSend\x12\x12.cln.TxsendRequest\x1a\x13.cln.TxsendResponse\"\x00\x12Q\n\x10ListPeerChannels\x12\x1c.cln.ListpeerchannelsRequest\x1a\x1d.cln.ListpeerchannelsResponse\"\x00\x12W\n\x12ListClosedChannels\x12\x1e.cln.ListclosedchannelsRequest\x1a\x1f.cln.ListclosedchannelsResponse\"\x00\x12\x33\n\x06\x44\x65\x63ode\x12\x12.cln.DecodeRequest\x1a\x13.cln.DecodeResponse\"\x00\x12\x33\n\x06\x44\x65lPay\x12\x12.cln.DelpayRequest\x1a\x13.cln.DelpayResponse\"\x00\x12?\n\nDelForward\x12\x16.cln.DelforwardRequest\x1a\x17.cln.DelforwardResponse\"\x00\x12\x45\n\x0c\x44isableOffer\x12\x18.cln.DisableofferRequest\x1a\x19.cln.DisableofferResponse\"\x00\x12\x42\n\x0b\x45nableOffer\x12\x17.cln.EnableofferRequest\x1a\x18.cln.EnableofferResponse\"\x00\x12?\n\nDisconnect\x12\x16.cln.DisconnectRequest\x1a\x17.cln.DisconnectResponse\"\x00\x12\x39\n\x08\x46\x65\x65rates\x12\x14.cln.FeeratesRequest\x1a\x15.cln.FeeratesResponse\"\x00\x12\x42\n\x0b\x46\x65tchBip353\x12\x17.cln.Fetchbip353Request\x1a\x18.cln.Fetchbip353Response\"\x00\x12\x45\n\x0c\x46\x65tchInvoice\x12\x18.cln.FetchinvoiceRequest\x1a\x19.cln.FetchinvoiceResponse\"\x00\x12\x63\n\x16\x43\x61ncelRecurringInvoice\x12\".cln.CancelrecurringinvoiceRequest\x1a#.cln.CancelrecurringinvoiceResponse\"\x00\x12T\n\x11\x46undChannelCancel\x12\x1d.cln.FundchannelCancelRequest\x1a\x1e.cln.FundchannelCancelResponse\"\x00\x12Z\n\x13\x46undChannelComplete\x12\x1f.cln.FundchannelCompleteRequest\x1a .cln.FundchannelCompleteResponse\"\x00\x12\x42\n\x0b\x46undChannel\x12\x17.cln.FundchannelRequest\x1a\x18.cln.FundchannelResponse\"\x00\x12Q\n\x10\x46undChannelStart\x12\x1c.cln.FundchannelStartRequest\x1a\x1d.cln.FundchannelStartResponse\"\x00\x12\x33\n\x06GetLog\x12\x12.cln.GetlogRequest\x1a\x13.cln.GetlogResponse\"\x00\x12\x45\n\x0c\x46underUpdate\x12\x18.cln.FunderupdateRequest\x1a\x19.cln.FunderupdateResponse\"\x00\x12\x39\n\x08GetRoute\x12\x14.cln.GetrouteRequest\x1a\x15.cln.GetrouteResponse\"\x00\x12H\n\rListAddresses\x12\x19.cln.ListaddressesRequest\x1a\x1a.cln.ListaddressesResponse\"\x00\x12\x45\n\x0cListForwards\x12\x18.cln.ListforwardsRequest\x1a\x19.cln.ListforwardsResponse\"\x00\x12?\n\nListOffers\x12\x16.cln.ListoffersRequest\x1a\x17.cln.ListoffersResponse\"\x00\x12\x39\n\x08ListPays\x12\x14.cln.ListpaysRequest\x1a\x15.cln.ListpaysResponse\"\x00\x12<\n\tListHtlcs\x12\x15.cln.ListhtlcsRequest\x1a\x16.cln.ListhtlcsResponse\"\x00\x12Q\n\x10MultiFundChannel\x12\x1c.cln.MultifundchannelRequest\x1a\x1d.cln.MultifundchannelResponse\"\x00\x12H\n\rMultiWithdraw\x12\x19.cln.MultiwithdrawRequest\x1a\x1a.cln.MultiwithdrawResponse\"\x00\x12\x30\n\x05Offer\x12\x11.cln.OfferRequest\x1a\x12.cln.OfferResponse\"\x00\x12Q\n\x10OpenChannelAbort\x12\x1c.cln.OpenchannelAbortRequest\x1a\x1d.cln.OpenchannelAbortResponse\"\x00\x12N\n\x0fOpenChannelBump\x12\x1b.cln.OpenchannelBumpRequest\x1a\x1c.cln.OpenchannelBumpResponse\"\x00\x12N\n\x0fOpenChannelInit\x12\x1b.cln.OpenchannelInitRequest\x1a\x1c.cln.OpenchannelInitResponse\"\x00\x12T\n\x11OpenChannelSigned\x12\x1d.cln.OpenchannelSignedRequest\x1a\x1e.cln.OpenchannelSignedResponse\"\x00\x12T\n\x11OpenChannelUpdate\x12\x1d.cln.OpenchannelUpdateRequest\x1a\x1e.cln.OpenchannelUpdateResponse\"\x00\x12-\n\x04Ping\x12\x10.cln.PingRequest\x1a\x11.cln.PingResponse\"\x00\x12\x33\n\x06Plugin\x12\x12.cln.PluginRequest\x1a\x13.cln.PluginResponse\"\x00\x12H\n\rRenePayStatus\x12\x19.cln.RenepaystatusRequest\x1a\x1a.cln.RenepaystatusResponse\"\x00\x12\x36\n\x07RenePay\x12\x13.cln.RenepayRequest\x1a\x14.cln.RenepayResponse\"\x00\x12H\n\rReserveInputs\x12\x19.cln.ReserveinputsRequest\x1a\x1a.cln.ReserveinputsResponse\"\x00\x12H\n\rSendCustomMsg\x12\x19.cln.SendcustommsgRequest\x1a\x1a.cln.SendcustommsgResponse\"\x00\x12\x42\n\x0bSendInvoice\x12\x17.cln.SendinvoiceRequest\x1a\x18.cln.SendinvoiceResponse\"\x00\x12?\n\nSetChannel\x12\x16.cln.SetchannelRequest\x1a\x17.cln.SetchannelResponse\"\x00\x12<\n\tSetConfig\x12\x15.cln.SetconfigRequest\x1a\x16.cln.SetconfigResponse\"\x00\x12K\n\x0eSetPsbtVersion\x12\x1a.cln.SetpsbtversionRequest\x1a\x1b.cln.SetpsbtversionResponse\"\x00\x12\x42\n\x0bSignInvoice\x12\x17.cln.SigninvoiceRequest\x1a\x18.cln.SigninvoiceResponse\"\x00\x12\x42\n\x0bSignMessage\x12\x17.cln.SignmessageRequest\x1a\x18.cln.SignmessageResponse\"\x00\x12?\n\nSpliceInit\x12\x16.cln.SpliceInitRequest\x1a\x17.cln.SpliceInitResponse\"\x00\x12\x45\n\x0cSpliceSigned\x12\x18.cln.SpliceSignedRequest\x1a\x19.cln.SpliceSignedResponse\"\x00\x12\x45\n\x0cSpliceUpdate\x12\x18.cln.SpliceUpdateRequest\x1a\x19.cln.SpliceUpdateResponse\"\x00\x12\x39\n\x08SpliceIn\x12\x14.cln.SpliceinRequest\x1a\x15.cln.SpliceinResponse\"\x00\x12<\n\tSpliceOut\x12\x15.cln.SpliceoutRequest\x1a\x16.cln.SpliceoutResponse\"\x00\x12<\n\tDevSplice\x12\x15.cln.DevspliceRequest\x1a\x16.cln.DevspliceResponse\"\x00\x12N\n\x0fUnreserveInputs\x12\x1b.cln.UnreserveinputsRequest\x1a\x1c.cln.UnreserveinputsResponse\"\x00\x12H\n\rUpgradeWallet\x12\x19.cln.UpgradewalletRequest\x1a\x1a.cln.UpgradewalletResponse\"\x00\x12N\n\x0fWaitBlockHeight\x12\x1b.cln.WaitblockheightRequest\x1a\x1c.cln.WaitblockheightResponse\"\x00\x12-\n\x04Wait\x12\x10.cln.WaitRequest\x1a\x11.cln.WaitResponse\"\x00\x12\x42\n\x0bListConfigs\x12\x17.cln.ListconfigsRequest\x1a\x18.cln.ListconfigsResponse\"\x00\x12-\n\x04Stop\x12\x10.cln.StopRequest\x1a\x11.cln.StopResponse\"\x00\x12-\n\x04Help\x12\x10.cln.HelpRequest\x1a\x11.cln.HelpResponse\"\x00\x12T\n\x11PreApproveKeysend\x12\x1d.cln.PreapprovekeysendRequest\x1a\x1e.cln.PreapprovekeysendResponse\"\x00\x12T\n\x11PreApproveInvoice\x12\x1d.cln.PreapproveinvoiceRequest\x1a\x1e.cln.PreapproveinvoiceResponse\"\x00\x12\x45\n\x0cStaticBackup\x12\x18.cln.StaticbackupRequest\x1a\x19.cln.StaticbackupResponse\"\x00\x12N\n\x0f\x42kprChannelsApy\x12\x1b.cln.BkprchannelsapyRequest\x1a\x1c.cln.BkprchannelsapyResponse\"\x00\x12T\n\x11\x42kprDumpIncomeCsv\x12\x1d.cln.BkprdumpincomecsvRequest\x1a\x1e.cln.BkprdumpincomecsvResponse\"\x00\x12\x42\n\x0b\x42kprInspect\x12\x17.cln.BkprinspectRequest\x1a\x18.cln.BkprinspectResponse\"\x00\x12`\n\x15\x42kprListAccountEvents\x12!.cln.BkprlistaccounteventsRequest\x1a\".cln.BkprlistaccounteventsResponse\"\x00\x12Q\n\x10\x42kprListBalances\x12\x1c.cln.BkprlistbalancesRequest\x1a\x1d.cln.BkprlistbalancesResponse\"\x00\x12K\n\x0e\x42kprListIncome\x12\x1a.cln.BkprlistincomeRequest\x1a\x1b.cln.BkprlistincomeResponse\"\x00\x12{\n\x1e\x42kprEditDescriptionByPaymentId\x12*.cln.BkpreditdescriptionbypaymentidRequest\x1a+.cln.BkpreditdescriptionbypaymentidResponse\"\x00\x12x\n\x1d\x42kprEditDescriptionByOutpoint\x12).cln.BkpreditdescriptionbyoutpointRequest\x1a*.cln.BkpreditdescriptionbyoutpointResponse\"\x00\x12?\n\nBkprReport\x12\x16.cln.BkprreportRequest\x1a\x17.cln.BkprreportResponse\"\x00\x12H\n\rBlacklistRune\x12\x19.cln.BlacklistruneRequest\x1a\x1a.cln.BlacklistruneResponse\"\x00\x12<\n\tCheckRune\x12\x15.cln.CheckruneRequest\x1a\x16.cln.CheckruneResponse\"\x00\x12?\n\nCreateRune\x12\x16.cln.CreateruneRequest\x1a\x17.cln.CreateruneResponse\"\x00\x12<\n\tShowRunes\x12\x15.cln.ShowrunesRequest\x1a\x16.cln.ShowrunesResponse\"\x00\x12Q\n\x10\x41skReneUnreserve\x12\x1c.cln.AskreneunreserveRequest\x1a\x1d.cln.AskreneunreserveResponse\"\x00\x12T\n\x11\x41skReneListLayers\x12\x1d.cln.AskrenelistlayersRequest\x1a\x1e.cln.AskrenelistlayersResponse\"\x00\x12W\n\x12\x41skReneCreateLayer\x12\x1e.cln.AskrenecreatelayerRequest\x1a\x1f.cln.AskrenecreatelayerResponse\"\x00\x12W\n\x12\x41skReneRemoveLayer\x12\x1e.cln.AskreneremovelayerRequest\x1a\x1f.cln.AskreneremovelayerResponse\"\x00\x12o\n\x1a\x41skReneRemoveChannelUpdate\x12&.cln.AskreneremovechannelupdateRequest\x1a\'.cln.AskreneremovechannelupdateResponse\"\x00\x12K\n\x0e\x41skReneReserve\x12\x1a.cln.AskrenereserveRequest\x1a\x1b.cln.AskrenereserveResponse\"\x00\x12?\n\nAskReneAge\x12\x16.cln.AskreneageRequest\x1a\x17.cln.AskreneageResponse\"\x00\x12<\n\tGetRoutes\x12\x15.cln.GetroutesRequest\x1a\x16.cln.GetroutesResponse\"\x00\x12W\n\x12\x41skReneDisableNode\x12\x1e.cln.AskrenedisablenodeRequest\x1a\x1f.cln.AskrenedisablenodeResponse\"\x00\x12]\n\x14\x41skReneInformChannel\x12 .cln.AskreneinformchannelRequest\x1a!.cln.AskreneinformchannelResponse\"\x00\x12]\n\x14\x41skReneCreateChannel\x12 .cln.AskrenecreatechannelRequest\x1a!.cln.AskrenecreatechannelResponse\"\x00\x12]\n\x14\x41skReneUpdateChannel\x12 .cln.AskreneupdatechannelRequest\x1a!.cln.AskreneupdatechannelResponse\"\x00\x12W\n\x12\x41skReneBiasChannel\x12\x1e.cln.AskrenebiaschannelRequest\x1a\x1f.cln.AskrenebiaschannelResponse\"\x00\x12N\n\x0f\x41skreneBiasNode\x12\x1b.cln.AskrenebiasnodeRequest\x1a\x1c.cln.AskrenebiasnodeResponse\"\x00\x12\x66\n\x17\x41skReneListReservations\x12#.cln.AskrenelistreservationsRequest\x1a$.cln.AskrenelistreservationsResponse\"\x00\x12W\n\x12InjectPaymentOnion\x12\x1e.cln.InjectpaymentonionRequest\x1a\x1f.cln.InjectpaymentonionResponse\"\x00\x12W\n\x12InjectOnionMessage\x12\x1e.cln.InjectonionmessageRequest\x1a\x1f.cln.InjectonionmessageResponse\"\x00\x12-\n\x04Xpay\x12\x10.cln.XpayRequest\x1a\x11.cln.XpayResponse\"\x00\x12W\n\x12SignMessageWithKey\x12\x1e.cln.SignmessagewithkeyRequest\x1a\x1f.cln.SignmessagewithkeyResponse\"\x00\x12Q\n\x10ListChannelMoves\x12\x1c.cln.ListchannelmovesRequest\x1a\x1d.cln.ListchannelmovesResponse\"\x00\x12K\n\x0eListChainMoves\x12\x1a.cln.ListchainmovesRequest\x1a\x1b.cln.ListchainmovesResponse\"\x00\x12T\n\x11ListNetworkEvents\x12\x1d.cln.ListnetworkeventsRequest\x1a\x1e.cln.ListnetworkeventsResponse\"\x00\x12N\n\x0f\x44\x65lNetworkEvent\x12\x1b.cln.DelnetworkeventRequest\x1a\x1c.cln.DelnetworkeventResponse\"\x00\x12Z\n\x13\x43lnrestRegisterPath\x12\x1f.cln.ClnrestregisterpathRequest\x1a .cln.ClnrestregisterpathResponse\"\x00\x12T\n\x11ListCurrencyRates\x12\x1d.cln.ListcurrencyratesRequest\x1a\x1e.cln.ListcurrencyratesResponse\"\x00\x12N\n\x0f\x43urrencyConvert\x12\x1b.cln.CurrencyconvertRequest\x1a\x1c.cln.CurrencyconvertResponse\"\x00\x12\x45\n\x0c\x43urrencyRate\x12\x18.cln.CurrencyrateRequest\x1a\x19.cln.CurrencyrateResponse\"\x00\x12?\n\nSendAmount\x12\x16.cln.SendamountRequest\x1a\x17.cln.SendamountResponse\"\x00\x12\x42\n\x0b\x43reateProof\x12\x17.cln.CreateproofRequest\x1a\x18.cln.CreateproofResponse\"\x00\x12\x39\n\x08Xkeysend\x12\x14.cln.XkeysendRequest\x1a\x15.cln.XkeysendResponse\"\x00\x12\x39\n\x08Graceful\x12\x14.cln.GracefulRequest\x1a\x15.cln.GracefulResponse\"\x00\x12\x39\n\x08Reckless\x12\x14.cln.RecklessRequest\x1a\x15.cln.RecklessResponse\"\x00\x12\x63\n\x18SubscribeBalanceSnapshot\x12!.cln.StreamBalanceSnapshotRequest\x1a .cln.BalanceSnapshotNotification\"\x00\x30\x01\x12T\n\x13SubscribeBlockAdded\x12\x1c.cln.StreamBlockAddedRequest\x1a\x1b.cln.BlockAddedNotification\"\x00\x30\x01\x12i\n\x1aSubscribeChannelOpenFailed\x12#.cln.StreamChannelOpenFailedRequest\x1a\".cln.ChannelOpenFailedNotification\"\x00\x30\x01\x12]\n\x16SubscribeChannelOpened\x12\x1f.cln.StreamChannelOpenedRequest\x1a\x1e.cln.ChannelOpenedNotification\"\x00\x30\x01\x12o\n\x1cSubscribeChannelStateChanged\x12%.cln.StreamChannelStateChangedRequest\x1a$.cln.ChannelStateChangedNotification\"\x00\x30\x01\x12O\n\x10SubscribeConnect\x12\x19.cln.StreamConnectRequest\x1a\x1c.cln.PeerConnectNotification\"\x00\x30\x01\x12Z\n\x15SubscribeCoinMovement\x12\x1e.cln.StreamCoinMovementRequest\x1a\x1d.cln.CoinMovementNotification\"\x00\x30\x01\x12Q\n\x12SubscribeCustomMsg\x12\x1b.cln.StreamCustomMsgRequest\x1a\x1a.cln.CustomMsgNotification\"\x00\x30\x01\x12i\n\x1aSubscribeDeprecatedOneshot\x12#.cln.StreamDeprecatedOneshotRequest\x1a\".cln.DeprecatedOneshotNotification\"\x00\x30\x01\x12T\n\x13SubscribeDisconnect\x12\x1c.cln.StreamDisconnectRequest\x1a\x1b.cln.DisconnectNotification\"\x00\x30\x01\x12Z\n\x15SubscribeForwardEvent\x12\x1e.cln.StreamForwardEventRequest\x1a\x1d.cln.ForwardEventNotification\"\x00\x30\x01\x12\x63\n\x18SubscribeInvoiceCreation\x12!.cln.StreamInvoiceCreationRequest\x1a .cln.InvoiceCreationNotification\"\x00\x30\x01\x12`\n\x17SubscribeInvoicePayment\x12 .cln.StreamInvoicePaymentRequest\x1a\x1f.cln.InvoicePaymentNotification\"\x00\x30\x01\x12?\n\x0cSubscribeLog\x12\x15.cln.StreamLogRequest\x1a\x14.cln.LogNotification\"\x00\x30\x01\x12{\n SubscribeOnionMessageForwardFail\x12).cln.StreamOnionMessageForwardFailRequest\x1a(.cln.OnionMessageForwardFailNotification\"\x00\x30\x01\x12o\n\x1cSubscribeOpenChannelPeerSigs\x12%.cln.StreamOpenChannelPeerSigsRequest\x1a$.cln.OpenChannelPeerSigsNotification\"\x00\x30\x01\x12]\n\x16SubscribePluginStarted\x12\x1f.cln.StreamPluginStartedRequest\x1a\x1e.cln.PluginStartedNotification\"\x00\x30\x01\x12]\n\x16SubscribePluginStopped\x12\x1f.cln.StreamPluginStoppedRequest\x1a\x1e.cln.PluginStoppedNotification\"\x00\x30\x01\x12`\n\x17SubscribeSendPayFailure\x12 .cln.StreamSendPayFailureRequest\x1a\x1f.cln.SendPayFailureNotification\"\x00\x30\x01\x12`\n\x17SubscribeSendPaySuccess\x12 .cln.StreamSendPaySuccessRequest\x1a\x1f.cln.SendPaySuccessNotification\"\x00\x30\x01\x12N\n\x11SubscribeShutdown\x12\x1a.cln.StreamShutdownRequest\x1a\x19.cln.ShutdownNotification\"\x00\x30\x01\x12K\n\x10SubscribeWarning\x12\x19.cln.StreamWarningRequest\x1a\x18.cln.WarningNotification\"\x00\x30\x01\x12T\n\x13SubscribePayPartEnd\x12\x1c.cln.StreamPayPartEndRequest\x1a\x1b.cln.PayPartEndNotification\"\x00\x30\x01\x12Z\n\x15SubscribePayPartStart\x12\x1e.cln.StreamPayPartStartRequest\x1a\x1d.cln.PayPartStartNotification\"\x00\x30\x01\x12W\n\x14SubscribeRecklessLog\x12\x1d.cln.StreamRecklessLogRequest\x1a\x1c.cln.RecklessLogNotification\"\x00\x30\x01\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\nnode.proto\x12\x03\x63ln\x1a\x10primitives.proto\"\x10\n\x0eGetinfoRequest\"\xb1\x04\n\x0fGetinfoResponse\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\r\n\x05\x61lias\x18\x02 \x01(\t\x12\r\n\x05\x63olor\x18\x03 \x01(\x0c\x12\x11\n\tnum_peers\x18\x04 \x01(\r\x12\x1c\n\x14num_pending_channels\x18\x05 \x01(\r\x12\x1b\n\x13num_active_channels\x18\x06 \x01(\r\x12\x1d\n\x15num_inactive_channels\x18\x07 \x01(\r\x12\x0f\n\x07version\x18\x08 \x01(\t\x12\x15\n\rlightning_dir\x18\t \x01(\t\x12\x32\n\x0cour_features\x18\n \x01(\x0b\x32\x17.cln.GetinfoOurFeaturesH\x00\x88\x01\x01\x12\x13\n\x0b\x62lockheight\x18\x0b \x01(\r\x12\x0f\n\x07network\x18\x0c \x01(\t\x12(\n\x13\x66\x65\x65s_collected_msat\x18\r \x01(\x0b\x32\x0b.cln.Amount\x12$\n\x07\x61\x64\x64ress\x18\x0e \x03(\x0b\x32\x13.cln.GetinfoAddress\x12$\n\x07\x62inding\x18\x0f \x03(\x0b\x32\x13.cln.GetinfoBinding\x12\"\n\x15warning_bitcoind_sync\x18\x10 \x01(\tH\x01\x88\x01\x01\x12$\n\x17warning_lightningd_sync\x18\x11 \x01(\tH\x02\x88\x01\x01\x42\x0f\n\r_our_featuresB\x18\n\x16_warning_bitcoind_syncB\x1a\n\x18_warning_lightningd_sync\"\xc4\x01\n\x0eGetinfoAddress\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.GetinfoAddress.GetinfoAddressType\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x00\x88\x01\x01\"G\n\x12GetinfoAddressType\x12\x07\n\x03\x44NS\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x42\n\n\x08_address\"\xac\x02\n\x0eGetinfoBinding\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.GetinfoBinding.GetinfoBindingType\x12\x14\n\x07\x61\x64\x64ress\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04port\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06socket\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x14\n\x07subtype\x18\x05 \x01(\tH\x03\x88\x01\x01\"_\n\x12GetinfoBindingType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x12\r\n\tWEBSOCKET\x10\x05\x42\n\n\x08_addressB\x07\n\x05_portB\t\n\x07_socketB\n\n\x08_subtype\"R\n\x12GetinfoOurFeatures\x12\x0c\n\x04init\x18\x01 \x01(\x0c\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x0f\n\x07\x63hannel\x18\x03 \x01(\x0c\x12\x0f\n\x07invoice\x18\x04 \x01(\x0c\"\xb5\x01\n\x10ListpeersRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x38\n\x05level\x18\x02 \x01(\x0e\x32$.cln.ListpeersRequest.ListpeersLevelH\x01\x88\x01\x01\"E\n\x0eListpeersLevel\x12\x06\n\x02IO\x10\x00\x12\t\n\x05\x44\x45\x42UG\x10\x01\x12\x08\n\x04INFO\x10\x02\x12\x0b\n\x07UNUSUAL\x10\x03\x12\t\n\x05TRACE\x10\x04\x42\x05\n\x03_idB\x08\n\x06_level\"7\n\x11ListpeersResponse\x12\"\n\x05peers\x18\x01 \x03(\x0b\x32\x13.cln.ListpeersPeers\"\xc9\x01\n\x0eListpeersPeers\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x11\n\tconnected\x18\x02 \x01(\x08\x12#\n\x03log\x18\x03 \x03(\x0b\x32\x16.cln.ListpeersPeersLog\x12\x0f\n\x07netaddr\x18\x05 \x03(\t\x12\x15\n\x08\x66\x65\x61tures\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12\x18\n\x0bremote_addr\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x0cnum_channels\x18\x08 \x01(\rB\x0b\n\t_featuresB\x0e\n\x0c_remote_addr\"\x88\x03\n\x11ListpeersPeersLog\x12?\n\titem_type\x18\x01 \x01(\x0e\x32,.cln.ListpeersPeersLog.ListpeersPeersLogType\x12\x18\n\x0bnum_skipped\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04time\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06source\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x10\n\x03log\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x07node_id\x18\x06 \x01(\x0cH\x04\x88\x01\x01\x12\x11\n\x04\x64\x61ta\x18\x07 \x01(\x0cH\x05\x88\x01\x01\"t\n\x15ListpeersPeersLogType\x12\x0b\n\x07SKIPPED\x10\x00\x12\n\n\x06\x42ROKEN\x10\x01\x12\x0b\n\x07UNUSUAL\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\t\n\x05\x44\x45\x42UG\x10\x04\x12\t\n\x05IO_IN\x10\x05\x12\n\n\x06IO_OUT\x10\x06\x12\t\n\x05TRACE\x10\x07\x42\x0e\n\x0c_num_skippedB\x07\n\x05_timeB\t\n\x07_sourceB\x06\n\x04_logB\n\n\x08_node_idB\x07\n\x05_data\"0\n\x10ListfundsRequest\x12\x12\n\x05spent\x18\x01 \x01(\x08H\x00\x88\x01\x01\x42\x08\n\x06_spent\"e\n\x11ListfundsResponse\x12&\n\x07outputs\x18\x01 \x03(\x0b\x32\x15.cln.ListfundsOutputs\x12(\n\x08\x63hannels\x18\x02 \x03(\x0b\x32\x16.cln.ListfundsChannels\"\x97\x02\n\x11ListfundsChannels\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12$\n\x0four_amount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66unding_txid\x18\x04 \x01(\x0c\x12\x16\n\x0e\x66unding_output\x18\x05 \x01(\r\x12\x11\n\tconnected\x18\x06 \x01(\x08\x12 \n\x05state\x18\x07 \x01(\x0e\x32\x11.cln.ChannelState\x12\x1d\n\x10short_channel_id\x18\x08 \x01(\tH\x00\x88\x01\x01\x12\x12\n\nchannel_id\x18\t \x01(\x0c\x42\x13\n\x11_short_channel_id\"\xb9\x03\n\x10ListfundsOutputs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06output\x18\x02 \x01(\r\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0cscriptpubkey\x18\x04 \x01(\x0c\x12\x14\n\x07\x61\x64\x64ress\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0credeemscript\x18\x06 \x01(\x0cH\x01\x88\x01\x01\x12<\n\x06status\x18\x07 \x01(\x0e\x32,.cln.ListfundsOutputs.ListfundsOutputsStatus\x12\x18\n\x0b\x62lockheight\x18\x08 \x01(\rH\x02\x88\x01\x01\x12\x10\n\x08reserved\x18\t \x01(\x08\x12\x1e\n\x11reserved_to_block\x18\n \x01(\rH\x03\x88\x01\x01\"Q\n\x16ListfundsOutputsStatus\x12\x0f\n\x0bUNCONFIRMED\x10\x00\x12\r\n\tCONFIRMED\x10\x01\x12\t\n\x05SPENT\x10\x02\x12\x0c\n\x08IMMATURE\x10\x03\x42\n\n\x08_addressB\x0f\n\r_redeemscriptB\x0e\n\x0c_blockheightB\x14\n\x12_reserved_to_block\"\xbb\x03\n\x0eSendpayRequest\x12 \n\x05route\x18\x01 \x03(\x0b\x32\x11.cln.SendpayRoute\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x12\n\x05label\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x1b\n\x0epayment_secret\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x13\n\x06partid\x18\x07 \x01(\x04H\x03\x88\x01\x01\x12\x14\n\x07groupid\x18\t \x01(\x04H\x04\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\x0b \x01(\x0cH\x06\x88\x01\x01\x12\x1d\n\x10payment_metadata\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\r \x01(\tH\x08\x88\x01\x01\x42\x08\n\x06_labelB\t\n\x07_bolt11B\x11\n\x0f_payment_secretB\t\n\x07_partidB\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x13\n\x11_payment_metadataB\x0e\n\x0c_description\"\x96\x05\n\x0fSendpayResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x07groupid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x32\n\x06status\x18\x04 \x01(\x0e\x32\".cln.SendpayResponse.SendpayStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06partid\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x14\n\x07message\x18\x0e \x01(\tH\x08\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0f \x01(\x04H\t\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\n\x88\x01\x01\"*\n\rSendpayStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x42\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\n\n\x08_messageB\x0f\n\r_completed_atB\x10\n\x0e_updated_index\"\xe6\x02\n\x0cSendpayRoute\x12\x0f\n\x02id\x18\x02 \x01(\x0cH\x00\x88\x01\x01\x12\x12\n\x05\x64\x65lay\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x14\n\x07\x63hannel\x18\x04 \x01(\tH\x02\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12!\n\x14short_channel_id_dir\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x18\n\x0bnode_id_out\x18\x07 \x01(\x0cH\x05\x88\x01\x01\x12)\n\x0f\x61mount_out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x15\n\x08\x63ltv_out\x18\t \x01(\rH\x07\x88\x01\x01\x42\x05\n\x03_idB\x08\n\x06_delayB\n\n\x08_channelB\x0e\n\x0c_amount_msatB\x17\n\x15_short_channel_id_dirB\x0e\n\x0c_node_id_outB\x12\n\x10_amount_out_msatB\x0b\n\t_cltv_out\"\x93\x01\n\x13ListchannelsRequest\x12\x1d\n\x10short_channel_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06source\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x42\x13\n\x11_short_channel_idB\t\n\x07_sourceB\x0e\n\x0c_destination\"C\n\x14ListchannelsResponse\x12+\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x19.cln.ListchannelsChannels\"\xb3\x03\n\x14ListchannelsChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\x0e\n\x06public\x18\x04 \x01(\x08\x12 \n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x15\n\rmessage_flags\x18\x06 \x01(\r\x12\x15\n\rchannel_flags\x18\x07 \x01(\r\x12\x0e\n\x06\x61\x63tive\x18\x08 \x01(\x08\x12\x13\n\x0blast_update\x18\t \x01(\r\x12\x1d\n\x15\x62\x61se_fee_millisatoshi\x18\n \x01(\r\x12\x19\n\x11\x66\x65\x65_per_millionth\x18\x0b \x01(\r\x12\r\n\x05\x64\x65lay\x18\x0c \x01(\r\x12&\n\x11htlc_minimum_msat\x18\r \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x11htlc_maximum_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x10\n\x08\x66\x65\x61tures\x18\x0f \x01(\x0c\x12\x11\n\tdirection\x18\x10 \x01(\rB\x14\n\x12_htlc_maximum_msat\"#\n\x10\x41\x64\x64gossipRequest\x12\x0f\n\x07message\x18\x01 \x01(\x0c\"\x13\n\x11\x41\x64\x64gossipResponse\"\xaf\x01\n\x14\x41\x64\x64psbtoutputRequest\x12\x1f\n\x07satoshi\x18\x01 \x01(\x0b\x32\x0e.cln.AmountSat\x12\x15\n\x08locktime\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x18\n\x0binitialpsbt\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x04 \x01(\tH\x02\x88\x01\x01\x42\x0b\n\t_locktimeB\x0e\n\x0c_initialpsbtB\x0e\n\x0c_destination\"U\n\x15\x41\x64\x64psbtoutputResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x1e\n\x16\x65stimated_added_weight\x18\x02 \x01(\r\x12\x0e\n\x06outnum\x18\x03 \x01(\r\"O\n\x14\x41utocleanonceRequest\x12*\n\tsubsystem\x18\x01 \x01(\x0e\x32\x17.cln.AutocleanSubsystem\x12\x0b\n\x03\x61ge\x18\x02 \x01(\x04\"G\n\x15\x41utocleanonceResponse\x12.\n\tautoclean\x18\x01 \x01(\x0b\x32\x1b.cln.AutocleanonceAutoclean\"\x89\x05\n\x16\x41utocleanonceAutoclean\x12L\n\x11succeededforwards\x18\x01 \x01(\x0b\x32,.cln.AutocleanonceAutocleanSucceededforwardsH\x00\x88\x01\x01\x12\x46\n\x0e\x66\x61iledforwards\x18\x02 \x01(\x0b\x32).cln.AutocleanonceAutocleanFailedforwardsH\x01\x88\x01\x01\x12\x44\n\rsucceededpays\x18\x03 \x01(\x0b\x32(.cln.AutocleanonceAutocleanSucceededpaysH\x02\x88\x01\x01\x12>\n\nfailedpays\x18\x04 \x01(\x0b\x32%.cln.AutocleanonceAutocleanFailedpaysH\x03\x88\x01\x01\x12\x42\n\x0cpaidinvoices\x18\x05 \x01(\x0b\x32\'.cln.AutocleanonceAutocleanPaidinvoicesH\x04\x88\x01\x01\x12H\n\x0f\x65xpiredinvoices\x18\x06 \x01(\x0b\x32*.cln.AutocleanonceAutocleanExpiredinvoicesH\x05\x88\x01\x01\x12\x44\n\rnetworkevents\x18\x07 \x01(\x0b\x32(.cln.AutocleanonceAutocleanNetworkeventsH\x06\x88\x01\x01\x42\x14\n\x12_succeededforwardsB\x11\n\x0f_failedforwardsB\x10\n\x0e_succeededpaysB\r\n\x0b_failedpaysB\x0f\n\r_paidinvoicesB\x12\n\x10_expiredinvoicesB\x10\n\x0e_networkevents\"K\n%AutocleanonceAutocleanExpiredinvoices\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"J\n$AutocleanonceAutocleanFailedforwards\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"F\n AutocleanonceAutocleanFailedpays\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"I\n#AutocleanonceAutocleanNetworkevents\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"H\n\"AutocleanonceAutocleanPaidinvoices\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"M\n\'AutocleanonceAutocleanSucceededforwards\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"I\n#AutocleanonceAutocleanSucceededpays\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"W\n\x16\x41utocleanstatusRequest\x12/\n\tsubsystem\x18\x01 \x01(\x0e\x32\x17.cln.AutocleanSubsystemH\x00\x88\x01\x01\x42\x0c\n\n_subsystem\"K\n\x17\x41utocleanstatusResponse\x12\x30\n\tautoclean\x18\x01 \x01(\x0b\x32\x1d.cln.AutocleanstatusAutoclean\"\x99\x05\n\x18\x41utocleanstatusAutoclean\x12N\n\x11succeededforwards\x18\x01 \x01(\x0b\x32..cln.AutocleanstatusAutocleanSucceededforwardsH\x00\x88\x01\x01\x12H\n\x0e\x66\x61iledforwards\x18\x02 \x01(\x0b\x32+.cln.AutocleanstatusAutocleanFailedforwardsH\x01\x88\x01\x01\x12\x46\n\rsucceededpays\x18\x03 \x01(\x0b\x32*.cln.AutocleanstatusAutocleanSucceededpaysH\x02\x88\x01\x01\x12@\n\nfailedpays\x18\x04 \x01(\x0b\x32\'.cln.AutocleanstatusAutocleanFailedpaysH\x03\x88\x01\x01\x12\x44\n\x0cpaidinvoices\x18\x05 \x01(\x0b\x32).cln.AutocleanstatusAutocleanPaidinvoicesH\x04\x88\x01\x01\x12J\n\x0f\x65xpiredinvoices\x18\x06 \x01(\x0b\x32,.cln.AutocleanstatusAutocleanExpiredinvoicesH\x05\x88\x01\x01\x12\x46\n\rnetworkevents\x18\x07 \x01(\x0b\x32*.cln.AutocleanstatusAutocleanNetworkeventsH\x06\x88\x01\x01\x42\x14\n\x12_succeededforwardsB\x11\n\x0f_failedforwardsB\x10\n\x0e_succeededpaysB\r\n\x0b_failedpaysB\x0f\n\r_paidinvoicesB\x12\n\x10_expiredinvoicesB\x10\n\x0e_networkevents\"e\n\'AutocleanstatusAutocleanExpiredinvoices\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"d\n&AutocleanstatusAutocleanFailedforwards\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"`\n\"AutocleanstatusAutocleanFailedpays\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"c\n%AutocleanstatusAutocleanNetworkevents\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"b\n$AutocleanstatusAutocleanPaidinvoices\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"g\n)AutocleanstatusAutocleanSucceededforwards\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"c\n%AutocleanstatusAutocleanSucceededpays\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"U\n\x13\x43heckmessageRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\r\n\x05zbase\x18\x02 \x01(\t\x12\x13\n\x06pubkey\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x42\t\n\x07_pubkey\"8\n\x14\x43heckmessageResponse\x12\x10\n\x08verified\x18\x01 \x01(\x08\x12\x0e\n\x06pubkey\x18\x02 \x01(\x0c\"\xcb\x02\n\x0c\x43loseRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x1e\n\x11unilateraltimeout\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\tH\x01\x88\x01\x01\x12!\n\x14\x66\x65\x65_negotiation_step\x18\x04 \x01(\tH\x02\x88\x01\x01\x12)\n\rwrong_funding\x18\x05 \x01(\x0b\x32\r.cln.OutpointH\x03\x88\x01\x01\x12\x1f\n\x12\x66orce_lease_closed\x18\x06 \x01(\x08H\x04\x88\x01\x01\x12\x1e\n\x08\x66\x65\x65range\x18\x07 \x03(\x0b\x32\x0c.cln.FeerateB\x14\n\x12_unilateraltimeoutB\x0e\n\x0c_destinationB\x17\n\x15_fee_negotiation_stepB\x10\n\x0e_wrong_fundingB\x15\n\x13_force_lease_closed\"\x93\x01\n\rCloseResponse\x12/\n\titem_type\x18\x01 \x01(\x0e\x32\x1c.cln.CloseResponse.CloseType\x12\x0b\n\x03txs\x18\x04 \x03(\x0c\x12\r\n\x05txids\x18\x05 \x03(\x0c\"5\n\tCloseType\x12\n\n\x06MUTUAL\x10\x00\x12\x0e\n\nUNILATERAL\x10\x01\x12\x0c\n\x08UNOPENED\x10\x02\"T\n\x0e\x43onnectRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\x04host\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04port\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x07\n\x05_hostB\x07\n\x05_port\"\xb4\x01\n\x0f\x43onnectResponse\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x10\n\x08\x66\x65\x61tures\x18\x02 \x01(\x0c\x12\x38\n\tdirection\x18\x03 \x01(\x0e\x32%.cln.ConnectResponse.ConnectDirection\x12$\n\x07\x61\x64\x64ress\x18\x04 \x01(\x0b\x32\x13.cln.ConnectAddress\"#\n\x10\x43onnectDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\"\xfb\x01\n\x0e\x43onnectAddress\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.ConnectAddress.ConnectAddressType\x12\x13\n\x06socket\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04port\x18\x04 \x01(\rH\x02\x88\x01\x01\"P\n\x12\x43onnectAddressType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x42\t\n\x07_socketB\n\n\x08_addressB\x07\n\x05_port\"J\n\x14\x43reateinvoiceRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12\x10\n\x08preimage\x18\x03 \x01(\x0c\"\xe6\x05\n\x15\x43reateinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x06\x62olt11\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x04 \x01(\x0c\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12>\n\x06status\x18\x06 \x01(\x0e\x32..cln.CreateinvoiceResponse.CreateinvoiceStatus\x12\x13\n\x0b\x64\x65scription\x18\x07 \x01(\t\x12\x12\n\nexpires_at\x18\x08 \x01(\x04\x12\x16\n\tpay_index\x18\t \x01(\x04H\x03\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x06\x88\x01\x01\x12\x1b\n\x0elocal_offer_id\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0f \x01(\tH\x08\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12:\n\rpaid_outpoint\x18\x11 \x01(\x0b\x32\x1e.cln.CreateinvoicePaidOutpointH\t\x88\x01\x01\"8\n\x13\x43reateinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x11\n\x0f_local_offer_idB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_paid_outpoint\"9\n\x19\x43reateinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\xb4\x02\n\x10\x44\x61tastoreRequest\x12\x10\n\x03hex\x18\x02 \x01(\x0cH\x00\x88\x01\x01\x12\x36\n\x04mode\x18\x03 \x01(\x0e\x32#.cln.DatastoreRequest.DatastoreModeH\x01\x88\x01\x01\x12\x17\n\ngeneration\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\t\x12\x13\n\x06string\x18\x06 \x01(\tH\x03\x88\x01\x01\"p\n\rDatastoreMode\x12\x0f\n\x0bMUST_CREATE\x10\x00\x12\x10\n\x0cMUST_REPLACE\x10\x01\x12\x15\n\x11\x43REATE_OR_REPLACE\x10\x02\x12\x0f\n\x0bMUST_APPEND\x10\x03\x12\x14\n\x10\x43REATE_OR_APPEND\x10\x04\x42\x06\n\x04_hexB\x07\n\x05_modeB\r\n\x0b_generationB\t\n\x07_string\"\x82\x01\n\x11\x44\x61tastoreResponse\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\tB\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"$\n\x15\x44\x61tastoreusageRequest\x12\x0b\n\x03key\x18\x01 \x03(\t\"S\n\x16\x44\x61tastoreusageResponse\x12\x39\n\x0e\x64\x61tastoreusage\x18\x01 \x01(\x0b\x32!.cln.DatastoreusageDatastoreusage\"@\n\x1c\x44\x61tastoreusageDatastoreusage\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x13\n\x0btotal_bytes\x18\x02 \x01(\x04\"\x9d\x01\n\x12\x43reateonionRequest\x12\"\n\x04hops\x18\x01 \x03(\x0b\x32\x14.cln.CreateonionHops\x12\x11\n\tassocdata\x18\x02 \x01(\x0c\x12\x18\n\x0bsession_key\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x17\n\nonion_size\x18\x04 \x01(\rH\x01\x88\x01\x01\x42\x0e\n\x0c_session_keyB\r\n\x0b_onion_size\"<\n\x13\x43reateonionResponse\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12\x16\n\x0eshared_secrets\x18\x02 \x03(\x0c\"2\n\x0f\x43reateonionHops\x12\x0e\n\x06pubkey\x18\x01 \x01(\x0c\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\"J\n\x13\x44\x65ldatastoreRequest\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x0b\n\x03key\x18\x03 \x03(\tB\r\n\x0b_generation\"\x85\x01\n\x14\x44\x65ldatastoreResponse\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\tB\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"\xb6\x01\n\x11\x44\x65linvoiceRequest\x12\r\n\x05label\x18\x01 \x01(\t\x12\x37\n\x06status\x18\x02 \x01(\x0e\x32\'.cln.DelinvoiceRequest.DelinvoiceStatus\x12\x15\n\x08\x64\x65sconly\x18\x03 \x01(\x08H\x00\x88\x01\x01\"5\n\x10\x44\x65linvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\x0b\n\t_desconly\"\xcf\x05\n\x12\x44\x65linvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x06\x62olt11\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x03 \x01(\tH\x01\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x06 \x01(\x0c\x12\x38\n\x06status\x18\x07 \x01(\x0e\x32(.cln.DelinvoiceResponse.DelinvoiceStatus\x12\x12\n\nexpires_at\x18\x08 \x01(\x04\x12\x1b\n\x0elocal_offer_id\x18\t \x01(\x0cH\x04\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0c \x01(\x04\x12\x1a\n\rupdated_index\x18\r \x01(\x04H\x06\x88\x01\x01\x12\x16\n\tpay_index\x18\x0e \x01(\x04H\x07\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x12\x14\n\x07paid_at\x18\x10 \x01(\x04H\t\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x11 \x01(\x0cH\n\x88\x01\x01\"5\n\x10\x44\x65linvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x0e\n\x0c_descriptionB\x11\n\x0f_local_offer_idB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_updated_indexB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimage\"\x9f\x01\n\x17\x44\x65vforgetchannelRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x17\n\nchannel_id\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\x05\x66orce\x18\x04 \x01(\x08H\x02\x88\x01\x01\x42\x13\n\x11_short_channel_idB\r\n\x0b_channel_idB\x08\n\x06_force\"Y\n\x18\x44\x65vforgetchannelResponse\x12\x0e\n\x06\x66orced\x18\x01 \x01(\x08\x12\x17\n\x0f\x66unding_unspent\x18\x02 \x01(\x08\x12\x14\n\x0c\x66unding_txid\x18\x03 \x01(\x0c\"\x19\n\x17\x45mergencyrecoverRequest\")\n\x18\x45mergencyrecoverResponse\x12\r\n\x05stubs\x18\x01 \x03(\x0c\" \n\x1eGetemergencyrecoverdataRequest\"\x8a\x01\n\x1fGetemergencyrecoverdataResponse\x12\x10\n\x08\x66iledata\x18\x01 \x01(\x0c\x12\x1f\n\x12\x63\x61n_create_penalty\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x1d\n\x15\x62\x61\x63ked_up_channel_ids\x18\x03 \x03(\x0c\x42\x15\n\x13_can_create_penalty\"Q\n\x13\x45xposesecretRequest\x12\x12\n\npassphrase\x18\x01 \x01(\t\x12\x17\n\nidentifier\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\r\n\x0b_identifier\"_\n\x14\x45xposesecretResponse\x12\x12\n\nidentifier\x18\x01 \x01(\t\x12\x0f\n\x07\x63odex32\x18\x02 \x01(\t\x12\x15\n\x08mnemonic\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x0b\n\t_mnemonic\"#\n\x0eRecoverRequest\x12\x11\n\thsmsecret\x18\x01 \x01(\t\"x\n\x0fRecoverResponse\x12\x32\n\x06result\x18\x01 \x01(\x0e\x32\".cln.RecoverResponse.RecoverResult\"1\n\rRecoverResult\x12 \n\x1cRECOVERY_RESTART_IN_PROGRESS\x10\x00\"$\n\x15RecoverchannelRequest\x12\x0b\n\x03scb\x18\x01 \x03(\x0c\"\'\n\x16RecoverchannelResponse\x12\r\n\x05stubs\x18\x01 \x03(\t\"\x99\x02\n\x0eInvoiceRequest\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\r\n\x05label\x18\x03 \x01(\t\x12\x11\n\tfallbacks\x18\x04 \x03(\t\x12\x15\n\x08preimage\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x12\x11\n\x04\x63ltv\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06\x65xpiry\x18\x07 \x01(\x04H\x02\x88\x01\x01\x12\x1d\n\x15\x65xposeprivatechannels\x18\x08 \x03(\t\x12\x19\n\x0c\x64\x65schashonly\x18\t \x01(\x08H\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x10.cln.AmountOrAnyB\x0b\n\t_preimageB\x07\n\x05_cltvB\t\n\x07_expiryB\x0f\n\r_deschashonly\"\xfe\x02\n\x0fInvoiceResponse\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x16\n\x0epayment_secret\x18\x03 \x01(\x0c\x12\x12\n\nexpires_at\x18\x04 \x01(\x04\x12\x1d\n\x10warning_capacity\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x1c\n\x0fwarning_offline\x18\x06 \x01(\tH\x01\x88\x01\x01\x12\x1d\n\x10warning_deadends\x18\x07 \x01(\tH\x02\x88\x01\x01\x12#\n\x16warning_private_unused\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x18\n\x0bwarning_mpp\x18\t \x01(\tH\x04\x88\x01\x01\x12\x15\n\rcreated_index\x18\n \x01(\x04\x42\x13\n\x11_warning_capacityB\x12\n\x10_warning_offlineB\x13\n\x11_warning_deadendsB\x19\n\x17_warning_private_unusedB\x0e\n\x0c_warning_mpp\"\xe1\x01\n\x15InvoicerequestRequest\x12\x1b\n\x06\x61mount\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x13\n\x06issuer\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05label\x18\x04 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0f\x61\x62solute_expiry\x18\x05 \x01(\x04H\x02\x88\x01\x01\x12\x17\n\nsingle_use\x18\x06 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_issuerB\x08\n\x06_labelB\x12\n\x10_absolute_expiryB\r\n\x0b_single_use\"\x8b\x01\n\x16InvoicerequestResponse\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"1\n\x1c\x44isableinvoicerequestRequest\x12\x11\n\tinvreq_id\x18\x01 \x01(\t\"\x92\x01\n\x1d\x44isableinvoicerequestResponse\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"l\n\x1aListinvoicerequestsRequest\x12\x16\n\tinvreq_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x61\x63tive_only\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\x0c\n\n_invreq_idB\x0e\n\x0c_active_only\"_\n\x1bListinvoicerequestsResponse\x12@\n\x0finvoicerequests\x18\x01 \x03(\x0b\x32\'.cln.ListinvoicerequestsInvoicerequests\"\x97\x01\n\"ListinvoicerequestsInvoicerequests\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"#\n\x14ListdatastoreRequest\x12\x0b\n\x03key\x18\x02 \x03(\t\"G\n\x15ListdatastoreResponse\x12.\n\tdatastore\x18\x01 \x03(\x0b\x32\x1b.cln.ListdatastoreDatastore\"\x87\x01\n\x16ListdatastoreDatastore\x12\x0b\n\x03key\x18\x01 \x03(\t\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x42\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"\xde\x02\n\x13ListinvoicesRequest\x12\x12\n\x05label\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tinvstring\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x12\x15\n\x08offer_id\x18\x04 \x01(\tH\x03\x88\x01\x01\x12>\n\x05index\x18\x05 \x01(\x0e\x32*.cln.ListinvoicesRequest.ListinvoicesIndexH\x04\x88\x01\x01\x12\x12\n\x05start\x18\x06 \x01(\x04H\x05\x88\x01\x01\x12\x12\n\x05limit\x18\x07 \x01(\rH\x06\x88\x01\x01\"-\n\x11ListinvoicesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x42\x08\n\x06_labelB\x0c\n\n_invstringB\x0f\n\r_payment_hashB\x0b\n\t_offer_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListinvoicesResponse\x12+\n\x08invoices\x18\x01 \x03(\x0b\x32\x19.cln.ListinvoicesInvoices\"\xbc\x06\n\x14ListinvoicesInvoices\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x44\n\x06status\x18\x04 \x01(\x0e\x32\x34.cln.ListinvoicesInvoices.ListinvoicesInvoicesStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x1b\n\x0elocal_offer_id\x18\t \x01(\x0cH\x04\x88\x01\x01\x12\x16\n\tpay_index\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x14\n\x07paid_at\x18\r \x01(\x04H\x07\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0e \x01(\x0cH\x08\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0f \x01(\tH\t\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\n\x88\x01\x01\x12\x41\n\rpaid_outpoint\x18\x12 \x01(\x0b\x32%.cln.ListinvoicesInvoicesPaidOutpointH\x0b\x88\x01\x01\"?\n\x1aListinvoicesInvoicesStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x11\n\x0f_local_offer_idB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\"@\n ListinvoicesInvoicesPaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\xf6\x03\n\x10SendonionRequest\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12)\n\tfirst_hop\x18\x02 \x01(\x0b\x32\x16.cln.SendonionFirstHop\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x12\n\x05label\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x16\n\x0eshared_secrets\x18\x05 \x03(\x0c\x12\x13\n\x06partid\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\t \x01(\x0cH\x03\x88\x01\x01\x12\x14\n\x07groupid\x18\x0b \x01(\x04H\x04\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\r \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0e \x01(\tH\x07\x88\x01\x01\x12+\n\x11total_amount_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x42\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\x0e\n\x0c_destinationB\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x0e\n\x0c_descriptionB\x14\n\x12_total_amount_msat\"\xd0\x04\n\x11SendonionResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x36\n\x06status\x18\x03 \x01(\x0e\x32&.cln.SendonionResponse.SendonionStatus\x12%\n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\ncreated_at\x18\x06 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\x08 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\n \x01(\tH\x04\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0b \x01(\x0cH\x05\x88\x01\x01\x12\x14\n\x07message\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x13\n\x06partid\x18\r \x01(\x04H\x07\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0e \x01(\x04\x12\x1a\n\rupdated_index\x18\x0f \x01(\x04H\x08\x88\x01\x01\",\n\x0fSendonionStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x42\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\n\n\x08_messageB\t\n\x07_partidB\x10\n\x0e_updated_index\"P\n\x11SendonionFirstHop\x12\n\n\x02id\x18\x01 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\r\n\x05\x64\x65lay\x18\x03 \x01(\r\"\xa0\x03\n\x13ListsendpaysRequest\x12\x13\n\x06\x62olt11\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12@\n\x06status\x18\x03 \x01(\x0e\x32+.cln.ListsendpaysRequest.ListsendpaysStatusH\x02\x88\x01\x01\x12>\n\x05index\x18\x04 \x01(\x0e\x32*.cln.ListsendpaysRequest.ListsendpaysIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\"-\n\x11ListsendpaysIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\";\n\x12ListsendpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x42\t\n\x07_bolt11B\x0f\n\r_payment_hashB\t\n\x07_statusB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListsendpaysResponse\x12+\n\x08payments\x18\x01 \x03(\x0b\x32\x19.cln.ListsendpaysPayments\"\xe5\x05\n\x14ListsendpaysPayments\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x0f\n\x07groupid\x18\x02 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x44\n\x06status\x18\x04 \x01(\x0e\x32\x34.cln.ListsendpaysPayments.ListsendpaysPaymentsStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\n \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0b \x01(\tH\x04\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x05\x88\x01\x01\x12\x17\n\nerroronion\x18\r \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0e \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06partid\x18\x0f \x01(\x04H\x08\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\t\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x12 \x01(\x04H\n\x88\x01\x01\"C\n\x1aListsendpaysPaymentsStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\r\n\x0b_erroronionB\x0e\n\x0c_descriptionB\t\n\x07_partidB\x10\n\x0e_updated_indexB\x0f\n\r_completed_at\"\x19\n\x17ListtransactionsRequest\"S\n\x18ListtransactionsResponse\x12\x37\n\x0ctransactions\x18\x01 \x03(\x0b\x32!.cln.ListtransactionsTransactions\"\xf8\x01\n\x1cListtransactionsTransactions\x12\x0c\n\x04hash\x18\x01 \x01(\x0c\x12\r\n\x05rawtx\x18\x02 \x01(\x0c\x12\x13\n\x0b\x62lockheight\x18\x03 \x01(\r\x12\x0f\n\x07txindex\x18\x04 \x01(\r\x12\x10\n\x08locktime\x18\x07 \x01(\r\x12\x0f\n\x07version\x18\x08 \x01(\r\x12\x37\n\x06inputs\x18\t \x03(\x0b\x32\'.cln.ListtransactionsTransactionsInputs\x12\x39\n\x07outputs\x18\n \x03(\x0b\x32(.cln.ListtransactionsTransactionsOutputs\"S\n\"ListtransactionsTransactionsInputs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\r\n\x05index\x18\x02 \x01(\r\x12\x10\n\x08sequence\x18\x03 \x01(\r\"l\n#ListtransactionsTransactionsOutputs\x12\r\n\x05index\x18\x01 \x01(\r\x12\x14\n\x0cscriptPubKey\x18\x03 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\"M\n\x11MakesecretRequest\x12\x10\n\x03hex\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x13\n\x06string\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x06\n\x04_hexB\t\n\x07_string\"$\n\x12MakesecretResponse\x12\x0e\n\x06secret\x18\x01 \x01(\x0c\"\xc7\x04\n\nPayRequest\x12\x12\n\x06\x62olt11\x18\x01 \x01(\tB\x02\x18\x01\x12\x16\n\x05label\x18\x03 \x01(\tB\x02\x18\x01H\x00\x88\x01\x01\x12\x1e\n\rmaxfeepercent\x18\x04 \x01(\x01\x42\x02\x18\x01H\x01\x88\x01\x01\x12\x1a\n\tretry_for\x18\x05 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x19\n\x08maxdelay\x18\x06 \x01(\rB\x02\x18\x01H\x03\x88\x01\x01\x12\'\n\texemptfee\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x04\x88\x01\x01\x12\x1b\n\nriskfactor\x18\x08 \x01(\x01\x42\x02\x18\x01H\x05\x88\x01\x01\x12\x13\n\x07\x65xclude\x18\n \x03(\tB\x02\x18\x01\x12$\n\x06maxfee\x18\x0b \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x06\x88\x01\x01\x12\x1c\n\x0b\x64\x65scription\x18\x0c \x01(\tB\x02\x18\x01H\x07\x88\x01\x01\x12)\n\x0b\x61mount_msat\x18\r \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x08\x88\x01\x01\x12\x1e\n\rlocalinvreqid\x18\x0e \x01(\x0c\x42\x02\x18\x01H\t\x88\x01\x01\x12*\n\x0cpartial_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\n\x88\x01\x01\x42\x08\n\x06_labelB\x10\n\x0e_maxfeepercentB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\x0c\n\n_exemptfeeB\r\n\x0b_riskfactorB\t\n\x07_maxfeeB\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x0f\n\r_partial_msat\"\xab\x03\n\x0bPayResponse\x12\x1c\n\x10payment_preimage\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x1c\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x42\x02\x18\x01H\x00\x88\x01\x01\x12\x18\n\x0cpayment_hash\x18\x03 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\ncreated_at\x18\x04 \x01(\x01\x42\x02\x18\x01\x12\x11\n\x05parts\x18\x05 \x01(\rB\x02\x18\x01\x12$\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12)\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12+\n\x1awarning_partial_completion\x18\x08 \x01(\tB\x02\x18\x01H\x01\x88\x01\x01\x12.\n\x06status\x18\t \x01(\x0e\x32\x1a.cln.PayResponse.PayStatusB\x02\x18\x01\">\n\tPayStatus\x12\x10\n\x08\x43OMPLETE\x10\x00\x1a\x02\x08\x01\x12\x0f\n\x07PENDING\x10\x01\x1a\x02\x08\x01\x12\x0e\n\x06\x46\x41ILED\x10\x02\x1a\x02\x08\x01\x42\x0e\n\x0c_destinationB\x1d\n\x1b_warning_partial_completion\"*\n\x10ListnodesRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x42\x05\n\x03_id\"7\n\x11ListnodesResponse\x12\"\n\x05nodes\x18\x01 \x03(\x0b\x32\x13.cln.ListnodesNodes\"\xb8\x02\n\x0eListnodesNodes\x12\x0e\n\x06nodeid\x18\x01 \x01(\x0c\x12\x1b\n\x0elast_timestamp\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x12\n\x05\x61lias\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x12\n\x05\x63olor\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x12\x15\n\x08\x66\x65\x61tures\x18\x05 \x01(\x0cH\x03\x88\x01\x01\x12/\n\taddresses\x18\x06 \x03(\x0b\x32\x1c.cln.ListnodesNodesAddresses\x12@\n\x10option_will_fund\x18\x07 \x01(\x0b\x32!.cln.ListnodesNodesOptionWillFundH\x04\x88\x01\x01\x42\x11\n\x0f_last_timestampB\x08\n\x06_aliasB\x08\n\x06_colorB\x0b\n\t_featuresB\x13\n\x11_option_will_fund\"\xe8\x01\n\x17ListnodesNodesAddresses\x12K\n\titem_type\x18\x01 \x01(\x0e\x32\x38.cln.ListnodesNodesAddresses.ListnodesNodesAddressesType\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x00\x88\x01\x01\"P\n\x1bListnodesNodesAddressesType\x12\x07\n\x03\x44NS\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x42\n\n\x08_address\"\xf2\x01\n\x1cListnodesNodesOptionWillFund\x12(\n\x13lease_fee_base_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x17\n\x0flease_fee_basis\x18\x02 \x01(\r\x12\x16\n\x0e\x66unding_weight\x18\x03 \x01(\r\x12.\n\x19\x63hannel_fee_max_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x30\n(channel_fee_max_proportional_thousandths\x18\x05 \x01(\r\x12\x15\n\rcompact_lease\x18\x06 \x01(\x0c\"g\n\x15WaitanyinvoiceRequest\x12\x1a\n\rlastpay_index\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x02 \x01(\x04H\x01\x88\x01\x01\x42\x10\n\x0e_lastpay_indexB\n\n\x08_timeout\"\xbc\x05\n\x16WaitanyinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12@\n\x06status\x18\x04 \x01(\x0e\x32\x30.cln.WaitanyinvoiceResponse.WaitanyinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tpay_index\x18\t \x01(\x04H\x04\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x15\n\rcreated_index\x18\r \x01(\x04\x12\x1a\n\rupdated_index\x18\x0e \x01(\x04H\x08\x88\x01\x01\x12;\n\rpaid_outpoint\x18\x0f \x01(\x0b\x32\x1f.cln.WaitanyinvoicePaidOutpointH\t\x88\x01\x01\"-\n\x14WaitanyinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\":\n\x1aWaitanyinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"#\n\x12WaitinvoiceRequest\x12\r\n\x05label\x18\x01 \x01(\t\"\xad\x05\n\x13WaitinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.WaitinvoiceResponse.WaitinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tpay_index\x18\t \x01(\x04H\x04\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x15\n\rcreated_index\x18\r \x01(\x04\x12\x1a\n\rupdated_index\x18\x0e \x01(\x04H\x08\x88\x01\x01\x12\x38\n\rpaid_outpoint\x18\x0f \x01(\x0b\x32\x1c.cln.WaitinvoicePaidOutpointH\t\x88\x01\x01\"*\n\x11WaitinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\"7\n\x17WaitinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\x8e\x01\n\x12WaitsendpayRequest\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x13\n\x06partid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x14\n\x07groupid\x18\x04 \x01(\x04H\x02\x88\x01\x01\x42\t\n\x07_partidB\n\n\x08_timeoutB\n\n\x08_groupid\"\xf7\x04\n\x13WaitsendpayResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x07groupid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.WaitsendpayResponse.WaitsendpayStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06partid\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0e \x01(\x01H\x08\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0f \x01(\x04\x12\x1a\n\rupdated_index\x18\x10 \x01(\x04H\t\x88\x01\x01\"!\n\x11WaitsendpayStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x42\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\x0f\n\r_completed_atB\x10\n\x0e_updated_index\"\x97\x01\n\x0eNewaddrRequest\x12@\n\x0b\x61\x64\x64resstype\x18\x01 \x01(\x0e\x32&.cln.NewaddrRequest.NewaddrAddresstypeH\x00\x88\x01\x01\"3\n\x12NewaddrAddresstype\x12\n\n\x06\x42\x45\x43H32\x10\x00\x12\x07\n\x03\x41LL\x10\x02\x12\x08\n\x04P2TR\x10\x03\x42\x0e\n\x0c_addresstype\"M\n\x0fNewaddrResponse\x12\x13\n\x06\x62\x65\x63h32\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04p2tr\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\t\n\x07_bech32B\x07\n\x05_p2tr\"\xbc\x01\n\x0fWithdrawRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\t\x12$\n\x07satoshi\x18\x02 \x01(\x0b\x32\x13.cln.AmountSatOrAll\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\"\n\x07\x66\x65\x65rate\x18\x05 \x01(\x0b\x32\x0c.cln.FeerateH\x01\x88\x01\x01\x42\n\n\x08_minconfB\n\n\x08_feerate\":\n\x10WithdrawResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x0c\n\x04psbt\x18\x03 \x01(\t\"\xd7\x03\n\x0eKeysendRequest\x12\x17\n\x0b\x64\x65stination\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\x05label\x18\x03 \x01(\tB\x02\x18\x01H\x00\x88\x01\x01\x12\x1e\n\rmaxfeepercent\x18\x04 \x01(\x01\x42\x02\x18\x01H\x01\x88\x01\x01\x12\x1a\n\tretry_for\x18\x05 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x19\n\x08maxdelay\x18\x06 \x01(\rB\x02\x18\x01H\x03\x88\x01\x01\x12\'\n\texemptfee\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x04\x88\x01\x01\x12/\n\nroutehints\x18\x08 \x01(\x0b\x32\x12.cln.RoutehintListB\x02\x18\x01H\x05\x88\x01\x01\x12*\n\textratlvs\x18\t \x01(\x0b\x32\x0e.cln.TlvStreamB\x02\x18\x01H\x06\x88\x01\x01\x12$\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12$\n\x06maxfee\x18\x0b \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x07\x88\x01\x01\x42\x08\n\x06_labelB\x10\n\x0e_maxfeepercentB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\x0c\n\n_exemptfeeB\r\n\x0b_routehintsB\x0c\n\n_extratlvsB\t\n\x07_maxfee\"\x9a\x03\n\x0fKeysendResponse\x12\x1c\n\x10payment_preimage\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x1c\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x42\x02\x18\x01H\x00\x88\x01\x01\x12\x18\n\x0cpayment_hash\x18\x03 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\ncreated_at\x18\x04 \x01(\x01\x42\x02\x18\x01\x12\x11\n\x05parts\x18\x05 \x01(\rB\x02\x18\x01\x12$\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12)\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12+\n\x1awarning_partial_completion\x18\x08 \x01(\tB\x02\x18\x01H\x01\x88\x01\x01\x12\x36\n\x06status\x18\t \x01(\x0e\x32\".cln.KeysendResponse.KeysendStatusB\x02\x18\x01\"!\n\rKeysendStatus\x12\x10\n\x08\x43OMPLETE\x10\x00\x1a\x02\x08\x01\x42\x0e\n\x0c_destinationB\x1d\n\x1b_warning_partial_completion\"\xa7\x03\n\x0f\x46undpsbtRequest\x12$\n\x07satoshi\x18\x01 \x01(\x0b\x32\x13.cln.AmountSatOrAll\x12\x1d\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.Feerate\x12\x13\n\x0bstartweight\x18\x03 \x01(\r\x12\x14\n\x07minconf\x18\x04 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x07reserve\x18\x05 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08locktime\x18\x06 \x01(\rH\x02\x88\x01\x01\x12\x1f\n\x12min_witness_weight\x18\x07 \x01(\rH\x03\x88\x01\x01\x12\x1d\n\x10\x65xcess_as_change\x18\x08 \x01(\x08H\x04\x88\x01\x01\x12\x17\n\nnonwrapped\x18\t \x01(\x08H\x05\x88\x01\x01\x12#\n\x16opening_anchor_channel\x18\n \x01(\x08H\x06\x88\x01\x01\x42\n\n\x08_minconfB\n\n\x08_reserveB\x0b\n\t_locktimeB\x15\n\x13_min_witness_weightB\x13\n\x11_excess_as_changeB\r\n\x0b_nonwrappedB\x19\n\x17_opening_anchor_channel\"\xd9\x01\n\x10\x46undpsbtResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x16\n\x0e\x66\x65\x65rate_per_kw\x18\x02 \x01(\r\x12\x1e\n\x16\x65stimated_final_weight\x18\x03 \x01(\r\x12 \n\x0b\x65xcess_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1a\n\rchange_outnum\x18\x05 \x01(\rH\x00\x88\x01\x01\x12/\n\x0creservations\x18\x06 \x03(\x0b\x32\x19.cln.FundpsbtReservationsB\x10\n\x0e_change_outnum\"u\n\x14\x46undpsbtReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x19\n\x11reserved_to_block\x18\x05 \x01(\r\"A\n\x0fSendpsbtRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x14\n\x07reserve\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_reserve\",\n\x10SendpsbtResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"1\n\x0fSignpsbtRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x10\n\x08signonly\x18\x02 \x03(\r\"\'\n\x10SignpsbtResponse\x12\x13\n\x0bsigned_psbt\x18\x01 \x01(\t\"\xa3\x03\n\x0fUtxopsbtRequest\x12$\n\x07satoshi\x18\x01 \x01(\x0b\x32\x13.cln.AmountSatOrAll\x12\x1d\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.Feerate\x12\x13\n\x0bstartweight\x18\x03 \x01(\r\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\x14\n\x07reserve\x18\x05 \x01(\rH\x00\x88\x01\x01\x12\x15\n\x08locktime\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x1f\n\x12min_witness_weight\x18\x07 \x01(\rH\x02\x88\x01\x01\x12\x17\n\nreservedok\x18\x08 \x01(\x08H\x03\x88\x01\x01\x12\x1d\n\x10\x65xcess_as_change\x18\t \x01(\x08H\x04\x88\x01\x01\x12#\n\x16opening_anchor_channel\x18\n \x01(\x08H\x05\x88\x01\x01\x42\n\n\x08_reserveB\x0b\n\t_locktimeB\x15\n\x13_min_witness_weightB\r\n\x0b_reservedokB\x13\n\x11_excess_as_changeB\x19\n\x17_opening_anchor_channel\"\xd9\x01\n\x10UtxopsbtResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x16\n\x0e\x66\x65\x65rate_per_kw\x18\x02 \x01(\r\x12\x1e\n\x16\x65stimated_final_weight\x18\x03 \x01(\r\x12 \n\x0b\x65xcess_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1a\n\rchange_outnum\x18\x05 \x01(\rH\x00\x88\x01\x01\x12/\n\x0creservations\x18\x06 \x03(\x0b\x32\x19.cln.UtxopsbtReservationsB\x10\n\x0e_change_outnum\"u\n\x14UtxopsbtReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x19\n\x11reserved_to_block\x18\x05 \x01(\r\" \n\x10TxdiscardRequest\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\"6\n\x11TxdiscardResponse\x12\x13\n\x0bunsigned_tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"\xa4\x01\n\x10TxprepareRequest\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12 \n\x07outputs\x18\x05 \x03(\x0b\x32\x0f.cln.OutputDescB\n\n\x08_feerateB\n\n\x08_minconf\"D\n\x11TxprepareResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x13\n\x0bunsigned_tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"\x1d\n\rTxsendRequest\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\"8\n\x0eTxsendResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\n\n\x02tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"\x8d\x01\n\x17ListpeerchannelsRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nchannel_id\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x42\x05\n\x03_idB\x13\n\x11_short_channel_idB\r\n\x0b_channel_id\"K\n\x18ListpeerchannelsResponse\x12/\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x1d.cln.ListpeerchannelsChannels\"\xd1\x1a\n\x18ListpeerchannelsChannels\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x16\n\x0epeer_connected\x18\x02 \x01(\x08\x12 \n\x05state\x18\x03 \x01(\x0e\x32\x11.cln.ChannelState\x12\x19\n\x0cscratch_txid\x18\x04 \x01(\x0cH\x00\x88\x01\x01\x12\x43\n\x0c\x63hannel_type\x18\x05 \x01(\x0b\x32(.cln.ListpeerchannelsChannelsChannelTypeH\x01\x88\x01\x01\x12:\n\x07\x66\x65\x65rate\x18\x06 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsFeerateH\x02\x88\x01\x01\x12\x12\n\x05owner\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x08 \x01(\tH\x04\x88\x01\x01\x12\x17\n\nchannel_id\x18\t \x01(\x0cH\x05\x88\x01\x01\x12\x19\n\x0c\x66unding_txid\x18\n \x01(\x0cH\x06\x88\x01\x01\x12\x1b\n\x0e\x66unding_outnum\x18\x0b \x01(\rH\x07\x88\x01\x01\x12\x1c\n\x0finitial_feerate\x18\x0c \x01(\tH\x08\x88\x01\x01\x12\x19\n\x0clast_feerate\x18\r \x01(\tH\t\x88\x01\x01\x12\x19\n\x0cnext_feerate\x18\x0e \x01(\tH\n\x88\x01\x01\x12\x1a\n\rnext_fee_step\x18\x0f \x01(\rH\x0b\x88\x01\x01\x12\x37\n\x08inflight\x18\x10 \x03(\x0b\x32%.cln.ListpeerchannelsChannelsInflight\x12\x15\n\x08\x63lose_to\x18\x11 \x01(\x0cH\x0c\x88\x01\x01\x12\x14\n\x07private\x18\x12 \x01(\x08H\r\x88\x01\x01\x12 \n\x06opener\x18\x13 \x01(\x0e\x32\x10.cln.ChannelSide\x12%\n\x06\x63loser\x18\x14 \x01(\x0e\x32\x10.cln.ChannelSideH\x0e\x88\x01\x01\x12:\n\x07\x66unding\x18\x16 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsFundingH\x0f\x88\x01\x01\x12$\n\nto_us_msat\x18\x17 \x01(\x0b\x32\x0b.cln.AmountH\x10\x88\x01\x01\x12(\n\x0emin_to_us_msat\x18\x18 \x01(\x0b\x32\x0b.cln.AmountH\x11\x88\x01\x01\x12(\n\x0emax_to_us_msat\x18\x19 \x01(\x0b\x32\x0b.cln.AmountH\x12\x88\x01\x01\x12$\n\ntotal_msat\x18\x1a \x01(\x0b\x32\x0b.cln.AmountH\x13\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x1b \x01(\x0b\x32\x0b.cln.AmountH\x14\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x1c \x01(\rH\x15\x88\x01\x01\x12)\n\x0f\x64ust_limit_msat\x18\x1d \x01(\x0b\x32\x0b.cln.AmountH\x16\x88\x01\x01\x12,\n\x12their_reserve_msat\x18\x1f \x01(\x0b\x32\x0b.cln.AmountH\x17\x88\x01\x01\x12*\n\x10our_reserve_msat\x18 \x01(\x0b\x32\x0b.cln.AmountH\x18\x88\x01\x01\x12(\n\x0espendable_msat\x18! \x01(\x0b\x32\x0b.cln.AmountH\x19\x88\x01\x01\x12)\n\x0freceivable_msat\x18\" \x01(\x0b\x32\x0b.cln.AmountH\x1a\x88\x01\x01\x12.\n\x14minimum_htlc_in_msat\x18# \x01(\x0b\x32\x0b.cln.AmountH\x1b\x88\x01\x01\x12/\n\x15minimum_htlc_out_msat\x18$ \x01(\x0b\x32\x0b.cln.AmountH\x1c\x88\x01\x01\x12/\n\x15maximum_htlc_out_msat\x18% \x01(\x0b\x32\x0b.cln.AmountH\x1d\x88\x01\x01\x12 \n\x13their_to_self_delay\x18& \x01(\rH\x1e\x88\x01\x01\x12\x1e\n\x11our_to_self_delay\x18\' \x01(\rH\x1f\x88\x01\x01\x12\x1f\n\x12max_accepted_htlcs\x18( \x01(\rH \x88\x01\x01\x12\x36\n\x05\x61lias\x18) \x01(\x0b\x32\".cln.ListpeerchannelsChannelsAliasH!\x88\x01\x01\x12@\n\rstate_changes\x18* \x03(\x0b\x32).cln.ListpeerchannelsChannelsStateChanges\x12\x0e\n\x06status\x18+ \x03(\t\x12 \n\x13in_payments_offered\x18, \x01(\x04H\"\x88\x01\x01\x12)\n\x0fin_offered_msat\x18- \x01(\x0b\x32\x0b.cln.AmountH#\x88\x01\x01\x12\"\n\x15in_payments_fulfilled\x18. \x01(\x04H$\x88\x01\x01\x12+\n\x11in_fulfilled_msat\x18/ \x01(\x0b\x32\x0b.cln.AmountH%\x88\x01\x01\x12!\n\x14out_payments_offered\x18\x30 \x01(\x04H&\x88\x01\x01\x12*\n\x10out_offered_msat\x18\x31 \x01(\x0b\x32\x0b.cln.AmountH\'\x88\x01\x01\x12#\n\x16out_payments_fulfilled\x18\x32 \x01(\x04H(\x88\x01\x01\x12,\n\x12out_fulfilled_msat\x18\x33 \x01(\x0b\x32\x0b.cln.AmountH)\x88\x01\x01\x12\x31\n\x05htlcs\x18\x34 \x03(\x0b\x32\".cln.ListpeerchannelsChannelsHtlcs\x12\x1a\n\rclose_to_addr\x18\x35 \x01(\tH*\x88\x01\x01\x12\x1e\n\x11ignore_fee_limits\x18\x36 \x01(\x08H+\x88\x01\x01\x12:\n\x07updates\x18\x37 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsUpdatesH,\x88\x01\x01\x12#\n\x16last_stable_connection\x18\x38 \x01(\x04H-\x88\x01\x01\x12\x17\n\nlost_state\x18\x39 \x01(\x08H.\x88\x01\x01\x12\x1a\n\rreestablished\x18: \x01(\x08H/\x88\x01\x01\x12*\n\x10last_tx_fee_msat\x18; \x01(\x0b\x32\x0b.cln.AmountH0\x88\x01\x01\x12\x16\n\tdirection\x18< \x01(\rH1\x88\x01\x01\x12=\n#their_max_htlc_value_in_flight_msat\x18= \x01(\x0b\x32\x0b.cln.AmountH2\x88\x01\x01\x12;\n!our_max_htlc_value_in_flight_msat\x18> \x01(\x0b\x32\x0b.cln.AmountH3\x88\x01\x01\x12\x10\n\x08\x66\x65\x61tures\x18? \x03(\tB\x0f\n\r_scratch_txidB\x0f\n\r_channel_typeB\n\n\x08_feerateB\x08\n\x06_ownerB\x13\n\x11_short_channel_idB\r\n\x0b_channel_idB\x0f\n\r_funding_txidB\x11\n\x0f_funding_outnumB\x12\n\x10_initial_feerateB\x0f\n\r_last_feerateB\x0f\n\r_next_feerateB\x10\n\x0e_next_fee_stepB\x0b\n\t_close_toB\n\n\x08_privateB\t\n\x07_closerB\n\n\x08_fundingB\r\n\x0b_to_us_msatB\x11\n\x0f_min_to_us_msatB\x11\n\x0f_max_to_us_msatB\r\n\x0b_total_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x12\n\x10_dust_limit_msatB\x15\n\x13_their_reserve_msatB\x13\n\x11_our_reserve_msatB\x11\n\x0f_spendable_msatB\x12\n\x10_receivable_msatB\x17\n\x15_minimum_htlc_in_msatB\x18\n\x16_minimum_htlc_out_msatB\x18\n\x16_maximum_htlc_out_msatB\x16\n\x14_their_to_self_delayB\x14\n\x12_our_to_self_delayB\x15\n\x13_max_accepted_htlcsB\x08\n\x06_aliasB\x16\n\x14_in_payments_offeredB\x12\n\x10_in_offered_msatB\x18\n\x16_in_payments_fulfilledB\x14\n\x12_in_fulfilled_msatB\x17\n\x15_out_payments_offeredB\x13\n\x11_out_offered_msatB\x19\n\x17_out_payments_fulfilledB\x15\n\x13_out_fulfilled_msatB\x10\n\x0e_close_to_addrB\x14\n\x12_ignore_fee_limitsB\n\n\x08_updatesB\x19\n\x17_last_stable_connectionB\r\n\x0b_lost_stateB\x10\n\x0e_reestablishedB\x13\n\x11_last_tx_fee_msatB\x0c\n\n_directionB&\n$_their_max_htlc_value_in_flight_msatB$\n\"_our_max_htlc_value_in_flight_msat\"]\n\x1dListpeerchannelsChannelsAlias\x12\x12\n\x05local\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06remote\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_localB\t\n\x07_remote\"X\n#ListpeerchannelsChannelsChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"?\n\x1fListpeerchannelsChannelsFeerate\x12\r\n\x05perkw\x18\x01 \x01(\r\x12\r\n\x05perkb\x18\x02 \x01(\r\"\xdd\x02\n\x1fListpeerchannelsChannelsFunding\x12%\n\x0bpushed_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12%\n\x10local_funds_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11remote_funds_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\'\n\rfee_paid_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\'\n\rfee_rcvd_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x11\n\x04psbt\x18\x06 \x01(\tH\x03\x88\x01\x01\x12\x15\n\x08withheld\x18\x07 \x01(\x08H\x04\x88\x01\x01\x42\x0e\n\x0c_pushed_msatB\x10\n\x0e_fee_paid_msatB\x10\n\x0e_fee_rcvd_msatB\x07\n\x05_psbtB\x0b\n\t_withheld\"\xf9\x02\n\x1dListpeerchannelsChannelsHtlcs\x12\\\n\tdirection\x18\x01 \x01(\x0e\x32I.cln.ListpeerchannelsChannelsHtlcs.ListpeerchannelsChannelsHtlcsDirection\x12\n\n\x02id\x18\x02 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06\x65xpiry\x18\x04 \x01(\r\x12\x14\n\x0cpayment_hash\x18\x05 \x01(\x0c\x12\x1a\n\rlocal_trimmed\x18\x06 \x01(\x08H\x00\x88\x01\x01\x12\x13\n\x06status\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x1d\n\x05state\x18\x08 \x01(\x0e\x32\x0e.cln.HtlcState\"9\n&ListpeerchannelsChannelsHtlcsDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\x42\x10\n\x0e_local_trimmedB\t\n\x07_status\"\xf4\x01\n ListpeerchannelsChannelsInflight\x12\x14\n\x0c\x66unding_txid\x18\x01 \x01(\x0c\x12\x16\n\x0e\x66unding_outnum\x18\x02 \x01(\r\x12\x0f\n\x07\x66\x65\x65rate\x18\x03 \x01(\t\x12\'\n\x12total_funding_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10our_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x0cscratch_txid\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12\x15\n\rsplice_amount\x18\x07 \x01(\x12\x42\x0f\n\r_scratch_txid\"\xf0\x02\n$ListpeerchannelsChannelsStateChanges\x12\x11\n\ttimestamp\x18\x01 \x01(\t\x12$\n\told_state\x18\x02 \x01(\x0e\x32\x11.cln.ChannelState\x12$\n\tnew_state\x18\x03 \x01(\x0e\x32\x11.cln.ChannelState\x12\x62\n\x05\x63\x61use\x18\x04 \x01(\x0e\x32S.cln.ListpeerchannelsChannelsStateChanges.ListpeerchannelsChannelsStateChangesCause\x12\x0f\n\x07message\x18\x05 \x01(\t\"t\n)ListpeerchannelsChannelsStateChangesCause\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05LOCAL\x10\x01\x12\x08\n\x04USER\x10\x02\x12\n\n\x06REMOTE\x10\x03\x12\x0c\n\x08PROTOCOL\x10\x04\x12\x0b\n\x07ONCHAIN\x10\x05\"\xa7\x01\n\x1fListpeerchannelsChannelsUpdates\x12\x38\n\x05local\x18\x01 \x01(\x0b\x32).cln.ListpeerchannelsChannelsUpdatesLocal\x12?\n\x06remote\x18\x02 \x01(\x0b\x32*.cln.ListpeerchannelsChannelsUpdatesRemoteH\x00\x88\x01\x01\x42\t\n\x07_remote\"\xda\x01\n$ListpeerchannelsChannelsUpdatesLocal\x12&\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x11\x63ltv_expiry_delta\x18\x03 \x01(\r\x12\"\n\rfee_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x05 \x01(\r\"\xdb\x01\n%ListpeerchannelsChannelsUpdatesRemote\x12&\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x11\x63ltv_expiry_delta\x18\x03 \x01(\r\x12\"\n\rfee_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x05 \x01(\r\"3\n\x19ListclosedchannelsRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x42\x05\n\x03_id\"[\n\x1aListclosedchannelsResponse\x12=\n\x0e\x63losedchannels\x18\x01 \x03(\x0b\x32%.cln.ListclosedchannelsClosedchannels\"\xae\x0b\n ListclosedchannelsClosedchannels\x12\x14\n\x07peer_id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x12\n\nchannel_id\x18\x02 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x01\x88\x01\x01\x12>\n\x05\x61lias\x18\x04 \x01(\x0b\x32*.cln.ListclosedchannelsClosedchannelsAliasH\x02\x88\x01\x01\x12 \n\x06opener\x18\x05 \x01(\x0e\x32\x10.cln.ChannelSide\x12%\n\x06\x63loser\x18\x06 \x01(\x0e\x32\x10.cln.ChannelSideH\x03\x88\x01\x01\x12\x0f\n\x07private\x18\x07 \x01(\x08\x12K\n\x0c\x63hannel_type\x18\x08 \x01(\x0b\x32\x30.cln.ListclosedchannelsClosedchannelsChannelTypeH\x04\x88\x01\x01\x12\x1f\n\x17total_local_commitments\x18\t \x01(\x04\x12 \n\x18total_remote_commitments\x18\n \x01(\x04\x12\x18\n\x10total_htlcs_sent\x18\x0b \x01(\x04\x12\x14\n\x0c\x66unding_txid\x18\x0c \x01(\x0c\x12\x16\n\x0e\x66unding_outnum\x18\r \x01(\r\x12\x0e\n\x06leased\x18\x0e \x01(\x08\x12/\n\x15\x66unding_fee_paid_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12/\n\x15\x66unding_fee_rcvd_msat\x18\x10 \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12-\n\x13\x66unding_pushed_msat\x18\x11 \x01(\x0b\x32\x0b.cln.AmountH\x07\x88\x01\x01\x12\x1f\n\ntotal_msat\x18\x12 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x66inal_to_us_msat\x18\x13 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0emin_to_us_msat\x18\x14 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0emax_to_us_msat\x18\x15 \x01(\x0b\x32\x0b.cln.Amount\x12!\n\x14last_commitment_txid\x18\x16 \x01(\x0cH\x08\x88\x01\x01\x12\x32\n\x18last_commitment_fee_msat\x18\x17 \x01(\x0b\x32\x0b.cln.AmountH\t\x88\x01\x01\x12\x65\n\x0b\x63lose_cause\x18\x18 \x01(\x0e\x32P.cln.ListclosedchannelsClosedchannels.ListclosedchannelsClosedchannelsCloseCause\x12#\n\x16last_stable_connection\x18\x19 \x01(\x04H\n\x88\x01\x01\x12\x19\n\x0c\x66unding_psbt\x18\x1a \x01(\tH\x0b\x88\x01\x01\x12\x1d\n\x10\x66unding_withheld\x18\x1b \x01(\x08H\x0c\x88\x01\x01\"u\n*ListclosedchannelsClosedchannelsCloseCause\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05LOCAL\x10\x01\x12\x08\n\x04USER\x10\x02\x12\n\n\x06REMOTE\x10\x03\x12\x0c\n\x08PROTOCOL\x10\x04\x12\x0b\n\x07ONCHAIN\x10\x05\x42\n\n\x08_peer_idB\x13\n\x11_short_channel_idB\x08\n\x06_aliasB\t\n\x07_closerB\x0f\n\r_channel_typeB\x18\n\x16_funding_fee_paid_msatB\x18\n\x16_funding_fee_rcvd_msatB\x16\n\x14_funding_pushed_msatB\x17\n\x15_last_commitment_txidB\x1b\n\x19_last_commitment_fee_msatB\x19\n\x17_last_stable_connectionB\x0f\n\r_funding_psbtB\x13\n\x11_funding_withheld\"e\n%ListclosedchannelsClosedchannelsAlias\x12\x12\n\x05local\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06remote\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_localB\t\n\x07_remote\"`\n+ListclosedchannelsClosedchannelsChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x1f\n\rDecodeRequest\x12\x0e\n\x06string\x18\x01 \x01(\t\"\xbd.\n\x0e\x44\x65\x63odeResponse\x12\x31\n\titem_type\x18\x01 \x01(\x0e\x32\x1e.cln.DecodeResponse.DecodeType\x12\r\n\x05valid\x18\x02 \x01(\x08\x12\x15\n\x08offer_id\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x14\n\x0coffer_chains\x18\x04 \x03(\x0c\x12\x1b\n\x0eoffer_metadata\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12\x1b\n\x0eoffer_currency\x18\x06 \x01(\tH\x02\x88\x01\x01\x12+\n\x1ewarning_unknown_offer_currency\x18\x07 \x01(\tH\x03\x88\x01\x01\x12 \n\x13\x63urrency_minor_unit\x18\x08 \x01(\rH\x04\x88\x01\x01\x12\x19\n\x0coffer_amount\x18\t \x01(\x04H\x05\x88\x01\x01\x12+\n\x11offer_amount_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x1e\n\x11offer_description\x18\x0b \x01(\tH\x07\x88\x01\x01\x12\x19\n\x0coffer_issuer\x18\x0c \x01(\tH\x08\x88\x01\x01\x12\x1b\n\x0eoffer_features\x18\r \x01(\x0cH\t\x88\x01\x01\x12\"\n\x15offer_absolute_expiry\x18\x0e \x01(\x04H\n\x88\x01\x01\x12\x1f\n\x12offer_quantity_max\x18\x0f \x01(\x04H\x0b\x88\x01\x01\x12*\n\x0boffer_paths\x18\x10 \x03(\x0b\x32\x15.cln.DecodeOfferPaths\x12\x39\n\x10offer_recurrence\x18\x12 \x01(\x0b\x32\x1a.cln.DecodeOfferRecurrenceH\x0c\x88\x01\x01\x12\x37\n\x12unknown_offer_tlvs\x18\x13 \x03(\x0b\x32\x1b.cln.DecodeUnknownOfferTlvs\x12.\n!warning_invalid_offer_description\x18\x15 \x01(\tH\r\x88\x01\x01\x12.\n!warning_missing_offer_description\x18\x16 \x01(\tH\x0e\x88\x01\x01\x12+\n\x1ewarning_invalid_offer_currency\x18\x17 \x01(\tH\x0f\x88\x01\x01\x12)\n\x1cwarning_invalid_offer_issuer\x18\x18 \x01(\tH\x10\x88\x01\x01\x12\x1c\n\x0finvreq_metadata\x18\x19 \x01(\x0cH\x11\x88\x01\x01\x12\x1c\n\x0finvreq_payer_id\x18\x1a \x01(\x0cH\x12\x88\x01\x01\x12\x19\n\x0cinvreq_chain\x18\x1b \x01(\x0cH\x13\x88\x01\x01\x12,\n\x12invreq_amount_msat\x18\x1c \x01(\x0b\x32\x0b.cln.AmountH\x14\x88\x01\x01\x12\x1c\n\x0finvreq_features\x18\x1d \x01(\x0cH\x15\x88\x01\x01\x12\x1c\n\x0finvreq_quantity\x18\x1e \x01(\x04H\x16\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x1f \x01(\tH\x17\x88\x01\x01\x12&\n\x19invreq_recurrence_counter\x18 \x01(\rH\x18\x88\x01\x01\x12$\n\x17invreq_recurrence_start\x18! \x01(\rH\x19\x88\x01\x01\x12J\n\x1cunknown_invoice_request_tlvs\x18\" \x03(\x0b\x32$.cln.DecodeUnknownInvoiceRequestTlvs\x12,\n\x1fwarning_missing_invreq_metadata\x18# \x01(\tH\x1a\x88\x01\x01\x12,\n\x1fwarning_missing_invreq_payer_id\x18$ \x01(\tH\x1b\x88\x01\x01\x12.\n!warning_invalid_invreq_payer_note\x18% \x01(\tH\x1c\x88\x01\x01\x12\x36\n)warning_missing_invoice_request_signature\x18& \x01(\tH\x1d\x88\x01\x01\x12\x36\n)warning_invalid_invoice_request_signature\x18\' \x01(\tH\x1e\x88\x01\x01\x12.\n\rinvoice_paths\x18( \x03(\x0b\x32\x17.cln.DecodeInvoicePaths\x12\x1f\n\x12invoice_created_at\x18) \x01(\x04H\x1f\x88\x01\x01\x12$\n\x17invoice_relative_expiry\x18* \x01(\rH \x88\x01\x01\x12!\n\x14invoice_payment_hash\x18+ \x01(\x0cH!\x88\x01\x01\x12-\n\x13invoice_amount_msat\x18, \x01(\x0b\x32\x0b.cln.AmountH\"\x88\x01\x01\x12\x36\n\x11invoice_fallbacks\x18- \x03(\x0b\x32\x1b.cln.DecodeInvoiceFallbacks\x12\x1d\n\x10invoice_features\x18. \x01(\x0cH#\x88\x01\x01\x12\x1c\n\x0finvoice_node_id\x18/ \x01(\x0cH$\x88\x01\x01\x12(\n\x1binvoice_recurrence_basetime\x18\x30 \x01(\x04H%\x88\x01\x01\x12;\n\x14unknown_invoice_tlvs\x18\x31 \x03(\x0b\x32\x1d.cln.DecodeUnknownInvoiceTlvs\x12*\n\x1dwarning_missing_invoice_paths\x18\x32 \x01(\tH&\x88\x01\x01\x12/\n\"warning_missing_invoice_blindedpay\x18\x33 \x01(\tH\'\x88\x01\x01\x12/\n\"warning_missing_invoice_created_at\x18\x34 \x01(\tH(\x88\x01\x01\x12\x31\n$warning_missing_invoice_payment_hash\x18\x35 \x01(\tH)\x88\x01\x01\x12+\n\x1ewarning_missing_invoice_amount\x18\x36 \x01(\tH*\x88\x01\x01\x12\x38\n+warning_missing_invoice_recurrence_basetime\x18\x37 \x01(\tH+\x88\x01\x01\x12,\n\x1fwarning_missing_invoice_node_id\x18\x38 \x01(\tH,\x88\x01\x01\x12.\n!warning_missing_invoice_signature\x18\x39 \x01(\tH-\x88\x01\x01\x12.\n!warning_invalid_invoice_signature\x18: \x01(\tH.\x88\x01\x01\x12\'\n\tfallbacks\x18; \x03(\x0b\x32\x14.cln.DecodeFallbacks\x12\x17\n\ncreated_at\x18< \x01(\x04H/\x88\x01\x01\x12\x13\n\x06\x65xpiry\x18= \x01(\x04H0\x88\x01\x01\x12\x12\n\x05payee\x18> \x01(\x0cH1\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18? \x01(\x0cH2\x88\x01\x01\x12\x1d\n\x10\x64\x65scription_hash\x18@ \x01(\x0cH3\x88\x01\x01\x12\"\n\x15min_final_cltv_expiry\x18\x41 \x01(\rH4\x88\x01\x01\x12\x1b\n\x0epayment_secret\x18\x42 \x01(\x0cH5\x88\x01\x01\x12\x1d\n\x10payment_metadata\x18\x43 \x01(\x0cH6\x88\x01\x01\x12\x1f\n\x05\x65xtra\x18\x45 \x03(\x0b\x32\x10.cln.DecodeExtra\x12\x16\n\tunique_id\x18\x46 \x01(\tH7\x88\x01\x01\x12\x14\n\x07version\x18G \x01(\tH8\x88\x01\x01\x12\x13\n\x06string\x18H \x01(\tH9\x88\x01\x01\x12-\n\x0crestrictions\x18I \x03(\x0b\x32\x17.cln.DecodeRestrictions\x12&\n\x19warning_rune_invalid_utf8\x18J \x01(\tH:\x88\x01\x01\x12\x10\n\x03hex\x18K \x01(\x0cH;\x88\x01\x01\x12\x16\n\tdecrypted\x18L \x01(\x0cH<\x88\x01\x01\x12\x16\n\tsignature\x18M \x01(\tH=\x88\x01\x01\x12\x15\n\x08\x63urrency\x18N \x01(\tH>\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18O \x01(\x0b\x32\x0b.cln.AmountH?\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18P \x01(\tH@\x88\x01\x01\x12\x15\n\x08\x66\x65\x61tures\x18Q \x01(\x0cHA\x88\x01\x01\x12-\n\x06routes\x18R \x01(\x0b\x32\x18.cln.DecodeRoutehintListHB\x88\x01\x01\x12\x1c\n\x0foffer_issuer_id\x18S \x01(\x0cHC\x88\x01\x01\x12,\n\x1fwarning_missing_offer_issuer_id\x18T \x01(\tHD\x88\x01\x01\x12,\n\x0cinvreq_paths\x18U \x03(\x0b\x32\x16.cln.DecodeInvreqPaths\x12\'\n\x1awarning_empty_blinded_path\x18V \x01(\tHE\x88\x01\x01\x12=\n\x13invreq_bip_353_name\x18W \x01(\x0b\x32\x1b.cln.DecodeInvreqBip353NameHF\x88\x01\x01\x12\x35\n(warning_invreq_bip_353_name_name_invalid\x18X \x01(\tHG\x88\x01\x01\x12\x37\n*warning_invreq_bip_353_name_domain_invalid\x18Y \x01(\tHH\x88\x01\x01\x12%\n\x18invreq_recurrence_cancel\x18Z \x01(\x08HI\x88\x01\x01\x12=\n0warning_invreq_recurrence_cancel_without_counter\x18[ \x01(\tHJ\x88\x01\x01\x12?\n2warning_invreq_recurrence_cancel_with_zero_counter\x18\\ \x01(\tHK\x88\x01\x01\x12\x1b\n\x0eproof_preimage\x18] \x01(\x0cHL\x88\x01\x01\x12\x1a\n\x12proof_omitted_tlvs\x18^ \x03(\x04\x12\x1c\n\x14proof_missing_hashes\x18_ \x03(\x0c\x12\x19\n\x11proof_leaf_hashes\x18` \x03(\x0c\x12\x17\n\nproof_note\x18\x61 \x01(\tHM\x88\x01\x01\x12\x1c\n\x0fproof_signature\x18\x62 \x01(\tHN\x88\x01\x01\x12\x42\n\x18unknown_payer_proof_tlvs\x18\x63 \x03(\x0b\x32 .cln.DecodeUnknownPayerProofTlvs\"\x9b\x01\n\nDecodeType\x12\x10\n\x0c\x42OLT12_OFFER\x10\x00\x12\x12\n\x0e\x42OLT12_INVOICE\x10\x01\x12\x1a\n\x16\x42OLT12_INVOICE_REQUEST\x10\x02\x12\x12\n\x0e\x42OLT11_INVOICE\x10\x03\x12\x08\n\x04RUNE\x10\x04\x12\x15\n\x11\x45MERGENCY_RECOVER\x10\x05\x12\x16\n\x12\x42OLT12_PAYER_PROOF\x10\x06\x42\x0b\n\t_offer_idB\x11\n\x0f_offer_metadataB\x11\n\x0f_offer_currencyB!\n\x1f_warning_unknown_offer_currencyB\x16\n\x14_currency_minor_unitB\x0f\n\r_offer_amountB\x14\n\x12_offer_amount_msatB\x14\n\x12_offer_descriptionB\x0f\n\r_offer_issuerB\x11\n\x0f_offer_featuresB\x18\n\x16_offer_absolute_expiryB\x15\n\x13_offer_quantity_maxB\x13\n\x11_offer_recurrenceB$\n\"_warning_invalid_offer_descriptionB$\n\"_warning_missing_offer_descriptionB!\n\x1f_warning_invalid_offer_currencyB\x1f\n\x1d_warning_invalid_offer_issuerB\x12\n\x10_invreq_metadataB\x12\n\x10_invreq_payer_idB\x0f\n\r_invreq_chainB\x15\n\x13_invreq_amount_msatB\x12\n\x10_invreq_featuresB\x12\n\x10_invreq_quantityB\x14\n\x12_invreq_payer_noteB\x1c\n\x1a_invreq_recurrence_counterB\x1a\n\x18_invreq_recurrence_startB\"\n _warning_missing_invreq_metadataB\"\n _warning_missing_invreq_payer_idB$\n\"_warning_invalid_invreq_payer_noteB,\n*_warning_missing_invoice_request_signatureB,\n*_warning_invalid_invoice_request_signatureB\x15\n\x13_invoice_created_atB\x1a\n\x18_invoice_relative_expiryB\x17\n\x15_invoice_payment_hashB\x16\n\x14_invoice_amount_msatB\x13\n\x11_invoice_featuresB\x12\n\x10_invoice_node_idB\x1e\n\x1c_invoice_recurrence_basetimeB \n\x1e_warning_missing_invoice_pathsB%\n#_warning_missing_invoice_blindedpayB%\n#_warning_missing_invoice_created_atB\'\n%_warning_missing_invoice_payment_hashB!\n\x1f_warning_missing_invoice_amountB.\n,_warning_missing_invoice_recurrence_basetimeB\"\n _warning_missing_invoice_node_idB$\n\"_warning_missing_invoice_signatureB$\n\"_warning_invalid_invoice_signatureB\r\n\x0b_created_atB\t\n\x07_expiryB\x08\n\x06_payeeB\x0f\n\r_payment_hashB\x13\n\x11_description_hashB\x18\n\x16_min_final_cltv_expiryB\x11\n\x0f_payment_secretB\x13\n\x11_payment_metadataB\x0c\n\n_unique_idB\n\n\x08_versionB\t\n\x07_stringB\x1c\n\x1a_warning_rune_invalid_utf8B\x06\n\x04_hexB\x0c\n\n_decryptedB\x0c\n\n_signatureB\x0b\n\t_currencyB\x0e\n\x0c_amount_msatB\x0e\n\x0c_descriptionB\x0b\n\t_featuresB\t\n\x07_routesB\x12\n\x10_offer_issuer_idB\"\n _warning_missing_offer_issuer_idB\x1d\n\x1b_warning_empty_blinded_pathB\x16\n\x14_invreq_bip_353_nameB+\n)_warning_invreq_bip_353_name_name_invalidB-\n+_warning_invreq_bip_353_name_domain_invalidB\x1b\n\x19_invreq_recurrence_cancelB3\n1_warning_invreq_recurrence_cancel_without_counterB5\n3_warning_invreq_recurrence_cancel_with_zero_counterB\x11\n\x0f_proof_preimageB\r\n\x0b_proof_noteB\x12\n\x10_proof_signature\"(\n\x0b\x44\x65\x63odeExtra\x12\x0b\n\x03tag\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\t\"\xc4\x01\n\x0f\x44\x65\x63odeFallbacks\x12;\n\titem_type\x18\x02 \x01(\x0e\x32(.cln.DecodeFallbacks.DecodeFallbacksType\x12\x11\n\x04\x61\x64\x64r\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x0b\n\x03hex\x18\x04 \x01(\x0c\"K\n\x13\x44\x65\x63odeFallbacksType\x12\t\n\x05P2PKH\x10\x00\x12\x08\n\x04P2SH\x10\x01\x12\n\n\x06P2WPKH\x10\x02\x12\t\n\x05P2WSH\x10\x03\x12\x08\n\x04P2TR\x10\x04\x42\x07\n\x05_addr\"X\n\x16\x44\x65\x63odeInvoiceFallbacks\x12\x0f\n\x07version\x18\x01 \x01(\r\x12\x0b\n\x03hex\x18\x02 \x01(\x0c\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_address\"\xa6\x02\n\x12\x44\x65\x63odeInvoicePaths\x12)\n\x04path\x18\x01 \x03(\x0b\x32\x1b.cln.DecodeInvoicePathsPath\x12/\n\x07payinfo\x18\x02 \x01(\x0b\x32\x1e.cln.DecodeInvoicePathsPayinfo\x12\x1a\n\rfirst_node_id\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x1b\n\x0e\x66irst_path_key\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x12\x1b\n\x0e\x66irst_scid_dir\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x17\n\nfirst_scid\x18\x06 \x01(\tH\x03\x88\x01\x01\x42\x10\n\x0e_first_node_idB\x11\n\x0f_first_path_keyB\x11\n\x0f_first_scid_dirB\r\n\x0b_first_scid\"S\n\x16\x44\x65\x63odeInvoicePathsPath\x12\x17\n\x0f\x62linded_node_id\x18\x01 \x01(\x0c\x12 \n\x18\x65ncrypted_recipient_data\x18\x02 \x01(\x0c\"\x97\x02\n\x19\x44\x65\x63odeInvoicePathsPayinfo\x12+\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x10\n\x08\x66\x65\x61tures\x18\x02 \x01(\x0c\x12\"\n\rfee_base_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x04 \x01(\r\x12+\n\x11htlc_maximum_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x19\n\x11\x63ltv_expiry_delta\x18\x06 \x01(\rB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msat\"T\n\x16\x44\x65\x63odeInvreqBip353Name\x12\x11\n\x04name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x64omain\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x07\n\x05_nameB\t\n\x07_domain\"\xf3\x01\n\x11\x44\x65\x63odeInvreqPaths\x12\x1b\n\x0e\x66irst_scid_dir\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x1a\n\rfirst_node_id\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x17\n\nfirst_scid\x18\x04 \x01(\tH\x02\x88\x01\x01\x12(\n\x04path\x18\x05 \x03(\x0b\x32\x1a.cln.DecodeInvreqPathsPath\x12\x1b\n\x0e\x66irst_path_key\x18\x06 \x01(\x0cH\x03\x88\x01\x01\x42\x11\n\x0f_first_scid_dirB\x10\n\x0e_first_node_idB\r\n\x0b_first_scidB\x11\n\x0f_first_path_key\"R\n\x15\x44\x65\x63odeInvreqPathsPath\x12\x17\n\x0f\x62linded_node_id\x18\x01 \x01(\x0c\x12 \n\x18\x65ncrypted_recipient_data\x18\x02 \x01(\x0c\"\xf1\x01\n\x10\x44\x65\x63odeOfferPaths\x12\x1a\n\rfirst_node_id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\'\n\x04path\x18\x03 \x03(\x0b\x32\x19.cln.DecodeOfferPathsPath\x12\x1b\n\x0e\x66irst_scid_dir\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x17\n\nfirst_scid\x18\x05 \x01(\tH\x02\x88\x01\x01\x12\x1b\n\x0e\x66irst_path_key\x18\x06 \x01(\x0cH\x03\x88\x01\x01\x42\x10\n\x0e_first_node_idB\x11\n\x0f_first_scid_dirB\r\n\x0b_first_scidB\x11\n\x0f_first_path_key\"Q\n\x14\x44\x65\x63odeOfferPathsPath\x12\x17\n\x0f\x62linded_node_id\x18\x01 \x01(\x0c\x12 \n\x18\x65ncrypted_recipient_data\x18\x02 \x01(\x0c\"\xab\x02\n\x15\x44\x65\x63odeOfferRecurrence\x12\x11\n\ttime_unit\x18\x01 \x01(\r\x12\x1d\n\x10\x63ompulsory_field\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x1b\n\x0etime_unit_name\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0e\n\x06period\x18\x04 \x01(\r\x12\x15\n\x08\x62\x61setime\x18\x05 \x01(\x04H\x02\x88\x01\x01\x12;\n\tpaywindow\x18\x06 \x01(\x0b\x32#.cln.DecodeOfferRecurrencePaywindowH\x03\x88\x01\x01\x12\x12\n\x05limit\x18\x07 \x01(\rH\x04\x88\x01\x01\x42\x13\n\x11_compulsory_fieldB\x11\n\x0f_time_unit_nameB\x0b\n\t_basetimeB\x0c\n\n_paywindowB\x08\n\x06_limit\"\x89\x01\n\x1e\x44\x65\x63odeOfferRecurrencePaywindow\x12\x16\n\x0eseconds_before\x18\x01 \x01(\r\x12\x15\n\rseconds_after\x18\x02 \x01(\r\x12 \n\x13proportional_amount\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\x16\n\x14_proportional_amount\";\n\x12\x44\x65\x63odeRestrictions\x12\x14\n\x0c\x61lternatives\x18\x01 \x03(\t\x12\x0f\n\x07summary\x18\x02 \x01(\t\"S\n\x1f\x44\x65\x63odeUnknownInvoiceRequestTlvs\x12\x11\n\titem_type\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\r\n\x05value\x18\x03 \x01(\x0c\"L\n\x18\x44\x65\x63odeUnknownInvoiceTlvs\x12\x11\n\titem_type\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\r\n\x05value\x18\x03 \x01(\x0c\"J\n\x16\x44\x65\x63odeUnknownOfferTlvs\x12\x11\n\titem_type\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\r\n\x05value\x18\x03 \x01(\x0c\"O\n\x1b\x44\x65\x63odeUnknownPayerProofTlvs\x12\x11\n\titem_type\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\r\n\x05value\x18\x03 \x01(\x0c\"\xc2\x01\n\rDelpayRequest\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12/\n\x06status\x18\x02 \x01(\x0e\x32\x1f.cln.DelpayRequest.DelpayStatus\x12\x13\n\x06partid\x18\x03 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07groupid\x18\x04 \x01(\x04H\x01\x88\x01\x01\"(\n\x0c\x44\x65lpayStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x42\t\n\x07_partidB\n\n\x08_groupid\"7\n\x0e\x44\x65lpayResponse\x12%\n\x08payments\x18\x01 \x03(\x0b\x32\x13.cln.DelpayPayments\"\xb4\x05\n\x0e\x44\x65lpayPayments\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\n\n\x02id\x18\x02 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x38\n\x06status\x18\x04 \x01(\x0e\x32(.cln.DelpayPayments.DelpayPaymentsStatus\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x06partid\x18\x06 \x01(\x04H\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x07 \x01(\x0cH\x01\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x12\n\ncreated_at\x18\t \x01(\x04\x12\x1a\n\rupdated_index\x18\n \x01(\x04H\x03\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0b \x01(\x04H\x04\x88\x01\x01\x12\x14\n\x07groupid\x18\x0c \x01(\x04H\x05\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x06\x88\x01\x01\x12\x12\n\x05label\x18\x0e \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0f \x01(\tH\x08\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x10 \x01(\tH\t\x88\x01\x01\x12\x17\n\nerroronion\x18\x11 \x01(\x0cH\n\x88\x01\x01\"=\n\x14\x44\x65lpayPaymentsStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\t\n\x07_partidB\x0e\n\x0c_destinationB\x0e\n\x0c_amount_msatB\x10\n\x0e_updated_indexB\x0f\n\r_completed_atB\n\n\x08_groupidB\x13\n\x11_payment_preimageB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\r\n\x0b_erroronion\"\xb3\x01\n\x11\x44\x65lforwardRequest\x12\x12\n\nin_channel\x18\x01 \x01(\t\x12\x12\n\nin_htlc_id\x18\x02 \x01(\x04\x12\x37\n\x06status\x18\x03 \x01(\x0e\x32\'.cln.DelforwardRequest.DelforwardStatus\"=\n\x10\x44\x65lforwardStatus\x12\x0b\n\x07SETTLED\x10\x00\x12\x10\n\x0cLOCAL_FAILED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\"\x14\n\x12\x44\x65lforwardResponse\"\'\n\x13\x44isableofferRequest\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\"\xdc\x01\n\x14\x44isableofferResponse\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x66orce_paths\x18\x08 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_descriptionB\x0e\n\x0c_force_paths\"&\n\x12\x45nableofferRequest\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\"\xdb\x01\n\x13\x45nableofferResponse\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x66orce_paths\x18\x08 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_descriptionB\x0e\n\x0c_force_paths\"=\n\x11\x44isconnectRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x12\n\x05\x66orce\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\x08\n\x06_force\"\x14\n\x12\x44isconnectResponse\"k\n\x0f\x46\x65\x65ratesRequest\x12\x31\n\x05style\x18\x01 \x01(\x0e\x32\".cln.FeeratesRequest.FeeratesStyle\"%\n\rFeeratesStyle\x12\t\n\x05PERKB\x10\x00\x12\t\n\x05PERKW\x10\x01\"\x9a\x02\n\x10\x46\x65\x65ratesResponse\x12%\n\x18warning_missing_feerates\x18\x01 \x01(\tH\x00\x88\x01\x01\x12&\n\x05perkb\x18\x02 \x01(\x0b\x32\x12.cln.FeeratesPerkbH\x01\x88\x01\x01\x12&\n\x05perkw\x18\x03 \x01(\x0b\x32\x12.cln.FeeratesPerkwH\x02\x88\x01\x01\x12\x44\n\x15onchain_fee_estimates\x18\x04 \x01(\x0b\x32 .cln.FeeratesOnchainFeeEstimatesH\x03\x88\x01\x01\x42\x1b\n\x19_warning_missing_feeratesB\x08\n\x06_perkbB\x08\n\x06_perkwB\x18\n\x16_onchain_fee_estimates\"\x99\x02\n\x1b\x46\x65\x65ratesOnchainFeeEstimates\x12 \n\x18opening_channel_satoshis\x18\x01 \x01(\x04\x12\x1d\n\x15mutual_close_satoshis\x18\x02 \x01(\x04\x12!\n\x19unilateral_close_satoshis\x18\x03 \x01(\x04\x12\x1d\n\x15htlc_timeout_satoshis\x18\x04 \x01(\x04\x12\x1d\n\x15htlc_success_satoshis\x18\x05 \x01(\x04\x12\x30\n#unilateral_close_nonanchor_satoshis\x18\x06 \x01(\x04H\x00\x88\x01\x01\x42&\n$_unilateral_close_nonanchor_satoshis\"\x84\x03\n\rFeeratesPerkb\x12\x16\n\x0emin_acceptable\x18\x01 \x01(\r\x12\x16\n\x0emax_acceptable\x18\x02 \x01(\r\x12\x14\n\x07opening\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x19\n\x0cmutual_close\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1d\n\x10unilateral_close\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x14\n\x07penalty\x18\x08 \x01(\rH\x03\x88\x01\x01\x12.\n\testimates\x18\t \x03(\x0b\x32\x1b.cln.FeeratesPerkbEstimates\x12\r\n\x05\x66loor\x18\n \x01(\r\x12$\n\x17unilateral_anchor_close\x18\x0b \x01(\rH\x04\x88\x01\x01\x12\x13\n\x06splice\x18\x0c \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_openingB\x0f\n\r_mutual_closeB\x13\n\x11_unilateral_closeB\n\n\x08_penaltyB\x1a\n\x18_unilateral_anchor_closeB\t\n\x07_splice\"W\n\x16\x46\x65\x65ratesPerkbEstimates\x12\x12\n\nblockcount\x18\x01 \x01(\r\x12\x0f\n\x07\x66\x65\x65rate\x18\x02 \x01(\r\x12\x18\n\x10smoothed_feerate\x18\x03 \x01(\r\"\x84\x03\n\rFeeratesPerkw\x12\x16\n\x0emin_acceptable\x18\x01 \x01(\r\x12\x16\n\x0emax_acceptable\x18\x02 \x01(\r\x12\x14\n\x07opening\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x19\n\x0cmutual_close\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1d\n\x10unilateral_close\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x14\n\x07penalty\x18\x08 \x01(\rH\x03\x88\x01\x01\x12.\n\testimates\x18\t \x03(\x0b\x32\x1b.cln.FeeratesPerkwEstimates\x12\r\n\x05\x66loor\x18\n \x01(\r\x12$\n\x17unilateral_anchor_close\x18\x0b \x01(\rH\x04\x88\x01\x01\x12\x13\n\x06splice\x18\x0c \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_openingB\x0f\n\r_mutual_closeB\x13\n\x11_unilateral_closeB\n\n\x08_penaltyB\x1a\n\x18_unilateral_anchor_closeB\t\n\x07_splice\"W\n\x16\x46\x65\x65ratesPerkwEstimates\x12\x12\n\nblockcount\x18\x01 \x01(\r\x12\x0f\n\x07\x66\x65\x65rate\x18\x02 \x01(\r\x12\x18\n\x10smoothed_feerate\x18\x03 \x01(\r\"%\n\x12\x46\x65tchbip353Request\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\"X\n\x13\x46\x65tchbip353Response\x12\r\n\x05proof\x18\x01 \x01(\t\x12\x32\n\x0cinstructions\x18\x02 \x03(\x0b\x32\x1c.cln.Fetchbip353Instructions\"\xf7\x01\n\x17\x46\x65tchbip353Instructions\x12\x18\n\x0b\x64\x65scription\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05offer\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x07onchain\x18\x03 \x01(\tH\x02\x88\x01\x01\x12!\n\x14offchain_amount_msat\x18\x04 \x01(\x04H\x03\x88\x01\x01\x12\x1f\n\x12onchain_amount_sat\x18\x05 \x01(\x04H\x04\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x08\n\x06_offerB\n\n\x08_onchainB\x17\n\x15_offchain_amount_msatB\x15\n\x13_onchain_amount_sat\"\xb9\x03\n\x13\x46\x65tchinvoiceRequest\x12\r\n\x05offer\x18\x01 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x15\n\x08quantity\x18\x03 \x01(\x04H\x01\x88\x01\x01\x12\x1f\n\x12recurrence_counter\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x1d\n\x10recurrence_start\x18\x05 \x01(\x01H\x03\x88\x01\x01\x12\x1d\n\x10recurrence_label\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x14\n\x07timeout\x18\x07 \x01(\x01H\x05\x88\x01\x01\x12\x17\n\npayer_note\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x1b\n\x0epayer_metadata\x18\t \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06\x62ip353\x18\n \x01(\tH\x08\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\x0b\n\t_quantityB\x15\n\x13_recurrence_counterB\x13\n\x11_recurrence_startB\x13\n\x11_recurrence_labelB\n\n\x08_timeoutB\r\n\x0b_payer_noteB\x11\n\x0f_payer_metadataB\t\n\x07_bip353\"\x99\x01\n\x14\x46\x65tchinvoiceResponse\x12\x0f\n\x07invoice\x18\x01 \x01(\t\x12)\n\x07\x63hanges\x18\x02 \x01(\x0b\x32\x18.cln.FetchinvoiceChanges\x12\x35\n\x0bnext_period\x18\x03 \x01(\x0b\x32\x1b.cln.FetchinvoiceNextPeriodH\x00\x88\x01\x01\x42\x0e\n\x0c_next_period\"\x82\x02\n\x13\x46\x65tchinvoiceChanges\x12!\n\x14\x64\x65scription_appended\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1b\n\x0evendor_removed\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06vendor\x18\x04 \x01(\tH\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x42\x17\n\x15_description_appendedB\x0e\n\x0c_descriptionB\x11\n\x0f_vendor_removedB\t\n\x07_vendorB\x0e\n\x0c_amount_msat\"}\n\x16\x46\x65tchinvoiceNextPeriod\x12\x0f\n\x07\x63ounter\x18\x01 \x01(\x04\x12\x11\n\tstarttime\x18\x02 \x01(\x04\x12\x0f\n\x07\x65ndtime\x18\x03 \x01(\x04\x12\x17\n\x0fpaywindow_start\x18\x04 \x01(\x04\x12\x15\n\rpaywindow_end\x18\x05 \x01(\x04\"\xe0\x01\n\x1d\x43\x61ncelrecurringinvoiceRequest\x12\r\n\x05offer\x18\x01 \x01(\t\x12\x1a\n\x12recurrence_counter\x18\x02 \x01(\x04\x12\x18\n\x10recurrence_label\x18\x03 \x01(\t\x12\x1d\n\x10recurrence_start\x18\x04 \x01(\x01H\x00\x88\x01\x01\x12\x17\n\npayer_note\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06\x62ip353\x18\x06 \x01(\tH\x02\x88\x01\x01\x42\x13\n\x11_recurrence_startB\r\n\x0b_payer_noteB\t\n\x07_bip353\"0\n\x1e\x43\x61ncelrecurringinvoiceResponse\x12\x0e\n\x06\x62olt12\x18\x01 \x01(\t\"&\n\x18\x46undchannelCancelRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\".\n\x19\x46undchannelCancelResponse\x12\x11\n\tcancelled\x18\x01 \x01(\t\"Z\n\x1a\x46undchannelCompleteRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\x12\x15\n\x08withhold\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\x0b\n\t_withhold\"N\n\x1b\x46undchannelCompleteResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x1b\n\x13\x63ommitments_secured\x18\x02 \x01(\x08\"\x84\x04\n\x12\x46undchannelRequest\x12#\n\x06\x61mount\x18\x01 \x01(\x0b\x32\x13.cln.AmountSatOrAll\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x15\n\x08\x61nnounce\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12#\n\tpush_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\tH\x03\x88\x01\x01\x12(\n\x0brequest_amt\x18\x07 \x01(\x0b\x32\x0e.cln.AmountSatH\x04\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x08 \x01(\tH\x05\x88\x01\x01\x12\n\n\x02id\x18\t \x01(\x0c\x12\x14\n\x07minconf\x18\n \x01(\rH\x06\x88\x01\x01\x12\x1c\n\x05utxos\x18\x0b \x03(\x0b\x32\r.cln.Outpoint\x12\x15\n\x08mindepth\x18\x0c \x01(\rH\x07\x88\x01\x01\x12$\n\x07reserve\x18\r \x01(\x0b\x32\x0e.cln.AmountSatH\x08\x88\x01\x01\x12\x14\n\x0c\x63hannel_type\x18\x0e \x03(\rB\n\n\x08_feerateB\x0b\n\t_announceB\x0c\n\n_push_msatB\x0b\n\t_close_toB\x0e\n\x0c_request_amtB\x10\n\x0e_compact_leaseB\n\n\x08_minconfB\x0b\n\t_mindepthB\n\n\x08_reserve\"\xce\x01\n\x13\x46undchannelResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x0e\n\x06outnum\x18\x03 \x01(\r\x12\x12\n\nchannel_id\x18\x04 \x01(\x0c\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x12\x15\n\x08mindepth\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x31\n\x0c\x63hannel_type\x18\x07 \x01(\x0b\x32\x1b.cln.FundchannelChannelTypeB\x0b\n\t_close_toB\x0b\n\t_mindepth\"K\n\x16\x46undchannelChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\xdc\x02\n\x17\x46undchannelStartRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x1e\n\x06\x61mount\x18\x02 \x01(\x0b\x32\x0e.cln.AmountSat\x12\"\n\x07\x66\x65\x65rate\x18\x03 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x15\n\x08\x61nnounce\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\tH\x02\x88\x01\x01\x12#\n\tpush_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x15\n\x08mindepth\x18\x07 \x01(\rH\x04\x88\x01\x01\x12$\n\x07reserve\x18\x08 \x01(\x0b\x32\x0e.cln.AmountSatH\x05\x88\x01\x01\x12\x14\n\x0c\x63hannel_type\x18\t \x03(\rB\n\n\x08_feerateB\x0b\n\t_announceB\x0b\n\t_close_toB\x0c\n\n_push_msatB\x0b\n\t_mindepthB\n\n\x08_reserve\"\xf6\x01\n\x18\x46undchannelStartResponse\x12\x17\n\x0f\x66unding_address\x18\x01 \x01(\t\x12\x14\n\x0cscriptpubkey\x18\x02 \x01(\x0c\x12;\n\x0c\x63hannel_type\x18\x03 \x01(\x0b\x32 .cln.FundchannelStartChannelTypeH\x00\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x12\x15\n\rwarning_usage\x18\x05 \x01(\t\x12\x15\n\x08mindepth\x18\x06 \x01(\rH\x02\x88\x01\x01\x42\x0f\n\r_channel_typeB\x0b\n\t_close_toB\x0b\n\t_mindepth\"P\n\x1b\x46undchannelStartChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x9d\x01\n\rGetlogRequest\x12\x32\n\x05level\x18\x01 \x01(\x0e\x32\x1e.cln.GetlogRequest.GetlogLevelH\x00\x88\x01\x01\"N\n\x0bGetlogLevel\x12\n\n\x06\x42ROKEN\x10\x00\x12\x0b\n\x07UNUSUAL\x10\x01\x12\x08\n\x04INFO\x10\x02\x12\t\n\x05\x44\x45\x42UG\x10\x03\x12\x06\n\x02IO\x10\x04\x12\t\n\x05TRACE\x10\x05\x42\x08\n\x06_level\"h\n\x0eGetlogResponse\x12\x12\n\ncreated_at\x18\x01 \x01(\t\x12\x12\n\nbytes_used\x18\x02 \x01(\r\x12\x11\n\tbytes_max\x18\x03 \x01(\r\x12\x1b\n\x03log\x18\x04 \x03(\x0b\x32\x0e.cln.GetlogLog\"\xe8\x02\n\tGetlogLog\x12/\n\titem_type\x18\x01 \x01(\x0e\x32\x1c.cln.GetlogLog.GetlogLogType\x12\x18\n\x0bnum_skipped\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04time\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06source\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x10\n\x03log\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x07node_id\x18\x06 \x01(\x0cH\x04\x88\x01\x01\x12\x11\n\x04\x64\x61ta\x18\x07 \x01(\x0cH\x05\x88\x01\x01\"l\n\rGetlogLogType\x12\x0b\n\x07SKIPPED\x10\x00\x12\n\n\x06\x42ROKEN\x10\x01\x12\x0b\n\x07UNUSUAL\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\t\n\x05\x44\x45\x42UG\x10\x04\x12\t\n\x05IO_IN\x10\x05\x12\n\n\x06IO_OUT\x10\x06\x12\t\n\x05TRACE\x10\x07\x42\x0e\n\x0c_num_skippedB\x07\n\x05_timeB\t\n\x07_sourceB\x06\n\x04_logB\n\n\x08_node_idB\x07\n\x05_data\"\xd9\x08\n\x13\x46underupdateRequest\x12@\n\x06policy\x18\x01 \x01(\x0e\x32+.cln.FunderupdateRequest.FunderupdatePolicyH\x00\x88\x01\x01\x12$\n\npolicy_mod\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0bleases_only\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x30\n\x16min_their_funding_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x30\n\x16max_their_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12.\n\x14per_channel_min_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12.\n\x14per_channel_max_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12+\n\x11reserve_tank_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x07\x88\x01\x01\x12\x19\n\x0c\x66uzz_percent\x18\t \x01(\rH\x08\x88\x01\x01\x12\x1d\n\x10\x66und_probability\x18\n \x01(\rH\t\x88\x01\x01\x12-\n\x13lease_fee_base_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\n\x88\x01\x01\x12\x1c\n\x0flease_fee_basis\x18\x0c \x01(\rH\x0b\x88\x01\x01\x12\x1b\n\x0e\x66unding_weight\x18\r \x01(\rH\x0c\x88\x01\x01\x12\x33\n\x19\x63hannel_fee_max_base_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\r\x88\x01\x01\x12\x35\n(channel_fee_max_proportional_thousandths\x18\x0f \x01(\rH\x0e\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x10 \x01(\x0cH\x0f\x88\x01\x01\"9\n\x12\x46underupdatePolicy\x12\t\n\x05MATCH\x10\x00\x12\r\n\tAVAILABLE\x10\x01\x12\t\n\x05\x46IXED\x10\x02\x42\t\n\x07_policyB\r\n\x0b_policy_modB\x0e\n\x0c_leases_onlyB\x19\n\x17_min_their_funding_msatB\x19\n\x17_max_their_funding_msatB\x17\n\x15_per_channel_min_msatB\x17\n\x15_per_channel_max_msatB\x14\n\x12_reserve_tank_msatB\x0f\n\r_fuzz_percentB\x13\n\x11_fund_probabilityB\x16\n\x14_lease_fee_base_msatB\x12\n\x10_lease_fee_basisB\x11\n\x0f_funding_weightB\x1c\n\x1a_channel_fee_max_base_msatB+\n)_channel_fee_max_proportional_thousandthsB\x10\n\x0e_compact_lease\"\xdf\x06\n\x14\x46underupdateResponse\x12\x0f\n\x07summary\x18\x01 \x01(\t\x12<\n\x06policy\x18\x02 \x01(\x0e\x32,.cln.FunderupdateResponse.FunderupdatePolicy\x12\x12\n\npolicy_mod\x18\x03 \x01(\r\x12\x13\n\x0bleases_only\x18\x04 \x01(\x08\x12+\n\x16min_their_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x16max_their_funding_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12)\n\x14per_channel_min_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12)\n\x14per_channel_max_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11reserve_tank_msat\x18\t \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66uzz_percent\x18\n \x01(\r\x12\x18\n\x10\x66und_probability\x18\x0b \x01(\r\x12-\n\x13lease_fee_base_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x1c\n\x0flease_fee_basis\x18\r \x01(\rH\x01\x88\x01\x01\x12\x1b\n\x0e\x66unding_weight\x18\x0e \x01(\rH\x02\x88\x01\x01\x12\x33\n\x19\x63hannel_fee_max_base_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x35\n(channel_fee_max_proportional_thousandths\x18\x10 \x01(\rH\x04\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x11 \x01(\x0cH\x05\x88\x01\x01\"9\n\x12\x46underupdatePolicy\x12\t\n\x05MATCH\x10\x00\x12\r\n\tAVAILABLE\x10\x01\x12\t\n\x05\x46IXED\x10\x02\x42\x16\n\x14_lease_fee_base_msatB\x12\n\x10_lease_fee_basisB\x11\n\x0f_funding_weightB\x1c\n\x1a_channel_fee_max_base_msatB+\n)_channel_fee_max_proportional_thousandthsB\x10\n\x0e_compact_lease\"\x8c\x02\n\x0fGetrouteRequest\x12\x0e\n\x02id\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\nriskfactor\x18\x03 \x01(\x04\x42\x02\x18\x01\x12\x15\n\x04\x63ltv\x18\x04 \x01(\rB\x02\x18\x01H\x00\x88\x01\x01\x12\x17\n\x06\x66romid\x18\x05 \x01(\x0c\x42\x02\x18\x01H\x01\x88\x01\x01\x12\x1c\n\x0b\x66uzzpercent\x18\x06 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x13\n\x07\x65xclude\x18\x07 \x03(\tB\x02\x18\x01\x12\x18\n\x07maxhops\x18\x08 \x01(\rB\x02\x18\x01H\x03\x88\x01\x01\x12$\n\x0b\x61mount_msat\x18\t \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x42\x07\n\x05_cltvB\t\n\x07_fromidB\x0e\n\x0c_fuzzpercentB\n\n\x08_maxhops\"9\n\x10GetrouteResponse\x12%\n\x05route\x18\x01 \x03(\x0b\x32\x12.cln.GetrouteRouteB\x02\x18\x01\"\xe1\x01\n\rGetrouteRoute\x12\x0e\n\x02id\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x13\n\x07\x63hannel\x18\x02 \x01(\tB\x02\x18\x01\x12\x15\n\tdirection\x18\x03 \x01(\rB\x02\x18\x01\x12$\n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12\x11\n\x05\x64\x65lay\x18\x05 \x01(\rB\x02\x18\x01\x12\x38\n\x05style\x18\x06 \x01(\x0e\x32%.cln.GetrouteRoute.GetrouteRouteStyleB\x02\x18\x01\"!\n\x12GetrouteRouteStyle\x12\x0b\n\x03TLV\x10\x00\x1a\x02\x08\x01\"t\n\x14ListaddressesRequest\x12\x14\n\x07\x61\x64\x64ress\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05start\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x03 \x01(\rH\x02\x88\x01\x01\x42\n\n\x08_addressB\x08\n\x06_startB\x08\n\x06_limit\"G\n\x15ListaddressesResponse\x12.\n\taddresses\x18\x01 \x03(\x0b\x32\x1b.cln.ListaddressesAddresses\"d\n\x16ListaddressesAddresses\x12\x0e\n\x06keyidx\x18\x01 \x01(\x04\x12\x13\n\x06\x62\x65\x63h32\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04p2tr\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\t\n\x07_bech32B\x07\n\x05_p2tr\"\xb7\x03\n\x13ListforwardsRequest\x12@\n\x06status\x18\x01 \x01(\x0e\x32+.cln.ListforwardsRequest.ListforwardsStatusH\x00\x88\x01\x01\x12\x17\n\nin_channel\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0bout_channel\x18\x03 \x01(\tH\x02\x88\x01\x01\x12>\n\x05index\x18\x04 \x01(\x0e\x32*.cln.ListforwardsRequest.ListforwardsIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\"-\n\x11ListforwardsIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\"L\n\x12ListforwardsStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\x10\n\x0cLOCAL_FAILED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x42\t\n\x07_statusB\r\n\x0b_in_channelB\x0e\n\x0c_out_channelB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListforwardsResponse\x12+\n\x08\x66orwards\x18\x01 \x03(\x0b\x32\x19.cln.ListforwardsForwards\"\x9d\x06\n\x14ListforwardsForwards\x12\x12\n\nin_channel\x18\x01 \x01(\t\x12\x1c\n\x07in_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x44\n\x06status\x18\x03 \x01(\x0e\x32\x34.cln.ListforwardsForwards.ListforwardsForwardsStatus\x12\x15\n\rreceived_time\x18\x04 \x01(\x01\x12\x18\n\x0bout_channel\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\"\n\x08\x66\x65\x65_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\"\n\x08out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12G\n\x05style\x18\t \x01(\x0e\x32\x33.cln.ListforwardsForwards.ListforwardsForwardsStyleH\x03\x88\x01\x01\x12\x17\n\nin_htlc_id\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x18\n\x0bout_htlc_id\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0c \x01(\x04\x12\x1a\n\rupdated_index\x18\r \x01(\x04H\x06\x88\x01\x01\x12\x1a\n\rresolved_time\x18\x0e \x01(\x01H\x07\x88\x01\x01\x12\x15\n\x08\x66\x61ilcode\x18\x0f \x01(\rH\x08\x88\x01\x01\x12\x17\n\nfailreason\x18\x10 \x01(\tH\t\x88\x01\x01\"T\n\x1aListforwardsForwardsStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\x10\n\x0cLOCAL_FAILED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\"0\n\x19ListforwardsForwardsStyle\x12\n\n\x06LEGACY\x10\x00\x12\x07\n\x03TLV\x10\x01\x42\x0e\n\x0c_out_channelB\x0b\n\t_fee_msatB\x0b\n\t_out_msatB\x08\n\x06_styleB\r\n\x0b_in_htlc_idB\x0e\n\x0c_out_htlc_idB\x10\n\x0e_updated_indexB\x10\n\x0e_resolved_timeB\x0b\n\t_failcodeB\r\n\x0b_failreason\"a\n\x11ListoffersRequest\x12\x15\n\x08offer_id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x18\n\x0b\x61\x63tive_only\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\x0b\n\t_offer_idB\x0e\n\x0c_active_only\";\n\x12ListoffersResponse\x12%\n\x06offers\x18\x01 \x03(\x0b\x32\x15.cln.ListoffersOffers\"\xd8\x01\n\x10ListoffersOffers\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x66orce_paths\x18\x08 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_descriptionB\x0e\n\x0c_force_paths\"\x84\x03\n\x0fListpaysRequest\x12\x13\n\x06\x62olt11\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12\x38\n\x06status\x18\x03 \x01(\x0e\x32#.cln.ListpaysRequest.ListpaysStatusH\x02\x88\x01\x01\x12\x36\n\x05index\x18\x04 \x01(\x0e\x32\".cln.ListpaysRequest.ListpaysIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\")\n\rListpaysIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\"7\n\x0eListpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x42\t\n\x07_bolt11B\x0f\n\r_payment_hashB\t\n\x07_statusB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"3\n\x10ListpaysResponse\x12\x1f\n\x04pays\x18\x01 \x03(\x0b\x32\x11.cln.ListpaysPays\"\xdb\x05\n\x0cListpaysPays\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x34\n\x06status\x18\x02 \x01(\x0e\x32$.cln.ListpaysPays.ListpaysPaysStatus\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x12\n\ncreated_at\x18\x04 \x01(\x04\x12\x12\n\x05label\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x06 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x07 \x01(\tH\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12*\n\x10\x61mount_sent_msat\x18\t \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x17\n\nerroronion\x18\n \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0b \x01(\tH\x07\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0c \x01(\x04H\x08\x88\x01\x01\x12\x15\n\x08preimage\x18\r \x01(\x0cH\t\x88\x01\x01\x12\x1c\n\x0fnumber_of_parts\x18\x0e \x01(\x04H\n\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x0f \x01(\x04H\x0b\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x10 \x01(\x04H\x0c\x88\x01\x01\";\n\x12ListpaysPaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x13\n\x11_amount_sent_msatB\r\n\x0b_erroronionB\x0e\n\x0c_descriptionB\x0f\n\r_completed_atB\x0b\n\t_preimageB\x12\n\x10_number_of_partsB\x10\n\x0e_created_indexB\x10\n\x0e_updated_index\"\xd6\x01\n\x10ListhtlcsRequest\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x38\n\x05index\x18\x02 \x01(\x0e\x32$.cln.ListhtlcsRequest.ListhtlcsIndexH\x01\x88\x01\x01\x12\x12\n\x05start\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\rH\x03\x88\x01\x01\"*\n\x0eListhtlcsIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x42\x05\n\x03_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"7\n\x11ListhtlcsResponse\x12\"\n\x05htlcs\x18\x01 \x03(\x0b\x32\x13.cln.ListhtlcsHtlcs\"\xe5\x02\n\x0eListhtlcsHtlcs\x12\x18\n\x10short_channel_id\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\x04\x12\x0e\n\x06\x65xpiry\x18\x03 \x01(\r\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12>\n\tdirection\x18\x05 \x01(\x0e\x32+.cln.ListhtlcsHtlcs.ListhtlcsHtlcsDirection\x12\x14\n\x0cpayment_hash\x18\x06 \x01(\x0c\x12\x1d\n\x05state\x18\x07 \x01(\x0e\x32\x0e.cln.HtlcState\x12\x1a\n\rcreated_index\x18\x08 \x01(\x04H\x00\x88\x01\x01\x12\x1a\n\rupdated_index\x18\t \x01(\x04H\x01\x88\x01\x01\"*\n\x17ListhtlcsHtlcsDirection\x12\x07\n\x03OUT\x10\x00\x12\x06\n\x02IN\x10\x01\x42\x10\n\x0e_created_indexB\x10\n\x0e_updated_index\"\xb2\x02\n\x17MultifundchannelRequest\x12\x37\n\x0c\x64\x65stinations\x18\x01 \x03(\x0b\x32!.cln.MultifundchannelDestinations\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\x12H\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\x18\n\x0bminchannels\x18\x05 \x01(\x12H\x02\x88\x01\x01\x12-\n\x12\x63ommitment_feerate\x18\x06 \x01(\x0b\x32\x0c.cln.FeerateH\x03\x88\x01\x01\x42\n\n\x08_feerateB\n\n\x08_minconfB\x0e\n\x0c_minchannelsB\x15\n\x13_commitment_feerate\"\x97\x01\n\x18MultifundchannelResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x34\n\x0b\x63hannel_ids\x18\x03 \x03(\x0b\x32\x1f.cln.MultifundchannelChannelIds\x12+\n\x06\x66\x61iled\x18\x04 \x03(\x0b\x32\x1b.cln.MultifundchannelFailed\"\x88\x03\n\x1cMultifundchannelDestinations\x12\n\n\x02id\x18\x01 \x01(\t\x12#\n\x06\x61mount\x18\x02 \x01(\x0b\x32\x13.cln.AmountSatOrAll\x12\x15\n\x08\x61nnounce\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12#\n\tpush_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\tH\x02\x88\x01\x01\x12(\n\x0brequest_amt\x18\x06 \x01(\x0b\x32\x0e.cln.AmountSatH\x03\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x07 \x01(\tH\x04\x88\x01\x01\x12\x15\n\x08mindepth\x18\x08 \x01(\rH\x05\x88\x01\x01\x12$\n\x07reserve\x18\t \x01(\x0b\x32\x0e.cln.AmountSatH\x06\x88\x01\x01\x42\x0b\n\t_announceB\x0c\n\n_push_msatB\x0b\n\t_close_toB\x0e\n\x0c_request_amtB\x10\n\x0e_compact_leaseB\x0b\n\t_mindepthB\n\n\x08_reserve\"\xb2\x01\n\x1aMultifundchannelChannelIds\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\x12\x12\n\nchannel_id\x18\x03 \x01(\x0c\x12@\n\x0c\x63hannel_type\x18\x04 \x01(\x0b\x32*.cln.MultifundchannelChannelIdsChannelType\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x42\x0b\n\t_close_to\"Z\n%MultifundchannelChannelIdsChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x93\x02\n\x16MultifundchannelFailed\x12\n\n\x02id\x18\x01 \x01(\x0c\x12H\n\x06method\x18\x02 \x01(\x0e\x32\x38.cln.MultifundchannelFailed.MultifundchannelFailedMethod\x12/\n\x05\x65rror\x18\x03 \x01(\x0b\x32 .cln.MultifundchannelFailedError\"r\n\x1cMultifundchannelFailedMethod\x12\x0b\n\x07\x43ONNECT\x10\x00\x12\x14\n\x10OPENCHANNEL_INIT\x10\x01\x12\x15\n\x11\x46UNDCHANNEL_START\x10\x02\x12\x18\n\x14\x46UNDCHANNEL_COMPLETE\x10\x03\"<\n\x1bMultifundchannelFailedError\x12\x0c\n\x04\x63ode\x18\x01 \x01(\x12\x12\x0f\n\x07message\x18\x02 \x01(\t\"\xa8\x01\n\x14MultiwithdrawRequest\x12 \n\x07outputs\x18\x01 \x03(\x0b\x32\x0f.cln.OutputDesc\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.OutpointB\n\n\x08_feerateB\n\n\x08_minconf\"1\n\x15MultiwithdrawResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"\xe2\x04\n\x0cOfferRequest\x12\x0e\n\x06\x61mount\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06issuer\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x12\n\x05label\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0cquantity_max\x18\x05 \x01(\x04H\x03\x88\x01\x01\x12\x1c\n\x0f\x61\x62solute_expiry\x18\x06 \x01(\x04H\x04\x88\x01\x01\x12\x17\n\nrecurrence\x18\x07 \x01(\tH\x05\x88\x01\x01\x12\x1c\n\x0frecurrence_base\x18\x08 \x01(\tH\x06\x88\x01\x01\x12!\n\x14recurrence_paywindow\x18\t \x01(\tH\x07\x88\x01\x01\x12\x1d\n\x10recurrence_limit\x18\n \x01(\rH\x08\x88\x01\x01\x12\x17\n\nsingle_use\x18\x0b \x01(\x08H\t\x88\x01\x01\x12 \n\x13proportional_amount\x18\r \x01(\x08H\n\x88\x01\x01\x12 \n\x13optional_recurrence\x18\x0e \x01(\x08H\x0b\x88\x01\x01\x12\x16\n\x0e\x66ronting_nodes\x18\x0f \x03(\x0c\x42\x0e\n\x0c_descriptionB\t\n\x07_issuerB\x08\n\x06_labelB\x0f\n\r_quantity_maxB\x12\n\x10_absolute_expiryB\r\n\x0b_recurrenceB\x12\n\x10_recurrence_baseB\x17\n\x15_recurrence_paywindowB\x13\n\x11_recurrence_limitB\r\n\x0b_single_useB\x16\n\x14_proportional_amountB\x16\n\x14_optional_recurrence\"\xbc\x01\n\rOfferResponse\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x0f\n\x07\x63reated\x18\x06 \x01(\x08\x12\x12\n\x05label\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x66orce_paths\x18\x08 \x01(\x08H\x01\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_force_paths\"-\n\x17OpenchannelAbortRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\"X\n\x18OpenchannelAbortResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x18\n\x10\x63hannel_canceled\x18\x02 \x01(\x08\x12\x0e\n\x06reason\x18\x03 \x01(\t\"\xa1\x01\n\x16OpenchannelBumpRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x13\n\x0binitialpsbt\x18\x02 \x01(\t\x12*\n\x0f\x66unding_feerate\x18\x03 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x1e\n\x06\x61mount\x18\x04 \x01(\x0b\x32\x0e.cln.AmountSatB\x12\n\x10_funding_feerate\"\xed\x01\n\x17OpenchannelBumpResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x35\n\x0c\x63hannel_type\x18\x02 \x01(\x0b\x32\x1f.cln.OpenchannelBumpChannelType\x12\x0c\n\x04psbt\x18\x03 \x01(\t\x12\x1b\n\x13\x63ommitments_secured\x18\x04 \x01(\x08\x12\x16\n\x0e\x66unding_serial\x18\x05 \x01(\x04\x12&\n\x19requires_confirmed_inputs\x18\x06 \x01(\x08H\x00\x88\x01\x01\x42\x1c\n\x1a_requires_confirmed_inputs\"O\n\x1aOpenchannelBumpChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\xa5\x03\n\x16OpenchannelInitRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x13\n\x0binitialpsbt\x18\x02 \x01(\t\x12-\n\x12\x63ommitment_feerate\x18\x03 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12*\n\x0f\x66unding_feerate\x18\x04 \x01(\x0b\x32\x0c.cln.FeerateH\x01\x88\x01\x01\x12\x15\n\x08\x61nnounce\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\tH\x03\x88\x01\x01\x12(\n\x0brequest_amt\x18\x07 \x01(\x0b\x32\x0e.cln.AmountSatH\x04\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x08 \x01(\x0cH\x05\x88\x01\x01\x12\x14\n\x0c\x63hannel_type\x18\t \x03(\r\x12\x1e\n\x06\x61mount\x18\n \x01(\x0b\x32\x0e.cln.AmountSatB\x15\n\x13_commitment_feerateB\x12\n\x10_funding_feerateB\x0b\n\t_announceB\x0b\n\t_close_toB\x0e\n\x0c_request_amtB\x10\n\x0e_compact_lease\"\xed\x01\n\x17OpenchannelInitResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\x12\x35\n\x0c\x63hannel_type\x18\x03 \x01(\x0b\x32\x1f.cln.OpenchannelInitChannelType\x12\x1b\n\x13\x63ommitments_secured\x18\x04 \x01(\x08\x12\x16\n\x0e\x66unding_serial\x18\x05 \x01(\x04\x12&\n\x19requires_confirmed_inputs\x18\x06 \x01(\x08H\x00\x88\x01\x01\x42\x1c\n\x1a_requires_confirmed_inputs\"O\n\x1aOpenchannelInitChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"C\n\x18OpenchannelSignedRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x13\n\x0bsigned_psbt\x18\x02 \x01(\t\"I\n\x19OpenchannelSignedResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\n\n\x02tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"<\n\x18OpenchannelUpdateRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\"\x95\x02\n\x19OpenchannelUpdateResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x37\n\x0c\x63hannel_type\x18\x02 \x01(\x0b\x32!.cln.OpenchannelUpdateChannelType\x12\x0c\n\x04psbt\x18\x03 \x01(\t\x12\x1b\n\x13\x63ommitments_secured\x18\x04 \x01(\x08\x12\x16\n\x0e\x66unding_outnum\x18\x05 \x01(\r\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12&\n\x19requires_confirmed_inputs\x18\x07 \x01(\x08H\x01\x88\x01\x01\x42\x0b\n\t_close_toB\x1c\n\x1a_requires_confirmed_inputs\"Q\n\x1cOpenchannelUpdateChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"Y\n\x0bPingRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x10\n\x03len\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x16\n\tpongbytes\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x06\n\x04_lenB\x0c\n\n_pongbytes\"\x1e\n\x0cPingResponse\x12\x0e\n\x06totlen\x18\x01 \x01(\r\"\x91\x01\n\rPluginRequest\x12)\n\nsubcommand\x18\x01 \x01(\x0e\x32\x15.cln.PluginSubcommand\x12\x13\n\x06plugin\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tdirectory\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0f\n\x07options\x18\x04 \x03(\tB\t\n\x07_pluginB\x0c\n\n_directory\"}\n\x0ePluginResponse\x12&\n\x07\x63ommand\x18\x01 \x01(\x0e\x32\x15.cln.PluginSubcommand\x12#\n\x07plugins\x18\x02 \x03(\x0b\x32\x12.cln.PluginPlugins\x12\x13\n\x06result\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_result\">\n\rPluginPlugins\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x0f\n\x07\x64ynamic\x18\x03 \x01(\x08\"@\n\x14RenepaystatusRequest\x12\x1a\n\tinvstring\x18\x01 \x01(\tB\x02\x18\x01H\x00\x88\x01\x01\x42\x0c\n\n_invstring\"K\n\x15RenepaystatusResponse\x12\x32\n\tpaystatus\x18\x01 \x03(\x0b\x32\x1b.cln.RenepaystatusPaystatusB\x02\x18\x01\"\x9a\x04\n\x16RenepaystatusPaystatus\x12\x12\n\x06\x62olt11\x18\x01 \x01(\tB\x02\x18\x01\x12!\n\x10payment_preimage\x18\x02 \x01(\x0c\x42\x02\x18\x01H\x00\x88\x01\x01\x12\x18\n\x0cpayment_hash\x18\x03 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\ncreated_at\x18\x04 \x01(\x01\x42\x02\x18\x01\x12\x13\n\x07groupid\x18\x05 \x01(\rB\x02\x18\x01\x12\x16\n\x05parts\x18\x06 \x01(\rB\x02\x18\x01H\x01\x88\x01\x01\x12$\n\x0b\x61mount_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12.\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x02\x88\x01\x01\x12L\n\x06status\x18\t \x01(\x0e\x32\x38.cln.RenepaystatusPaystatus.RenepaystatusPaystatusStatusB\x02\x18\x01\x12\x1c\n\x0b\x64\x65stination\x18\n \x01(\x0c\x42\x02\x18\x01H\x03\x88\x01\x01\x12\x11\n\x05notes\x18\x0b \x03(\tB\x02\x18\x01\"Q\n\x1cRenepaystatusPaystatusStatus\x12\x10\n\x08\x43OMPLETE\x10\x00\x1a\x02\x08\x01\x12\x0f\n\x07PENDING\x10\x01\x1a\x02\x08\x01\x12\x0e\n\x06\x46\x41ILED\x10\x02\x1a\x02\x08\x01\x42\x13\n\x11_payment_preimageB\x08\n\x06_partsB\x13\n\x11_amount_sent_msatB\x0e\n\x0c_destination\"\xfe\x02\n\x0eRenepayRequest\x12\x15\n\tinvstring\x18\x01 \x01(\tB\x02\x18\x01\x12)\n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x00\x88\x01\x01\x12$\n\x06maxfee\x18\x03 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x01\x88\x01\x01\x12\x19\n\x08maxdelay\x18\x04 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x1a\n\tretry_for\x18\x05 \x01(\rB\x02\x18\x01H\x03\x88\x01\x01\x12\x1c\n\x0b\x64\x65scription\x18\x06 \x01(\tB\x02\x18\x01H\x04\x88\x01\x01\x12\x16\n\x05label\x18\x07 \x01(\tB\x02\x18\x01H\x05\x88\x01\x01\x12\x1f\n\x0e\x64\x65v_use_shadow\x18\x08 \x01(\x08\x42\x02\x18\x01H\x06\x88\x01\x01\x12\x13\n\x07\x65xclude\x18\t \x03(\tB\x02\x18\x01\x42\x0e\n\x0c_amount_msatB\t\n\x07_maxfeeB\x0b\n\t_maxdelayB\x0c\n\n_retry_forB\x0e\n\x0c_descriptionB\x08\n\x06_labelB\x11\n\x0f_dev_use_shadow\"\xdd\x03\n\x0fRenepayResponse\x12\x1c\n\x10payment_preimage\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x18\n\x0cpayment_hash\x18\x02 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\ncreated_at\x18\x03 \x01(\x01\x42\x02\x18\x01\x12\x11\n\x05parts\x18\x04 \x01(\rB\x02\x18\x01\x12$\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12)\n\x10\x61mount_sent_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12\x36\n\x06status\x18\x07 \x01(\x0e\x32\".cln.RenepayResponse.RenepayStatusB\x02\x18\x01\x12\x1c\n\x0b\x64\x65stination\x18\x08 \x01(\x0c\x42\x02\x18\x01H\x00\x88\x01\x01\x12\x17\n\x06\x62olt11\x18\t \x01(\tB\x02\x18\x01H\x01\x88\x01\x01\x12\x17\n\x06\x62olt12\x18\n \x01(\tB\x02\x18\x01H\x02\x88\x01\x01\x12\x18\n\x07groupid\x18\x0b \x01(\x04\x42\x02\x18\x01H\x03\x88\x01\x01\"B\n\rRenepayStatus\x12\x10\n\x08\x43OMPLETE\x10\x00\x1a\x02\x08\x01\x12\x0f\n\x07PENDING\x10\x01\x1a\x02\x08\x01\x12\x0e\n\x06\x46\x41ILED\x10\x02\x1a\x02\x08\x01\x42\x0e\n\x0c_destinationB\t\n\x07_bolt11B\t\n\x07_bolt12B\n\n\x08_groupid\"l\n\x14ReserveinputsRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x16\n\texclusive\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x14\n\x07reserve\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x0c\n\n_exclusiveB\n\n\x08_reserve\"M\n\x15ReserveinputsResponse\x12\x34\n\x0creservations\x18\x01 \x03(\x0b\x32\x1e.cln.ReserveinputsReservations\"z\n\x19ReserveinputsReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x19\n\x11reserved_to_block\x18\x05 \x01(\r\"4\n\x14SendcustommsgRequest\x12\x0f\n\x07node_id\x18\x01 \x01(\x0c\x12\x0b\n\x03msg\x18\x02 \x01(\x0c\"\'\n\x15SendcustommsgResponse\x12\x0e\n\x06status\x18\x01 \x01(\t\"\xb0\x01\n\x12SendinvoiceRequest\x12\x0e\n\x06invreq\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08quantity\x18\x05 \x01(\x04H\x02\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\n\n\x08_timeoutB\x0b\n\t_quantity\"\xb8\x04\n\x13SendinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.SendinvoiceResponse.SendinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x15\n\rcreated_index\x18\x08 \x01(\x04\x12\x1a\n\rupdated_index\x18\t \x01(\x04H\x02\x88\x01\x01\x12\x16\n\tpay_index\x18\n \x01(\x04H\x03\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0c \x01(\x04H\x05\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x06\x88\x01\x01\"6\n\x11SendinvoiceStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\x0e\n\x0c_amount_msatB\t\n\x07_bolt12B\x10\n\x0e_updated_indexB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimage\"\xaa\x02\n\x11SetchannelRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12!\n\x07\x66\x65\x65\x62\x61se\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x13\n\x06\x66\x65\x65ppm\x18\x03 \x01(\rH\x01\x88\x01\x01\x12!\n\x07htlcmin\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12!\n\x07htlcmax\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x19\n\x0c\x65nforcedelay\x18\x06 \x01(\rH\x04\x88\x01\x01\x12\x1c\n\x0fignorefeelimits\x18\x07 \x01(\x08H\x05\x88\x01\x01\x42\n\n\x08_feebaseB\t\n\x07_feeppmB\n\n\x08_htlcminB\n\n\x08_htlcmaxB\x0f\n\r_enforcedelayB\x12\n\x10_ignorefeelimits\"?\n\x12SetchannelResponse\x12)\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x17.cln.SetchannelChannels\"\xaf\x03\n\x12SetchannelChannels\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x12\n\nchannel_id\x18\x02 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\"\n\rfee_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x05 \x01(\r\x12*\n\x15minimum_htlc_out_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12$\n\x17warning_htlcmin_too_low\x18\x07 \x01(\tH\x01\x88\x01\x01\x12*\n\x15maximum_htlc_out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x18warning_htlcmax_too_high\x18\t \x01(\tH\x02\x88\x01\x01\x12\x19\n\x11ignore_fee_limits\x18\n \x01(\x08\x42\x13\n\x11_short_channel_idB\x1a\n\x18_warning_htlcmin_too_lowB\x1b\n\x19_warning_htlcmax_too_high\"b\n\x10SetconfigRequest\x12\x0e\n\x06\x63onfig\x18\x01 \x01(\t\x12\x10\n\x03val\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttransient\x18\x03 \x01(\x08H\x01\x88\x01\x01\x42\x06\n\x04_valB\x0c\n\n_transient\"9\n\x11SetconfigResponse\x12$\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x14.cln.SetconfigConfig\"\xda\x02\n\x0fSetconfigConfig\x12\x0e\n\x06\x63onfig\x18\x01 \x01(\t\x12\x13\n\x06source\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0f\n\x07\x64ynamic\x18\x04 \x01(\x08\x12\x10\n\x03set\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x16\n\tvalue_str\x18\x06 \x01(\tH\x03\x88\x01\x01\x12$\n\nvalue_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x16\n\tvalue_int\x18\x08 \x01(\x12H\x05\x88\x01\x01\x12\x17\n\nvalue_bool\x18\t \x01(\x08H\x06\x88\x01\x01\x12\x0f\n\x07sources\x18\n \x03(\t\x12\x12\n\nvalues_str\x18\x0b \x03(\tB\t\n\x07_sourceB\t\n\x07_pluginB\x06\n\x04_setB\x0c\n\n_value_strB\r\n\x0b_value_msatB\x0c\n\n_value_intB\r\n\x0b_value_bool\"6\n\x15SetpsbtversionRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\r\"&\n\x16SetpsbtversionResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\"\'\n\x12SigninvoiceRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\"%\n\x13SigninvoiceResponse\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\"%\n\x12SignmessageRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\"F\n\x13SignmessageResponse\x12\x11\n\tsignature\x18\x01 \x01(\x0c\x12\r\n\x05recid\x18\x02 \x01(\x0c\x12\r\n\x05zbase\x18\x03 \x01(\t\"\xc8\x01\n\x11SpliceInitRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x17\n\x0frelative_amount\x18\x02 \x01(\x12\x12\x18\n\x0binitialpsbt\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1b\n\x0e\x66\x65\x65rate_per_kw\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1a\n\rforce_feerate\x18\x05 \x01(\x08H\x02\x88\x01\x01\x42\x0e\n\x0c_initialpsbtB\x11\n\x0f_feerate_per_kwB\x10\n\x0e_force_feerate\"\"\n\x12SpliceInitResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\"_\n\x13SpliceSignedRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\x12\x17\n\nsign_first\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\r\n\x0b_sign_first\"^\n\x14SpliceSignedResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x13\n\x06outnum\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x0c\n\x04psbt\x18\x04 \x01(\tB\t\n\x07_outnum\"7\n\x13SpliceUpdateRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\"y\n\x14SpliceUpdateResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x1b\n\x13\x63ommitments_secured\x18\x02 \x01(\x08\x12\x1f\n\x12signatures_secured\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\x15\n\x13_signatures_secured\"2\n\x0fSpliceinRequest\x12\x0f\n\x07\x63hannel\x18\x01 \x01(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\t\"b\n\x10SpliceinResponse\x12\x11\n\x04psbt\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x03 \x01(\tH\x02\x88\x01\x01\x42\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"\x8b\x01\n\x10SpliceoutRequest\x12\x0f\n\x07\x63hannel\x18\x01 \x01(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\t\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rforce_feerate\x18\x04 \x01(\x08H\x01\x88\x01\x01\x42\x0e\n\x0c_destinationB\x10\n\x0e_force_feerate\"c\n\x11SpliceoutResponse\x12\x11\n\x04psbt\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x03 \x01(\tH\x02\x88\x01\x01\x42\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"\xc6\x01\n\x10\x44\x65vspliceRequest\x12\x16\n\x0escript_or_json\x18\x01 \x01(\t\x12\x13\n\x06\x64ryrun\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x1a\n\rforce_feerate\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x16\n\tdebug_log\x18\x04 \x01(\x08H\x02\x88\x01\x01\x12\x17\n\ndev_wetrun\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_dryrunB\x10\n\x0e_force_feerateB\x0c\n\n_debug_logB\r\n\x0b_dev_wetrun\"\x80\x01\n\x11\x44\x65vspliceResponse\x12\x0e\n\x06\x64ryrun\x18\x01 \x03(\t\x12\x11\n\x04psbt\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03log\x18\x05 \x03(\tB\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"H\n\x16UnreserveinputsRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x14\n\x07reserve\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_reserve\"Q\n\x17UnreserveinputsResponse\x12\x36\n\x0creservations\x18\x01 \x03(\x0b\x32 .cln.UnreserveinputsReservations\"\x97\x01\n\x1bUnreserveinputsReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x1e\n\x11reserved_to_block\x18\x05 \x01(\rH\x00\x88\x01\x01\x42\x14\n\x12_reserved_to_block\"n\n\x14UpgradewalletRequest\x12\"\n\x07\x66\x65\x65rate\x18\x01 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x17\n\nreservedok\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\n\n\x08_feerateB\r\n\x0b_reservedok\"~\n\x15UpgradewalletResponse\x12\x15\n\rupgraded_outs\x18\x01 \x01(\x04\x12\x11\n\x04psbt\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"O\n\x16WaitblockheightRequest\x12\x13\n\x0b\x62lockheight\x18\x01 \x01(\r\x12\x14\n\x07timeout\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_timeout\".\n\x17WaitblockheightResponse\x12\x13\n\x0b\x62lockheight\x18\x01 \x01(\r\"\xb9\x02\n\x0bWaitRequest\x12\x31\n\tsubsystem\x18\x01 \x01(\x0e\x32\x1e.cln.WaitRequest.WaitSubsystem\x12\x31\n\tindexname\x18\x02 \x01(\x0e\x32\x1e.cln.WaitRequest.WaitIndexname\x12\x11\n\tnextvalue\x18\x03 \x01(\x04\"6\n\rWaitIndexname\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x12\x0b\n\x07\x44\x45LETED\x10\x02\"y\n\rWaitSubsystem\x12\x0c\n\x08INVOICES\x10\x00\x12\x0c\n\x08\x46ORWARDS\x10\x01\x12\x0c\n\x08SENDPAYS\x10\x02\x12\t\n\x05HTLCS\x10\x03\x12\x0e\n\nCHAINMOVES\x10\x04\x12\x10\n\x0c\x43HANNELMOVES\x10\x05\x12\x11\n\rNETWORKEVENTS\x10\x06\"\xf4\x05\n\x0cWaitResponse\x12\x32\n\tsubsystem\x18\x01 \x01(\x0e\x32\x1f.cln.WaitResponse.WaitSubsystem\x12\x14\n\x07\x63reated\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07updated\x18\x03 \x01(\x04H\x01\x88\x01\x01\x12\x14\n\x07\x64\x65leted\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12*\n\x07\x64\x65tails\x18\x05 \x01(\x0b\x32\x10.cln.WaitDetailsB\x02\x18\x01H\x03\x88\x01\x01\x12(\n\x08\x66orwards\x18\x06 \x01(\x0b\x32\x11.cln.WaitForwardsH\x04\x88\x01\x01\x12(\n\x08invoices\x18\x07 \x01(\x0b\x32\x11.cln.WaitInvoicesH\x05\x88\x01\x01\x12(\n\x08sendpays\x18\x08 \x01(\x0b\x32\x11.cln.WaitSendpaysH\x06\x88\x01\x01\x12\"\n\x05htlcs\x18\t \x01(\x0b\x32\x0e.cln.WaitHtlcsH\x07\x88\x01\x01\x12,\n\nchainmoves\x18\n \x01(\x0b\x32\x13.cln.WaitChainmovesH\x08\x88\x01\x01\x12\x30\n\x0c\x63hannelmoves\x18\x0b \x01(\x0b\x32\x15.cln.WaitChannelmovesH\t\x88\x01\x01\x12\x32\n\rnetworkevents\x18\x0c \x01(\x0b\x32\x16.cln.WaitNetworkeventsH\n\x88\x01\x01\"y\n\rWaitSubsystem\x12\x0c\n\x08INVOICES\x10\x00\x12\x0c\n\x08\x46ORWARDS\x10\x01\x12\x0c\n\x08SENDPAYS\x10\x02\x12\t\n\x05HTLCS\x10\x03\x12\x0e\n\nCHAINMOVES\x10\x04\x12\x10\n\x0c\x43HANNELMOVES\x10\x05\x12\x11\n\rNETWORKEVENTS\x10\x06\x42\n\n\x08_createdB\n\n\x08_updatedB\n\n\x08_deletedB\n\n\x08_detailsB\x0b\n\t_forwardsB\x0b\n\t_invoicesB\x0b\n\t_sendpaysB\x08\n\x06_htlcsB\r\n\x0b_chainmovesB\x0f\n\r_channelmovesB\x10\n\x0e_networkevents\"d\n\x0eWaitChainmoves\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\"f\n\x10WaitChannelmoves\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\"\xd0\x05\n\x0bWaitDetails\x12;\n\x06status\x18\x01 \x01(\x0e\x32\".cln.WaitDetails.WaitDetailsStatusB\x02\x18\x01H\x00\x88\x01\x01\x12\x16\n\x05label\x18\x02 \x01(\tB\x02\x18\x01H\x01\x88\x01\x01\x12\x1c\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x02\x18\x01H\x02\x88\x01\x01\x12\x17\n\x06\x62olt11\x18\x04 \x01(\tB\x02\x18\x01H\x03\x88\x01\x01\x12\x17\n\x06\x62olt12\x18\x05 \x01(\tB\x02\x18\x01H\x04\x88\x01\x01\x12\x17\n\x06partid\x18\x06 \x01(\x04\x42\x02\x18\x01H\x05\x88\x01\x01\x12\x18\n\x07groupid\x18\x07 \x01(\x04\x42\x02\x18\x01H\x06\x88\x01\x01\x12\x1d\n\x0cpayment_hash\x18\x08 \x01(\x0c\x42\x02\x18\x01H\x07\x88\x01\x01\x12\x1b\n\nin_channel\x18\t \x01(\tB\x02\x18\x01H\x08\x88\x01\x01\x12\x1b\n\nin_htlc_id\x18\n \x01(\x04\x42\x02\x18\x01H\t\x88\x01\x01\x12%\n\x07in_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\n\x88\x01\x01\x12\x1c\n\x0bout_channel\x18\x0c \x01(\tB\x02\x18\x01H\x0b\x88\x01\x01\"\xad\x01\n\x11WaitDetailsStatus\x12\x0e\n\x06UNPAID\x10\x00\x1a\x02\x08\x01\x12\x0c\n\x04PAID\x10\x01\x1a\x02\x08\x01\x12\x0f\n\x07\x45XPIRED\x10\x02\x1a\x02\x08\x01\x12\x0f\n\x07PENDING\x10\x03\x1a\x02\x08\x01\x12\x0e\n\x06\x46\x41ILED\x10\x04\x1a\x02\x08\x01\x12\x10\n\x08\x43OMPLETE\x10\x05\x1a\x02\x08\x01\x12\x0f\n\x07OFFERED\x10\x06\x1a\x02\x08\x01\x12\x0f\n\x07SETTLED\x10\x07\x1a\x02\x08\x01\x12\x14\n\x0cLOCAL_FAILED\x10\x08\x1a\x02\x08\x01\x42\t\n\x07_statusB\x08\n\x06_labelB\x0e\n\x0c_descriptionB\t\n\x07_bolt11B\t\n\x07_bolt12B\t\n\x07_partidB\n\n\x08_groupidB\x0f\n\r_payment_hashB\r\n\x0b_in_channelB\r\n\x0b_in_htlc_idB\n\n\x08_in_msatB\x0e\n\x0c_out_channel\"\xcb\x02\n\x0cWaitForwards\x12\x39\n\x06status\x18\x01 \x01(\x0e\x32$.cln.WaitForwards.WaitForwardsStatusH\x00\x88\x01\x01\x12\x17\n\nin_channel\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nin_htlc_id\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12!\n\x07in_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x18\n\x0bout_channel\x18\x05 \x01(\tH\x04\x88\x01\x01\"L\n\x12WaitForwardsStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x12\x10\n\x0cLOCAL_FAILED\x10\x03\x42\t\n\x07_statusB\r\n\x0b_in_channelB\r\n\x0b_in_htlc_idB\n\n\x08_in_msatB\x0e\n\x0c_out_channel\"\x8c\x03\n\tWaitHtlcs\x12\"\n\x05state\x18\x01 \x01(\x0e\x32\x0e.cln.HtlcStateH\x00\x88\x01\x01\x12\x14\n\x07htlc_id\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0b\x63ltv_expiry\x18\x04 \x01(\rH\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x39\n\tdirection\x18\x06 \x01(\x0e\x32!.cln.WaitHtlcs.WaitHtlcsDirectionH\x05\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x07 \x01(\x0cH\x06\x88\x01\x01\"%\n\x12WaitHtlcsDirection\x12\x07\n\x03OUT\x10\x00\x12\x06\n\x02IN\x10\x01\x42\x08\n\x06_stateB\n\n\x08_htlc_idB\x13\n\x11_short_channel_idB\x0e\n\x0c_cltv_expiryB\x0e\n\x0c_amount_msatB\x0c\n\n_directionB\x0f\n\r_payment_hash\"\x95\x02\n\x0cWaitInvoices\x12\x39\n\x06status\x18\x01 \x01(\x0e\x32$.cln.WaitInvoices.WaitInvoicesStatusH\x00\x88\x01\x01\x12\x12\n\x05label\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x05 \x01(\tH\x04\x88\x01\x01\"7\n\x12WaitInvoicesStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\t\n\x07_statusB\x08\n\x06_labelB\x0e\n\x0c_descriptionB\t\n\x07_bolt11B\t\n\x07_bolt12\"\x89\x02\n\x11WaitNetworkevents\x12\x1a\n\rcreated_index\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x44\n\titem_type\x18\x02 \x01(\x0e\x32,.cln.WaitNetworkevents.WaitNetworkeventsTypeH\x01\x88\x01\x01\x12\x14\n\x07peer_id\x18\x03 \x01(\x0cH\x02\x88\x01\x01\"P\n\x15WaitNetworkeventsType\x12\x0b\n\x07\x43ONNECT\x10\x00\x12\x10\n\x0c\x43ONNECT_FAIL\x10\x01\x12\x08\n\x04PING\x10\x02\x12\x0e\n\nDISCONNECT\x10\x03\x42\x10\n\x0e_created_indexB\x0c\n\n_item_typeB\n\n\x08_peer_id\"\xff\x01\n\x0cWaitSendpays\x12\x39\n\x06status\x18\x01 \x01(\x0e\x32$.cln.WaitSendpays.WaitSendpaysStatusH\x00\x88\x01\x01\x12\x13\n\x06partid\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x14\n\x07groupid\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x04 \x01(\x0cH\x03\x88\x01\x01\";\n\x12WaitSendpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\t\n\x07_statusB\t\n\x07_partidB\n\n\x08_groupidB\x0f\n\r_payment_hash\"4\n\x12ListconfigsRequest\x12\x13\n\x06\x63onfig\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_config\"P\n\x13ListconfigsResponse\x12-\n\x07\x63onfigs\x18\x01 \x01(\x0b\x32\x17.cln.ListconfigsConfigsH\x00\x88\x01\x01\x42\n\n\x08_configs\"\xed\x36\n\x12ListconfigsConfigs\x12.\n\x04\x63onf\x18\x01 \x01(\x0b\x32\x1b.cln.ListconfigsConfigsConfH\x00\x88\x01\x01\x12\x38\n\tdeveloper\x18\x02 \x01(\x0b\x32 .cln.ListconfigsConfigsDeveloperH\x01\x88\x01\x01\x12?\n\rclear_plugins\x18\x03 \x01(\x0b\x32#.cln.ListconfigsConfigsClearpluginsH\x02\x88\x01\x01\x12;\n\x0b\x64isable_mpp\x18\x04 \x01(\x0b\x32!.cln.ListconfigsConfigsDisablemppH\x03\x88\x01\x01\x12\x34\n\x07mainnet\x18\x05 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsMainnetH\x04\x88\x01\x01\x12\x34\n\x07regtest\x18\x06 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsRegtestH\x05\x88\x01\x01\x12\x32\n\x06signet\x18\x07 \x01(\x0b\x32\x1d.cln.ListconfigsConfigsSignetH\x06\x88\x01\x01\x12\x34\n\x07testnet\x18\x08 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsTestnetH\x07\x88\x01\x01\x12\x45\n\x10important_plugin\x18\t \x01(\x0b\x32&.cln.ListconfigsConfigsImportantpluginH\x08\x88\x01\x01\x12\x32\n\x06plugin\x18\n \x01(\x0b\x32\x1d.cln.ListconfigsConfigsPluginH\t\x88\x01\x01\x12\x39\n\nplugin_dir\x18\x0b \x01(\x0b\x32 .cln.ListconfigsConfigsPlugindirH\n\x88\x01\x01\x12?\n\rlightning_dir\x18\x0c \x01(\x0b\x32#.cln.ListconfigsConfigsLightningdirH\x0b\x88\x01\x01\x12\x34\n\x07network\x18\r \x01(\x0b\x32\x1e.cln.ListconfigsConfigsNetworkH\x0c\x88\x01\x01\x12N\n\x15\x61llow_deprecated_apis\x18\x0e \x01(\x0b\x32*.cln.ListconfigsConfigsAllowdeprecatedapisH\r\x88\x01\x01\x12\x35\n\x08rpc_file\x18\x0f \x01(\x0b\x32\x1e.cln.ListconfigsConfigsRpcfileH\x0e\x88\x01\x01\x12\x41\n\x0e\x64isable_plugin\x18\x10 \x01(\x0b\x32$.cln.ListconfigsConfigsDisablepluginH\x0f\x88\x01\x01\x12\x44\n\x10\x61lways_use_proxy\x18\x11 \x01(\x0b\x32%.cln.ListconfigsConfigsAlwaysuseproxyH\x10\x88\x01\x01\x12\x32\n\x06\x64\x61\x65mon\x18\x12 \x01(\x0b\x32\x1d.cln.ListconfigsConfigsDaemonH\x11\x88\x01\x01\x12\x32\n\x06wallet\x18\x13 \x01(\x0b\x32\x1d.cln.ListconfigsConfigsWalletH\x12\x88\x01\x01\x12\x41\n\x0elarge_channels\x18\x14 \x01(\x0b\x32$.cln.ListconfigsConfigsLargechannelsH\x13\x88\x01\x01\x12P\n\x16\x65xperimental_dual_fund\x18\x15 \x01(\x0b\x32+.cln.ListconfigsConfigsExperimentaldualfundH\x14\x88\x01\x01\x12S\n\x15\x65xperimental_splicing\x18\x16 \x01(\x0b\x32+.cln.ListconfigsConfigsExperimentalsplicingB\x02\x18\x01H\x15\x88\x01\x01\x12i\n#experimental_shutdown_wrong_funding\x18\x19 \x01(\x0b\x32\x37.cln.ListconfigsConfigsExperimentalshutdownwrongfundingH\x16\x88\x01\x01\x12Z\n\x19\x65xperimental_peer_storage\x18\x1a \x01(\x0b\x32..cln.ListconfigsConfigsExperimentalpeerstorageB\x02\x18\x01H\x17\x88\x01\x01\x12Q\n\x14\x65xperimental_anchors\x18\x1b \x01(\x0b\x32*.cln.ListconfigsConfigsExperimentalanchorsB\x02\x18\x01H\x18\x88\x01\x01\x12\x45\n\x10\x64\x61tabase_upgrade\x18\x1c \x01(\x0b\x32&.cln.ListconfigsConfigsDatabaseupgradeH\x19\x88\x01\x01\x12,\n\x03rgb\x18\x1d \x01(\x0b\x32\x1a.cln.ListconfigsConfigsRgbH\x1a\x88\x01\x01\x12\x30\n\x05\x61lias\x18\x1e \x01(\x0b\x32\x1c.cln.ListconfigsConfigsAliasH\x1b\x88\x01\x01\x12\x35\n\x08pid_file\x18\x1f \x01(\x0b\x32\x1e.cln.ListconfigsConfigsPidfileH\x1c\x88\x01\x01\x12\x46\n\x11ignore_fee_limits\x18 \x01(\x0b\x32&.cln.ListconfigsConfigsIgnorefeelimitsH\x1d\x88\x01\x01\x12\x45\n\x10watchtime_blocks\x18! \x01(\x0b\x32&.cln.ListconfigsConfigsWatchtimeblocksH\x1e\x88\x01\x01\x12N\n\x13max_locktime_blocks\x18\" \x01(\x0b\x32(.cln.ListconfigsConfigsMaxlocktimeblocksB\x02\x18\x01H\x1f\x88\x01\x01\x12\x45\n\x10\x66unding_confirms\x18# \x01(\x0b\x32&.cln.ListconfigsConfigsFundingconfirmsH \x88\x01\x01\x12\x39\n\ncltv_delta\x18$ \x01(\x0b\x32 .cln.ListconfigsConfigsCltvdeltaH!\x88\x01\x01\x12\x39\n\ncltv_final\x18% \x01(\x0b\x32 .cln.ListconfigsConfigsCltvfinalH\"\x88\x01\x01\x12;\n\x0b\x63ommit_time\x18& \x01(\x0b\x32!.cln.ListconfigsConfigsCommittimeH#\x88\x01\x01\x12\x35\n\x08\x66\x65\x65_base\x18\' \x01(\x0b\x32\x1e.cln.ListconfigsConfigsFeebaseH$\x88\x01\x01\x12\x32\n\x06rescan\x18( \x01(\x0b\x32\x1d.cln.ListconfigsConfigsRescanH%\x88\x01\x01\x12\x42\n\x0f\x66\x65\x65_per_satoshi\x18) \x01(\x0b\x32$.cln.ListconfigsConfigsFeepersatoshiH&\x88\x01\x01\x12L\n\x14max_concurrent_htlcs\x18* \x01(\x0b\x32).cln.ListconfigsConfigsMaxconcurrenthtlcsH\'\x88\x01\x01\x12\x46\n\x11htlc_minimum_msat\x18+ \x01(\x0b\x32&.cln.ListconfigsConfigsHtlcminimummsatH(\x88\x01\x01\x12\x46\n\x11htlc_maximum_msat\x18, \x01(\x0b\x32&.cln.ListconfigsConfigsHtlcmaximummsatH)\x88\x01\x01\x12X\n\x1bmax_dust_htlc_exposure_msat\x18- \x01(\x0b\x32..cln.ListconfigsConfigsMaxdusthtlcexposuremsatH*\x88\x01\x01\x12\x44\n\x10min_capacity_sat\x18. \x01(\x0b\x32%.cln.ListconfigsConfigsMincapacitysatH+\x88\x01\x01\x12.\n\x04\x61\x64\x64r\x18/ \x01(\x0b\x32\x1b.cln.ListconfigsConfigsAddrH,\x88\x01\x01\x12?\n\rannounce_addr\x18\x30 \x01(\x0b\x32#.cln.ListconfigsConfigsAnnounceaddrH-\x88\x01\x01\x12\x37\n\tbind_addr\x18\x31 \x01(\x0b\x32\x1f.cln.ListconfigsConfigsBindaddrH.\x88\x01\x01\x12\x34\n\x07offline\x18\x32 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsOfflineH/\x88\x01\x01\x12:\n\nautolisten\x18\x33 \x01(\x0b\x32!.cln.ListconfigsConfigsAutolistenH0\x88\x01\x01\x12\x30\n\x05proxy\x18\x34 \x01(\x0b\x32\x1c.cln.ListconfigsConfigsProxyH1\x88\x01\x01\x12;\n\x0b\x64isable_dns\x18\x35 \x01(\x0b\x32!.cln.ListconfigsConfigsDisablednsH2\x88\x01\x01\x12T\n\x18\x61nnounce_addr_discovered\x18\x36 \x01(\x0b\x32-.cln.ListconfigsConfigsAnnounceaddrdiscoveredH3\x88\x01\x01\x12]\n\x1d\x61nnounce_addr_discovered_port\x18\x37 \x01(\x0b\x32\x31.cln.ListconfigsConfigsAnnounceaddrdiscoveredportH4\x88\x01\x01\x12\x43\n\rencrypted_hsm\x18\x38 \x01(\x0b\x32#.cln.ListconfigsConfigsEncryptedhsmB\x02\x18\x01H5\x88\x01\x01\x12>\n\rrpc_file_mode\x18\x39 \x01(\x0b\x32\".cln.ListconfigsConfigsRpcfilemodeH6\x88\x01\x01\x12\x37\n\tlog_level\x18: \x01(\x0b\x32\x1f.cln.ListconfigsConfigsLoglevelH7\x88\x01\x01\x12\x39\n\nlog_prefix\x18; \x01(\x0b\x32 .cln.ListconfigsConfigsLogprefixH8\x88\x01\x01\x12\x35\n\x08log_file\x18< \x01(\x0b\x32\x1e.cln.ListconfigsConfigsLogfileH9\x88\x01\x01\x12\x41\n\x0elog_timestamps\x18= \x01(\x0b\x32$.cln.ListconfigsConfigsLogtimestampsH:\x88\x01\x01\x12\x41\n\x0e\x66orce_feerates\x18> \x01(\x0b\x32$.cln.ListconfigsConfigsForcefeeratesH;\x88\x01\x01\x12\x38\n\tsubdaemon\x18? \x01(\x0b\x32 .cln.ListconfigsConfigsSubdaemonH<\x88\x01\x01\x12Q\n\x16\x66\x65tchinvoice_noconnect\x18@ \x01(\x0b\x32,.cln.ListconfigsConfigsFetchinvoicenoconnectH=\x88\x01\x01\x12L\n\x14tor_service_password\x18\x42 \x01(\x0b\x32).cln.ListconfigsConfigsTorservicepasswordH>\x88\x01\x01\x12\x46\n\x11\x61nnounce_addr_dns\x18\x43 \x01(\x0b\x32&.cln.ListconfigsConfigsAnnounceaddrdnsH?\x88\x01\x01\x12T\n\x18require_confirmed_inputs\x18\x44 \x01(\x0b\x32-.cln.ListconfigsConfigsRequireconfirmedinputsH@\x88\x01\x01\x12\x39\n\ncommit_fee\x18\x45 \x01(\x0b\x32 .cln.ListconfigsConfigsCommitfeeHA\x88\x01\x01\x12N\n\x15\x63ommit_feerate_offset\x18\x46 \x01(\x0b\x32*.cln.ListconfigsConfigsCommitfeerateoffsetHB\x88\x01\x01\x12T\n\x18\x61utoconnect_seeker_peers\x18G \x01(\x0b\x32-.cln.ListconfigsConfigsAutoconnectseekerpeersHC\x88\x01\x01\x12R\n\x17\x63urrencyrate_add_source\x18J \x01(\x0b\x32,.cln.ListconfigsConfigsCurrencyrateaddsourceHD\x88\x01\x01\x12Z\n\x1b\x63urrencyrate_disable_source\x18K \x01(\x0b\x32\x30.cln.ListconfigsConfigsCurrencyratedisablesourceHE\x88\x01\x01\x12V\n\x19\x65xperimental_simple_close\x18L \x01(\x0b\x32..cln.ListconfigsConfigsExperimentalsimplecloseHF\x88\x01\x01\x12K\n\x14\x61\x63\x63\x65pt_htlc_tlv_type\x18M \x01(\x0b\x32(.cln.ListconfigsConfigsAccepthtlctlvtypeHG\x88\x01\x01\x12\x41\n\x0ehsm_passphrase\x18N \x01(\x0b\x32$.cln.ListconfigsConfigsHsmpassphraseHH\x88\x01\x01\x12`\n i_promise_to_fix_broken_api_user\x18O \x01(\x0b\x32\x31.cln.ListconfigsConfigsIpromisetofixbrokenapiuserHI\x88\x01\x01\x12V\n\x19invoices_onchain_fallback\x18P \x01(\x0b\x32..cln.ListconfigsConfigsInvoicesonchainfallbackHJ\x88\x01\x01\x12\x43\n\x0fmessage_padding\x18Q \x01(\x0b\x32%.cln.ListconfigsConfigsMessagepaddingHK\x88\x01\x01\x12H\n\x12min_emergency_msat\x18R \x01(\x0b\x32\'.cln.ListconfigsConfigsMinemergencymsatHL\x88\x01\x01\x12N\n\x15payment_fronting_node\x18S \x01(\x0b\x32*.cln.ListconfigsConfigsPaymentfrontingnodeHM\x88\x01\x01\x12\x34\n\x07recover\x18T \x01(\x0b\x32\x1e.cln.ListconfigsConfigsRecoverHN\x88\x01\x01\x12=\n\x0creckless_dir\x18U \x01(\x0b\x32\".cln.ListconfigsConfigsRecklessdirHO\x88\x01\x01\x42\x07\n\x05_confB\x0c\n\n_developerB\x10\n\x0e_clear_pluginsB\x0e\n\x0c_disable_mppB\n\n\x08_mainnetB\n\n\x08_regtestB\t\n\x07_signetB\n\n\x08_testnetB\x13\n\x11_important_pluginB\t\n\x07_pluginB\r\n\x0b_plugin_dirB\x10\n\x0e_lightning_dirB\n\n\x08_networkB\x18\n\x16_allow_deprecated_apisB\x0b\n\t_rpc_fileB\x11\n\x0f_disable_pluginB\x13\n\x11_always_use_proxyB\t\n\x07_daemonB\t\n\x07_walletB\x11\n\x0f_large_channelsB\x19\n\x17_experimental_dual_fundB\x18\n\x16_experimental_splicingB&\n$_experimental_shutdown_wrong_fundingB\x1c\n\x1a_experimental_peer_storageB\x17\n\x15_experimental_anchorsB\x13\n\x11_database_upgradeB\x06\n\x04_rgbB\x08\n\x06_aliasB\x0b\n\t_pid_fileB\x14\n\x12_ignore_fee_limitsB\x13\n\x11_watchtime_blocksB\x16\n\x14_max_locktime_blocksB\x13\n\x11_funding_confirmsB\r\n\x0b_cltv_deltaB\r\n\x0b_cltv_finalB\x0e\n\x0c_commit_timeB\x0b\n\t_fee_baseB\t\n\x07_rescanB\x12\n\x10_fee_per_satoshiB\x17\n\x15_max_concurrent_htlcsB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x1e\n\x1c_max_dust_htlc_exposure_msatB\x13\n\x11_min_capacity_satB\x07\n\x05_addrB\x10\n\x0e_announce_addrB\x0c\n\n_bind_addrB\n\n\x08_offlineB\r\n\x0b_autolistenB\x08\n\x06_proxyB\x0e\n\x0c_disable_dnsB\x1b\n\x19_announce_addr_discoveredB \n\x1e_announce_addr_discovered_portB\x10\n\x0e_encrypted_hsmB\x10\n\x0e_rpc_file_modeB\x0c\n\n_log_levelB\r\n\x0b_log_prefixB\x0b\n\t_log_fileB\x11\n\x0f_log_timestampsB\x11\n\x0f_force_feeratesB\x0c\n\n_subdaemonB\x19\n\x17_fetchinvoice_noconnectB\x17\n\x15_tor_service_passwordB\x14\n\x12_announce_addr_dnsB\x1b\n\x19_require_confirmed_inputsB\r\n\x0b_commit_feeB\x18\n\x16_commit_feerate_offsetB\x1b\n\x19_autoconnect_seeker_peersB\x1a\n\x18_currencyrate_add_sourceB\x1e\n\x1c_currencyrate_disable_sourceB\x1c\n\x1a_experimental_simple_closeB\x17\n\x15_accept_htlc_tlv_typeB\x11\n\x0f_hsm_passphraseB#\n!_i_promise_to_fix_broken_api_userB\x1c\n\x1a_invoices_onchain_fallbackB\x12\n\x10_message_paddingB\x15\n\x13_min_emergency_msatB\x18\n\x16_payment_fronting_nodeB\n\n\x08_recoverB\x0f\n\r_reckless_dir\"J\n#ListconfigsConfigsAccepthtlctlvtype\x12\x0f\n\x07sources\x18\x01 \x03(\t\x12\x12\n\nvalues_int\x18\x02 \x03(\r\"=\n\x16ListconfigsConfigsAddr\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"<\n\x17ListconfigsConfigsAlias\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"K\n%ListconfigsConfigsAllowdeprecatedapis\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"F\n ListconfigsConfigsAlwaysuseproxy\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"E\n\x1eListconfigsConfigsAnnounceaddr\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"\x80\x02\n(ListconfigsConfigsAnnounceaddrdiscovered\x12q\n\tvalue_str\x18\x01 \x01(\x0e\x32^.cln.ListconfigsConfigsAnnounceaddrdiscovered.ListconfigsConfigsAnnounceaddrdiscoveredValueStr\x12\x0e\n\x06source\x18\x02 \x01(\t\"Q\n0ListconfigsConfigsAnnounceaddrdiscoveredValueStr\x12\x08\n\x04TRUE\x10\x00\x12\t\n\x05\x46\x41LSE\x10\x01\x12\x08\n\x04\x41UTO\x10\x02\"Q\n,ListconfigsConfigsAnnounceaddrdiscoveredport\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"G\n!ListconfigsConfigsAnnounceaddrdns\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"M\n(ListconfigsConfigsAutoconnectseekerpeers\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1cListconfigsConfigsAutolisten\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"A\n\x1aListconfigsConfigsBindaddr\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"=\n\x1eListconfigsConfigsClearplugins\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsCltvdelta\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsCltvfinal\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsCommitfee\x12\x11\n\tvalue_int\x18\x01 \x01(\x04\x12\x0e\n\x06source\x18\x02 \x01(\t\"J\n%ListconfigsConfigsCommitfeerateoffset\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"A\n\x1cListconfigsConfigsCommittime\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"\xa2\x01\n\x16ListconfigsConfigsConf\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12H\n\x06source\x18\x02 \x01(\x0e\x32\x38.cln.ListconfigsConfigsConf.ListconfigsConfigsConfSource\"+\n\x1cListconfigsConfigsConfSource\x12\x0b\n\x07\x43MDLINE\x10\x00\"n\n\'ListconfigsConfigsCurrencyrateaddsource\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"r\n+ListconfigsConfigsCurrencyratedisablesource\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"7\n\x18ListconfigsConfigsDaemon\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"G\n!ListconfigsConfigsDatabaseupgrade\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\":\n\x1bListconfigsConfigsDeveloper\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\";\n\x1cListconfigsConfigsDisabledns\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"[\n\x1cListconfigsConfigsDisablempp\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"F\n\x1fListconfigsConfigsDisableplugin\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"E\n\x1eListconfigsConfigsEncryptedhsm\x12\x0f\n\x03set\x18\x01 \x01(\x08\x42\x02\x18\x01\x12\x12\n\x06source\x18\x02 \x01(\tB\x02\x18\x01\"L\n%ListconfigsConfigsExperimentalanchors\x12\x0f\n\x03set\x18\x01 \x01(\x08\x42\x02\x18\x01\x12\x12\n\x06source\x18\x02 \x01(\tB\x02\x18\x01\"E\n&ListconfigsConfigsExperimentaldualfund\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"P\n)ListconfigsConfigsExperimentalpeerstorage\x12\x0f\n\x03set\x18\x01 \x01(\x08\x42\x02\x18\x01\x12\x12\n\x06source\x18\x02 \x01(\tB\x02\x18\x01\"Q\n2ListconfigsConfigsExperimentalshutdownwrongfunding\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"H\n)ListconfigsConfigsExperimentalsimpleclose\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"M\n&ListconfigsConfigsExperimentalsplicing\x12\x0f\n\x03set\x18\x01 \x01(\x08\x42\x02\x18\x01\x12\x12\n\x06source\x18\x02 \x01(\tB\x02\x18\x01\">\n\x19ListconfigsConfigsFeebase\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"D\n\x1fListconfigsConfigsFeepersatoshi\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"f\n\'ListconfigsConfigsFetchinvoicenoconnect\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"D\n\x1fListconfigsConfigsForcefeerates\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"F\n!ListconfigsConfigsFundingconfirms\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x1fListconfigsConfigsHsmpassphrase\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"T\n!ListconfigsConfigsHtlcmaximummsat\x12\x1f\n\nvalue_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06source\x18\x02 \x01(\t\"T\n!ListconfigsConfigsHtlcminimummsat\x12\x1f\n\nvalue_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06source\x18\x02 \x01(\t\"S\n,ListconfigsConfigsIpromisetofixbrokenapiuser\x12\x0f\n\x07sources\x18\x01 \x03(\t\x12\x12\n\nvalues_str\x18\x02 \x03(\t\"G\n!ListconfigsConfigsIgnorefeelimits\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"H\n!ListconfigsConfigsImportantplugin\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"H\n)ListconfigsConfigsInvoicesonchainfallback\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x1fListconfigsConfigsLargechannels\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"C\n\x1eListconfigsConfigsLightningdir\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x19ListconfigsConfigsLogfile\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"?\n\x1aListconfigsConfigsLoglevel\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsLogprefix\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"E\n\x1fListconfigsConfigsLogtimestamps\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"8\n\x19ListconfigsConfigsMainnet\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"I\n$ListconfigsConfigsMaxconcurrenthtlcs\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"\\\n)ListconfigsConfigsMaxdusthtlcexposuremsat\x12\x1f\n\nvalue_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06source\x18\x02 \x01(\t\"P\n#ListconfigsConfigsMaxlocktimeblocks\x12\x15\n\tvalue_int\x18\x01 \x01(\rB\x02\x18\x01\x12\x12\n\x06source\x18\x02 \x01(\tB\x02\x18\x01\"F\n ListconfigsConfigsMessagepadding\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x12\n\nvalue_bool\x18\x02 \x01(\x08\"g\n ListconfigsConfigsMincapacitysat\x12\x11\n\tvalue_int\x18\x01 \x01(\x04\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x14\n\x07\x64ynamic\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\n\n\x08_dynamic\"U\n\"ListconfigsConfigsMinemergencymsat\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x1f\n\nvalue_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\">\n\x19ListconfigsConfigsNetwork\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"8\n\x19ListconfigsConfigsOffline\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"L\n%ListconfigsConfigsPaymentfrontingnode\x12\x0f\n\x07sources\x18\x01 \x03(\t\x12\x12\n\nvalues_str\x18\x02 \x03(\t\">\n\x19ListconfigsConfigsPidfile\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"?\n\x18ListconfigsConfigsPlugin\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"B\n\x1bListconfigsConfigsPlugindir\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"<\n\x17ListconfigsConfigsProxy\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1dListconfigsConfigsRecklessdir\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x11\n\tvalue_str\x18\x02 \x01(\t\">\n\x19ListconfigsConfigsRecover\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x11\n\tvalue_str\x18\x02 \x01(\t\"8\n\x19ListconfigsConfigsRegtest\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"N\n(ListconfigsConfigsRequireconfirmedinputs\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"=\n\x18ListconfigsConfigsRescan\x12\x11\n\tvalue_int\x18\x01 \x01(\x12\x12\x0e\n\x06source\x18\x02 \x01(\t\":\n\x15ListconfigsConfigsRgb\x12\x11\n\tvalue_str\x18\x01 \x01(\x0c\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x19ListconfigsConfigsRpcfile\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1dListconfigsConfigsRpcfilemode\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"7\n\x18ListconfigsConfigsSignet\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1bListconfigsConfigsSubdaemon\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"8\n\x19ListconfigsConfigsTestnet\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"I\n$ListconfigsConfigsTorservicepassword\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"=\n\x18ListconfigsConfigsWallet\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"F\n!ListconfigsConfigsWatchtimeblocks\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"\r\n\x0bStopRequest\"a\n\x0cStopResponse\x12,\n\x06result\x18\x01 \x01(\x0e\x32\x1c.cln.StopResponse.StopResult\"#\n\nStopResult\x12\x15\n\x11SHUTDOWN_COMPLETE\x10\x00\"/\n\x0bHelpRequest\x12\x14\n\x07\x63ommand\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_command\"\x95\x01\n\x0cHelpResponse\x12\x1b\n\x04help\x18\x01 \x03(\x0b\x32\r.cln.HelpHelp\x12:\n\x0b\x66ormat_hint\x18\x02 \x01(\x0e\x32 .cln.HelpResponse.HelpFormathintH\x00\x88\x01\x01\"\x1c\n\x0eHelpFormathint\x12\n\n\x06SIMPLE\x10\x00\x42\x0e\n\x0c_format_hint\"\x1b\n\x08HelpHelp\x12\x0f\n\x07\x63ommand\x18\x01 \x01(\t\"g\n\x18PreapprovekeysendRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\x0c\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\"\x1b\n\x19PreapprovekeysendResponse\"*\n\x18PreapproveinvoiceRequest\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\"\x1b\n\x19PreapproveinvoiceResponse\"\x15\n\x13StaticbackupRequest\"#\n\x14StaticbackupResponse\x12\x0b\n\x03scb\x18\x01 \x03(\x0c\"d\n\x16\x42kprchannelsapyRequest\x12\x17\n\nstart_time\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x02 \x01(\x04H\x01\x88\x01\x01\x42\r\n\x0b_start_timeB\x0b\n\t_end_time\"P\n\x17\x42kprchannelsapyResponse\x12\x35\n\x0c\x63hannels_apy\x18\x01 \x03(\x0b\x32\x1f.cln.BkprchannelsapyChannelsApy\"\xf9\x06\n\x1a\x42kprchannelsapyChannelsApy\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12$\n\x0frouted_out_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0erouted_in_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12(\n\x13lease_fee_paid_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12*\n\x15lease_fee_earned_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12$\n\x0fpushed_out_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0epushed_in_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x16our_start_balance_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12/\n\x1a\x63hannel_start_balance_msat\x18\t \x01(\x0b\x32\x0b.cln.Amount\x12\"\n\rfees_out_msat\x18\n \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x0c\x66\x65\x65s_in_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x17\n\x0futilization_out\x18\x0c \x01(\t\x12$\n\x17utilization_out_initial\x18\r \x01(\tH\x01\x88\x01\x01\x12\x16\n\x0eutilization_in\x18\x0e \x01(\t\x12#\n\x16utilization_in_initial\x18\x0f \x01(\tH\x02\x88\x01\x01\x12\x0f\n\x07\x61py_out\x18\x10 \x01(\t\x12\x1c\n\x0f\x61py_out_initial\x18\x11 \x01(\tH\x03\x88\x01\x01\x12\x0e\n\x06\x61py_in\x18\x12 \x01(\t\x12\x1b\n\x0e\x61py_in_initial\x18\x13 \x01(\tH\x04\x88\x01\x01\x12\x11\n\tapy_total\x18\x14 \x01(\t\x12\x1e\n\x11\x61py_total_initial\x18\x15 \x01(\tH\x05\x88\x01\x01\x12\x16\n\tapy_lease\x18\x16 \x01(\tH\x06\x88\x01\x01\x42\x0f\n\r_fees_in_msatB\x1a\n\x18_utilization_out_initialB\x19\n\x17_utilization_in_initialB\x12\n\x10_apy_out_initialB\x11\n\x0f_apy_in_initialB\x14\n\x12_apy_total_initialB\x0c\n\n_apy_lease\"\xd2\x01\n\x18\x42kprdumpincomecsvRequest\x12\x12\n\ncsv_format\x18\x01 \x01(\t\x12\x15\n\x08\x63sv_file\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x1d\n\x10\x63onsolidate_fees\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x17\n\nstart_time\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x05 \x01(\x04H\x03\x88\x01\x01\x42\x0b\n\t_csv_fileB\x13\n\x11_consolidate_feesB\r\n\x0b_start_timeB\x0b\n\t_end_time\"\xd4\x01\n\x19\x42kprdumpincomecsvResponse\x12\x10\n\x08\x63sv_file\x18\x01 \x01(\t\x12M\n\ncsv_format\x18\x02 \x01(\x0e\x32\x39.cln.BkprdumpincomecsvResponse.BkprdumpincomecsvCsvFormat\"V\n\x1a\x42kprdumpincomecsvCsvFormat\x12\x0f\n\x0b\x43OINTRACKER\x10\x00\x12\n\n\x06KOINLY\x10\x01\x12\x0b\n\x07HARMONY\x10\x02\x12\x0e\n\nQUICKBOOKS\x10\x03\"%\n\x12\x42kprinspectRequest\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\"7\n\x13\x42kprinspectResponse\x12 \n\x03txs\x18\x01 \x03(\x0b\x32\x13.cln.BkprinspectTxs\"\x9a\x01\n\x0e\x42kprinspectTxs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x18\n\x0b\x62lockheight\x18\x02 \x01(\rH\x00\x88\x01\x01\x12#\n\x0e\x66\x65\x65s_paid_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x07outputs\x18\x04 \x03(\x0b\x32\x1a.cln.BkprinspectTxsOutputsB\x0e\n\x0c_blockheight\"\xbc\x03\n\x15\x42kprinspectTxsOutputs\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x0e\n\x06outnum\x18\x02 \x01(\r\x12&\n\x11output_value_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x04 \x01(\t\x12%\n\x0b\x63redit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12$\n\ndebit_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12 \n\x13originating_account\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x17\n\noutput_tag\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tspend_tag\x18\t \x01(\tH\x04\x88\x01\x01\x12\x1a\n\rspending_txid\x18\n \x01(\x0cH\x05\x88\x01\x01\x12\x17\n\npayment_id\x18\x0b \x01(\x0cH\x06\x88\x01\x01\x42\x0e\n\x0c_credit_msatB\r\n\x0b_debit_msatB\x16\n\x14_originating_accountB\r\n\x0b_output_tagB\x0c\n\n_spend_tagB\x10\n\x0e_spending_txidB\r\n\x0b_payment_id\"h\n\x1c\x42kprlistaccounteventsRequest\x12\x14\n\x07\x61\x63\x63ount\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x17\n\npayment_id\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\n\n\x08_accountB\r\n\x0b_payment_id\"Q\n\x1d\x42kprlistaccounteventsResponse\x12\x30\n\x06\x65vents\x18\x01 \x03(\x0b\x32 .cln.BkprlistaccounteventsEvents\"\xcd\x05\n\x1b\x42kprlistaccounteventsEvents\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12S\n\titem_type\x18\x02 \x01(\x0e\x32@.cln.BkprlistaccounteventsEvents.BkprlistaccounteventsEventsType\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x06 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\r\x12\x15\n\x08outpoint\x18\x08 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\t \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06origin\x18\n \x01(\tH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\x0b \x01(\x0cH\x03\x88\x01\x01\x12\x11\n\x04txid\x18\x0c \x01(\x0cH\x04\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\r \x01(\tH\x05\x88\x01\x01\x12#\n\tfees_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x19\n\x0cis_rebalance\x18\x0f \x01(\x08H\x07\x88\x01\x01\x12\x14\n\x07part_id\x18\x10 \x01(\rH\x08\x88\x01\x01\x12\x19\n\x0c\x63urrencyrate\x18\x11 \x01(\x01H\t\x88\x01\x01\"J\n\x1f\x42kprlistaccounteventsEventsType\x12\x0f\n\x0bONCHAIN_FEE\x10\x00\x12\t\n\x05\x43HAIN\x10\x01\x12\x0b\n\x07\x43HANNEL\x10\x02\x42\x0b\n\t_outpointB\x0e\n\x0c_blockheightB\t\n\x07_originB\r\n\x0b_payment_idB\x07\n\x05_txidB\x0e\n\x0c_descriptionB\x0c\n\n_fees_msatB\x0f\n\r_is_rebalanceB\n\n\x08_part_idB\x0f\n\r_currencyrate\"\x19\n\x17\x42kprlistbalancesRequest\"K\n\x18\x42kprlistbalancesResponse\x12/\n\x08\x61\x63\x63ounts\x18\x01 \x03(\x0b\x32\x1d.cln.BkprlistbalancesAccounts\"\xc6\x02\n\x18\x42kprlistbalancesAccounts\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x37\n\x08\x62\x61lances\x18\x02 \x03(\x0b\x32%.cln.BkprlistbalancesAccountsBalances\x12\x14\n\x07peer_id\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x16\n\twe_opened\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x1b\n\x0e\x61\x63\x63ount_closed\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x1d\n\x10\x61\x63\x63ount_resolved\x18\x06 \x01(\x08H\x03\x88\x01\x01\x12\x1e\n\x11resolved_at_block\x18\x07 \x01(\rH\x04\x88\x01\x01\x42\n\n\x08_peer_idB\x0c\n\n_we_openedB\x11\n\x0f_account_closedB\x13\n\x11_account_resolvedB\x14\n\x12_resolved_at_block\"X\n BkprlistbalancesAccountsBalances\x12!\n\x0c\x62\x61lance_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\tcoin_type\x18\x02 \x01(\t\"\x97\x01\n\x15\x42kprlistincomeRequest\x12\x1d\n\x10\x63onsolidate_fees\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x17\n\nstart_time\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x03 \x01(\rH\x02\x88\x01\x01\x42\x13\n\x11_consolidate_feesB\r\n\x0b_start_timeB\x0b\n\t_end_time\"P\n\x16\x42kprlistincomeResponse\x12\x36\n\rincome_events\x18\x01 \x03(\x0b\x32\x1f.cln.BkprlistincomeIncomeEvents\"\xb4\x02\n\x1a\x42kprlistincomeIncomeEvents\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x0b\n\x03tag\x18\x02 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\r\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08outpoint\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\t \x01(\x0cH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\n \x01(\x0cH\x03\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0b\n\t_outpointB\x07\n\x05_txidB\r\n\x0b_payment_id\"P\n%BkpreditdescriptionbypaymentidRequest\x12\x12\n\npayment_id\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"e\n&BkpreditdescriptionbypaymentidResponse\x12;\n\x07updated\x18\x01 \x03(\x0b\x32*.cln.BkpreditdescriptionbypaymentidUpdated\"\xa3\x05\n%BkpreditdescriptionbypaymentidUpdated\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12g\n\titem_type\x18\x02 \x01(\x0e\x32T.cln.BkpreditdescriptionbypaymentidUpdated.BkpreditdescriptionbypaymentidUpdatedType\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x06 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\r\x12\x13\n\x0b\x64\x65scription\x18\x08 \x01(\t\x12\x15\n\x08outpoint\x18\t \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\n \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06origin\x18\x0b \x01(\tH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\x0c \x01(\x0cH\x03\x88\x01\x01\x12\x11\n\x04txid\x18\r \x01(\x0cH\x04\x88\x01\x01\x12#\n\tfees_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x19\n\x0cis_rebalance\x18\x0f \x01(\x08H\x06\x88\x01\x01\x12\x14\n\x07part_id\x18\x10 \x01(\rH\x07\x88\x01\x01\"C\n)BkpreditdescriptionbypaymentidUpdatedType\x12\t\n\x05\x43HAIN\x10\x00\x12\x0b\n\x07\x43HANNEL\x10\x01\x42\x0b\n\t_outpointB\x0e\n\x0c_blockheightB\t\n\x07_originB\r\n\x0b_payment_idB\x07\n\x05_txidB\x0c\n\n_fees_msatB\x0f\n\r_is_rebalanceB\n\n\x08_part_id\"M\n$BkpreditdescriptionbyoutpointRequest\x12\x10\n\x08outpoint\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"c\n%BkpreditdescriptionbyoutpointResponse\x12:\n\x07updated\x18\x01 \x03(\x0b\x32).cln.BkpreditdescriptionbyoutpointUpdated\"\x9f\x05\n$BkpreditdescriptionbyoutpointUpdated\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x65\n\titem_type\x18\x02 \x01(\x0e\x32R.cln.BkpreditdescriptionbyoutpointUpdated.BkpreditdescriptionbyoutpointUpdatedType\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x06 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\r\x12\x13\n\x0b\x64\x65scription\x18\x08 \x01(\t\x12\x15\n\x08outpoint\x18\t \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\n \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06origin\x18\x0b \x01(\tH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\x0c \x01(\x0cH\x03\x88\x01\x01\x12\x11\n\x04txid\x18\r \x01(\x0cH\x04\x88\x01\x01\x12#\n\tfees_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x19\n\x0cis_rebalance\x18\x0f \x01(\x08H\x06\x88\x01\x01\x12\x14\n\x07part_id\x18\x10 \x01(\rH\x07\x88\x01\x01\"B\n(BkpreditdescriptionbyoutpointUpdatedType\x12\t\n\x05\x43HAIN\x10\x00\x12\x0b\n\x07\x43HANNEL\x10\x01\x42\x0b\n\t_outpointB\x0e\n\x0c_blockheightB\t\n\x07_originB\r\n\x0b_payment_idB\x07\n\x05_txidB\x0c\n\n_fees_msatB\x0f\n\r_is_rebalanceB\n\n\x08_part_id\"\xb0\x01\n\x11\x42kprreportRequest\x12\x13\n\x06\x66ormat\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x07headers\x18\x02 \x03(\t\x12\x13\n\x06\x65scape\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nstart_time\x18\x04 \x01(\rH\x02\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x05 \x01(\rH\x03\x88\x01\x01\x42\t\n\x07_formatB\t\n\x07_escapeB\r\n\x0b_start_timeB\x0b\n\t_end_time\"$\n\x12\x42kprreportResponse\x12\x0e\n\x06report\x18\x01 \x03(\t\"n\n\x14\x42lacklistruneRequest\x12\x12\n\x05start\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03\x65nd\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x13\n\x06relist\x18\x03 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_startB\x06\n\x04_endB\t\n\x07_relist\"G\n\x15\x42lacklistruneResponse\x12.\n\tblacklist\x18\x01 \x03(\x0b\x32\x1b.cln.BlacklistruneBlacklist\"4\n\x16\x42lacklistruneBlacklist\x12\r\n\x05start\x18\x01 \x01(\x04\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x04\"p\n\x10\x43heckruneRequest\x12\x0c\n\x04rune\x18\x01 \x01(\t\x12\x13\n\x06nodeid\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06method\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0e\n\x06params\x18\x04 \x03(\tB\t\n\x07_nodeidB\t\n\x07_method\"\"\n\x11\x43heckruneResponse\x12\r\n\x05valid\x18\x01 \x01(\x08\"E\n\x11\x43reateruneRequest\x12\x11\n\x04rune\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0crestrictions\x18\x02 \x03(\tB\x07\n\x05_rune\"{\n\x12\x43reateruneResponse\x12\x0c\n\x04rune\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12&\n\x19warning_unrestricted_rune\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x1c\n\x1a_warning_unrestricted_rune\".\n\x10ShowrunesRequest\x12\x11\n\x04rune\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x07\n\x05_rune\"7\n\x11ShowrunesResponse\x12\"\n\x05runes\x18\x01 \x03(\x0b\x32\x13.cln.ShowrunesRunes\"\x9d\x02\n\x0eShowrunesRunes\x12\x0c\n\x04rune\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12\x35\n\x0crestrictions\x18\x03 \x03(\x0b\x32\x1f.cln.ShowrunesRunesRestrictions\x12\x1f\n\x17restrictions_as_english\x18\x04 \x01(\t\x12\x13\n\x06stored\x18\x05 \x01(\x08H\x00\x88\x01\x01\x12\x18\n\x0b\x62lacklisted\x18\x06 \x01(\x08H\x01\x88\x01\x01\x12\x16\n\tlast_used\x18\x07 \x01(\x01H\x02\x88\x01\x01\x12\x15\n\x08our_rune\x18\x08 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_storedB\x0e\n\x0c_blacklistedB\x0c\n\n_last_usedB\x0b\n\t_our_rune\"p\n\x1aShowrunesRunesRestrictions\x12\x41\n\x0c\x61lternatives\x18\x01 \x03(\x0b\x32+.cln.ShowrunesRunesRestrictionsAlternatives\x12\x0f\n\x07\x65nglish\x18\x02 \x01(\t\"n\n&ShowrunesRunesRestrictionsAlternatives\x12\x11\n\tfieldname\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\x12\x11\n\tcondition\x18\x03 \x01(\t\x12\x0f\n\x07\x65nglish\x18\x04 \x01(\t\"r\n\x17\x41skreneunreserveRequest\x12\'\n\x04path\x18\x01 \x03(\x0b\x32\x19.cln.AskreneunreservePath\x12\x1b\n\x0e\x64\x65v_remove_all\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\x11\n\x0f_dev_remove_all\"\x1a\n\x18\x41skreneunreserveResponse\"t\n\x14\x41skreneunreservePath\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1c\n\x14short_channel_id_dir\x18\x04 \x01(\t\x12\x12\n\x05layer\x18\x05 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_layer\"8\n\x18\x41skrenelistlayersRequest\x12\x12\n\x05layer\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_layer\"I\n\x19\x41skrenelistlayersResponse\x12,\n\x06layers\x18\x01 \x03(\x0b\x32\x1c.cln.AskrenelistlayersLayers\"\xe8\x03\n\x17\x41skrenelistlayersLayers\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x16\n\x0e\x64isabled_nodes\x18\x02 \x03(\x0c\x12\x45\n\x10\x63reated_channels\x18\x03 \x03(\x0b\x32+.cln.AskrenelistlayersLayersCreatedChannels\x12<\n\x0b\x63onstraints\x18\x04 \x03(\x0b\x32\'.cln.AskrenelistlayersLayersConstraints\x12\x12\n\npersistent\x18\x05 \x01(\x08\x12\x19\n\x11\x64isabled_channels\x18\x06 \x03(\t\x12\x43\n\x0f\x63hannel_updates\x18\x07 \x03(\x0b\x32*.cln.AskrenelistlayersLayersChannelUpdates\x12\x32\n\x06\x62iases\x18\x08 \x03(\x0b\x32\".cln.AskrenelistlayersLayersBiases\x12;\n\x0bnode_biases\x18\t \x03(\x0b\x32&.cln.AskrenelistlayersLayersNodeBiases\x12<\n\x0bimpressions\x18\n \x03(\x0b\x32\'.cln.AskrenelistlayersLayersImpressions\"\x9b\x01\n\x1d\x41skrenelistlayersLayersBiases\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\x0c\n\x04\x62ias\x18\x02 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttimestamp\x18\x04 \x01(\x04H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0c\n\n_timestamp\"\xa8\x03\n%AskrenelistlayersLayersChannelUpdates\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\x14\n\x07\x65nabled\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12+\n\x11htlc_minimum_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12+\n\x11htlc_maximum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x06 \x01(\rH\x04\x88\x01\x01\x12\x1e\n\x11\x63ltv_expiry_delta\x18\x07 \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_enabledB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x14\n\x12_cltv_expiry_delta\"\xda\x01\n\"AskrenelistlayersLayersConstraints\x12&\n\x0cmaximum_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12&\n\x0cminimum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x1c\n\x14short_channel_id_dir\x18\x05 \x01(\t\x12\x16\n\ttimestamp\x18\x06 \x01(\x04H\x02\x88\x01\x01\x42\x0f\n\r_maximum_msatB\x0f\n\r_minimum_msatB\x0c\n\n_timestamp\"\x8b\x01\n&AskrenelistlayersLayersCreatedChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\"\n\rcapacity_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\"w\n\"AskrenelistlayersLayersImpressions\x12 \n\x0b\x61mount_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\x04\"\x91\x01\n!AskrenelistlayersLayersNodeBiases\x12\x0c\n\x04node\x18\x01 \x01(\x0c\x12\x0f\n\x07in_bias\x18\x02 \x01(\x12\x12\x10\n\x08out_bias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x42\x0e\n\x0c_description\"R\n\x19\x41skrenecreatelayerRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x17\n\npersistent\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\r\n\x0b_persistent\"K\n\x1a\x41skrenecreatelayerResponse\x12-\n\x06layers\x18\x01 \x03(\x0b\x32\x1d.cln.AskrenecreatelayerLayers\"\xef\x03\n\x18\x41skrenecreatelayerLayers\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x12\n\npersistent\x18\x02 \x01(\x08\x12\x16\n\x0e\x64isabled_nodes\x18\x03 \x03(\x0c\x12\x19\n\x11\x64isabled_channels\x18\x04 \x03(\t\x12\x46\n\x10\x63reated_channels\x18\x05 \x03(\x0b\x32,.cln.AskrenecreatelayerLayersCreatedChannels\x12\x44\n\x0f\x63hannel_updates\x18\x06 \x03(\x0b\x32+.cln.AskrenecreatelayerLayersChannelUpdates\x12=\n\x0b\x63onstraints\x18\x07 \x03(\x0b\x32(.cln.AskrenecreatelayerLayersConstraints\x12\x33\n\x06\x62iases\x18\x08 \x03(\x0b\x32#.cln.AskrenecreatelayerLayersBiases\x12<\n\x0bnode_biases\x18\t \x03(\x0b\x32\'.cln.AskrenecreatelayerLayersNodeBiases\x12=\n\x0bimpressions\x18\n \x03(\x0b\x32(.cln.AskrenecreatelayerLayersImpressions\"\x9c\x01\n\x1e\x41skrenecreatelayerLayersBiases\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\x0c\n\x04\x62ias\x18\x02 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttimestamp\x18\x04 \x01(\x04H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0c\n\n_timestamp\"\xd1\x02\n&AskrenecreatelayerLayersChannelUpdates\x12+\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12+\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x04 \x01(\rH\x03\x88\x01\x01\x12\x12\n\x05\x64\x65lay\x18\x05 \x01(\rH\x04\x88\x01\x01\x42\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x08\n\x06_delay\"\xc4\x01\n#AskrenecreatelayerLayersConstraints\x12\x18\n\x10short_channel_id\x18\x01 \x01(\t\x12\x11\n\tdirection\x18\x02 \x01(\r\x12&\n\x0cmaximum_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12&\n\x0cminimum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x42\x0f\n\r_maximum_msatB\x0f\n\r_minimum_msat\"\x8c\x01\n\'AskrenecreatelayerLayersCreatedChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\"\n\rcapacity_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\"x\n#AskrenecreatelayerLayersImpressions\x12 \n\x0b\x61mount_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\x04\"\x92\x01\n\"AskrenecreatelayerLayersNodeBiases\x12\x0c\n\x04node\x18\x01 \x01(\x0c\x12\x0f\n\x07in_bias\x18\x02 \x01(\x12\x12\x10\n\x08out_bias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x42\x0e\n\x0c_description\"*\n\x19\x41skreneremovelayerRequest\x12\r\n\x05layer\x18\x01 \x01(\t\"\x1c\n\x1a\x41skreneremovelayerResponse\"P\n!AskreneremovechannelupdateRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\"$\n\"AskreneremovechannelupdateResponse\">\n\x15\x41skrenereserveRequest\x12%\n\x04path\x18\x01 \x03(\x0b\x32\x17.cln.AskrenereservePath\"\x18\n\x16\x41skrenereserveResponse\"r\n\x12\x41skrenereservePath\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1c\n\x14short_channel_id_dir\x18\x04 \x01(\t\x12\x12\n\x05layer\x18\x05 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_layer\"2\n\x11\x41skreneageRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0e\n\x06\x63utoff\x18\x02 \x01(\x04\"8\n\x12\x41skreneageResponse\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x13\n\x0bnum_removed\x18\x02 \x01(\x04\"\xe7\x01\n\x10GetroutesRequest\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06layers\x18\x04 \x03(\t\x12 \n\x0bmaxfee_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\nfinal_cltv\x18\x07 \x01(\r\x12\x15\n\x08maxdelay\x18\x08 \x01(\rH\x00\x88\x01\x01\x12\x15\n\x08maxparts\x18\t \x01(\rH\x01\x88\x01\x01\x42\x0b\n\t_maxdelayB\x0b\n\t_maxparts\"R\n\x11GetroutesResponse\x12\x17\n\x0fprobability_ppm\x18\x01 \x01(\x04\x12$\n\x06routes\x18\x02 \x03(\x0b\x32\x14.cln.GetroutesRoutes\"\x88\x01\n\x0fGetroutesRoutes\x12\x17\n\x0fprobability_ppm\x18\x01 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x04path\x18\x03 \x03(\x0b\x32\x18.cln.GetroutesRoutesPath\x12\x12\n\nfinal_cltv\x18\x04 \x01(\r\"\xd4\x03\n\x13GetroutesRoutesPath\x12)\n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x00\x88\x01\x01\x12\x1d\n\x0cnext_node_id\x18\x04 \x01(\x0c\x42\x02\x18\x01H\x01\x88\x01\x01\x12\x16\n\x05\x64\x65lay\x18\x05 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x1c\n\x14short_channel_id_dir\x18\x06 \x01(\t\x12(\n\x0e\x61mount_in_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12)\n\x0f\x61mount_out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x17\n\nnode_id_in\x18\t \x01(\x0cH\x05\x88\x01\x01\x12\x18\n\x0bnode_id_out\x18\n \x01(\x0cH\x06\x88\x01\x01\x12\x14\n\x07\x63ltv_in\x18\x0b \x01(\rH\x07\x88\x01\x01\x12\x15\n\x08\x63ltv_out\x18\x0c \x01(\rH\x08\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\x0f\n\r_next_node_idB\x08\n\x06_delayB\x11\n\x0f_amount_in_msatB\x12\n\x10_amount_out_msatB\r\n\x0b_node_id_inB\x0e\n\x0c_node_id_outB\n\n\x08_cltv_inB\x0b\n\t_cltv_out\"8\n\x19\x41skrenedisablenodeRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\x0c\"\x1c\n\x1a\x41skrenedisablenodeResponse\"\x8a\x02\n\x1b\x41skreneinformchannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x06 \x01(\t\x12 \n\x0b\x61mount_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12K\n\x06inform\x18\x08 \x01(\x0e\x32;.cln.AskreneinformchannelRequest.AskreneinformchannelInform\"O\n\x1a\x41skreneinformchannelInform\x12\x0f\n\x0b\x43ONSTRAINED\x10\x00\x12\x11\n\rUNCONSTRAINED\x10\x01\x12\r\n\tSUCCEEDED\x10\x02\"\x94\x01\n\x1c\x41skreneinformchannelResponse\x12\x39\n\x0b\x63onstraints\x18\x02 \x03(\x0b\x32$.cln.AskreneinformchannelConstraints\x12\x39\n\x0bimpressions\x18\x03 \x03(\x0b\x32$.cln.AskreneinformchannelImpressions\"\xd3\x01\n\x1f\x41skreneinformchannelConstraints\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\r\n\x05layer\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\x04\x12&\n\x0cmaximum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12&\n\x0cminimum_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x42\x0f\n\r_maximum_msatB\x0f\n\r_minimum_msat\"\x83\x01\n\x1f\x41skreneinformchannelImpressions\x12 \n\x0b\x61mount_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\r\n\x05layer\x18\x02 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x03 \x01(\t\x12\x11\n\ttimestamp\x18\x04 \x01(\x04\"\x8f\x01\n\x1b\x41skrenecreatechannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x03 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x04 \x01(\t\x12\"\n\rcapacity_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"\x1e\n\x1c\x41skrenecreatechannelResponse\"\xad\x03\n\x1b\x41skreneupdatechannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x14\n\x07\x65nabled\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12+\n\x11htlc_minimum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12+\n\x11htlc_maximum_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x07 \x01(\rH\x04\x88\x01\x01\x12\x1e\n\x11\x63ltv_expiry_delta\x18\x08 \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_enabledB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x14\n\x12_cltv_expiry_delta\"\x1e\n\x1c\x41skreneupdatechannelResponse\"\xa4\x01\n\x19\x41skrenebiaschannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x0c\n\x04\x62ias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08relative\x18\x05 \x01(\x08H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0b\n\t_relative\"K\n\x1a\x41skrenebiaschannelResponse\x12-\n\x06\x62iases\x18\x01 \x03(\x0b\x32\x1d.cln.AskrenebiaschannelBiases\"\xa5\x01\n\x18\x41skrenebiaschannelBiases\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x0c\n\x04\x62ias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttimestamp\x18\x05 \x01(\x04H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0c\n\n_timestamp\"\xa4\x01\n\x16\x41skrenebiasnodeRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x11\n\tdirection\x18\x03 \x01(\t\x12\x0c\n\x04\x62ias\x18\x04 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08relative\x18\x06 \x01(\x08H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0b\n\t_relative\"N\n\x17\x41skrenebiasnodeResponse\x12\x33\n\x0bnode_biases\x18\x01 \x03(\x0b\x32\x1e.cln.AskrenebiasnodeNodeBiases\"\x98\x01\n\x19\x41skrenebiasnodeNodeBiases\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x0f\n\x07in_bias\x18\x03 \x01(\x12\x12\x10\n\x08out_bias\x18\x04 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x06 \x01(\x04\x42\x0e\n\x0c_description\" \n\x1e\x41skrenelistreservationsRequest\"a\n\x1f\x41skrenelistreservationsResponse\x12>\n\x0creservations\x18\x01 \x03(\x0b\x32(.cln.AskrenelistreservationsReservations\"\x91\x01\n#AskrenelistreservationsReservations\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x16\n\x0e\x61ge_in_seconds\x18\x03 \x01(\x04\x12\x12\n\ncommand_id\x18\x04 \x01(\t\"\xf5\x02\n\x19InjectpaymentonionRequest\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x0b\x63ltv_expiry\x18\x04 \x01(\r\x12\x0e\n\x06partid\x18\x05 \x01(\x04\x12\x0f\n\x07groupid\x18\x06 \x01(\x04\x12\x12\n\x05label\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tinvstring\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\t \x01(\x0cH\x02\x88\x01\x01\x12*\n\x10\x64\x65stination_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x0b \x01(\x0cH\x04\x88\x01\x01\x42\x08\n\x06_labelB\x0c\n\n_invstringB\x10\n\x0e_localinvreqidB\x13\n\x11_destination_msatB\x0e\n\x0c_destination\"w\n\x1aInjectpaymentonionResponse\x12\x12\n\ncreated_at\x18\x01 \x01(\x04\x12\x14\n\x0c\x63ompleted_at\x18\x02 \x01(\x04\x12\x15\n\rcreated_index\x18\x03 \x01(\x04\x12\x18\n\x10payment_preimage\x18\x04 \x01(\x0c\">\n\x19InjectonionmessageRequest\x12\x10\n\x08path_key\x18\x01 \x01(\x0c\x12\x0f\n\x07message\x18\x02 \x01(\x0c\"\x1c\n\x1aInjectonionmessageResponse\"\xbb\x03\n\x0bXpayRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12 \n\x06maxfee\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x0e\n\x06layers\x18\x04 \x03(\t\x12\x16\n\tretry_for\x18\x05 \x01(\rH\x02\x88\x01\x01\x12&\n\x0cpartial_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x07 \x01(\rH\x04\x88\x01\x01\x12\x17\n\npayer_note\x18\x08 \x01(\tH\x05\x88\x01\x01\x12\x12\n\x05label\x18\t \x01(\tH\x06\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\n \x01(\x0cH\x07\x88\x01\x01\x12\x1b\n\x0e\x64\x65v_use_shadow\x18\x0b \x01(\x08H\x08\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\t\n\x07_maxfeeB\x0c\n\n_retry_forB\x0f\n\r_partial_msatB\x0b\n\t_maxdelayB\r\n\x0b_payer_noteB\x08\n\x06_labelB\x10\n\x0e_localinvreqidB\x11\n\x0f_dev_use_shadow\"\xa1\x01\n\x0cXpayResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x14\n\x0c\x66\x61iled_parts\x18\x02 \x01(\x04\x12\x18\n\x10successful_parts\x18\x03 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"=\n\x19SignmessagewithkeyRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t\"`\n\x1aSignmessagewithkeyResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x0e\n\x06pubkey\x18\x02 \x01(\x0c\x12\x11\n\tsignature\x18\x03 \x01(\x0c\x12\x0e\n\x06\x62\x61se64\x18\x04 \x01(\t\"\xcd\x01\n\x17ListchannelmovesRequest\x12\x46\n\x05index\x18\x01 \x01(\x0e\x32\x32.cln.ListchannelmovesRequest.ListchannelmovesIndexH\x00\x88\x01\x01\x12\x12\n\x05start\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x03 \x01(\rH\x02\x88\x01\x01\"$\n\x15ListchannelmovesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x42\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"S\n\x18ListchannelmovesResponse\x12\x37\n\x0c\x63hannelmoves\x18\x01 \x03(\x0b\x32!.cln.ListchannelmovesChannelmoves\"\xa9\x04\n\x1cListchannelmovesChannelmoves\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\x12\n\naccount_id\x18\x02 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x12]\n\x0bprimary_tag\x18\x06 \x01(\x0e\x32H.cln.ListchannelmovesChannelmoves.ListchannelmovesChannelmovesPrimaryTag\x12\x19\n\x0cpayment_hash\x18\x07 \x01(\x0cH\x00\x88\x01\x01\x12\x14\n\x07part_id\x18\x08 \x01(\x04H\x01\x88\x01\x01\x12\x15\n\x08group_id\x18\t \x01(\x04H\x02\x88\x01\x01\x12\x1e\n\tfees_msat\x18\n \x01(\x0b\x32\x0b.cln.Amount\"\x96\x01\n&ListchannelmovesChannelmovesPrimaryTag\x12\x0b\n\x07INVOICE\x10\x00\x12\n\n\x06ROUTED\x10\x01\x12\n\n\x06PUSHED\x10\x02\x12\r\n\tLEASE_FEE\x10\x03\x12\x14\n\x10\x43HANNEL_PROPOSED\x10\x04\x12\x0f\n\x0bPENALTY_ADJ\x10\x05\x12\x11\n\rJOURNAL_ENTRY\x10\x06\x42\x0f\n\r_payment_hashB\n\n\x08_part_idB\x0b\n\t_group_id\"\xc5\x01\n\x15ListchainmovesRequest\x12\x42\n\x05index\x18\x01 \x01(\x0e\x32..cln.ListchainmovesRequest.ListchainmovesIndexH\x00\x88\x01\x01\x12\x12\n\x05start\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x03 \x01(\rH\x02\x88\x01\x01\"\"\n\x13ListchainmovesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x42\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"K\n\x16ListchainmovesResponse\x12\x31\n\nchainmoves\x18\x01 \x03(\x0b\x32\x1d.cln.ListchainmovesChainmoves\"\xd4\x06\n\x18ListchainmovesChainmoves\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\x12\n\naccount_id\x18\x02 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x12U\n\x0bprimary_tag\x18\x06 \x01(\x0e\x32@.cln.ListchainmovesChainmoves.ListchainmovesChainmovesPrimaryTag\x12\x14\n\x07peer_id\x18\x08 \x01(\x0cH\x00\x88\x01\x01\x12 \n\x13originating_account\x18\t \x01(\tH\x01\x88\x01\x01\x12\x1a\n\rspending_txid\x18\n \x01(\x0cH\x02\x88\x01\x01\x12\x1b\n\x04utxo\x18\x0b \x01(\x0b\x32\r.cln.Outpoint\x12\x19\n\x0cpayment_hash\x18\x0c \x01(\x0cH\x03\x88\x01\x01\x12 \n\x0boutput_msat\x18\r \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x0coutput_count\x18\x0e \x01(\rH\x04\x88\x01\x01\x12\x13\n\x0b\x62lockheight\x18\x0f \x01(\r\x12\x12\n\nextra_tags\x18\x10 \x03(\t\"\x95\x02\n\"ListchainmovesChainmovesPrimaryTag\x12\x0b\n\x07\x44\x45POSIT\x10\x00\x12\x0e\n\nWITHDRAWAL\x10\x01\x12\x0b\n\x07PENALTY\x10\x02\x12\x10\n\x0c\x43HANNEL_OPEN\x10\x03\x12\x11\n\rCHANNEL_CLOSE\x10\x04\x12\x11\n\rDELAYED_TO_US\x10\x05\x12\x0b\n\x07HTLC_TX\x10\x06\x12\x10\n\x0cHTLC_TIMEOUT\x10\x07\x12\x10\n\x0cHTLC_FULFILL\x10\x08\x12\r\n\tTO_WALLET\x10\t\x12\n\n\x06\x41NCHOR\x10\n\x12\x0b\n\x07TO_THEM\x10\x0b\x12\r\n\tPENALIZED\x10\x0c\x12\n\n\x06STOLEN\x10\r\x12\x0b\n\x07IGNORED\x10\x0e\x12\x0c\n\x08TO_MINER\x10\x0f\x42\n\n\x08_peer_idB\x16\n\x14_originating_accountB\x10\n\x0e_spending_txidB\x0f\n\r_payment_hashB\x0f\n\r_output_count\"\xe9\x01\n\x18ListnetworkeventsRequest\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12H\n\x05index\x18\x02 \x01(\x0e\x32\x34.cln.ListnetworkeventsRequest.ListnetworkeventsIndexH\x01\x88\x01\x01\x12\x12\n\x05start\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\rH\x03\x88\x01\x01\"%\n\x16ListnetworkeventsIndex\x12\x0b\n\x07\x43REATED\x10\x00\x42\x05\n\x03_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"W\n\x19ListnetworkeventsResponse\x12:\n\rnetworkevents\x18\x01 \x03(\x0b\x32#.cln.ListnetworkeventsNetworkevents\"\xf2\x01\n\x1eListnetworkeventsNetworkevents\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\x11\n\ttimestamp\x18\x02 \x01(\x04\x12\x0f\n\x07peer_id\x18\x03 \x01(\x0c\x12\x11\n\titem_type\x18\x04 \x01(\t\x12\x13\n\x06reason\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rduration_nsec\x18\x06 \x01(\x04H\x01\x88\x01\x01\x12\x1e\n\x11\x63onnect_attempted\x18\x07 \x01(\x08H\x02\x88\x01\x01\x42\t\n\x07_reasonB\x10\n\x0e_duration_nsecB\x14\n\x12_connect_attempted\"/\n\x16\x44\x65lnetworkeventRequest\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\"\x19\n\x17\x44\x65lnetworkeventResponse\"\xf6\x01\n\x1a\x43lnrestregisterpathRequest\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x12\n\nrpc_method\x18\x02 \x01(\t\x12H\n\x11rune_restrictions\x18\x03 \x01(\x0b\x32(.cln.ClnrestregisterpathRuneRestrictionsH\x00\x88\x01\x01\x12\x1a\n\rrune_required\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x18\n\x0bhttp_method\x18\x05 \x01(\tH\x02\x88\x01\x01\x42\x14\n\x12_rune_restrictionsB\x10\n\x0e_rune_requiredB\x0e\n\x0c_http_method\"\x1d\n\x1b\x43lnrestregisterpathResponse\"\xda\x01\n#ClnrestregisterpathRuneRestrictions\x12\x13\n\x06nodeid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06method\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x44\n\x06params\x18\x03 \x03(\x0b\x32\x34.cln.ClnrestregisterpathRuneRestrictions.ParamsEntry\x1a-\n\x0bParamsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\t\n\x07_nodeidB\t\n\x07_method\",\n\x18ListcurrencyratesRequest\x12\x10\n\x08\x63urrency\x18\x01 \x01(\t\"W\n\x19ListcurrencyratesResponse\x12:\n\rcurrencyrates\x18\x01 \x03(\x0b\x32#.cln.ListcurrencyratesCurrencyrates\"@\n\x1eListcurrencyratesCurrencyrates\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\x01\":\n\x16\x43urrencyconvertRequest\x12\x0e\n\x06\x61mount\x18\x01 \x01(\x01\x12\x10\n\x08\x63urrency\x18\x02 \x01(\t\"4\n\x17\x43urrencyconvertResponse\x12\x19\n\x04msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\"G\n\x13\x43urrencyrateRequest\x12\x10\n\x08\x63urrency\x18\x01 \x01(\t\x12\x13\n\x06source\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_source\"$\n\x14\x43urrencyrateResponse\x12\x0c\n\x04rate\x18\x01 \x01(\x01\"\x95\x02\n\x11SendamountRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12 \n\x06maxfee\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x0e\n\x06layers\x18\x04 \x03(\t\x12\x16\n\tretry_for\x18\x05 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x06 \x01(\rH\x02\x88\x01\x01\x12\x17\n\npayer_note\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x12\n\x05label\x18\x08 \x01(\tH\x04\x88\x01\x01\x42\t\n\x07_maxfeeB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\r\n\x0b_payer_noteB\x08\n\x06_label\"\xa7\x01\n\x12SendamountResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x14\n\x0c\x66\x61iled_parts\x18\x02 \x01(\x04\x12\x18\n\x10successful_parts\x18\x03 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"e\n\x12\x43reateproofRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12\x11\n\x04note\x18\x02 \x01(\tH\x00\x88\x01\x01\x12 \n\x07include\x18\x03 \x03(\x0b\x32\x0f.cln.ProofFieldB\x07\n\x05_note\"=\n\x13\x43reateproofResponse\x12&\n\x06proofs\x18\x01 \x03(\x0b\x32\x16.cln.CreateproofProofs\"\xb6\x01\n\x11\x43reateproofProofs\x12\x0e\n\x06\x62olt12\x18\x01 \x01(\t\x12.\n\x15offer_fields_included\x18\x02 \x03(\x0b\x32\x0f.cln.ProofField\x12/\n\x16invreq_fields_included\x18\x03 \x03(\x0b\x32\x0f.cln.ProofField\x12\x30\n\x17invoice_fields_included\x18\x04 \x03(\x0b\x32\x0f.cln.ProofField\"\xd7\x02\n\x0fXkeysendRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\x03 \x01(\tH\x00\x88\x01\x01\x12 \n\x06maxfee\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x0e\n\x06layers\x18\x05 \x03(\t\x12\x16\n\tretry_for\x18\x06 \x01(\rH\x02\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x07 \x01(\rH\x03\x88\x01\x01\x12\x36\n\textratlvs\x18\x08 \x03(\x0b\x32#.cln.XkeysendRequest.ExtratlvsEntry\x1a\x30\n\x0e\x45xtratlvsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x08\n\x06_labelB\t\n\x07_maxfeeB\x0c\n\n_retry_forB\x0b\n\t_maxdelay\"\xa5\x01\n\x10XkeysendResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x14\n\x0c\x66\x61iled_parts\x18\x02 \x01(\x04\x12\x18\n\x10successful_parts\x18\x03 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"3\n\x0fGracefulRequest\x12\x14\n\x07timeout\x18\x01 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_timeout\"H\n\x10GracefulResponse\x12\x1d\n\x15pending_htlc_expiries\x18\x01 \x03(\r\x12\x15\n\rpending_peers\x18\x02 \x03(\x0c\"\xc0\x04\n\x0fRecklessRequest\x12%\n\x0b\x61mount_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x35\n\x07\x63ommand\x18\x02 \x01(\x0e\x32$.cln.RecklessRequest.RecklessCommand\x12\x16\n\tdeveloper\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x0f\n\x07options\x18\x04 \x03(\t\x12\x17\n\npayer_note\x18\x05 \x01(\tH\x02\x88\x01\x01\x12@\n\nsubcommand\x18\x06 \x01(\x0e\x32\'.cln.RecklessRequest.RecklessSubcommandH\x03\x88\x01\x01\x12\x13\n\x06target\x18\x07 \x01(\tH\x04\x88\x01\x01\x12\x14\n\x07verbose\x18\x08 \x01(\x08H\x05\x88\x01\x01\"\x97\x01\n\x0fRecklessCommand\x12\x0b\n\x07INSTALL\x10\x00\x12\n\n\x06UPDATE\x10\x01\x12\r\n\tUNINSTALL\x10\x02\x12\x11\n\rLISTAVAILABLE\x10\x03\x12\x11\n\rLISTINSTALLED\x10\x04\x12\n\n\x06\x45NABLE\x10\x05\x12\x0b\n\x07\x44ISABLE\x10\x06\x12\n\n\x06SOURCE\x10\x07\x12\x07\n\x03TIP\x10\x08\x12\x08\n\x04HELP\x10\t\"3\n\x12RecklessSubcommand\x12\x07\n\x03\x41\x44\x44\x10\x00\x12\x08\n\x04LIST\x10\x01\x12\n\n\x06REMOVE\x10\x02\x42\x0e\n\x0c_amount_msatB\x0c\n\n_developerB\r\n\x0b_payer_noteB\r\n\x0b_subcommandB\t\n\x07_targetB\n\n\x08_verbose\"\xca\x03\n\x10RecklessResponse\x12*\n\x07\x64isable\x18\x01 \x01(\x0b\x32\x14.cln.RecklessDisableH\x00\x88\x01\x01\x12(\n\x06\x65nable\x18\x02 \x01(\x0b\x32\x13.cln.RecklessEnableH\x01\x88\x01\x01\x12*\n\x07install\x18\x03 \x01(\x0b\x32\x14.cln.RecklessInstallH\x02\x88\x01\x01\x12\x31\n\rlistavailable\x18\x04 \x03(\x0b\x32\x1a.cln.RecklessListavailable\x12\x31\n\rlistinstalled\x18\x05 \x03(\x0b\x32\x1a.cln.RecklessListinstalled\x12\x0b\n\x03log\x18\x06 \x03(\t\x12\x0f\n\x07sources\x18\x07 \x03(\t\x12\"\n\x03tip\x18\x08 \x01(\x0b\x32\x10.cln.RecklessTipH\x03\x88\x01\x01\x12.\n\tuninstall\x18\t \x01(\x0b\x32\x16.cln.RecklessUninstallH\x04\x88\x01\x01\x12#\n\x06update\x18\n \x03(\x0b\x32\x13.cln.RecklessUpdateB\n\n\x08_disableB\t\n\x07_enableB\n\n\x08_installB\x06\n\x04_tipB\x0c\n\n_uninstall\"&\n\x0fRecklessDisable\x12\x13\n\x0bplugin_name\x18\x01 \x01(\t\"%\n\x0eRecklessEnable\x12\x13\n\x0bplugin_name\x18\x01 \x01(\t\"k\n\x0fRecklessInstall\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x1d\n\x10installed_commit\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x0bplugin_name\x18\x03 \x01(\tB\x13\n\x11_installed_commit\"\xf5\x02\n\x15RecklessListavailable\x12L\n\tinstaller\x18\x01 \x01(\x0e\x32\x39.cln.RecklessListavailable.RecklessListavailableInstaller\x12\x34\n\x08manifest\x18\x02 \x01(\x0b\x32\".cln.RecklessListavailableManifest\x12\x0e\n\x06origin\x18\x03 \x01(\t\x12\x13\n\x0bplugin_name\x18\x04 \x01(\t\"\xb2\x01\n\x1eRecklessListavailableInstaller\x12\x0c\n\x08PYTHONUV\x10\x00\x12\x13\n\x0fPYTHONUVSHEBANG\x10\x01\x12\x12\n\x0ePYTHONUVLEGACY\x10\x02\x12\x0e\n\nPOETRYVENV\x10\x03\x12\x13\n\x0fPYPROJECTVIAPIP\x10\x04\x12\n\n\x06PYTHON\x10\x05\x12\n\n\x06NODEJS\x10\x06\x12\x08\n\x04RUST\x10\x07\x12\x06\n\x02GO\x10\x08\x12\n\n\x06\x43USTOM\x10\t\"\xaa\x02\n\x1dRecklessListavailableManifest\x12\x14\n\x0c\x64\x65pendencies\x18\x01 \x03(\t\x12\x12\n\nentrypoint\x18\x02 \x01(\t\x12\x13\n\x0binstall_cmd\x18\x03 \x03(\t\x12\x18\n\x0binstallable\x18\x04 \x01(\x08H\x00\x88\x01\x01\x12\x1d\n\x10long_description\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x12\n\x05offer\x18\x06 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x10required_options\x18\x07 \x03(\t\x12\x1e\n\x11short_description\x18\x08 \x01(\tH\x03\x88\x01\x01\x42\x0e\n\x0c_installableB\x13\n\x11_long_descriptionB\x08\n\x06_offerB\x14\n\x12_short_description\"\xe3\x01\n\x15RecklessListinstalled\x12\x19\n\x11installation_date\x18\x01 \x01(\t\x12\x19\n\x11installation_time\x18\x02 \x01(\x01\x12\x1d\n\x10installed_commit\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x17\n\x0foriginal_source\x18\x04 \x01(\t\x12\x13\n\x0bplugin_name\x18\x05 \x01(\t\x12\x1d\n\x10requested_commit\x18\x06 \x01(\tH\x01\x88\x01\x01\x42\x13\n\x11_installed_commitB\x13\n\x11_requested_commit\"\xa0\x01\n\x0bRecklessTip\x12 \n\x0b\x61mount_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66\x61iled_parts\x18\x03 \x01(\x04\x12\x18\n\x10payment_preimage\x18\x04 \x01(\x0c\x12\x18\n\x10successful_parts\x18\x05 \x01(\x04\"(\n\x11RecklessUninstall\x12\x13\n\x0bplugin_name\x18\x01 \x01(\t\"j\n\x0eRecklessUpdate\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x1d\n\x10installed_commit\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x0bplugin_name\x18\x03 \x01(\tB\x13\n\x11_installed_commit\"\x1e\n\x1cStreamBalanceSnapshotRequest\"\x86\x01\n\x1b\x42\x61lanceSnapshotNotification\x12\x0f\n\x07node_id\x18\x01 \x01(\x0c\x12\x13\n\x0b\x62lockheight\x18\x02 \x01(\r\x12\x11\n\ttimestamp\x18\x03 \x01(\r\x12.\n\x08\x61\x63\x63ounts\x18\x04 \x03(\x0b\x32\x1c.cln.BalanceSnapshotAccounts\"c\n\x17\x42\x61lanceSnapshotAccounts\x12\x12\n\naccount_id\x18\x01 \x01(\t\x12!\n\x0c\x62\x61lance_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\tcoin_type\x18\x03 \x01(\t\"\x19\n\x17StreamBlockAddedRequest\"6\n\x16\x42lockAddedNotification\x12\x0c\n\x04hash\x18\x01 \x01(\x0c\x12\x0e\n\x06height\x18\x02 \x01(\r\" \n\x1eStreamChannelOpenFailedRequest\"3\n\x1d\x43hannelOpenFailedNotification\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\"\x1c\n\x1aStreamChannelOpenedRequest\"w\n\x19\x43hannelOpenedNotification\x12\n\n\x02id\x18\x01 \x01(\x0c\x12!\n\x0c\x66unding_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66unding_txid\x18\x03 \x01(\x0c\x12\x15\n\rchannel_ready\x18\x04 \x01(\x08\"\"\n StreamChannelStateChangedRequest\"\xc1\x03\n\x1f\x43hannelStateChangedNotification\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x12\n\nchannel_id\x18\x02 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x04 \x01(\t\x12)\n\told_state\x18\x05 \x01(\x0e\x32\x11.cln.ChannelStateH\x01\x88\x01\x01\x12$\n\tnew_state\x18\x06 \x01(\x0e\x32\x11.cln.ChannelState\x12L\n\x05\x63\x61use\x18\x07 \x01(\x0e\x32=.cln.ChannelStateChangedNotification.ChannelStateChangedCause\x12\x14\n\x07message\x18\x08 \x01(\tH\x02\x88\x01\x01\"c\n\x18\x43hannelStateChangedCause\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05LOCAL\x10\x01\x12\x08\n\x04USER\x10\x02\x12\n\n\x06REMOTE\x10\x03\x12\x0c\n\x08PROTOCOL\x10\x04\x12\x0b\n\x07ONCHAIN\x10\x05\x42\x13\n\x11_short_channel_idB\x0c\n\n_old_stateB\n\n\x08_message\"\x16\n\x14StreamConnectRequest\"\xbe\x01\n\x17PeerConnectNotification\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x44\n\tdirection\x18\x02 \x01(\x0e\x32\x31.cln.PeerConnectNotification.PeerConnectDirection\x12(\n\x07\x61\x64\x64ress\x18\x03 \x01(\x0b\x32\x17.cln.PeerConnectAddress\"\'\n\x14PeerConnectDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\"\x9a\x02\n\x12PeerConnectAddress\x12\x41\n\titem_type\x18\x01 \x01(\x0e\x32..cln.PeerConnectAddress.PeerConnectAddressType\x12\x13\n\x06socket\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04port\x18\x04 \x01(\rH\x02\x88\x01\x01\"c\n\x16PeerConnectAddressType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x12\r\n\tWEBSOCKET\x10\x05\x42\t\n\x07_socketB\n\n\x08_addressB\x07\n\x05_port\"\x1b\n\x19StreamCoinMovementRequest\"\xaf\x0b\n\x18\x43oinMovementNotification\x12\x0f\n\x07version\x18\x01 \x01(\r\x12\x11\n\tcoin_type\x18\x02 \x01(\t\x12\x0f\n\x07node_id\x18\x03 \x01(\x0c\x12\x41\n\titem_type\x18\x04 \x01(\x0e\x32..cln.CoinMovementNotification.CoinMovementType\x12\x1a\n\rcreated_index\x18\x05 \x01(\x04H\x00\x88\x01\x01\x12\x12\n\naccount_id\x18\x06 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\ttimestamp\x18\t \x01(\x04\x12\x10\n\x04tags\x18\n \x03(\tB\x02\x18\x01\x12N\n\x0bprimary_tag\x18\x0b \x01(\x0e\x32\x34.cln.CoinMovementNotification.CoinMovementPrimaryTagH\x01\x88\x01\x01\x12\x12\n\nextra_tags\x18\x0c \x03(\t\x12\x19\n\x0cpayment_hash\x18\r \x01(\x0cH\x02\x88\x01\x01\x12\x14\n\x07part_id\x18\x0e \x01(\x04H\x03\x88\x01\x01\x12\x15\n\x08group_id\x18\x0f \x01(\x04H\x04\x88\x01\x01\x12#\n\tfees_msat\x18\x10 \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12 \n\x04utxo\x18\x11 \x01(\x0b\x32\r.cln.OutpointH\x06\x88\x01\x01\x12\x14\n\x07peer_id\x18\x12 \x01(\x0cH\x07\x88\x01\x01\x12 \n\x13originating_account\x18\x13 \x01(\tH\x08\x88\x01\x01\x12\x15\n\x04txid\x18\x14 \x01(\x0c\x42\x02\x18\x01H\t\x88\x01\x01\x12\x1a\n\rspending_txid\x18\x15 \x01(\x0cH\n\x88\x01\x01\x12\x1a\n\tutxo_txid\x18\x16 \x01(\x0c\x42\x02\x18\x01H\x0b\x88\x01\x01\x12\x15\n\x04vout\x18\x17 \x01(\rB\x02\x18\x01H\x0c\x88\x01\x01\x12%\n\x0boutput_msat\x18\x18 \x01(\x0b\x32\x0b.cln.AmountH\r\x88\x01\x01\x12\x19\n\x0coutput_count\x18\x19 \x01(\rH\x0e\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\x1a \x01(\rH\x0f\x88\x01\x01\"\xf7\x02\n\x16\x43oinMovementPrimaryTag\x12\x0b\n\x07\x44\x45POSIT\x10\x00\x12\x0e\n\nWITHDRAWAL\x10\x01\x12\x0b\n\x07PENALTY\x10\x02\x12\x10\n\x0c\x43HANNEL_OPEN\x10\x03\x12\x11\n\rCHANNEL_CLOSE\x10\x04\x12\x11\n\rDELAYED_TO_US\x10\x05\x12\x0b\n\x07HTLC_TX\x10\x06\x12\x10\n\x0cHTLC_TIMEOUT\x10\x07\x12\x10\n\x0cHTLC_FULFILL\x10\x08\x12\r\n\tTO_WALLET\x10\t\x12\n\n\x06\x41NCHOR\x10\n\x12\x0b\n\x07TO_THEM\x10\x0b\x12\r\n\tPENALIZED\x10\x0c\x12\n\n\x06STOLEN\x10\r\x12\x0b\n\x07IGNORED\x10\x0e\x12\x0c\n\x08TO_MINER\x10\x0f\x12\x0b\n\x07INVOICE\x10\x10\x12\n\n\x06ROUTED\x10\x11\x12\n\n\x06PUSHED\x10\x12\x12\r\n\tLEASE_FEE\x10\x13\x12\x14\n\x10\x43HANNEL_PROPOSED\x10\x14\x12\x0f\n\x0bPENALTY_ADJ\x10\x15\x12\x11\n\rJOURNAL_ENTRY\x10\x16\"2\n\x10\x43oinMovementType\x12\x0f\n\x0b\x43HANNEL_MVT\x10\x00\x12\r\n\tCHAIN_MVT\x10\x01\x42\x10\n\x0e_created_indexB\x0e\n\x0c_primary_tagB\x0f\n\r_payment_hashB\n\n\x08_part_idB\x0b\n\t_group_idB\x0c\n\n_fees_msatB\x07\n\x05_utxoB\n\n\x08_peer_idB\x16\n\x14_originating_accountB\x07\n\x05_txidB\x10\n\x0e_spending_txidB\x0c\n\n_utxo_txidB\x07\n\x05_voutB\x0e\n\x0c_output_msatB\x0f\n\r_output_countB\x0e\n\x0c_blockheight\"\x18\n\x16StreamCustomMsgRequest\"9\n\x15\x43ustomMsgNotification\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\" \n\x1eStreamDeprecatedOneshotRequest\"6\n\x1d\x44\x65precatedOneshotNotification\x12\x15\n\rdeprecated_ok\x18\x01 \x01(\x08\"\x19\n\x17StreamDisconnectRequest\"$\n\x16\x44isconnectNotification\x12\n\n\x02id\x18\x01 \x01(\x0c\"\x1b\n\x19StreamForwardEventRequest\"\x88\x05\n\x18\x46orwardEventNotification\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x12\n\nin_channel\x18\x02 \x01(\t\x12\x18\n\x0bout_channel\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1c\n\x07in_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\"\n\x08out_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\"\n\x08\x66\x65\x65_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12@\n\x06status\x18\x07 \x01(\x0e\x32\x30.cln.ForwardEventNotification.ForwardEventStatus\x12\x15\n\x08\x66\x61ilcode\x18\x08 \x01(\rH\x03\x88\x01\x01\x12\x17\n\nfailreason\x18\t \x01(\tH\x04\x88\x01\x01\x12\x43\n\x05style\x18\n \x01(\x0e\x32/.cln.ForwardEventNotification.ForwardEventStyleH\x05\x88\x01\x01\x12\x15\n\rreceived_time\x18\x0b \x01(\x01\x12\x1a\n\rresolved_time\x18\x0c \x01(\x01H\x06\x88\x01\x01\"L\n\x12\x46orwardEventStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\x10\n\x0cLOCAL_FAILED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\"(\n\x11\x46orwardEventStyle\x12\n\n\x06LEGACY\x10\x00\x12\x07\n\x03TLV\x10\x01\x42\x0e\n\x0c_out_channelB\x0b\n\t_out_msatB\x0b\n\t_fee_msatB\x0b\n\t_failcodeB\r\n\x0b_failreasonB\x08\n\x06_styleB\x10\n\x0e_resolved_time\"\x1e\n\x1cStreamInvoiceCreationRequest\"\x8b\x01\n\x1bInvoiceCreationNotification\x12\x1e\n\x04msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x10\n\x08preimage\x18\x02 \x01(\x0c\x12\r\n\x05label\x18\x03 \x01(\t\x12\x15\n\x08offer_id\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x42\x07\n\x05_msatB\x0b\n\t_offer_id\"\x1d\n\x1bStreamInvoicePaymentRequest\"\x8b\x01\n\x1aInvoicePaymentNotification\x12\x19\n\x04msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08preimage\x18\x02 \x01(\x0c\x12$\n\x08outpoint\x18\x03 \x01(\x0b\x32\r.cln.OutpointH\x00\x88\x01\x01\x12\r\n\x05label\x18\x04 \x01(\tB\x0b\n\t_outpoint\"\x12\n\x10StreamLogRequest\"\xca\x01\n\x0fLogNotification\x12,\n\x05level\x18\x01 \x01(\x0e\x32\x1d.cln.LogNotification.LogLevel\x12\x0c\n\x04time\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\t\x12\x0e\n\x06source\x18\x04 \x01(\t\x12\x0b\n\x03log\x18\x05 \x01(\t\"K\n\x08LogLevel\x12\x06\n\x02IO\x10\x00\x12\t\n\x05TRACE\x10\x01\x12\t\n\x05\x44\x45\x42UG\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\x0b\n\x07UNUSUAL\x10\x04\x12\n\n\x06\x42ROKEN\x10\x05\"&\n$StreamOnionMessageForwardFailRequest\"\xef\x01\n#OnionMessageForwardFailNotification\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x10\n\x08incoming\x18\x02 \x01(\x0c\x12\x10\n\x08path_key\x18\x03 \x01(\x0c\x12\x15\n\x08outgoing\x18\x04 \x01(\x0cH\x00\x88\x01\x01\x12\x19\n\x0cnext_node_id\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12&\n\x19next_short_channel_id_dir\x18\x06 \x01(\tH\x02\x88\x01\x01\x42\x0b\n\t_outgoingB\x0f\n\r_next_node_idB\x1c\n\x1a_next_short_channel_id_dir\"\"\n StreamOpenChannelPeerSigsRequest\"J\n\x1fOpenChannelPeerSigsNotification\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x13\n\x0bsigned_psbt\x18\x02 \x01(\t\"\x1c\n\x1aStreamPluginStartedRequest\"V\n\x19PluginStartedNotification\x12\x13\n\x0bplugin_name\x18\x01 \x01(\t\x12\x13\n\x0bplugin_path\x18\x02 \x01(\t\x12\x0f\n\x07methods\x18\x03 \x03(\t\"\x1c\n\x1aStreamPluginStoppedRequest\"V\n\x19PluginStoppedNotification\x12\x13\n\x0bplugin_name\x18\x01 \x01(\t\x12\x13\n\x0bplugin_path\x18\x02 \x01(\t\x12\x0f\n\x07methods\x18\x03 \x03(\t\"\x1d\n\x1bStreamSendPayFailureRequest\"b\n\x1aSendPayFailureNotification\x12\x0c\n\x04\x63ode\x18\x01 \x01(\x12\x12\x0f\n\x07message\x18\x02 \x01(\t\x12%\n\x04\x64\x61ta\x18\x03 \x01(\x0b\x32\x17.cln.SendpayFailureData\"\xc1\t\n\x12SendpayFailureData\x12\x1a\n\rcreated_index\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x0f\n\x02id\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x12\x14\n\x07groupid\x18\x04 \x01(\x04H\x03\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x13\n\x06partid\x18\x06 \x01(\x04H\x05\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x07 \x01(\x0cH\x06\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x07\x88\x01\x01\x12*\n\x10\x61mount_sent_msat\x18\t \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x12\x17\n\ncreated_at\x18\n \x01(\x04H\t\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0b \x01(\x04H\n\x88\x01\x01\x12\x45\n\x06status\x18\x0c \x01(\x0e\x32\x30.cln.SendpayFailureData.SendpayFailureDataStatusH\x0b\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x0c\x88\x01\x01\x12\x12\n\x05label\x18\x0e \x01(\tH\r\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0f \x01(\tH\x0e\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x10 \x01(\tH\x0f\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x11 \x01(\tH\x10\x88\x01\x01\x12\x17\n\nerroronion\x18\x12 \x01(\x0cH\x11\x88\x01\x01\x12\x17\n\nonionreply\x18\x13 \x01(\x0cH\x12\x88\x01\x01\x12\x19\n\x0c\x65rring_index\x18\x14 \x01(\rH\x13\x88\x01\x01\x12\x15\n\x08\x66\x61ilcode\x18\x15 \x01(\rH\x14\x88\x01\x01\x12\x19\n\x0c\x66\x61ilcodename\x18\x16 \x01(\tH\x15\x88\x01\x01\x12\x18\n\x0b\x65rring_node\x18\x17 \x01(\x0cH\x16\x88\x01\x01\x12\x1b\n\x0e\x65rring_channel\x18\x18 \x01(\tH\x17\x88\x01\x01\x12\x1d\n\x10\x65rring_direction\x18\x19 \x01(\rH\x18\x88\x01\x01\x12\x18\n\x0braw_message\x18\x1a \x01(\x0cH\x19\x88\x01\x01\"A\n\x18SendpayFailureDataStatus\x12\n\n\x06\x46\x41ILED\x10\x00\x12\x0b\n\x07PENDING\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x10\n\x0e_created_indexB\x05\n\x03_idB\x0f\n\r_payment_hashB\n\n\x08_groupidB\x10\n\x0e_updated_indexB\t\n\x07_partidB\x0e\n\x0c_destinationB\x0e\n\x0c_amount_msatB\x13\n\x11_amount_sent_msatB\r\n\x0b_created_atB\x0f\n\r_completed_atB\t\n\x07_statusB\x13\n\x11_payment_preimageB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_descriptionB\r\n\x0b_erroronionB\r\n\x0b_onionreplyB\x0f\n\r_erring_indexB\x0b\n\t_failcodeB\x0f\n\r_failcodenameB\x0e\n\x0c_erring_nodeB\x11\n\x0f_erring_channelB\x13\n\x11_erring_directionB\x0e\n\x0c_raw_message\"\x1d\n\x1bStreamSendPaySuccessRequest\"\xcc\x05\n\x1aSendPaySuccessNotification\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\n\n\x02id\x18\x02 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x0f\n\x07groupid\x18\x04 \x01(\x04\x12\x1a\n\rupdated_index\x18\x05 \x01(\x04H\x00\x88\x01\x01\x12\x13\n\x06partid\x18\x06 \x01(\x04H\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x07 \x01(\x0cH\x02\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12%\n\x10\x61mount_sent_msat\x18\t \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\ncreated_at\x18\n \x01(\x04\x12\x19\n\x0c\x63ompleted_at\x18\x0b \x01(\x04H\x04\x88\x01\x01\x12\x44\n\x06status\x18\x0c \x01(\x0e\x32\x34.cln.SendPaySuccessNotification.SendpaySuccessStatus\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x05\x88\x01\x01\x12\x12\n\x05label\x18\x0e \x01(\tH\x06\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0f \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x10 \x01(\tH\x08\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x11 \x01(\tH\t\x88\x01\x01\x12\x17\n\nerroronion\x18\x12 \x01(\x0cH\n\x88\x01\x01\"$\n\x14SendpaySuccessStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x42\x10\n\x0e_updated_indexB\t\n\x07_partidB\x0e\n\x0c_destinationB\x0e\n\x0c_amount_msatB\x0f\n\r_completed_atB\x13\n\x11_payment_preimageB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_descriptionB\r\n\x0b_erroronion\"\x17\n\x15StreamShutdownRequest\"\x16\n\x14ShutdownNotification\"\x16\n\x14StreamWarningRequest\"\xae\x01\n\x13WarningNotification\x12\x34\n\x05level\x18\x01 \x01(\x0e\x32%.cln.WarningNotification.WarningLevel\x12\x0c\n\x04time\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\t\x12\x0e\n\x06source\x18\x04 \x01(\t\x12\x0b\n\x03log\x18\x05 \x01(\t\"#\n\x0cWarningLevel\x12\x08\n\x04WARN\x10\x00\x12\t\n\x05\x45RROR\x10\x01\"\x19\n\x17StreamPayPartEndRequest\"\xf1\x03\n\x16PayPartEndNotification\x12<\n\x06status\x18\x01 \x01(\x0e\x32,.cln.PayPartEndNotification.PayPartEndStatus\x12\x10\n\x08\x64uration\x18\x02 \x01(\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x0f\n\x07groupid\x18\x04 \x01(\x04\x12\x0e\n\x06partid\x18\x05 \x01(\x04\x12\x17\n\nfailed_msg\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12\x1b\n\x0e\x66\x61iled_node_id\x18\x07 \x01(\x0cH\x01\x88\x01\x01\x12$\n\x17\x66\x61iled_short_channel_id\x18\x08 \x01(\tH\x02\x88\x01\x01\x12\x1d\n\x10\x66\x61iled_direction\x18\t \x01(\rH\x03\x88\x01\x01\x12\x17\n\nerror_code\x18\n \x01(\rH\x04\x88\x01\x01\x12\x1a\n\rerror_message\x18\x0b \x01(\tH\x05\x88\x01\x01\",\n\x10PayPartEndStatus\x12\x0b\n\x07SUCCESS\x10\x00\x12\x0b\n\x07\x46\x41ILURE\x10\x01\x42\r\n\x0b_failed_msgB\x11\n\x0f_failed_node_idB\x1a\n\x18_failed_short_channel_idB\x13\n\x11_failed_directionB\r\n\x0b_error_codeB\x10\n\x0e_error_message\"\x1b\n\x19StreamPayPartStartRequest\"\xc2\x01\n\x18PayPartStartNotification\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x0f\n\x07groupid\x18\x02 \x01(\x04\x12\x0e\n\x06partid\x18\x03 \x01(\x04\x12\'\n\x12total_payment_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12!\n\x0c\x61ttempt_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x04hops\x18\x06 \x03(\x0b\x32\x15.cln.PayPartStartHops\"\x9f\x01\n\x10PayPartStartHops\x12\x11\n\tnext_node\x18\x01 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x02 \x01(\t\x12\x11\n\tdirection\x18\x03 \x01(\r\x12$\n\x0f\x63hannel_in_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x63hannel_out_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"\x1a\n\x18StreamRecklessLogRequest\"\xda\x01\n\x17RecklessLogNotification\x12<\n\x05level\x18\x01 \x01(\x0e\x32-.cln.RecklessLogNotification.RecklessLogLevel\x12\x0b\n\x03log\x18\x02 \x01(\t\x12\x0c\n\x04time\x18\x03 \x01(\t\x12\x11\n\ttimestamp\x18\x04 \x01(\t\"S\n\x10RecklessLogLevel\x12\x06\n\x02IO\x10\x00\x12\t\n\x05TRACE\x10\x01\x12\t\n\x05\x44\x45\x42UG\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\x0b\n\x07UNUSUAL\x10\x04\x12\n\n\x06\x42ROKEN\x10\x05\x32\xcei\n\x04Node\x12\x36\n\x07Getinfo\x12\x13.cln.GetinfoRequest\x1a\x14.cln.GetinfoResponse\"\x00\x12<\n\tListPeers\x12\x15.cln.ListpeersRequest\x1a\x16.cln.ListpeersResponse\"\x00\x12<\n\tListFunds\x12\x15.cln.ListfundsRequest\x1a\x16.cln.ListfundsResponse\"\x00\x12\x36\n\x07SendPay\x12\x13.cln.SendpayRequest\x1a\x14.cln.SendpayResponse\"\x00\x12\x45\n\x0cListChannels\x12\x18.cln.ListchannelsRequest\x1a\x19.cln.ListchannelsResponse\"\x00\x12<\n\tAddGossip\x12\x15.cln.AddgossipRequest\x1a\x16.cln.AddgossipResponse\"\x00\x12H\n\rAddPsbtOutput\x12\x19.cln.AddpsbtoutputRequest\x1a\x1a.cln.AddpsbtoutputResponse\"\x00\x12H\n\rAutoCleanOnce\x12\x19.cln.AutocleanonceRequest\x1a\x1a.cln.AutocleanonceResponse\"\x00\x12N\n\x0f\x41utoCleanStatus\x12\x1b.cln.AutocleanstatusRequest\x1a\x1c.cln.AutocleanstatusResponse\"\x00\x12\x45\n\x0c\x43heckMessage\x12\x18.cln.CheckmessageRequest\x1a\x19.cln.CheckmessageResponse\"\x00\x12\x30\n\x05\x43lose\x12\x11.cln.CloseRequest\x1a\x12.cln.CloseResponse\"\x00\x12:\n\x0b\x43onnectPeer\x12\x13.cln.ConnectRequest\x1a\x14.cln.ConnectResponse\"\x00\x12H\n\rCreateInvoice\x12\x19.cln.CreateinvoiceRequest\x1a\x1a.cln.CreateinvoiceResponse\"\x00\x12<\n\tDatastore\x12\x15.cln.DatastoreRequest\x1a\x16.cln.DatastoreResponse\"\x00\x12K\n\x0e\x44\x61tastoreUsage\x12\x1a.cln.DatastoreusageRequest\x1a\x1b.cln.DatastoreusageResponse\"\x00\x12\x42\n\x0b\x43reateOnion\x12\x17.cln.CreateonionRequest\x1a\x18.cln.CreateonionResponse\"\x00\x12\x45\n\x0c\x44\x65lDatastore\x12\x18.cln.DeldatastoreRequest\x1a\x19.cln.DeldatastoreResponse\"\x00\x12?\n\nDelInvoice\x12\x16.cln.DelinvoiceRequest\x1a\x17.cln.DelinvoiceResponse\"\x00\x12Q\n\x10\x44\x65vForgetChannel\x12\x1c.cln.DevforgetchannelRequest\x1a\x1d.cln.DevforgetchannelResponse\"\x00\x12Q\n\x10\x45mergencyRecover\x12\x1c.cln.EmergencyrecoverRequest\x1a\x1d.cln.EmergencyrecoverResponse\"\x00\x12\x66\n\x17GetEmergencyRecoverData\x12#.cln.GetemergencyrecoverdataRequest\x1a$.cln.GetemergencyrecoverdataResponse\"\x00\x12\x45\n\x0c\x45xposeSecret\x12\x18.cln.ExposesecretRequest\x1a\x19.cln.ExposesecretResponse\"\x00\x12\x36\n\x07Recover\x12\x13.cln.RecoverRequest\x1a\x14.cln.RecoverResponse\"\x00\x12K\n\x0eRecoverChannel\x12\x1a.cln.RecoverchannelRequest\x1a\x1b.cln.RecoverchannelResponse\"\x00\x12\x36\n\x07Invoice\x12\x13.cln.InvoiceRequest\x1a\x14.cln.InvoiceResponse\"\x00\x12Q\n\x14\x43reateInvoiceRequest\x12\x1a.cln.InvoicerequestRequest\x1a\x1b.cln.InvoicerequestResponse\"\x00\x12`\n\x15\x44isableInvoiceRequest\x12!.cln.DisableinvoicerequestRequest\x1a\".cln.DisableinvoicerequestResponse\"\x00\x12Z\n\x13ListInvoiceRequests\x12\x1f.cln.ListinvoicerequestsRequest\x1a .cln.ListinvoicerequestsResponse\"\x00\x12H\n\rListDatastore\x12\x19.cln.ListdatastoreRequest\x1a\x1a.cln.ListdatastoreResponse\"\x00\x12\x45\n\x0cListInvoices\x12\x18.cln.ListinvoicesRequest\x1a\x19.cln.ListinvoicesResponse\"\x00\x12<\n\tSendOnion\x12\x15.cln.SendonionRequest\x1a\x16.cln.SendonionResponse\"\x00\x12\x45\n\x0cListSendPays\x12\x18.cln.ListsendpaysRequest\x1a\x19.cln.ListsendpaysResponse\"\x00\x12Q\n\x10ListTransactions\x12\x1c.cln.ListtransactionsRequest\x1a\x1d.cln.ListtransactionsResponse\"\x00\x12?\n\nMakeSecret\x12\x16.cln.MakesecretRequest\x1a\x17.cln.MakesecretResponse\"\x00\x12*\n\x03Pay\x12\x0f.cln.PayRequest\x1a\x10.cln.PayResponse\"\x00\x12<\n\tListNodes\x12\x15.cln.ListnodesRequest\x1a\x16.cln.ListnodesResponse\"\x00\x12K\n\x0eWaitAnyInvoice\x12\x1a.cln.WaitanyinvoiceRequest\x1a\x1b.cln.WaitanyinvoiceResponse\"\x00\x12\x42\n\x0bWaitInvoice\x12\x17.cln.WaitinvoiceRequest\x1a\x18.cln.WaitinvoiceResponse\"\x00\x12\x42\n\x0bWaitSendPay\x12\x17.cln.WaitsendpayRequest\x1a\x18.cln.WaitsendpayResponse\"\x00\x12\x36\n\x07NewAddr\x12\x13.cln.NewaddrRequest\x1a\x14.cln.NewaddrResponse\"\x00\x12\x39\n\x08Withdraw\x12\x14.cln.WithdrawRequest\x1a\x15.cln.WithdrawResponse\"\x00\x12\x36\n\x07KeySend\x12\x13.cln.KeysendRequest\x1a\x14.cln.KeysendResponse\"\x00\x12\x39\n\x08\x46undPsbt\x12\x14.cln.FundpsbtRequest\x1a\x15.cln.FundpsbtResponse\"\x00\x12\x39\n\x08SendPsbt\x12\x14.cln.SendpsbtRequest\x1a\x15.cln.SendpsbtResponse\"\x00\x12\x39\n\x08SignPsbt\x12\x14.cln.SignpsbtRequest\x1a\x15.cln.SignpsbtResponse\"\x00\x12\x39\n\x08UtxoPsbt\x12\x14.cln.UtxopsbtRequest\x1a\x15.cln.UtxopsbtResponse\"\x00\x12<\n\tTxDiscard\x12\x15.cln.TxdiscardRequest\x1a\x16.cln.TxdiscardResponse\"\x00\x12<\n\tTxPrepare\x12\x15.cln.TxprepareRequest\x1a\x16.cln.TxprepareResponse\"\x00\x12\x33\n\x06TxSend\x12\x12.cln.TxsendRequest\x1a\x13.cln.TxsendResponse\"\x00\x12Q\n\x10ListPeerChannels\x12\x1c.cln.ListpeerchannelsRequest\x1a\x1d.cln.ListpeerchannelsResponse\"\x00\x12W\n\x12ListClosedChannels\x12\x1e.cln.ListclosedchannelsRequest\x1a\x1f.cln.ListclosedchannelsResponse\"\x00\x12\x33\n\x06\x44\x65\x63ode\x12\x12.cln.DecodeRequest\x1a\x13.cln.DecodeResponse\"\x00\x12\x33\n\x06\x44\x65lPay\x12\x12.cln.DelpayRequest\x1a\x13.cln.DelpayResponse\"\x00\x12?\n\nDelForward\x12\x16.cln.DelforwardRequest\x1a\x17.cln.DelforwardResponse\"\x00\x12\x45\n\x0c\x44isableOffer\x12\x18.cln.DisableofferRequest\x1a\x19.cln.DisableofferResponse\"\x00\x12\x42\n\x0b\x45nableOffer\x12\x17.cln.EnableofferRequest\x1a\x18.cln.EnableofferResponse\"\x00\x12?\n\nDisconnect\x12\x16.cln.DisconnectRequest\x1a\x17.cln.DisconnectResponse\"\x00\x12\x39\n\x08\x46\x65\x65rates\x12\x14.cln.FeeratesRequest\x1a\x15.cln.FeeratesResponse\"\x00\x12\x42\n\x0b\x46\x65tchBip353\x12\x17.cln.Fetchbip353Request\x1a\x18.cln.Fetchbip353Response\"\x00\x12\x45\n\x0c\x46\x65tchInvoice\x12\x18.cln.FetchinvoiceRequest\x1a\x19.cln.FetchinvoiceResponse\"\x00\x12\x63\n\x16\x43\x61ncelRecurringInvoice\x12\".cln.CancelrecurringinvoiceRequest\x1a#.cln.CancelrecurringinvoiceResponse\"\x00\x12T\n\x11\x46undChannelCancel\x12\x1d.cln.FundchannelCancelRequest\x1a\x1e.cln.FundchannelCancelResponse\"\x00\x12Z\n\x13\x46undChannelComplete\x12\x1f.cln.FundchannelCompleteRequest\x1a .cln.FundchannelCompleteResponse\"\x00\x12\x42\n\x0b\x46undChannel\x12\x17.cln.FundchannelRequest\x1a\x18.cln.FundchannelResponse\"\x00\x12Q\n\x10\x46undChannelStart\x12\x1c.cln.FundchannelStartRequest\x1a\x1d.cln.FundchannelStartResponse\"\x00\x12\x33\n\x06GetLog\x12\x12.cln.GetlogRequest\x1a\x13.cln.GetlogResponse\"\x00\x12\x45\n\x0c\x46underUpdate\x12\x18.cln.FunderupdateRequest\x1a\x19.cln.FunderupdateResponse\"\x00\x12\x39\n\x08GetRoute\x12\x14.cln.GetrouteRequest\x1a\x15.cln.GetrouteResponse\"\x00\x12H\n\rListAddresses\x12\x19.cln.ListaddressesRequest\x1a\x1a.cln.ListaddressesResponse\"\x00\x12\x45\n\x0cListForwards\x12\x18.cln.ListforwardsRequest\x1a\x19.cln.ListforwardsResponse\"\x00\x12?\n\nListOffers\x12\x16.cln.ListoffersRequest\x1a\x17.cln.ListoffersResponse\"\x00\x12\x39\n\x08ListPays\x12\x14.cln.ListpaysRequest\x1a\x15.cln.ListpaysResponse\"\x00\x12<\n\tListHtlcs\x12\x15.cln.ListhtlcsRequest\x1a\x16.cln.ListhtlcsResponse\"\x00\x12Q\n\x10MultiFundChannel\x12\x1c.cln.MultifundchannelRequest\x1a\x1d.cln.MultifundchannelResponse\"\x00\x12H\n\rMultiWithdraw\x12\x19.cln.MultiwithdrawRequest\x1a\x1a.cln.MultiwithdrawResponse\"\x00\x12\x30\n\x05Offer\x12\x11.cln.OfferRequest\x1a\x12.cln.OfferResponse\"\x00\x12Q\n\x10OpenChannelAbort\x12\x1c.cln.OpenchannelAbortRequest\x1a\x1d.cln.OpenchannelAbortResponse\"\x00\x12N\n\x0fOpenChannelBump\x12\x1b.cln.OpenchannelBumpRequest\x1a\x1c.cln.OpenchannelBumpResponse\"\x00\x12N\n\x0fOpenChannelInit\x12\x1b.cln.OpenchannelInitRequest\x1a\x1c.cln.OpenchannelInitResponse\"\x00\x12T\n\x11OpenChannelSigned\x12\x1d.cln.OpenchannelSignedRequest\x1a\x1e.cln.OpenchannelSignedResponse\"\x00\x12T\n\x11OpenChannelUpdate\x12\x1d.cln.OpenchannelUpdateRequest\x1a\x1e.cln.OpenchannelUpdateResponse\"\x00\x12-\n\x04Ping\x12\x10.cln.PingRequest\x1a\x11.cln.PingResponse\"\x00\x12\x33\n\x06Plugin\x12\x12.cln.PluginRequest\x1a\x13.cln.PluginResponse\"\x00\x12H\n\rRenePayStatus\x12\x19.cln.RenepaystatusRequest\x1a\x1a.cln.RenepaystatusResponse\"\x00\x12\x36\n\x07RenePay\x12\x13.cln.RenepayRequest\x1a\x14.cln.RenepayResponse\"\x00\x12H\n\rReserveInputs\x12\x19.cln.ReserveinputsRequest\x1a\x1a.cln.ReserveinputsResponse\"\x00\x12H\n\rSendCustomMsg\x12\x19.cln.SendcustommsgRequest\x1a\x1a.cln.SendcustommsgResponse\"\x00\x12\x42\n\x0bSendInvoice\x12\x17.cln.SendinvoiceRequest\x1a\x18.cln.SendinvoiceResponse\"\x00\x12?\n\nSetChannel\x12\x16.cln.SetchannelRequest\x1a\x17.cln.SetchannelResponse\"\x00\x12<\n\tSetConfig\x12\x15.cln.SetconfigRequest\x1a\x16.cln.SetconfigResponse\"\x00\x12K\n\x0eSetPsbtVersion\x12\x1a.cln.SetpsbtversionRequest\x1a\x1b.cln.SetpsbtversionResponse\"\x00\x12\x42\n\x0bSignInvoice\x12\x17.cln.SigninvoiceRequest\x1a\x18.cln.SigninvoiceResponse\"\x00\x12\x42\n\x0bSignMessage\x12\x17.cln.SignmessageRequest\x1a\x18.cln.SignmessageResponse\"\x00\x12?\n\nSpliceInit\x12\x16.cln.SpliceInitRequest\x1a\x17.cln.SpliceInitResponse\"\x00\x12\x45\n\x0cSpliceSigned\x12\x18.cln.SpliceSignedRequest\x1a\x19.cln.SpliceSignedResponse\"\x00\x12\x45\n\x0cSpliceUpdate\x12\x18.cln.SpliceUpdateRequest\x1a\x19.cln.SpliceUpdateResponse\"\x00\x12\x39\n\x08SpliceIn\x12\x14.cln.SpliceinRequest\x1a\x15.cln.SpliceinResponse\"\x00\x12<\n\tSpliceOut\x12\x15.cln.SpliceoutRequest\x1a\x16.cln.SpliceoutResponse\"\x00\x12<\n\tDevSplice\x12\x15.cln.DevspliceRequest\x1a\x16.cln.DevspliceResponse\"\x00\x12N\n\x0fUnreserveInputs\x12\x1b.cln.UnreserveinputsRequest\x1a\x1c.cln.UnreserveinputsResponse\"\x00\x12H\n\rUpgradeWallet\x12\x19.cln.UpgradewalletRequest\x1a\x1a.cln.UpgradewalletResponse\"\x00\x12N\n\x0fWaitBlockHeight\x12\x1b.cln.WaitblockheightRequest\x1a\x1c.cln.WaitblockheightResponse\"\x00\x12-\n\x04Wait\x12\x10.cln.WaitRequest\x1a\x11.cln.WaitResponse\"\x00\x12\x42\n\x0bListConfigs\x12\x17.cln.ListconfigsRequest\x1a\x18.cln.ListconfigsResponse\"\x00\x12-\n\x04Stop\x12\x10.cln.StopRequest\x1a\x11.cln.StopResponse\"\x00\x12-\n\x04Help\x12\x10.cln.HelpRequest\x1a\x11.cln.HelpResponse\"\x00\x12T\n\x11PreApproveKeysend\x12\x1d.cln.PreapprovekeysendRequest\x1a\x1e.cln.PreapprovekeysendResponse\"\x00\x12T\n\x11PreApproveInvoice\x12\x1d.cln.PreapproveinvoiceRequest\x1a\x1e.cln.PreapproveinvoiceResponse\"\x00\x12\x45\n\x0cStaticBackup\x12\x18.cln.StaticbackupRequest\x1a\x19.cln.StaticbackupResponse\"\x00\x12N\n\x0f\x42kprChannelsApy\x12\x1b.cln.BkprchannelsapyRequest\x1a\x1c.cln.BkprchannelsapyResponse\"\x00\x12T\n\x11\x42kprDumpIncomeCsv\x12\x1d.cln.BkprdumpincomecsvRequest\x1a\x1e.cln.BkprdumpincomecsvResponse\"\x00\x12\x42\n\x0b\x42kprInspect\x12\x17.cln.BkprinspectRequest\x1a\x18.cln.BkprinspectResponse\"\x00\x12`\n\x15\x42kprListAccountEvents\x12!.cln.BkprlistaccounteventsRequest\x1a\".cln.BkprlistaccounteventsResponse\"\x00\x12Q\n\x10\x42kprListBalances\x12\x1c.cln.BkprlistbalancesRequest\x1a\x1d.cln.BkprlistbalancesResponse\"\x00\x12K\n\x0e\x42kprListIncome\x12\x1a.cln.BkprlistincomeRequest\x1a\x1b.cln.BkprlistincomeResponse\"\x00\x12{\n\x1e\x42kprEditDescriptionByPaymentId\x12*.cln.BkpreditdescriptionbypaymentidRequest\x1a+.cln.BkpreditdescriptionbypaymentidResponse\"\x00\x12x\n\x1d\x42kprEditDescriptionByOutpoint\x12).cln.BkpreditdescriptionbyoutpointRequest\x1a*.cln.BkpreditdescriptionbyoutpointResponse\"\x00\x12?\n\nBkprReport\x12\x16.cln.BkprreportRequest\x1a\x17.cln.BkprreportResponse\"\x00\x12H\n\rBlacklistRune\x12\x19.cln.BlacklistruneRequest\x1a\x1a.cln.BlacklistruneResponse\"\x00\x12<\n\tCheckRune\x12\x15.cln.CheckruneRequest\x1a\x16.cln.CheckruneResponse\"\x00\x12?\n\nCreateRune\x12\x16.cln.CreateruneRequest\x1a\x17.cln.CreateruneResponse\"\x00\x12<\n\tShowRunes\x12\x15.cln.ShowrunesRequest\x1a\x16.cln.ShowrunesResponse\"\x00\x12Q\n\x10\x41skReneUnreserve\x12\x1c.cln.AskreneunreserveRequest\x1a\x1d.cln.AskreneunreserveResponse\"\x00\x12T\n\x11\x41skReneListLayers\x12\x1d.cln.AskrenelistlayersRequest\x1a\x1e.cln.AskrenelistlayersResponse\"\x00\x12W\n\x12\x41skReneCreateLayer\x12\x1e.cln.AskrenecreatelayerRequest\x1a\x1f.cln.AskrenecreatelayerResponse\"\x00\x12W\n\x12\x41skReneRemoveLayer\x12\x1e.cln.AskreneremovelayerRequest\x1a\x1f.cln.AskreneremovelayerResponse\"\x00\x12o\n\x1a\x41skReneRemoveChannelUpdate\x12&.cln.AskreneremovechannelupdateRequest\x1a\'.cln.AskreneremovechannelupdateResponse\"\x00\x12K\n\x0e\x41skReneReserve\x12\x1a.cln.AskrenereserveRequest\x1a\x1b.cln.AskrenereserveResponse\"\x00\x12?\n\nAskReneAge\x12\x16.cln.AskreneageRequest\x1a\x17.cln.AskreneageResponse\"\x00\x12<\n\tGetRoutes\x12\x15.cln.GetroutesRequest\x1a\x16.cln.GetroutesResponse\"\x00\x12W\n\x12\x41skReneDisableNode\x12\x1e.cln.AskrenedisablenodeRequest\x1a\x1f.cln.AskrenedisablenodeResponse\"\x00\x12]\n\x14\x41skReneInformChannel\x12 .cln.AskreneinformchannelRequest\x1a!.cln.AskreneinformchannelResponse\"\x00\x12]\n\x14\x41skReneCreateChannel\x12 .cln.AskrenecreatechannelRequest\x1a!.cln.AskrenecreatechannelResponse\"\x00\x12]\n\x14\x41skReneUpdateChannel\x12 .cln.AskreneupdatechannelRequest\x1a!.cln.AskreneupdatechannelResponse\"\x00\x12W\n\x12\x41skReneBiasChannel\x12\x1e.cln.AskrenebiaschannelRequest\x1a\x1f.cln.AskrenebiaschannelResponse\"\x00\x12N\n\x0f\x41skreneBiasNode\x12\x1b.cln.AskrenebiasnodeRequest\x1a\x1c.cln.AskrenebiasnodeResponse\"\x00\x12\x66\n\x17\x41skReneListReservations\x12#.cln.AskrenelistreservationsRequest\x1a$.cln.AskrenelistreservationsResponse\"\x00\x12W\n\x12InjectPaymentOnion\x12\x1e.cln.InjectpaymentonionRequest\x1a\x1f.cln.InjectpaymentonionResponse\"\x00\x12W\n\x12InjectOnionMessage\x12\x1e.cln.InjectonionmessageRequest\x1a\x1f.cln.InjectonionmessageResponse\"\x00\x12-\n\x04Xpay\x12\x10.cln.XpayRequest\x1a\x11.cln.XpayResponse\"\x00\x12W\n\x12SignMessageWithKey\x12\x1e.cln.SignmessagewithkeyRequest\x1a\x1f.cln.SignmessagewithkeyResponse\"\x00\x12Q\n\x10ListChannelMoves\x12\x1c.cln.ListchannelmovesRequest\x1a\x1d.cln.ListchannelmovesResponse\"\x00\x12K\n\x0eListChainMoves\x12\x1a.cln.ListchainmovesRequest\x1a\x1b.cln.ListchainmovesResponse\"\x00\x12T\n\x11ListNetworkEvents\x12\x1d.cln.ListnetworkeventsRequest\x1a\x1e.cln.ListnetworkeventsResponse\"\x00\x12N\n\x0f\x44\x65lNetworkEvent\x12\x1b.cln.DelnetworkeventRequest\x1a\x1c.cln.DelnetworkeventResponse\"\x00\x12Z\n\x13\x43lnrestRegisterPath\x12\x1f.cln.ClnrestregisterpathRequest\x1a .cln.ClnrestregisterpathResponse\"\x00\x12T\n\x11ListCurrencyRates\x12\x1d.cln.ListcurrencyratesRequest\x1a\x1e.cln.ListcurrencyratesResponse\"\x00\x12N\n\x0f\x43urrencyConvert\x12\x1b.cln.CurrencyconvertRequest\x1a\x1c.cln.CurrencyconvertResponse\"\x00\x12\x45\n\x0c\x43urrencyRate\x12\x18.cln.CurrencyrateRequest\x1a\x19.cln.CurrencyrateResponse\"\x00\x12?\n\nSendAmount\x12\x16.cln.SendamountRequest\x1a\x17.cln.SendamountResponse\"\x00\x12\x42\n\x0b\x43reateProof\x12\x17.cln.CreateproofRequest\x1a\x18.cln.CreateproofResponse\"\x00\x12\x39\n\x08Xkeysend\x12\x14.cln.XkeysendRequest\x1a\x15.cln.XkeysendResponse\"\x00\x12\x39\n\x08Graceful\x12\x14.cln.GracefulRequest\x1a\x15.cln.GracefulResponse\"\x00\x12\x39\n\x08Reckless\x12\x14.cln.RecklessRequest\x1a\x15.cln.RecklessResponse\"\x00\x12\x63\n\x18SubscribeBalanceSnapshot\x12!.cln.StreamBalanceSnapshotRequest\x1a .cln.BalanceSnapshotNotification\"\x00\x30\x01\x12T\n\x13SubscribeBlockAdded\x12\x1c.cln.StreamBlockAddedRequest\x1a\x1b.cln.BlockAddedNotification\"\x00\x30\x01\x12i\n\x1aSubscribeChannelOpenFailed\x12#.cln.StreamChannelOpenFailedRequest\x1a\".cln.ChannelOpenFailedNotification\"\x00\x30\x01\x12]\n\x16SubscribeChannelOpened\x12\x1f.cln.StreamChannelOpenedRequest\x1a\x1e.cln.ChannelOpenedNotification\"\x00\x30\x01\x12o\n\x1cSubscribeChannelStateChanged\x12%.cln.StreamChannelStateChangedRequest\x1a$.cln.ChannelStateChangedNotification\"\x00\x30\x01\x12O\n\x10SubscribeConnect\x12\x19.cln.StreamConnectRequest\x1a\x1c.cln.PeerConnectNotification\"\x00\x30\x01\x12Z\n\x15SubscribeCoinMovement\x12\x1e.cln.StreamCoinMovementRequest\x1a\x1d.cln.CoinMovementNotification\"\x00\x30\x01\x12Q\n\x12SubscribeCustomMsg\x12\x1b.cln.StreamCustomMsgRequest\x1a\x1a.cln.CustomMsgNotification\"\x00\x30\x01\x12i\n\x1aSubscribeDeprecatedOneshot\x12#.cln.StreamDeprecatedOneshotRequest\x1a\".cln.DeprecatedOneshotNotification\"\x00\x30\x01\x12T\n\x13SubscribeDisconnect\x12\x1c.cln.StreamDisconnectRequest\x1a\x1b.cln.DisconnectNotification\"\x00\x30\x01\x12Z\n\x15SubscribeForwardEvent\x12\x1e.cln.StreamForwardEventRequest\x1a\x1d.cln.ForwardEventNotification\"\x00\x30\x01\x12\x63\n\x18SubscribeInvoiceCreation\x12!.cln.StreamInvoiceCreationRequest\x1a .cln.InvoiceCreationNotification\"\x00\x30\x01\x12`\n\x17SubscribeInvoicePayment\x12 .cln.StreamInvoicePaymentRequest\x1a\x1f.cln.InvoicePaymentNotification\"\x00\x30\x01\x12?\n\x0cSubscribeLog\x12\x15.cln.StreamLogRequest\x1a\x14.cln.LogNotification\"\x00\x30\x01\x12{\n SubscribeOnionMessageForwardFail\x12).cln.StreamOnionMessageForwardFailRequest\x1a(.cln.OnionMessageForwardFailNotification\"\x00\x30\x01\x12o\n\x1cSubscribeOpenChannelPeerSigs\x12%.cln.StreamOpenChannelPeerSigsRequest\x1a$.cln.OpenChannelPeerSigsNotification\"\x00\x30\x01\x12]\n\x16SubscribePluginStarted\x12\x1f.cln.StreamPluginStartedRequest\x1a\x1e.cln.PluginStartedNotification\"\x00\x30\x01\x12]\n\x16SubscribePluginStopped\x12\x1f.cln.StreamPluginStoppedRequest\x1a\x1e.cln.PluginStoppedNotification\"\x00\x30\x01\x12`\n\x17SubscribeSendPayFailure\x12 .cln.StreamSendPayFailureRequest\x1a\x1f.cln.SendPayFailureNotification\"\x00\x30\x01\x12`\n\x17SubscribeSendPaySuccess\x12 .cln.StreamSendPaySuccessRequest\x1a\x1f.cln.SendPaySuccessNotification\"\x00\x30\x01\x12N\n\x11SubscribeShutdown\x12\x1a.cln.StreamShutdownRequest\x1a\x19.cln.ShutdownNotification\"\x00\x30\x01\x12K\n\x10SubscribeWarning\x12\x19.cln.StreamWarningRequest\x1a\x18.cln.WarningNotification\"\x00\x30\x01\x12T\n\x13SubscribePayPartEnd\x12\x1c.cln.StreamPayPartEndRequest\x1a\x1b.cln.PayPartEndNotification\"\x00\x30\x01\x12Z\n\x15SubscribePayPartStart\x12\x1e.cln.StreamPayPartStartRequest\x1a\x1d.cln.PayPartStartNotification\"\x00\x30\x01\x12W\n\x14SubscribeRecklessLog\x12\x1d.cln.StreamRecklessLogRequest\x1a\x1c.cln.RecklessLogNotification\"\x00\x30\x01\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -1583,161 +1583,161 @@ _globals['_RECKLESSREQUEST_RECKLESSSUBCOMMAND']._serialized_start=107927 _globals['_RECKLESSREQUEST_RECKLESSSUBCOMMAND']._serialized_end=107978 _globals['_RECKLESSRESPONSE']._serialized_start=108064 - _globals['_RECKLESSRESPONSE']._serialized_end=108520 - _globals['_RECKLESSDISABLE']._serialized_start=108522 - _globals['_RECKLESSDISABLE']._serialized_end=108560 - _globals['_RECKLESSENABLE']._serialized_start=108562 - _globals['_RECKLESSENABLE']._serialized_end=108599 - _globals['_RECKLESSINSTALL']._serialized_start=108601 - _globals['_RECKLESSINSTALL']._serialized_end=108708 - _globals['_RECKLESSLISTAVAILABLE']._serialized_start=108711 - _globals['_RECKLESSLISTAVAILABLE']._serialized_end=109084 - _globals['_RECKLESSLISTAVAILABLE_RECKLESSLISTAVAILABLEINSTALLER']._serialized_start=108906 - _globals['_RECKLESSLISTAVAILABLE_RECKLESSLISTAVAILABLEINSTALLER']._serialized_end=109084 - _globals['_RECKLESSLISTAVAILABLEMANIFEST']._serialized_start=109087 - _globals['_RECKLESSLISTAVAILABLEMANIFEST']._serialized_end=109385 - _globals['_RECKLESSLISTINTALLED']._serialized_start=109388 - _globals['_RECKLESSLISTINTALLED']._serialized_end=109614 - _globals['_RECKLESSTIP']._serialized_start=109617 - _globals['_RECKLESSTIP']._serialized_end=109777 - _globals['_RECKLESSUNINSTALL']._serialized_start=109779 - _globals['_RECKLESSUNINSTALL']._serialized_end=109819 - _globals['_RECKLESSUPDATE']._serialized_start=109821 - _globals['_RECKLESSUPDATE']._serialized_end=109927 - _globals['_STREAMBALANCESNAPSHOTREQUEST']._serialized_start=109929 - _globals['_STREAMBALANCESNAPSHOTREQUEST']._serialized_end=109959 - _globals['_BALANCESNAPSHOTNOTIFICATION']._serialized_start=109962 - _globals['_BALANCESNAPSHOTNOTIFICATION']._serialized_end=110096 - _globals['_BALANCESNAPSHOTACCOUNTS']._serialized_start=110098 - _globals['_BALANCESNAPSHOTACCOUNTS']._serialized_end=110197 - _globals['_STREAMBLOCKADDEDREQUEST']._serialized_start=110199 - _globals['_STREAMBLOCKADDEDREQUEST']._serialized_end=110224 - _globals['_BLOCKADDEDNOTIFICATION']._serialized_start=110226 - _globals['_BLOCKADDEDNOTIFICATION']._serialized_end=110280 - _globals['_STREAMCHANNELOPENFAILEDREQUEST']._serialized_start=110282 - _globals['_STREAMCHANNELOPENFAILEDREQUEST']._serialized_end=110314 - _globals['_CHANNELOPENFAILEDNOTIFICATION']._serialized_start=110316 - _globals['_CHANNELOPENFAILEDNOTIFICATION']._serialized_end=110367 - _globals['_STREAMCHANNELOPENEDREQUEST']._serialized_start=110369 - _globals['_STREAMCHANNELOPENEDREQUEST']._serialized_end=110397 - _globals['_CHANNELOPENEDNOTIFICATION']._serialized_start=110399 - _globals['_CHANNELOPENEDNOTIFICATION']._serialized_end=110518 - _globals['_STREAMCHANNELSTATECHANGEDREQUEST']._serialized_start=110520 - _globals['_STREAMCHANNELSTATECHANGEDREQUEST']._serialized_end=110554 - _globals['_CHANNELSTATECHANGEDNOTIFICATION']._serialized_start=110557 - _globals['_CHANNELSTATECHANGEDNOTIFICATION']._serialized_end=111006 - _globals['_CHANNELSTATECHANGEDNOTIFICATION_CHANNELSTATECHANGEDCAUSE']._serialized_start=110860 - _globals['_CHANNELSTATECHANGEDNOTIFICATION_CHANNELSTATECHANGEDCAUSE']._serialized_end=110959 - _globals['_STREAMCONNECTREQUEST']._serialized_start=111008 - _globals['_STREAMCONNECTREQUEST']._serialized_end=111030 - _globals['_PEERCONNECTNOTIFICATION']._serialized_start=111033 - _globals['_PEERCONNECTNOTIFICATION']._serialized_end=111223 - _globals['_PEERCONNECTNOTIFICATION_PEERCONNECTDIRECTION']._serialized_start=111184 - _globals['_PEERCONNECTNOTIFICATION_PEERCONNECTDIRECTION']._serialized_end=111223 - _globals['_PEERCONNECTADDRESS']._serialized_start=111226 - _globals['_PEERCONNECTADDRESS']._serialized_end=111508 - _globals['_PEERCONNECTADDRESS_PEERCONNECTADDRESSTYPE']._serialized_start=111377 - _globals['_PEERCONNECTADDRESS_PEERCONNECTADDRESSTYPE']._serialized_end=111476 - _globals['_STREAMCOINMOVEMENTREQUEST']._serialized_start=111510 - _globals['_STREAMCOINMOVEMENTREQUEST']._serialized_end=111537 - _globals['_COINMOVEMENTNOTIFICATION']._serialized_start=111540 - _globals['_COINMOVEMENTNOTIFICATION']._serialized_end=112995 - _globals['_COINMOVEMENTNOTIFICATION_COINMOVEMENTPRIMARYTAG']._serialized_start=112334 - _globals['_COINMOVEMENTNOTIFICATION_COINMOVEMENTPRIMARYTAG']._serialized_end=112709 - _globals['_COINMOVEMENTNOTIFICATION_COINMOVEMENTTYPE']._serialized_start=112711 - _globals['_COINMOVEMENTNOTIFICATION_COINMOVEMENTTYPE']._serialized_end=112761 - _globals['_STREAMCUSTOMMSGREQUEST']._serialized_start=112997 - _globals['_STREAMCUSTOMMSGREQUEST']._serialized_end=113021 - _globals['_CUSTOMMSGNOTIFICATION']._serialized_start=113023 - _globals['_CUSTOMMSGNOTIFICATION']._serialized_end=113080 - _globals['_STREAMDEPRECATEDONESHOTREQUEST']._serialized_start=113082 - _globals['_STREAMDEPRECATEDONESHOTREQUEST']._serialized_end=113114 - _globals['_DEPRECATEDONESHOTNOTIFICATION']._serialized_start=113116 - _globals['_DEPRECATEDONESHOTNOTIFICATION']._serialized_end=113170 - _globals['_STREAMDISCONNECTREQUEST']._serialized_start=113172 - _globals['_STREAMDISCONNECTREQUEST']._serialized_end=113197 - _globals['_DISCONNECTNOTIFICATION']._serialized_start=113199 - _globals['_DISCONNECTNOTIFICATION']._serialized_end=113235 - _globals['_STREAMFORWARDEVENTREQUEST']._serialized_start=113237 - _globals['_STREAMFORWARDEVENTREQUEST']._serialized_end=113264 - _globals['_FORWARDEVENTNOTIFICATION']._serialized_start=113267 - _globals['_FORWARDEVENTNOTIFICATION']._serialized_end=113915 - _globals['_FORWARDEVENTNOTIFICATION_FORWARDEVENTSTATUS']._serialized_start=113699 - _globals['_FORWARDEVENTNOTIFICATION_FORWARDEVENTSTATUS']._serialized_end=113775 - _globals['_FORWARDEVENTNOTIFICATION_FORWARDEVENTSTYLE']._serialized_start=113777 - _globals['_FORWARDEVENTNOTIFICATION_FORWARDEVENTSTYLE']._serialized_end=113817 - _globals['_STREAMINVOICECREATIONREQUEST']._serialized_start=113917 - _globals['_STREAMINVOICECREATIONREQUEST']._serialized_end=113947 - _globals['_INVOICECREATIONNOTIFICATION']._serialized_start=113950 - _globals['_INVOICECREATIONNOTIFICATION']._serialized_end=114089 - _globals['_STREAMINVOICEPAYMENTREQUEST']._serialized_start=114091 - _globals['_STREAMINVOICEPAYMENTREQUEST']._serialized_end=114120 - _globals['_INVOICEPAYMENTNOTIFICATION']._serialized_start=114123 - _globals['_INVOICEPAYMENTNOTIFICATION']._serialized_end=114262 - _globals['_STREAMLOGREQUEST']._serialized_start=114264 - _globals['_STREAMLOGREQUEST']._serialized_end=114282 - _globals['_LOGNOTIFICATION']._serialized_start=114285 - _globals['_LOGNOTIFICATION']._serialized_end=114487 - _globals['_LOGNOTIFICATION_LOGLEVEL']._serialized_start=114412 - _globals['_LOGNOTIFICATION_LOGLEVEL']._serialized_end=114487 - _globals['_STREAMONIONMESSAGEFORWARDFAILREQUEST']._serialized_start=114489 - _globals['_STREAMONIONMESSAGEFORWARDFAILREQUEST']._serialized_end=114527 - _globals['_ONIONMESSAGEFORWARDFAILNOTIFICATION']._serialized_start=114530 - _globals['_ONIONMESSAGEFORWARDFAILNOTIFICATION']._serialized_end=114769 - _globals['_STREAMOPENCHANNELPEERSIGSREQUEST']._serialized_start=114771 - _globals['_STREAMOPENCHANNELPEERSIGSREQUEST']._serialized_end=114805 - _globals['_OPENCHANNELPEERSIGSNOTIFICATION']._serialized_start=114807 - _globals['_OPENCHANNELPEERSIGSNOTIFICATION']._serialized_end=114881 - _globals['_STREAMPLUGINSTARTEDREQUEST']._serialized_start=114883 - _globals['_STREAMPLUGINSTARTEDREQUEST']._serialized_end=114911 - _globals['_PLUGINSTARTEDNOTIFICATION']._serialized_start=114913 - _globals['_PLUGINSTARTEDNOTIFICATION']._serialized_end=114999 - _globals['_STREAMPLUGINSTOPPEDREQUEST']._serialized_start=115001 - _globals['_STREAMPLUGINSTOPPEDREQUEST']._serialized_end=115029 - _globals['_PLUGINSTOPPEDNOTIFICATION']._serialized_start=115031 - _globals['_PLUGINSTOPPEDNOTIFICATION']._serialized_end=115117 - _globals['_STREAMSENDPAYFAILUREREQUEST']._serialized_start=115119 - _globals['_STREAMSENDPAYFAILUREREQUEST']._serialized_end=115148 - _globals['_SENDPAYFAILURENOTIFICATION']._serialized_start=115150 - _globals['_SENDPAYFAILURENOTIFICATION']._serialized_end=115248 - _globals['_SENDPAYFAILUREDATA']._serialized_start=115251 - _globals['_SENDPAYFAILUREDATA']._serialized_end=116468 - _globals['_SENDPAYFAILUREDATA_SENDPAYFAILUREDATASTATUS']._serialized_start=116006 - _globals['_SENDPAYFAILUREDATA_SENDPAYFAILUREDATASTATUS']._serialized_end=116071 - _globals['_STREAMSENDPAYSUCCESSREQUEST']._serialized_start=116470 - _globals['_STREAMSENDPAYSUCCESSREQUEST']._serialized_end=116499 - _globals['_SENDPAYSUCCESSNOTIFICATION']._serialized_start=116502 - _globals['_SENDPAYSUCCESSNOTIFICATION']._serialized_end=117218 - _globals['_SENDPAYSUCCESSNOTIFICATION_SENDPAYSUCCESSSTATUS']._serialized_start=117020 - _globals['_SENDPAYSUCCESSNOTIFICATION_SENDPAYSUCCESSSTATUS']._serialized_end=117056 - _globals['_STREAMSHUTDOWNREQUEST']._serialized_start=117220 - _globals['_STREAMSHUTDOWNREQUEST']._serialized_end=117243 - _globals['_SHUTDOWNNOTIFICATION']._serialized_start=117245 - _globals['_SHUTDOWNNOTIFICATION']._serialized_end=117267 - _globals['_STREAMWARNINGREQUEST']._serialized_start=117269 - _globals['_STREAMWARNINGREQUEST']._serialized_end=117291 - _globals['_WARNINGNOTIFICATION']._serialized_start=117294 - _globals['_WARNINGNOTIFICATION']._serialized_end=117468 - _globals['_WARNINGNOTIFICATION_WARNINGLEVEL']._serialized_start=117433 - _globals['_WARNINGNOTIFICATION_WARNINGLEVEL']._serialized_end=117468 - _globals['_STREAMPAYPARTENDREQUEST']._serialized_start=117470 - _globals['_STREAMPAYPARTENDREQUEST']._serialized_end=117495 - _globals['_PAYPARTENDNOTIFICATION']._serialized_start=117498 - _globals['_PAYPARTENDNOTIFICATION']._serialized_end=117995 - _globals['_PAYPARTENDNOTIFICATION_PAYPARTENDSTATUS']._serialized_start=117835 - _globals['_PAYPARTENDNOTIFICATION_PAYPARTENDSTATUS']._serialized_end=117879 - _globals['_STREAMPAYPARTSTARTREQUEST']._serialized_start=117997 - _globals['_STREAMPAYPARTSTARTREQUEST']._serialized_end=118024 - _globals['_PAYPARTSTARTNOTIFICATION']._serialized_start=118027 - _globals['_PAYPARTSTARTNOTIFICATION']._serialized_end=118221 - _globals['_PAYPARTSTARTHOPS']._serialized_start=118224 - _globals['_PAYPARTSTARTHOPS']._serialized_end=118383 - _globals['_STREAMRECKLESSLOGREQUEST']._serialized_start=118385 - _globals['_STREAMRECKLESSLOGREQUEST']._serialized_end=118411 - _globals['_RECKLESSLOGNOTIFICATION']._serialized_start=118414 - _globals['_RECKLESSLOGNOTIFICATION']._serialized_end=118632 - _globals['_RECKLESSLOGNOTIFICATION_RECKLESSLOGLEVEL']._serialized_start=118549 - _globals['_RECKLESSLOGNOTIFICATION_RECKLESSLOGLEVEL']._serialized_end=118632 - _globals['_NODE']._serialized_start=118635 - _globals['_NODE']._serialized_end=132153 + _globals['_RECKLESSRESPONSE']._serialized_end=108522 + _globals['_RECKLESSDISABLE']._serialized_start=108524 + _globals['_RECKLESSDISABLE']._serialized_end=108562 + _globals['_RECKLESSENABLE']._serialized_start=108564 + _globals['_RECKLESSENABLE']._serialized_end=108601 + _globals['_RECKLESSINSTALL']._serialized_start=108603 + _globals['_RECKLESSINSTALL']._serialized_end=108710 + _globals['_RECKLESSLISTAVAILABLE']._serialized_start=108713 + _globals['_RECKLESSLISTAVAILABLE']._serialized_end=109086 + _globals['_RECKLESSLISTAVAILABLE_RECKLESSLISTAVAILABLEINSTALLER']._serialized_start=108908 + _globals['_RECKLESSLISTAVAILABLE_RECKLESSLISTAVAILABLEINSTALLER']._serialized_end=109086 + _globals['_RECKLESSLISTAVAILABLEMANIFEST']._serialized_start=109089 + _globals['_RECKLESSLISTAVAILABLEMANIFEST']._serialized_end=109387 + _globals['_RECKLESSLISTINSTALLED']._serialized_start=109390 + _globals['_RECKLESSLISTINSTALLED']._serialized_end=109617 + _globals['_RECKLESSTIP']._serialized_start=109620 + _globals['_RECKLESSTIP']._serialized_end=109780 + _globals['_RECKLESSUNINSTALL']._serialized_start=109782 + _globals['_RECKLESSUNINSTALL']._serialized_end=109822 + _globals['_RECKLESSUPDATE']._serialized_start=109824 + _globals['_RECKLESSUPDATE']._serialized_end=109930 + _globals['_STREAMBALANCESNAPSHOTREQUEST']._serialized_start=109932 + _globals['_STREAMBALANCESNAPSHOTREQUEST']._serialized_end=109962 + _globals['_BALANCESNAPSHOTNOTIFICATION']._serialized_start=109965 + _globals['_BALANCESNAPSHOTNOTIFICATION']._serialized_end=110099 + _globals['_BALANCESNAPSHOTACCOUNTS']._serialized_start=110101 + _globals['_BALANCESNAPSHOTACCOUNTS']._serialized_end=110200 + _globals['_STREAMBLOCKADDEDREQUEST']._serialized_start=110202 + _globals['_STREAMBLOCKADDEDREQUEST']._serialized_end=110227 + _globals['_BLOCKADDEDNOTIFICATION']._serialized_start=110229 + _globals['_BLOCKADDEDNOTIFICATION']._serialized_end=110283 + _globals['_STREAMCHANNELOPENFAILEDREQUEST']._serialized_start=110285 + _globals['_STREAMCHANNELOPENFAILEDREQUEST']._serialized_end=110317 + _globals['_CHANNELOPENFAILEDNOTIFICATION']._serialized_start=110319 + _globals['_CHANNELOPENFAILEDNOTIFICATION']._serialized_end=110370 + _globals['_STREAMCHANNELOPENEDREQUEST']._serialized_start=110372 + _globals['_STREAMCHANNELOPENEDREQUEST']._serialized_end=110400 + _globals['_CHANNELOPENEDNOTIFICATION']._serialized_start=110402 + _globals['_CHANNELOPENEDNOTIFICATION']._serialized_end=110521 + _globals['_STREAMCHANNELSTATECHANGEDREQUEST']._serialized_start=110523 + _globals['_STREAMCHANNELSTATECHANGEDREQUEST']._serialized_end=110557 + _globals['_CHANNELSTATECHANGEDNOTIFICATION']._serialized_start=110560 + _globals['_CHANNELSTATECHANGEDNOTIFICATION']._serialized_end=111009 + _globals['_CHANNELSTATECHANGEDNOTIFICATION_CHANNELSTATECHANGEDCAUSE']._serialized_start=110863 + _globals['_CHANNELSTATECHANGEDNOTIFICATION_CHANNELSTATECHANGEDCAUSE']._serialized_end=110962 + _globals['_STREAMCONNECTREQUEST']._serialized_start=111011 + _globals['_STREAMCONNECTREQUEST']._serialized_end=111033 + _globals['_PEERCONNECTNOTIFICATION']._serialized_start=111036 + _globals['_PEERCONNECTNOTIFICATION']._serialized_end=111226 + _globals['_PEERCONNECTNOTIFICATION_PEERCONNECTDIRECTION']._serialized_start=111187 + _globals['_PEERCONNECTNOTIFICATION_PEERCONNECTDIRECTION']._serialized_end=111226 + _globals['_PEERCONNECTADDRESS']._serialized_start=111229 + _globals['_PEERCONNECTADDRESS']._serialized_end=111511 + _globals['_PEERCONNECTADDRESS_PEERCONNECTADDRESSTYPE']._serialized_start=111380 + _globals['_PEERCONNECTADDRESS_PEERCONNECTADDRESSTYPE']._serialized_end=111479 + _globals['_STREAMCOINMOVEMENTREQUEST']._serialized_start=111513 + _globals['_STREAMCOINMOVEMENTREQUEST']._serialized_end=111540 + _globals['_COINMOVEMENTNOTIFICATION']._serialized_start=111543 + _globals['_COINMOVEMENTNOTIFICATION']._serialized_end=112998 + _globals['_COINMOVEMENTNOTIFICATION_COINMOVEMENTPRIMARYTAG']._serialized_start=112337 + _globals['_COINMOVEMENTNOTIFICATION_COINMOVEMENTPRIMARYTAG']._serialized_end=112712 + _globals['_COINMOVEMENTNOTIFICATION_COINMOVEMENTTYPE']._serialized_start=112714 + _globals['_COINMOVEMENTNOTIFICATION_COINMOVEMENTTYPE']._serialized_end=112764 + _globals['_STREAMCUSTOMMSGREQUEST']._serialized_start=113000 + _globals['_STREAMCUSTOMMSGREQUEST']._serialized_end=113024 + _globals['_CUSTOMMSGNOTIFICATION']._serialized_start=113026 + _globals['_CUSTOMMSGNOTIFICATION']._serialized_end=113083 + _globals['_STREAMDEPRECATEDONESHOTREQUEST']._serialized_start=113085 + _globals['_STREAMDEPRECATEDONESHOTREQUEST']._serialized_end=113117 + _globals['_DEPRECATEDONESHOTNOTIFICATION']._serialized_start=113119 + _globals['_DEPRECATEDONESHOTNOTIFICATION']._serialized_end=113173 + _globals['_STREAMDISCONNECTREQUEST']._serialized_start=113175 + _globals['_STREAMDISCONNECTREQUEST']._serialized_end=113200 + _globals['_DISCONNECTNOTIFICATION']._serialized_start=113202 + _globals['_DISCONNECTNOTIFICATION']._serialized_end=113238 + _globals['_STREAMFORWARDEVENTREQUEST']._serialized_start=113240 + _globals['_STREAMFORWARDEVENTREQUEST']._serialized_end=113267 + _globals['_FORWARDEVENTNOTIFICATION']._serialized_start=113270 + _globals['_FORWARDEVENTNOTIFICATION']._serialized_end=113918 + _globals['_FORWARDEVENTNOTIFICATION_FORWARDEVENTSTATUS']._serialized_start=113702 + _globals['_FORWARDEVENTNOTIFICATION_FORWARDEVENTSTATUS']._serialized_end=113778 + _globals['_FORWARDEVENTNOTIFICATION_FORWARDEVENTSTYLE']._serialized_start=113780 + _globals['_FORWARDEVENTNOTIFICATION_FORWARDEVENTSTYLE']._serialized_end=113820 + _globals['_STREAMINVOICECREATIONREQUEST']._serialized_start=113920 + _globals['_STREAMINVOICECREATIONREQUEST']._serialized_end=113950 + _globals['_INVOICECREATIONNOTIFICATION']._serialized_start=113953 + _globals['_INVOICECREATIONNOTIFICATION']._serialized_end=114092 + _globals['_STREAMINVOICEPAYMENTREQUEST']._serialized_start=114094 + _globals['_STREAMINVOICEPAYMENTREQUEST']._serialized_end=114123 + _globals['_INVOICEPAYMENTNOTIFICATION']._serialized_start=114126 + _globals['_INVOICEPAYMENTNOTIFICATION']._serialized_end=114265 + _globals['_STREAMLOGREQUEST']._serialized_start=114267 + _globals['_STREAMLOGREQUEST']._serialized_end=114285 + _globals['_LOGNOTIFICATION']._serialized_start=114288 + _globals['_LOGNOTIFICATION']._serialized_end=114490 + _globals['_LOGNOTIFICATION_LOGLEVEL']._serialized_start=114415 + _globals['_LOGNOTIFICATION_LOGLEVEL']._serialized_end=114490 + _globals['_STREAMONIONMESSAGEFORWARDFAILREQUEST']._serialized_start=114492 + _globals['_STREAMONIONMESSAGEFORWARDFAILREQUEST']._serialized_end=114530 + _globals['_ONIONMESSAGEFORWARDFAILNOTIFICATION']._serialized_start=114533 + _globals['_ONIONMESSAGEFORWARDFAILNOTIFICATION']._serialized_end=114772 + _globals['_STREAMOPENCHANNELPEERSIGSREQUEST']._serialized_start=114774 + _globals['_STREAMOPENCHANNELPEERSIGSREQUEST']._serialized_end=114808 + _globals['_OPENCHANNELPEERSIGSNOTIFICATION']._serialized_start=114810 + _globals['_OPENCHANNELPEERSIGSNOTIFICATION']._serialized_end=114884 + _globals['_STREAMPLUGINSTARTEDREQUEST']._serialized_start=114886 + _globals['_STREAMPLUGINSTARTEDREQUEST']._serialized_end=114914 + _globals['_PLUGINSTARTEDNOTIFICATION']._serialized_start=114916 + _globals['_PLUGINSTARTEDNOTIFICATION']._serialized_end=115002 + _globals['_STREAMPLUGINSTOPPEDREQUEST']._serialized_start=115004 + _globals['_STREAMPLUGINSTOPPEDREQUEST']._serialized_end=115032 + _globals['_PLUGINSTOPPEDNOTIFICATION']._serialized_start=115034 + _globals['_PLUGINSTOPPEDNOTIFICATION']._serialized_end=115120 + _globals['_STREAMSENDPAYFAILUREREQUEST']._serialized_start=115122 + _globals['_STREAMSENDPAYFAILUREREQUEST']._serialized_end=115151 + _globals['_SENDPAYFAILURENOTIFICATION']._serialized_start=115153 + _globals['_SENDPAYFAILURENOTIFICATION']._serialized_end=115251 + _globals['_SENDPAYFAILUREDATA']._serialized_start=115254 + _globals['_SENDPAYFAILUREDATA']._serialized_end=116471 + _globals['_SENDPAYFAILUREDATA_SENDPAYFAILUREDATASTATUS']._serialized_start=116009 + _globals['_SENDPAYFAILUREDATA_SENDPAYFAILUREDATASTATUS']._serialized_end=116074 + _globals['_STREAMSENDPAYSUCCESSREQUEST']._serialized_start=116473 + _globals['_STREAMSENDPAYSUCCESSREQUEST']._serialized_end=116502 + _globals['_SENDPAYSUCCESSNOTIFICATION']._serialized_start=116505 + _globals['_SENDPAYSUCCESSNOTIFICATION']._serialized_end=117221 + _globals['_SENDPAYSUCCESSNOTIFICATION_SENDPAYSUCCESSSTATUS']._serialized_start=117023 + _globals['_SENDPAYSUCCESSNOTIFICATION_SENDPAYSUCCESSSTATUS']._serialized_end=117059 + _globals['_STREAMSHUTDOWNREQUEST']._serialized_start=117223 + _globals['_STREAMSHUTDOWNREQUEST']._serialized_end=117246 + _globals['_SHUTDOWNNOTIFICATION']._serialized_start=117248 + _globals['_SHUTDOWNNOTIFICATION']._serialized_end=117270 + _globals['_STREAMWARNINGREQUEST']._serialized_start=117272 + _globals['_STREAMWARNINGREQUEST']._serialized_end=117294 + _globals['_WARNINGNOTIFICATION']._serialized_start=117297 + _globals['_WARNINGNOTIFICATION']._serialized_end=117471 + _globals['_WARNINGNOTIFICATION_WARNINGLEVEL']._serialized_start=117436 + _globals['_WARNINGNOTIFICATION_WARNINGLEVEL']._serialized_end=117471 + _globals['_STREAMPAYPARTENDREQUEST']._serialized_start=117473 + _globals['_STREAMPAYPARTENDREQUEST']._serialized_end=117498 + _globals['_PAYPARTENDNOTIFICATION']._serialized_start=117501 + _globals['_PAYPARTENDNOTIFICATION']._serialized_end=117998 + _globals['_PAYPARTENDNOTIFICATION_PAYPARTENDSTATUS']._serialized_start=117838 + _globals['_PAYPARTENDNOTIFICATION_PAYPARTENDSTATUS']._serialized_end=117882 + _globals['_STREAMPAYPARTSTARTREQUEST']._serialized_start=118000 + _globals['_STREAMPAYPARTSTARTREQUEST']._serialized_end=118027 + _globals['_PAYPARTSTARTNOTIFICATION']._serialized_start=118030 + _globals['_PAYPARTSTARTNOTIFICATION']._serialized_end=118224 + _globals['_PAYPARTSTARTHOPS']._serialized_start=118227 + _globals['_PAYPARTSTARTHOPS']._serialized_end=118386 + _globals['_STREAMRECKLESSLOGREQUEST']._serialized_start=118388 + _globals['_STREAMRECKLESSLOGREQUEST']._serialized_end=118414 + _globals['_RECKLESSLOGNOTIFICATION']._serialized_start=118417 + _globals['_RECKLESSLOGNOTIFICATION']._serialized_end=118635 + _globals['_RECKLESSLOGNOTIFICATION_RECKLESSLOGLEVEL']._serialized_start=118552 + _globals['_RECKLESSLOGNOTIFICATION_RECKLESSLOGLEVEL']._serialized_end=118635 + _globals['_NODE']._serialized_start=118638 + _globals['_NODE']._serialized_end=132156 # @@protoc_insertion_point(module_scope) diff --git a/contrib/pyln-testing/pyln/testing/grpc2py.py b/contrib/pyln-testing/pyln/testing/grpc2py.py index eff750b2975e..96fd37264ce3 100644 --- a/contrib/pyln-testing/pyln/testing/grpc2py.py +++ b/contrib/pyln-testing/pyln/testing/grpc2py.py @@ -3605,7 +3605,7 @@ def reckless_listavailable2py(m): }) -def reckless_listintalled2py(m): +def reckless_listinstalled2py(m): return remove_default({ "installation_date": m.installation_date, # PrimitiveField in generate_composite "installation_time": m.installation_time, # PrimitiveField in generate_composite @@ -3643,7 +3643,7 @@ def reckless_update2py(m): def reckless2py(m): return remove_default({ "listavailable": [reckless_listavailable2py(i) for i in m.listavailable], # ArrayField[composite] in generate_composite - "listintalled": [reckless_listintalled2py(i) for i in m.listintalled], # ArrayField[composite] in generate_composite + "listinstalled": [reckless_listinstalled2py(i) for i in m.listinstalled], # ArrayField[composite] in generate_composite "log": [m.log for i in m.log], # ArrayField[primitive] in generate_composite "sources": [m.sources for i in m.sources], # ArrayField[primitive] in generate_composite "update": [reckless_update2py(i) for i in m.update], # ArrayField[composite] in generate_composite diff --git a/doc/schemas/reckless.json b/doc/schemas/reckless.json index 530969805364..6d18b3d57117 100644 --- a/doc/schemas/reckless.json +++ b/doc/schemas/reckless.json @@ -319,7 +319,7 @@ "additionalProperties": false } }, - "listintalled": { + "listinstalled": { "type": "array", "added": "v26.09", "items": { From 11fc2f03c9ad7c96dfe28bfd9cae497431d9525c Mon Sep 17 00:00:00 2001 From: daywalker90 Date: Fri, 24 Jul 2026 13:54:40 +0200 Subject: [PATCH 03/20] fixup! typo: changed "lintintalled" instances to "listinstalled" --- cln-rpc/src/model.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cln-rpc/src/model.rs b/cln-rpc/src/model.rs index 8512f6a01963..b0c18ae25e43 100644 --- a/cln-rpc/src/model.rs +++ b/cln-rpc/src/model.rs @@ -13711,7 +13711,7 @@ pub mod responses { } #[derive(Clone, Debug, Deserialize, Serialize)] - pub struct RecklessListintalled { + pub struct RecklessListinstalled { #[serde(skip_serializing_if = "Option::is_none")] pub installed_commit: Option, #[serde(skip_serializing_if = "Option::is_none")] @@ -13745,7 +13745,7 @@ pub mod responses { #[serde(skip_serializing_if = "crate::is_none_or_empty")] pub listavailable: Option>, #[serde(skip_serializing_if = "crate::is_none_or_empty")] - pub listintalled: Option>, + pub listinstalled: Option>, #[serde(skip_serializing_if = "crate::is_none_or_empty")] pub sources: Option>, #[serde(skip_serializing_if = "crate::is_none_or_empty")] From 64e3a2f58aae00891ca797ceb55295f6df5ecd94 Mon Sep 17 00:00:00 2001 From: daywalker90 Date: Fri, 24 Jul 2026 14:11:50 +0200 Subject: [PATCH 04/20] fix repo owner dir removal when removing source --- plugins/reckless-plugin/src/cmds/source.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/plugins/reckless-plugin/src/cmds/source.rs b/plugins/reckless-plugin/src/cmds/source.rs index 4419ed772927..61bf40dea749 100644 --- a/plugins/reckless-plugin/src/cmds/source.rs +++ b/plugins/reckless-plugin/src/cmds/source.rs @@ -178,14 +178,15 @@ async fn remove_source( } } - match fs::read_dir(&repo_dir).await { + let owner_dir = repo_dir + .parent() + .ok_or_else(|| anyhow!("source repo has no owner directory"))?; + + match fs::read_dir(&owner_dir).await { Ok(mut entries) => { if entries.next_entry().await?.is_none() { - let owner_dir = repo_dir - .parent() - .ok_or_else(|| anyhow!("source repo has no owner directory"))?; let line = format!( - "also removing emppty repository owner directory: {}", + "also removing empty repository owner directory: {}", owner_dir.display() ); logger.log(&line, LogLevel::INFO).await?; @@ -194,10 +195,10 @@ async fn remove_source( } Err(e) => { let line = format!( - "failed to read source directory: {} {e}", - repo_dir.display() + "could not read repository owner directory: {} {e}", + owner_dir.display() ); - return Err(anyhow!(line)); + logger.log(&line, LogLevel::UNUSUAL).await?; } } } From ac1866bb0294df1ee69ead66eb07aae2eb3565fd Mon Sep 17 00:00:00 2001 From: daywalker90 Date: Wed, 29 Jul 2026 12:19:32 +0200 Subject: [PATCH 05/20] Makefile: add cln-rpc and cln-plugin as dependency of reckless --- plugins/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Makefile b/plugins/Makefile index 153129f22d3d..feb0bb215730 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -287,7 +287,7 @@ $(RUST_TARGET_DIR)/cln-bip353: ${CLN_BIP353_PLUGIN_SRC} ${CLN_PLUGIN_SRC} $(CARGO) build ${CARGO_OPTS} --bin cln-bip353 $(RUST_TARGET_DIR)/cln-currencyrate: ${CLN_CURRENCYRATE_PLUGIN_SRC} ${CLN_RPC_SOURCES} ${CLN_PLUGIN_SRC} $(CARGO) build ${CARGO_OPTS} --bin cln-currencyrate -$(RUST_TARGET_DIR)/cln-reckless: ${CLN_RECKLESS_PLUGIN_SRC} +$(RUST_TARGET_DIR)/cln-reckless: ${CLN_RECKLESS_PLUGIN_SRC} ${CLN_RPC_SOURCES} ${CLN_PLUGIN_SRC} $(CARGO) build ${CARGO_OPTS} --bin cln-reckless ifneq ($(RUST),0) From c791a23b8aa155d705b6fb176a5858808f61af5a Mon Sep 17 00:00:00 2001 From: daywalker90 Date: Wed, 29 Jul 2026 13:02:47 +0200 Subject: [PATCH 06/20] tests: add reckless test for update --- tests/test_reckless.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tests/test_reckless.py b/tests/test_reckless.py index 28362c371814..8ccf8abd75c0 100644 --- a/tests/test_reckless.py +++ b/tests/test_reckless.py @@ -455,3 +455,26 @@ def test_reckless_manifest(node_factory): "Successfully sent 1000msat to testplugmani author!" in line for line in r["log"] ) + + +@unittest.skipIf(VALGRIND, "virtual environment triggers memleak detection") +def test_update(node_factory): + "install a plugin from an old tag and update it" + node = node_factory.get_node(options={}) + r = node.rpc.call("reckless", ["install", "-v", "testPlugPass@v1"]) + assert r["install"]["enabled"] + assert r["install"]["plugin_name"] == "testplugpass" + + version = node.rpc.gettestplugversion() + assert version == "v1" + + # testplugpass was pinned during install and a general update call will skip it + with pytest.raises(RpcError, match="No updates succeeded"): + node.rpc.call("reckless", ["update", "-v"]) + + # a specific update call for testplugpass should ignore the pinned version and update + r = node.rpc.call("reckless", ["update", "-v", "testplugpass"]) + assert r["update"][0]["plugin_name"] == "testplugpass" + + version = node.rpc.gettestplugversion() + assert version == "v2" From a59816b8d84a968305e003c120328f968ca12464 Mon Sep 17 00:00:00 2001 From: daywalker90 Date: Wed, 29 Jul 2026 13:11:48 +0200 Subject: [PATCH 07/20] reckless: remove pycache during install/update If the timestamp of the python file does not differ after an update it will load the bytecode of the old version. We remove the pycache to make sure this does not happen. Mostly a test environment issue as in practive the timestamps should always differ. --- plugins/reckless-plugin/src/cmds/update.rs | 2 +- plugins/reckless-plugin/src/installers.rs | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/plugins/reckless-plugin/src/cmds/update.rs b/plugins/reckless-plugin/src/cmds/update.rs index a36dc677441b..88fcc12a1b21 100644 --- a/plugins/reckless-plugin/src/cmds/update.rs +++ b/plugins/reckless-plugin/src/cmds/update.rs @@ -141,7 +141,7 @@ pub async fn handle_update( if update_results.is_empty() { let line = "No updates succeeded"; - logger.log(line, LogLevel::BROKEN).await?; + logger.log(line, LogLevel::UNUSUAL).await?; return Err(anyhow!(line)); } diff --git a/plugins/reckless-plugin/src/installers.rs b/plugins/reckless-plugin/src/installers.rs index de20c9451b14..5f1cc026d787 100644 --- a/plugins/reckless-plugin/src/installers.rs +++ b/plugins/reckless-plugin/src/installers.rs @@ -366,6 +366,8 @@ pub async fn install_poetry_plugin( set_executable(&wrapper_path).await?; + remove_pycache(rl_plugin).await?; + Ok(wrapper_path) } @@ -392,6 +394,8 @@ pub async fn install_uv_plugin( set_executable(&wrapper_path).await?; + remove_pycache(rl_plugin).await?; + Ok(wrapper_path) } @@ -454,6 +458,8 @@ pub async fn install_uv_legacy_plugin( set_executable(&wrapper_path).await?; + remove_pycache(rl_plugin).await?; + Ok(wrapper_path) } @@ -500,9 +506,19 @@ pub async fn install_python_plugin( set_executable(&wrapper_path).await?; + remove_pycache(rl_plugin).await?; + Ok(wrapper_path) } +async fn remove_pycache(rl_plugin: &RecklessPlugin) -> Result<(), anyhow::Error> { + let pycache = rl_plugin.source_path().join("__pycache__"); + if pycache.exists() { + fs::remove_dir_all(pycache).await?; + } + Ok(()) +} + async fn create_venv( source: &Path, venv_dir: &Path, From 0375509696f0d192a65587a56b11a342ceb93dd1 Mon Sep 17 00:00:00 2001 From: daywalker90 Date: Wed, 29 Jul 2026 13:23:33 +0200 Subject: [PATCH 08/20] tests: add reckless tests for listinstalled --- tests/test_reckless.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/test_reckless.py b/tests/test_reckless.py index 8ccf8abd75c0..785aedb41c4e 100644 --- a/tests/test_reckless.py +++ b/tests/test_reckless.py @@ -478,3 +478,24 @@ def test_update(node_factory): version = node.rpc.gettestplugversion() assert version == "v2" + + +@unittest.skipIf(VALGRIND, "virtual environment triggers memleak detection") +def test_listinstalled(node_factory): + "install a plugin and list installed plugins" + node = node_factory.get_node(options={}) + + r = node.rpc.call("reckless", ["listinstalled", "-v"]) + assert len(r["listinstalled"]) == 0 + + node.rpc.call("reckless", ["install", "-v", "testplugpass@v2"]) + + r = node.rpc.call("reckless", ["listinstalled", "-v"]) + assert len(r["listinstalled"]) == 1 + assert r["listinstalled"][0]["plugin_name"] == "testplugpass" + assert r["listinstalled"][0]["requested_commit"] == "v2" + assert r["listinstalled"][0]["installed_commit"] == "v2" + assert ( + r["listinstalled"][0]["original_source"] + == "https://github.com/lightningd/plugins" + ) From 1a97d2861383d9fa4dd26d54979dc1bc8a17716f Mon Sep 17 00:00:00 2001 From: daywalker90 Date: Wed, 29 Jul 2026 13:24:15 +0200 Subject: [PATCH 09/20] reckless: listinstalled: check if reckless dir exists instead of returning an error --- plugins/reckless-plugin/src/cmds/list.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/reckless-plugin/src/cmds/list.rs b/plugins/reckless-plugin/src/cmds/list.rs index 33d52a1a2052..9b44818ee288 100644 --- a/plugins/reckless-plugin/src/cmds/list.rs +++ b/plugins/reckless-plugin/src/cmds/list.rs @@ -68,6 +68,9 @@ pub async fn list_installed( plugin: Plugin, ) -> Result, anyhow::Error> { let mut result: HashMap = HashMap::new(); + if !plugin.state().reckless_dir.exists() { + return Ok(result); + } let mut entries = fs::read_dir(&plugin.state().reckless_dir).await?; while let Ok(Some(entry)) = entries.next_entry().await { let Ok(file_type) = entry.file_type().await else { From 306648cdca8298ffd608a32869b6525a22f36444 Mon Sep 17 00:00:00 2001 From: daywalker90 Date: Mon, 3 Aug 2026 16:31:47 +0200 Subject: [PATCH 10/20] reckless: return error if enable detects plugin is already running --- plugins/reckless-plugin/src/cmds/enable.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins/reckless-plugin/src/cmds/enable.rs b/plugins/reckless-plugin/src/cmds/enable.rs index bd6d6e34d4b0..a7f55cab14d2 100644 --- a/plugins/reckless-plugin/src/cmds/enable.rs +++ b/plugins/reckless-plugin/src/cmds/enable.rs @@ -86,7 +86,10 @@ pub async fn enable_plugin( if running_plugins.contains(&entry_file) { let line = format!("Plugin {} is already running", rl_plugin.name()); logger.log(&line, LogLevel::INFO).await?; - } else if !running_plugins.contains(&entry_file) && plugin_manifest.is_dynamic() { + return Err(anyhow!(line)); + } + + if plugin_manifest.is_dynamic() { cln_start_plugin( plugin.clone(), rl_plugin.name(), @@ -95,7 +98,7 @@ pub async fn enable_plugin( logger, ) .await?; - } else if !plugin_manifest.is_dynamic() { + } else { let line = format!( "{} is not dynamic and will be started the next time the node starts", rl_plugin.name() From 0d43a2c41e99dfaadff546766c848248343904e3 Mon Sep 17 00:00:00 2001 From: daywalker90 Date: Mon, 3 Aug 2026 16:38:41 +0200 Subject: [PATCH 11/20] reckless: fix update_config_file returning commented option names --- Cargo.lock | 1 + plugins/reckless-plugin/Cargo.toml | 3 + plugins/reckless-plugin/src/util.rs | 152 ++++- .../lightningd/testplugpyproj/poetry.lock | 634 +++++++++--------- .../lightningd/testpluguv/uv.lock | 535 +++++++++------ tests/test_reckless.py | 61 +- 6 files changed, 831 insertions(+), 555 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f0d743f6f70e..89b4328c2c5d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -605,6 +605,7 @@ dependencies = [ "serde", "serde_json", "sha2", + "tempfile", "tokio", "tokio-util", "url", diff --git a/plugins/reckless-plugin/Cargo.toml b/plugins/reckless-plugin/Cargo.toml index eb5fef18dd7d..506d0a52694f 100644 --- a/plugins/reckless-plugin/Cargo.toml +++ b/plugins/reckless-plugin/Cargo.toml @@ -30,3 +30,6 @@ clap = { version = "4", features = ["derive"] } cln-plugin = { workspace = true } cln-rpc = { workspace = true } + +[dev-dependencies] +tempfile = "3" diff --git a/plugins/reckless-plugin/src/util.rs b/plugins/reckless-plugin/src/util.rs index e9a5afb66418..f145eed91917 100644 --- a/plugins/reckless-plugin/src/util.rs +++ b/plugins/reckless-plugin/src/util.rs @@ -978,7 +978,7 @@ pub fn normalized_eq(a: &str, b: &str) -> bool { a.replace('-', "_").eq(&b.replace('-', "_")) } -fn normalized_line(line: &str) -> &str { +fn uncomment_config_line(line: &str) -> &str { line.trim_start_matches('#').trim_start() } @@ -1001,11 +1001,11 @@ pub async fn update_config_file( let mut plugin_enabled = false; for line in &mut lines { - let normalized_line = normalized_line(line); + let uncommented_line = uncomment_config_line(line); - if normalized_line == plugin_line { + if uncommented_line == plugin_line { if removing && !line.starts_with('#') { - *line = format!("#{normalized_line}"); + *line = format!("#{uncommented_line}"); changed = true; } else if !removing && line.starts_with('#') { plugin_line.clone_into(line); @@ -1017,10 +1017,9 @@ pub async fn update_config_file( continue; } - if let Some(pos) = option_lines - .iter() - .position(|(name, _)| normalized_line.starts_with(name)) - { + let (line_name, line_value) = parse_key_val(uncommented_line).unwrap(); + + if let Some(pos) = option_lines.iter().position(|(name, _)| line_name.eq(name)) { let (name, expected) = option_lines[pos].clone(); if *line != expected { @@ -1035,10 +1034,10 @@ pub async fn update_config_file( } for name in remove_options.iter() { - if line.starts_with(name) { - *line = format!("#{line}"); + if line_name.eq(name) && !line.starts_with('#') { + *line = format!("#{uncommented_line}"); changed = true; - old_options.push(parse_key_val(line).unwrap()); + old_options.push((line_name, line_value)); break; } } @@ -1454,3 +1453,134 @@ async fn include_reckless_config(plugin: Plugin) -> Result<(), anyh Ok(()) } + +#[cfg(test)] +mod tests { + use std::collections::HashSet; + + use super::update_config_file; + + // when disabling a plugin (e.g. during `reckless update`), + // the option lines that were found in the config file must be reported back + // under their *clean* name. They are later fed into `parse_options`, which + // looks the option up by exact name, so a `#`-prefixed key is never found + // and the plugin silently stays disabled after an update. + #[tokio::test] + async fn update_config_file_remove_returns_clean_old_option_keys() { + let tmp = tempfile::tempdir().unwrap(); + let conf = tmp.path().join("config"); + let plugin_line = "plugin=/data/foo/foo"; + tokio::fs::write(&conf, format!("{plugin_line}\nrequired-opt=foo\n")) + .await + .unwrap(); + + let mut option_lines: Vec<(String, String)> = Vec::new(); + let mut remove_options = HashSet::from(["required-opt".to_string()]); + let mut old_options: Vec<(String, Option)> = Vec::new(); + + let enabled = update_config_file( + &conf, + plugin_line, + /* removing = */ true, + &mut option_lines, + &mut remove_options, + &mut old_options, + ) + .await + .unwrap(); + + assert!(enabled); + assert_eq!( + old_options, + vec![("required-opt".to_string(), Some("foo".to_string()))], + "old option key must not be `#`-prefixed, \ + `parse_options` looks it up by exact name and will fail to find it" + ); + } + + // adding a plugin option must only replace config lines + // that belong to that option, never an unrelated line that merely shares + // a name prefix with it (e.g. plugin option `fee` vs config `fee-per-satoshi`). + #[tokio::test] + async fn update_config_file_add_does_not_clobber_unrelated_prefix_config() { + let tmp = tempfile::tempdir().unwrap(); + let conf = tmp.path().join("config"); + let plugin_line = "plugin=/data/foo/foo"; + // `fee-per-satoshi` is unrelated to the plugin's `fee` option. + tokio::fs::write(&conf, "fee-per-satoshi=1000\n") + .await + .unwrap(); + + let mut option_lines = vec![("fee".to_string(), "fee=6".to_string())]; + let mut remove_options = HashSet::new(); + let mut old_options = Vec::new(); + + update_config_file( + &conf, + plugin_line, + /* removing = */ false, + &mut option_lines, + &mut remove_options, + &mut old_options, + ) + .await + .unwrap(); + + let contents = tokio::fs::read_to_string(&conf).await.unwrap(); + let lines: Vec<&str> = contents.lines().collect(); + assert!( + lines.contains(&"fee-per-satoshi=1000"), + "unrelated config line was overwritten by the `fee` option:\n{contents}" + ); + assert!( + !lines.contains(&"fee=6"), + "plugin option `fee` was set:\n{contents}" + ); + } + + // disabling a plugin must only comment out config lines + // that belong to its options, never an unrelated line that merely shares + // a name prefix with one of them. + #[tokio::test] + async fn update_config_file_remove_does_not_comment_unrelated_prefix_config() { + let tmp = tempfile::tempdir().unwrap(); + let conf = tmp.path().join("config"); + let plugin_line = "plugin=/data/foo/foo"; + tokio::fs::write( + &conf, + format!("{plugin_line}\nfee=100\nfee-per-satoshi=1000\n"), + ) + .await + .unwrap(); + + let mut option_lines: Vec<(String, String)> = Vec::new(); + let mut remove_options = HashSet::from(["fee".to_string()]); + let mut old_options = Vec::new(); + + update_config_file( + &conf, + plugin_line, + /* removing = */ true, + &mut option_lines, + &mut remove_options, + &mut old_options, + ) + .await + .unwrap(); + + let contents = tokio::fs::read_to_string(&conf).await.unwrap(); + let lines: Vec<&str> = contents.lines().collect(); + assert!( + lines.contains(&"#fee=100"), + "plugin option `fee` should be commented out:\n{contents}" + ); + assert!( + !lines.contains(&"#fee-per-satoshi=1000"), + "unrelated config line must not be commented out:\n{contents}" + ); + assert!( + lines.contains(&"fee-per-satoshi=1000"), + "unrelated config line must not be commented out:\n{contents}" + ); + } +} diff --git a/tests/data/recklessrepo/lightningd/testplugpyproj/poetry.lock b/tests/data/recklessrepo/lightningd/testplugpyproj/poetry.lock index 56f93ea8f081..e8bee85df5c2 100644 --- a/tests/data/recklessrepo/lightningd/testplugpyproj/poetry.lock +++ b/tests/data/recklessrepo/lightningd/testplugpyproj/poetry.lock @@ -1,16 +1,4 @@ -# This file is automatically @generated by Poetry 2.1.2 and should not be changed by hand. - -[[package]] -name = "asn1crypto" -version = "1.5.1" -description = "Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12, PKCS#5, X.509 and TSP" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "asn1crypto-1.5.1-py2.py3-none-any.whl", hash = "sha256:db4e40728b728508912cbb3d44f19ce188f218e9eba635821bb4b68564f8fd67"}, - {file = "asn1crypto-1.5.1.tar.gz", hash = "sha256:13ae38502be632115abf8a24cbe5f4da52e3b5231990aff31123c805306ccb9c"}, -] +# This file is automatically @generated by Poetry 2.4.1 and should not be changed by hand. [[package]] name = "base58" @@ -29,116 +17,116 @@ tests = ["PyHamcrest (>=2.0.2)", "mypy", "pytest (>=4.6)", "pytest-benchmark", " [[package]] name = "bitarray" -version = "3.8.1" +version = "3.10.0" description = "efficient arrays of booleans -- C extension" optional = false -python-versions = "*" +python-versions = ">=3.7" groups = ["main"] files = [ - {file = "bitarray-3.8.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:30d42c34da2974a5e2e0b51c57ecf89892c1e83ed67e1084d1e27eefc27add91"}, - {file = "bitarray-3.8.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0793c51d3b1c7410bde1f7254fff71fabff1bc0cdeba1fa51319ac4e7931df3d"}, - {file = "bitarray-3.8.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133648c3405564e7fef9103f1768cb018de1b4976f3d8beff09cd4acea73bfe4"}, - {file = "bitarray-3.8.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4fd3399eaf6f1c77ea3132611efbc3d7a8c0eb899793387b3266be221dc75fd"}, - {file = "bitarray-3.8.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3b9790ae107fc8648155f120e80a58ef8e94424efefff5b355de84061de6a18b"}, - {file = "bitarray-3.8.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:af01133e78e5528ee282ceb1cf4bc54aecb937c2001913e751452ad7dffbbeb1"}, - {file = "bitarray-3.8.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2da2ca9495668ab77132a911f6bd530d2bfe686d10467584894efc3b66e9ffb5"}, - {file = "bitarray-3.8.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:72a0e87b2196120523fc6194ca6b580fcffa12d7daa4d57a16d7838e60f82d0e"}, - {file = "bitarray-3.8.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:defa3c12cb06b2fd2066a9e21bf00aab96465be84d9585c8c05195f080510506"}, - {file = "bitarray-3.8.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7eae9e763fbd32f19f2a66dfc2e37906f8422e0c4ad4a6c9dcf9d3246740812e"}, - {file = "bitarray-3.8.1-cp310-cp310-win32.whl", hash = "sha256:3b9358f6437a5fa0c765ffae5810c9830547baf4bcf469438b82845c3f33f998"}, - {file = "bitarray-3.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:6f92d12a46b2a67d56194bb5d226dabf586b386d1f1a5e25be5b745a3080dbba"}, - {file = "bitarray-3.8.1-cp310-cp310-win_arm64.whl", hash = "sha256:8e12d50d4d65c74bd877e15c276992263b878456a7cfcf72521e7205a553557f"}, - {file = "bitarray-3.8.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:660e11b9932f58f10151d0febd11f77d3b0d48d6fa4dd4686d8983f40187101e"}, - {file = "bitarray-3.8.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fb1df55f5700187c6db4b47dbdaf8a0653a111341ac7fccc596b397aa3399e65"}, - {file = "bitarray-3.8.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:838fd67b3d00c5a64181073282a2c0bf8f76465da4844d5e79d2dbbc64c987dc"}, - {file = "bitarray-3.8.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5743f532e408cfd716fa16776b5a6447b83ff2cf39021fb5f8d052aa0f331508"}, - {file = "bitarray-3.8.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0c8c66f5d8055cb84ad0ea14af57b3579cb0b6db589f2086f5e33f0922cf2354"}, - {file = "bitarray-3.8.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8c3fe25871f1758519a3ad8dcafb1bd95c5d1aaeb122e6492ac739ab11fa5907"}, - {file = "bitarray-3.8.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e9ff57452fcadfd1a379314234657b8f4e9967ae64480ddf7c2fd82139bc8cf8"}, - {file = "bitarray-3.8.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4e34f1cb6cdb036c5f4a839a2b74419f75fa36177a70c4bab2867f48973cbe44"}, - {file = "bitarray-3.8.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:698c37fca3761af69a09a1d39cc0492f7e8cb9e263af39a288dce8f3b8a9e2bc"}, - {file = "bitarray-3.8.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:81ede1f094f26eeaff62e029ff1bc4e84e9d568f20d4669f64dcf7c7b18a28fc"}, - {file = "bitarray-3.8.1-cp311-cp311-win32.whl", hash = "sha256:8a345b5dc8ab8cafdf338e08530d48fe3f73df27f4ff569be793c7a7e7bb6b6b"}, - {file = "bitarray-3.8.1-cp311-cp311-win_amd64.whl", hash = "sha256:ddcd25a1f72b2b545fb27e17882046a6c161f3f24514b2e028c00c58ed73a2dd"}, - {file = "bitarray-3.8.1-cp311-cp311-win_arm64.whl", hash = "sha256:dc2cab92c42991b711132bc52405680e075d1505d4356c4468bc6e9c93d49137"}, - {file = "bitarray-3.8.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4494c599effa16064f2b600f6eb28115182d6826847d795a55691339788d8a4d"}, - {file = "bitarray-3.8.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ff2ca039a161d49a8c713f5380def315c6f793df5fe348b94782b1dbee37a644"}, - {file = "bitarray-3.8.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df3ffa6ef88166bb36f5d1492e71e664868b9b8b6afd55821e0ac0cb96625441"}, - {file = "bitarray-3.8.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:478b9f0ea86f957624dd2b159066855716f78db94666e9b04babe85fc013e01b"}, - {file = "bitarray-3.8.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e127b2e7fc533728295196f9265d12834530f475bc6cd6f74619df415d04b8b1"}, - {file = "bitarray-3.8.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6ef49462a615de062dcac8281944d0b036fe1e9c96a6c690bf6cf5e4b5488f0e"}, - {file = "bitarray-3.8.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4da256fc567a57ded2a4aa962fc9e9d430ab740e5c67be9e98a63ef4eb467f2f"}, - {file = "bitarray-3.8.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:b46b7aec9272fd81c984e723e599957629a91204120b3e7f0933f138e0792fdf"}, - {file = "bitarray-3.8.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:2dc07dab252c63c4f6600e200b26fa05207db6b650d41ae88ab0cec4d6c59459"}, - {file = "bitarray-3.8.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:29c8c10a49d6a9586f592116618b99c3dabcb24d881b7a649e0691ef87f314c4"}, - {file = "bitarray-3.8.1-cp312-cp312-win32.whl", hash = "sha256:67125404d12547443d74113862a80c10310cf875aff8dbfc5548fee1d9737123"}, - {file = "bitarray-3.8.1-cp312-cp312-win_amd64.whl", hash = "sha256:ba0339d6aa80615a17f47fabc5700485e9469121d658458f95cdd2003288c28b"}, - {file = "bitarray-3.8.1-cp312-cp312-win_arm64.whl", hash = "sha256:c0b367a00e8c88a714b2384c97dedcc85340547b3a54b6037a42fca5554d0576"}, - {file = "bitarray-3.8.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:55f4b105a1686eb486069a9e578d502d1998e890d8144012225de9e0450aeabd"}, - {file = "bitarray-3.8.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b3118ec012a799456f7fca6cc002c078590578b7640fbaab52d8ecb9a651f1c1"}, - {file = "bitarray-3.8.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2762db8049b230520358ac742cbc57bceaacebe34e5d25c096f2b4bc3887a3a8"}, - {file = "bitarray-3.8.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5b67b869f860eb19055e2560844d8c7d0935245938935bdb764b3e683e2014e2"}, - {file = "bitarray-3.8.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0a661f3492462e7adf8a054fb7414a22fc8251f1e18b9d8cbcf008d2dc85f012"}, - {file = "bitarray-3.8.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:300e3026d17ae3328320ba78d3165bdb1c43d0dfdbc461a69ebbdc005d9ce0b3"}, - {file = "bitarray-3.8.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ad5a71c1ef4a2e404c2c888db09226c821d9d14eff8813e1da873572f5fbb89d"}, - {file = "bitarray-3.8.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:78cbda57a2808d994517b53571eaa2d9299359f63aa71cf4bc94210169aad8b1"}, - {file = "bitarray-3.8.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:89c7c125a0913d71ba9cc1fa8e14c7cfe1517b1c1f45416e1f9babcedd3b545d"}, - {file = "bitarray-3.8.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7875abfd90f2ae3aa22d50f3fa1c93bbae456458cc73d3179b838f07bed1fc10"}, - {file = "bitarray-3.8.1-cp313-cp313-win32.whl", hash = "sha256:21add0aa968496a2bd8341d85720d09808e22e0adc7dbefc1e0f8f67c4b83f36"}, - {file = "bitarray-3.8.1-cp313-cp313-win_amd64.whl", hash = "sha256:40d1b57012bf9b4fefd25345aaa95aab3ca510cc693f33c2cb02a4b771d8e51a"}, - {file = "bitarray-3.8.1-cp313-cp313-win_arm64.whl", hash = "sha256:72b32d8c471930c95d49640ec99f7694f9b040ca1342ff03ed69d3aea90f9339"}, - {file = "bitarray-3.8.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fe989bbed9d6f332c1e24d333936f3fa1375f380cd8028da0b985dcdefa6015a"}, - {file = "bitarray-3.8.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:75e33c9187da271d1dbeb2582ab2df2e441346492098f67559b09173ea4edde4"}, - {file = "bitarray-3.8.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fd7e3158be382f8f140caccc0dc7742a7553ce4bf2978982abe3054d2cedd705"}, - {file = "bitarray-3.8.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9fa5620f7f352f9706924c0e2071a212be36421f09ee064b0fd7e1128289fcdb"}, - {file = "bitarray-3.8.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:190b20cbffc9cd7f308f7a57d406119c3af3ae197613325fd2d92d99c8882ad6"}, - {file = "bitarray-3.8.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ec3d0a6c37a816ea6e3550697c60d90861c9b0f982a98a40b59ac1f7a360bfa9"}, - {file = "bitarray-3.8.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:746e25f17ba4203b5933773782cf2d30bca5cdb66a9ba5d48a53a6c795aedc57"}, - {file = "bitarray-3.8.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ab363a5baae965fb3438f2137583853ad9c77d7e45f2a62ba63e609a34d792ea"}, - {file = "bitarray-3.8.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5e30d8e399f38ae1ec86aa9be76d20ba15872dd0c41b4b46d1b78905857363b9"}, - {file = "bitarray-3.8.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:0f099a4a77daf9bb99787070854894fe588c7d6988ea729f970ba2b3b82c7559"}, - {file = "bitarray-3.8.1-cp314-cp314-win32.whl", hash = "sha256:539880ddf9a8cc54c9e6126e7d072c991563f0c90ef73b3519a783d53df00352"}, - {file = "bitarray-3.8.1-cp314-cp314-win_amd64.whl", hash = "sha256:c08cd5b19c570e1e9e094a6ce70d35bb39d12360e0763474ed9374229f174fcc"}, - {file = "bitarray-3.8.1-cp314-cp314-win_arm64.whl", hash = "sha256:0da5f17bed67ffe1d72f79fbf98403513a6e51a4f9b8293c1ff8a64e121242be"}, - {file = "bitarray-3.8.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:154a19e1dcd430494fdad7d1a0fb36383baaa363e1cb9d5a7b744cd2418c44d2"}, - {file = "bitarray-3.8.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:814bb54db2a016026efc055a3527461e5eb551c0d91b32eeade003829ff84311"}, - {file = "bitarray-3.8.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac49519fcfeb4a7ecdf6b7d0ec6cac409e59f94c1bb54630db577a97893b6e38"}, - {file = "bitarray-3.8.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:329b994944993c45c3845047476ef4f231fe1a53972f18f8d005fd12fac163e1"}, - {file = "bitarray-3.8.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1d7b786a1ddd9b8dda17c445060a94a465cba2e113603ae7bdc5364efc1efd11"}, - {file = "bitarray-3.8.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd9b848c17ef034f2ae31b2a1bd9276710c2baf03509f1f3fa4dc4382b0a1b53"}, - {file = "bitarray-3.8.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0a33f8931ac91ebc23ce4decb99ed8fdddba2bafd2af3bb2781bcfd9878d4822"}, - {file = "bitarray-3.8.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:07626f76a248fce5ebbb10fb0d4899d3c7f908ba21cb2fb4f5a7a9daf24c20cd"}, - {file = "bitarray-3.8.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:18f3a2c8908e63a66d3994808254397a5f989b1fb91087c33739f62bf1a1a064"}, - {file = "bitarray-3.8.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ced27af6aee28782260bfa5643797937e96a6489bca972202834017208cf74f5"}, - {file = "bitarray-3.8.1-cp314-cp314t-win32.whl", hash = "sha256:cf99e36c0f6ae5643ecef7ad7e1194aeb4a9798d9cff60b20ac041533fa6db0a"}, - {file = "bitarray-3.8.1-cp314-cp314t-win_amd64.whl", hash = "sha256:9befda0dbd27ed95fba1c26be4bf98a49ba166b3c91beb5fc04364c130ce950c"}, - {file = "bitarray-3.8.1-cp314-cp314t-win_arm64.whl", hash = "sha256:4b7d7d10a1c82050efbb9a83d7a43974f70cf8f021afb86463b42e4ac4e5a46b"}, - {file = "bitarray-3.8.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fd6b5b6df14f98b2e7e474c1c7ea55fc32dcab038b3b34b76a591dec8ba50915"}, - {file = "bitarray-3.8.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:eb9fa02b9f5bbdb1d036a0c68999337793fa244528e0ce825e4b97cb7f7db99f"}, - {file = "bitarray-3.8.1-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6956ef0259a037f10da767741aca82925f6f9978bb6dceb5344e56ce0629ab07"}, - {file = "bitarray-3.8.1-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:78ab0d4166cf35c73054d1e04f224af1edc3cb4d75da8b6f74f4cff7c300f358"}, - {file = "bitarray-3.8.1-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:10c0caabff00ab0631d1e4fd25f56c7a5cf0f068426e5860d28dbbb972b509bf"}, - {file = "bitarray-3.8.1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:430fe5150816445c8294a36ce2612360037342d750cea179efe5de38c66670a8"}, - {file = "bitarray-3.8.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:c3387c314695f9790dce12fcf44357197ebf773651b6a4195f5e091cf500ae73"}, - {file = "bitarray-3.8.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:a681bbf9f94027d66e15974cd207cec1a2993837b9c45acf5f6b22a67632b1c2"}, - {file = "bitarray-3.8.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:4c7ce072191ba23a4a4876452ccd5f2a67b926e66a248d052d39e9969cd3ab47"}, - {file = "bitarray-3.8.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:03fe327549f177040b32f7faa736dc152be936d8b264d8b84f94c75f1379bfa1"}, - {file = "bitarray-3.8.1-cp38-cp38-win32.whl", hash = "sha256:2b9916867fa1ed815739e3e37dda458f397dee25a0e293b808839cfc2a396ca0"}, - {file = "bitarray-3.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:69c8298e8197b113f765a2ea60f49ceb8e1ea9eb308140b3cdc611e0d1de70b8"}, - {file = "bitarray-3.8.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cac0145491619287ff893853bf3ca4d98d5ef94b617271184a5af68a06ac301a"}, - {file = "bitarray-3.8.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fd68db1a0f5d9374a7b735414efe48d2b3ecbf0adea39299bb48030988f16149"}, - {file = "bitarray-3.8.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9adacf6fdadeeb96e6c902aef08d02d2f45429fdbf0a75b80307e435156066f8"}, - {file = "bitarray-3.8.1-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d7d5f7f6f80388ce94849775da5f4082ab5e123e259972961970e190d60f5d2b"}, - {file = "bitarray-3.8.1-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3a5e594b4be2dbfe021cee8d6d7d96e9bb19dee7ed7be351f43bca7a0619b978"}, - {file = "bitarray-3.8.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:190a3482818d69faef176171c7cae10d55cb4dd0c686b5aced7f592b5e5591c1"}, - {file = "bitarray-3.8.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4fb869faf4b484cb213199ced1e2732091559107637d429fc25d0a9731f5f630"}, - {file = "bitarray-3.8.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:70f70ea138e69ec3159e4a38fef52443cb8eb81388aeb241b273265ea16387c5"}, - {file = "bitarray-3.8.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:0256d57e294414bfe4fec4f852fd1d9ae361228c71b082332bf81c8b8fc69f80"}, - {file = "bitarray-3.8.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ef123b6aead12e0784f72970e8d94a96ac0d0aa4438c7ab9235e2f8669a0a5ae"}, - {file = "bitarray-3.8.1-cp39-cp39-win32.whl", hash = "sha256:c263ed9922942353a954cfbcd5f81b7626c0e20dc7f3e53d4926e8bc560ab845"}, - {file = "bitarray-3.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:7c133052737c7c75bfa49f5ba71918166fe988995b26a0d2f263a79bf8fed58a"}, - {file = "bitarray-3.8.1-cp39-cp39-win_arm64.whl", hash = "sha256:20e412527ec1aac7e3a6542b32a9c34bb852c954676b05008f0e3d58c390a0ac"}, - {file = "bitarray-3.8.1.tar.gz", hash = "sha256:f90bb3c680804ec9630bcf8c0965e54b4de84d33b17d7da57c87c30f0c64c6f5"}, + {file = "bitarray-3.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:10d4c7ec4ce13852ccea9410c9bb139a8d614439be49d3ec4f13706da8d02867"}, + {file = "bitarray-3.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6581ac6c78ce54939fd1234efae3f59904328b45c51716d44c3a492cb420bb45"}, + {file = "bitarray-3.10.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:77135603f000f6a4da637aef4035bceb865ba1fedd480e6879902e5a20b8ddfc"}, + {file = "bitarray-3.10.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e50e50ce22c4e93a5e8205020b815c735707ffd623dd50a2af7627da2658c3c6"}, + {file = "bitarray-3.10.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c8d24867c62db464410dcb4c04d1f6c341127da14f339bbcb428bdecf2e1a2f7"}, + {file = "bitarray-3.10.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c175f85b69b1a71af4f8732caa18e90086f494d4d23630960a821ba3c38bad29"}, + {file = "bitarray-3.10.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c5d647bbb4a0369333a74c437036e96cfa1964efc7a0bb421cb830e12c3b8e55"}, + {file = "bitarray-3.10.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:28972a8e9e3596f93befd5d6c4364a22ca3d060a1fcfafe15ad540f00920819b"}, + {file = "bitarray-3.10.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2e2078e41451d7bee01addebf332a2e4cb49a10e27c4127911a9878c1578d426"}, + {file = "bitarray-3.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a9bea731f0e3bf2ef480d6db771bf515d1b535cb00fcde55ec9306a1f6f5f0dc"}, + {file = "bitarray-3.10.0-cp310-cp310-win32.whl", hash = "sha256:661cbdf8a4c47af61d30f8b11a2c19c8ab0e666976b87f26f0d7e2c70edfa40c"}, + {file = "bitarray-3.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:bfd975d09c2b43ea4ac5325b844fdcc2b9630220177f08ac60b68f8189b2a6b6"}, + {file = "bitarray-3.10.0-cp310-cp310-win_arm64.whl", hash = "sha256:7587fb84e37c97029c33b11a8af8fe266e9a6664911d0d0747e5f744d2fa1d10"}, + {file = "bitarray-3.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c63b721e6cbc638a0fef5ad55871c3ea9c0740f21ebc363b7987f13459d290ce"}, + {file = "bitarray-3.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:05bd497036fefa4653bc73875ca62b22e3ce2d1619aac0ab989235374ad2623c"}, + {file = "bitarray-3.10.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d155b99dfce09cca080eda2fa1faa867d37b5372fffa2acc963bab254777552b"}, + {file = "bitarray-3.10.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7cf4c368d960ea79b93948b0d704d38d73888f725821799c5eac6e3b93469234"}, + {file = "bitarray-3.10.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6d0f1c8f551493eedd8b349b5a208e1ece830e7d9ff9b5e5fa8fdd0c66cc69b6"}, + {file = "bitarray-3.10.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f011f2d585844bd96280db5c5ec20493ff80cbcb5c4bcd6bede05bb0d0b83697"}, + {file = "bitarray-3.10.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b1139cd64b8c8a6efa6434fd3f070e44328b6462a00b6d1f878cc41bdad9cd1b"}, + {file = "bitarray-3.10.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:0e847fc2cb6f39ce63ba76b27649d7ff95b4e34873271e3a67d267bc5f307fab"}, + {file = "bitarray-3.10.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a5a8eab867951748694e59f96530e8c582d22c331f7079c1b82ccfe06fcc18cf"}, + {file = "bitarray-3.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:110a884f27c8151e4358bcc3db65598f3f53fc59a537b86f6db37b6d6ea2ebc8"}, + {file = "bitarray-3.10.0-cp311-cp311-win32.whl", hash = "sha256:47b89e7896ec01c6d89b85c89fa492cc1264f7f7667cb959e98f6050324df484"}, + {file = "bitarray-3.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:d2849c25f4f6d8ab61f1587e5914734d7eb2ad4fb0c026b96ecacd0bc1b92e33"}, + {file = "bitarray-3.10.0-cp311-cp311-win_arm64.whl", hash = "sha256:25369533c63c2602b947b764f82af90720857ad876a4047f9bf1a87f1b3fc051"}, + {file = "bitarray-3.10.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d7bce4104be674de03bb0323504f02dc7a2e41507180c3484af2a11fd38be431"}, + {file = "bitarray-3.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b1b2fae594370b7b54a4bdeb92389bfbfb6481ca27b3fbe607fe67f92bdebe40"}, + {file = "bitarray-3.10.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6f8a98a70e51bc27691df0640e363a743d722439bcdc5d0da6906340b2e10477"}, + {file = "bitarray-3.10.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:977d12432040d2db9d9e4ebf64b8c5fa5b8e7127f4d37018280bf45bb1403d9b"}, + {file = "bitarray-3.10.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4b809cdfab0ae2680101f0cfda8316b61055d9478cc224a61b4c682318971bf9"}, + {file = "bitarray-3.10.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:326f7fb7843e00c5fef9fca4c0055b475589c5a8d5aa57ac0b2e3ffa2d921454"}, + {file = "bitarray-3.10.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b1faa9a34142ee424dbe46c653e5558ac258a7d42423c58566e79d9966997897"}, + {file = "bitarray-3.10.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:73c9d91ade5e642f7d9eb50d4c324268e04c413c117dec40bffb8447d746fd74"}, + {file = "bitarray-3.10.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e6ee87ef8ffa82553e7b9ff33b243125b2e3efdc5bfa7a5f883bc93f6297a3f9"}, + {file = "bitarray-3.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:934c77709aee789742c2de7e61e9c287cf9742c3e412a3f1177f6d5a65b8c910"}, + {file = "bitarray-3.10.0-cp312-cp312-win32.whl", hash = "sha256:440cd0dd0b6df6557eea3628af7a3db71ce98ff3ce81b8b424281b64e4cecabc"}, + {file = "bitarray-3.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:1182b27142dbdb954a5231b6b364bfca943f2b9a7c432cea710eb5e84fcc0820"}, + {file = "bitarray-3.10.0-cp312-cp312-win_arm64.whl", hash = "sha256:bf92d9a79b1b42cc1299b7a3c097386ab86c7101fefacab2f1cd6bfd3848bd43"}, + {file = "bitarray-3.10.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:228c2b850164740133c6dd7a0cda4094b630eb74675a91ce62ec23db3db5fdfd"}, + {file = "bitarray-3.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8029e7c4a60ab349299b47569d1d77b5481f916c794d5c1a9f4ec87460c836c8"}, + {file = "bitarray-3.10.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7c15d4e6fe0c10f225c634d4f02bf06485cc6045a23a9a09a326c28f396af5e0"}, + {file = "bitarray-3.10.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:07aa015f165d8c633a51e6f011d979f5a0ddcb518dcd5ec4ffe2fcbf389ab9cc"}, + {file = "bitarray-3.10.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:208ead5ca415b8298b04ac92eebde116aaa57ce8ec892a866760a6ffb667ed5f"}, + {file = "bitarray-3.10.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f339b61b586a49309def0c97e210cd853c03babb405e53d4d4d76ff0a7b3e21c"}, + {file = "bitarray-3.10.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:67ce4fc3b78124c15e2c2c91a9e151330026e941916a1565d0f033719b374148"}, + {file = "bitarray-3.10.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:9775fefaeeb9846f8eab8ace7309caaae206d2057be024b861b5cce60169d7c0"}, + {file = "bitarray-3.10.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:6f76c4163b4b4862bb47b53ccc747604ef1691766abeee6eeba456bca2787b5d"}, + {file = "bitarray-3.10.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c66fe76ed2006fba1fe5c3627787b6d2aa1fff3e44da589ce268180aab5e1b83"}, + {file = "bitarray-3.10.0-cp313-cp313-win32.whl", hash = "sha256:08b5fc5e0483c68e7c52b8553f7ed5c303dc84e4ae92fc4c76efd95fe700671f"}, + {file = "bitarray-3.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:f60b7bce85754890e630872887006a10cbd035bf72bf7b8c9346b6e490a3139c"}, + {file = "bitarray-3.10.0-cp313-cp313-win_arm64.whl", hash = "sha256:30096ea0fed5339cbb8466d5d2c21afbc1bfea074e8ff8fc70c05c6fe3e6effb"}, + {file = "bitarray-3.10.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fa0af67f68964f6a0b510f3e2a6aef3f66872767c5fd3848b4e80488c21121db"}, + {file = "bitarray-3.10.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:18b323f5f7e27e5d8c45c8b529c3557df2127fca6af54b77524761091d483c6c"}, + {file = "bitarray-3.10.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:52d1aa7daa6708ba256513916caa564895bcee1d687fc1d3d00efca82925bb03"}, + {file = "bitarray-3.10.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:432ea140915124472a89fdacd622c42e041ba6c9a155be0d614d3a29378e6c2f"}, + {file = "bitarray-3.10.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6cc1273f52c760f73e7734bde66b966bcbbff31706f92425a6926c7d65f7cd63"}, + {file = "bitarray-3.10.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b31ffe9679e364dacdc3cc8a3de151b4da4ccb9b18685408add662e4fedcf57c"}, + {file = "bitarray-3.10.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9a7b618c8c35bb429a58442b1f8bf08fda743163ff5d6404393270012a63442d"}, + {file = "bitarray-3.10.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:5a48cc66362ca31935ef98af6ee42d572a636f28cf026c7224950fc1509d2d20"}, + {file = "bitarray-3.10.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:ee1cfc520fd097382ceb7d2ca595bef8d55db2d060fdfedacd49e2d239a742c7"}, + {file = "bitarray-3.10.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6684bfd43dccc72a1f2c706956b45e14751d299c15c0446886775b4de75b92f4"}, + {file = "bitarray-3.10.0-cp314-cp314-win32.whl", hash = "sha256:e7a24e2c070e55ae3492a47d548d782843adb1d8b9918034fa17fb81a7d7804f"}, + {file = "bitarray-3.10.0-cp314-cp314-win_amd64.whl", hash = "sha256:f1df2c40bfe739d48dbcb67d506633c8daac380a35029f8bea5124122eaca389"}, + {file = "bitarray-3.10.0-cp314-cp314-win_arm64.whl", hash = "sha256:a63a9e0b3b2cbb94bfa8762b823d2680fa9bd1863cce7432a1964aeea2270ac2"}, + {file = "bitarray-3.10.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:d762e59781fdb6bb80aa9f70150170a8ab8f986ade56b42c6e687a053e354350"}, + {file = "bitarray-3.10.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d085c425434e9f980df63adfdf6e9d20951daf71dcb4722ab135bb2a47cf5095"}, + {file = "bitarray-3.10.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cec6e9b1a21153fba768e9e4cd9313fdc272a93538892288d8ba5ac56bd558f"}, + {file = "bitarray-3.10.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c46d56e8c5aba09ddac7bb51792ae3c580d23ee4f99e18c9ee9106fa657ae264"}, + {file = "bitarray-3.10.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:88494ff66e5c1133293c26924698ccd7aa921397ca0d48dd1e271ae81d2afe5c"}, + {file = "bitarray-3.10.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8241925a21313a38d88fcec9f6f4a928ab24b9ee85af570025d955c76603552d"}, + {file = "bitarray-3.10.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d989d1bf51a5af1fc96fa06781a3966ba25fbe6ba522a018ac244be286172416"}, + {file = "bitarray-3.10.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:1291ac954db1c74ac834c40c6da712dd5773806ebb2926443c1cf6454f6aac70"}, + {file = "bitarray-3.10.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:bc82f3205a04e8b992830b218660291f9acfd2890048049b949ff21797330fb2"}, + {file = "bitarray-3.10.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:4e633e6f3f817ba2aa738ca06d87d0cd2379c39b776ade63997ab47a2c924f34"}, + {file = "bitarray-3.10.0-cp314-cp314t-win32.whl", hash = "sha256:c2f8e715d1d41f0d66e60229030ab2e81e41560d71a5582544ec34f360bbf3e3"}, + {file = "bitarray-3.10.0-cp314-cp314t-win_amd64.whl", hash = "sha256:a5ef997342f959f1534ae8d3e84f51b8343d503b711a1f3bafc2373c15ad3658"}, + {file = "bitarray-3.10.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0b9ad9ef026a7b9021b54a19152027c64499320c36f64be7c584db760854283f"}, + {file = "bitarray-3.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:436ba8052dabb0873cc2b37c4a468ec54fcf8dbe9bd01df3930f74bad7b8feb9"}, + {file = "bitarray-3.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:11615ae00b41d08b86b8a6e503b7b5a6ff53eeb321d36414c2869aae1d994112"}, + {file = "bitarray-3.10.0-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83d7de1b4a30fce371e6a12b423734860164b7850730a12aab4254dc4afe815b"}, + {file = "bitarray-3.10.0-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0674996060e32ee677ea1e6f5979ecc09c31b7716e317bcd74160ae7e906023e"}, + {file = "bitarray-3.10.0-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:368ea7ed48b068ba1a8fb7ed88088b1d8a0c79cc1e6fbd175c96dee0667f9a54"}, + {file = "bitarray-3.10.0-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:78db99f422a6a20d32b925dfcba7f07c39be5c96f9ca1679d95867c901e3f9cb"}, + {file = "bitarray-3.10.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:47d1786a339a2376c16e3dbfb86a86fa0ff315725d48ec8f32b5a9c38e1a1b2a"}, + {file = "bitarray-3.10.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:84deb10b8f2909d3a10d61a74c6e8151a9cf2011508d39a37d553d69ed8d22fc"}, + {file = "bitarray-3.10.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:6ea456ac32a8d25c8975f470fa90139fce0ff90e77b986a9662ce729a231f58a"}, + {file = "bitarray-3.10.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:28de47c9fa9ce1f288192f562ed8af248d355fee8cef0255c190b0e2fa44acba"}, + {file = "bitarray-3.10.0-cp38-cp38-win32.whl", hash = "sha256:84fbec9c610544ac113eccd7a53fcc319f035a77740307af099f0bd214d9f07d"}, + {file = "bitarray-3.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:5da29727dace60881a45ee211aee0286475668a5c54780102be65592bbe351d4"}, + {file = "bitarray-3.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:14e0733386f4450de679784d0dd4d438520afe98e5f1d29a4c129bb566720c81"}, + {file = "bitarray-3.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f7f5074fe8ee83f370b59edee8352ab07966216428ff0cacf097a0d815b4160e"}, + {file = "bitarray-3.10.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cffab6756996792fd1771615ececcf2a357b0dba47a41b5236269c722035cc0e"}, + {file = "bitarray-3.10.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d1d61bc517c155f49f948573df1681b6b07e68016f9a852af1df39e64f816965"}, + {file = "bitarray-3.10.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7d09859392626632db22a6d34bb6ce5f6adb548e642552beb42bfe38d0f3fe51"}, + {file = "bitarray-3.10.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ca69907cfd8f9fcff6e1417590300f28bbbd67ee42708282e4c5366e3d3898a6"}, + {file = "bitarray-3.10.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e9bae37ec711a7f4ea09720a2766d05ddd4c9879c1542bbe11085a2bc11d20a6"}, + {file = "bitarray-3.10.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:e04de029b7a2344f560c683396b38bf06d496f094f7a4aa00a9f4c9874d12cd2"}, + {file = "bitarray-3.10.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:b5c9e2b7cdbb4297d72b34c47cbe2cfd9d2eec75151e0bf0eebb5222bc777f7e"}, + {file = "bitarray-3.10.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d3b4b238d9013c91e806a8db2af7c4d2313a348adafe37f5eafa0dac541def9e"}, + {file = "bitarray-3.10.0-cp39-cp39-win32.whl", hash = "sha256:157bf9549e948fa707bf0aa0cb830b142b4a600df24d4f2814a86f0674af72d3"}, + {file = "bitarray-3.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:a218e1a0e1d2b50404b1e91a1ff403324d1daa66212d5b3731beb1965e88d3cb"}, + {file = "bitarray-3.10.0-cp39-cp39-win_arm64.whl", hash = "sha256:92b064c490f9215cc041ec23b6d2cb5571e65efc73718f7b4ce43a83be85a67b"}, + {file = "bitarray-3.10.0.tar.gz", hash = "sha256:d8f8dbcda062ea59b3a6d5233b5a9b67f6bf58c1418ad8f418c5138361f9f068"}, ] [[package]] @@ -159,225 +147,223 @@ tibs = ">=0.5.6,<0.6" [[package]] name = "cffi" -version = "2.0.0" +version = "2.1.0" description = "Foreign Function Interface for Python calling C code." optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["main"] +markers = "platform_python_implementation != \"PyPy\"" files = [ - {file = "cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44"}, - {file = "cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453"}, - {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495"}, - {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5"}, - {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb"}, - {file = "cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a"}, - {file = "cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739"}, - {file = "cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe"}, - {file = "cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26"}, - {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9"}, - {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414"}, - {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743"}, - {file = "cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5"}, - {file = "cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5"}, - {file = "cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d"}, - {file = "cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d"}, - {file = "cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba"}, - {file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94"}, - {file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187"}, - {file = "cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18"}, - {file = "cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5"}, - {file = "cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6"}, - {file = "cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb"}, - {file = "cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26"}, - {file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c"}, - {file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b"}, - {file = "cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27"}, - {file = "cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75"}, - {file = "cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91"}, - {file = "cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5"}, - {file = "cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13"}, - {file = "cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b"}, - {file = "cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c"}, - {file = "cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef"}, - {file = "cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775"}, - {file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205"}, - {file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1"}, - {file = "cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f"}, - {file = "cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25"}, - {file = "cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad"}, - {file = "cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9"}, - {file = "cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d"}, - {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c"}, - {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8"}, - {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc"}, - {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592"}, - {file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512"}, - {file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4"}, - {file = "cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e"}, - {file = "cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6"}, - {file = "cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9"}, - {file = "cffi-2.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf"}, - {file = "cffi-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63"}, - {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2"}, - {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65"}, - {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322"}, - {file = "cffi-2.0.0-cp39-cp39-win32.whl", hash = "sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a"}, - {file = "cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9"}, - {file = "cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529"}, + {file = "cffi-2.1.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:b65f590ef2a44640f9a05dbb548a429b4ade77913ce683ac8b1480777658a6c0"}, + {file = "cffi-2.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164bff1657b2a74f0b6d54e11c9b375bc97b931f2ca9c43fcf875838da1570dd"}, + {file = "cffi-2.1.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:c941bb58d5a6e1c3892d86e42927ed6c180302f07e6d395d08c416e594b98b46"}, + {file = "cffi-2.1.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a016194dbe13d14ee9556e734b772d8d67b947092b268d757fd4290e3ba2dfc2"}, + {file = "cffi-2.1.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:03e9810d18c646077e501f661b682fbf5dee4676048527ca3cffe66faa9960dd"}, + {file = "cffi-2.1.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:19c54ac121cad98450b4896fa9a43ee0180d57bc4bc911a33db6cab1efab6cd3"}, + {file = "cffi-2.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d433a51f1870e43a13b6732f92aaf540ff77c2015097c78556f75a2d6c030e0"}, + {file = "cffi-2.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3d7f118b5adbfdfead90c25822690b02bc8074fba949bb7858bec4ebd55adb43"}, + {file = "cffi-2.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:c5f5df567f6eb216de69be06ce55c8b714090fae02b18a3b40da8163b8c5fa9c"}, + {file = "cffi-2.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:11b3fb55f4f8ad92274ed26705f65d8f91457de71f5380061eb6d125a768fecd"}, + {file = "cffi-2.1.0-cp310-cp310-win32.whl", hash = "sha256:9d72af0cf10a76a600a9690078fe31c63b9588c8e86bf9fd353f713c84b5db0f"}, + {file = "cffi-2.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb62edb5bb52cca65fab91a63afa7561607120d26090a7e8fda6fb9f064726da"}, + {file = "cffi-2.1.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:02cb7ff33ded4f1532476731f89ede53e2e488a8e6205515a82144246ffa7dcc"}, + {file = "cffi-2.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f5bce581e6b8c235e566a14768a943b172ada3ed73537bb0c0be1edee312d4e7"}, + {file = "cffi-2.1.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:30b65779d598c370374fefabf138d456fd6f3216bfa7bedfab1ba82025b0cd93"}, + {file = "cffi-2.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:88023dfe18799507b73f1dbb0d14326a17465de1bc9c9c7655c22845e9ddc3a2"}, + {file = "cffi-2.1.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:0a96b74cda968eebbad56d973efe5098974f0a9fb323865bf99ea1fd24e3e64c"}, + {file = "cffi-2.1.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a5781494d4d400a3f47f8f1da94b324f6e6b440a53387774002890a2a2f4b50f"}, + {file = "cffi-2.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aa7a1b53a2a4452ada2d1b5dade9960b2522f1e61293a811a077439e39029565"}, + {file = "cffi-2.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9d8272c0e483b024e1b9ad029821470ed8ec65631dbd90217469da0e7cd89f1c"}, + {file = "cffi-2.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7762faa47e8ff7eb80bd261d9a7d8eea2d8baa69de5e95b70c1f338bbe712f02"}, + {file = "cffi-2.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:89095c1968b4ba8285840e131bf2891b09ae137fe2146905acae0354fbce1b5e"}, + {file = "cffi-2.1.0-cp311-cp311-win32.whl", hash = "sha256:64c753a0f87a256020004f37a1c8c02c480e725f910f0b2a0f3f07debd1b2479"}, + {file = "cffi-2.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:4f26194e3d95e06501b942642855aed4f953d55e95d7d01b7c4483db3ecff458"}, + {file = "cffi-2.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:35aaea0c7ee0e58a5cd8c2fd1a48fdf7ece0d2699b7ecdda08194e9ce5dd9b3d"}, + {file = "cffi-2.1.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:df2b82571a1b30f58a87bf4e5a9e78d2b1eff6c6ce8fd3aa3757221f93f0863f"}, + {file = "cffi-2.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78474632761faa0fb96f30b1c928c84ebcf68713cbb80d15bab09dfe61640fde"}, + {file = "cffi-2.1.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:5972433ad71a9e46516584ef60a0fda12d9dc459938d1539c3ddecf9bdc1368d"}, + {file = "cffi-2.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b6422532152adf4e59b110cb2808cee7a033800952f5c036b4af047ee43199e7"}, + {file = "cffi-2.1.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:46b1c8db8f6122420f32d02fffb924c2fe9bc772d228c7c711748fff56aabb2b"}, + {file = "cffi-2.1.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9fafc5aa2e2a39aaf7f8cc0c1f044a9b07fca12e558dca53a3cc5c654ad67a7"}, + {file = "cffi-2.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1e9f50d192a3e525b15a75ab5114e442d83d657b7ec29182a991bc9a88fd3a66"}, + {file = "cffi-2.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98fff996e983a36d3aa2eca83af40c5821202e7e6f32d13ae94e3d2286f10cfe"}, + {file = "cffi-2.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:379de10ce1ba048b1448599d1b37b24caee16309d1ac98d3982fc997f768700b"}, + {file = "cffi-2.1.0-cp312-cp312-win32.whl", hash = "sha256:9b8f0f26ca4e7513c534d351eca551947d053fac438f2a04ac96d882909b0d3a"}, + {file = "cffi-2.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:c97f080ea627e2863524c5af3836e2270b5f5dfff1f104392b959f8df0c5d384"}, + {file = "cffi-2.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:6d194185eabd279f1c05ebe3504265ddfc5ad2b58d0714f7db9f01da592e9eb6"}, + {file = "cffi-2.1.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:10537b1df4967ca26d21e5072d7d54188354483b91dc75058968d3f0cf13fbda"}, + {file = "cffi-2.1.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:a95b05f9baf29b91171b3a8bd2020b028835243e7b0ff6bb23e2a3c228518b1b"}, + {file = "cffi-2.1.0-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:15faec4adfff450819f3aee0e2e02c812de6edb88203aa58807955db2003472a"}, + {file = "cffi-2.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:716ff8ec22f20b4d988b12884086bcef0fc99737043e503f7a3935a6be99b1ea"}, + {file = "cffi-2.1.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:63960549e4f8dc41e31accb97b975abaecfc44c03e396c093a6436763c2ea7db"}, + {file = "cffi-2.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff067a8d8d880e7809e4ac88eb009bb848870115317b306666502ccad30b147f"}, + {file = "cffi-2.1.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3b926723c13eba9f81d2ef3820d63aeceec3b2d4639906047bf675cb8a7a500d"}, + {file = "cffi-2.1.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:47ff3a8bfd8cb9da1af7524b965127095055654c177fcfc7578debcb015eecd0"}, + {file = "cffi-2.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:799416bae98336e400981ff6e532d67d5c709cfb30afb79865a1315f94b0e224"}, + {file = "cffi-2.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:961be50688f7fba2fa65f63712d3b9b341a22311f5253460ce933f52f0de1c8c"}, + {file = "cffi-2.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bf5c6cf48238b0eb4c086978c492ad1cbc22373fc5b2d7353b3a598ce6db887a"}, + {file = "cffi-2.1.0-cp313-cp313-win32.whl", hash = "sha256:db3eb7d46527159a878ec3460e9d40615bc25ba337d477db681aea6e4f05c5d2"}, + {file = "cffi-2.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:8e74a6135550c4748af665b1b1118b6aab33b1fc6a16f9aff630af107c3b4512"}, + {file = "cffi-2.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:2282cd5e38aa8accd03e99d1256af8411c84cdbee6a89d841b563fdbd1f3e50f"}, + {file = "cffi-2.1.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:d2117334c3af3bdcb9a88522b844a2bdb5efdc4f71c6c822df55486ae1c3347a"}, + {file = "cffi-2.1.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:702c436735fbe99d59ada02a1f65cfc0d31c0ee8b7290912f8fbc5cd1e4b16c3"}, + {file = "cffi-2.1.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1ff3456eab0d889592d1936d6125bbfbc7ae4d3354a700f8bd80450a66445d4d"}, + {file = "cffi-2.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c4165821e131d6d4ca444347c2b694e2311bcfa3fe5a861cc72968f28867beac"}, + {file = "cffi-2.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:276f20fffd7b396e12516ba8edf9509210ac248cbbc5acbc39cd512f9f59ebe6"}, + {file = "cffi-2.1.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:7d5980a3433d4b71a5e120f9dd551403d7824e31e2e67124fe2769c404c06913"}, + {file = "cffi-2.1.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:6ca4919c6e4f89aa99c42510b42cf54596892c00b3f9077f6bdd1505e24b9c8d"}, + {file = "cffi-2.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d53d10f7da99ae46f7373b9150393e9c5eab9b224909982b43832668de4779f5"}, + {file = "cffi-2.1.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c351efb95e832a853a29361675f33a7ce53de1a109cd73fd47af0712213aa4ce"}, + {file = "cffi-2.1.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:dbf7c7a88e2bac086f06d14577332760bdeecc42bdec8ac4077f6260557d9326"}, + {file = "cffi-2.1.0-cp314-cp314-win32.whl", hash = "sha256:1854b724d00f6654c742097d5387569021be12d3a0f770eae1df8f8acfcc6acd"}, + {file = "cffi-2.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:1b96bfe2c4bd825681b7d311ad6d9b7280a091f43e8f63da5729638083cd3bfb"}, + {file = "cffi-2.1.0-cp314-cp314-win_arm64.whl", hash = "sha256:7d28dff1db6764108bc30788d85d61c876beff416d9a49cb9dd7c5a9f34f5804"}, + {file = "cffi-2.1.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7ea6b3e2c4250ff1de21c630fe72d0f63eb95c2c32ffbf64a358cf4a8836d714"}, + {file = "cffi-2.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6af371f3767faeffc6ac1ef57cdfd25844403e9d3f476c5537caee499de96376"}, + {file = "cffi-2.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb4e8997a49aa2c08a3e43c9045d224448b8941d88e7ac163c7d383e560cbf98"}, + {file = "cffi-2.1.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:bf01d8c84cbea96b944c73b22182e6c7c432b3475632b8111dbfdc95ddad6e13"}, + {file = "cffi-2.1.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:33eb1ad83ebe8f313e0df035c406227d55a79456704a863fad9842136af5ad7d"}, + {file = "cffi-2.1.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ac0f1a2d0cfa7eea3f2aaf006ab6e70e8feeb16b75d65b7e5939982ca2f11056"}, + {file = "cffi-2.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c16914df9fb7f500e440e6875fa23ff5e0b31db01fa9c06af98d59a91f0dc2e4"}, + {file = "cffi-2.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5ecbd0499275d57506d397eebe1981cee87b47fcd9ef5c22cab7ed7644a39a94"}, + {file = "cffi-2.1.0-cp314-cp314t-win32.whl", hash = "sha256:7d034dcffa09e9a46c93fa3a3be402096cb5354ac6e41ab8e5cc9cd8b642ad76"}, + {file = "cffi-2.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:0582a58f3051372229ca8e7f5f589f9e5632678208d8636fea3676711fdf7fe5"}, + {file = "cffi-2.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:510aeeeac94811b138077451da1fb18b308a5feab47dd2b603af55804155e1c8"}, + {file = "cffi-2.1.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:2e9dabb9abcb7ad15938c7196ad5c1718a4e6d33cc79b4c0209bdb64c4a54a5c"}, + {file = "cffi-2.1.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:37f525a7e7e50c017fdebe58b787be310ad59357ae43a053943a6e1a6c526001"}, + {file = "cffi-2.1.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:95f2954c2c9473d892eca6e0409f3568b37ab62a8eedb122461f73cc273476e3"}, + {file = "cffi-2.1.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:cdf2448aab5f661c9315308ec8b93f4e8a1a67a3c733f8631067a2b67d5913dc"}, + {file = "cffi-2.1.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:90bec57cf82089383bd06a605b3eb8daebf7e5a668520beaf6e327a83a947699"}, + {file = "cffi-2.1.0-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6274dcb2d15cef48daa73ed1be5a40d501d74dccd0cd6db364776d12cb6ba022"}, + {file = "cffi-2.1.0-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:2b71d409cccee78310ab5dec549aed052aaea483346e282c7b02362596e01bb0"}, + {file = "cffi-2.1.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7d3538f9c0e50670f4deb93dbb696576e60590369cae2faf7de681e597a8a1f1"}, + {file = "cffi-2.1.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:8f9ec95b8a043d3dfbc74d9abc6f7baf524dd27a8dc160b0a32ff9cdab650c28"}, + {file = "cffi-2.1.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:af5e2915d41fe6c961694d7bfdc8562942638200f3ce2765dfb8b745cf997629"}, + {file = "cffi-2.1.0-cp315-cp315-win32.whl", hash = "sha256:0a42c688d19fca6e095a53c6a6e2295a5b050a8b289f109adab02a9e61a25de6"}, + {file = "cffi-2.1.0-cp315-cp315-win_amd64.whl", hash = "sha256:bccbbb5ee76a61f9d99b5bf3846a51d7fca4b6a732fe46f89295610edaf41853"}, + {file = "cffi-2.1.0-cp315-cp315-win_arm64.whl", hash = "sha256:8d35c139744adb3e727cd51b1a18324bbe44b8bd41bf8322bca4d41289f48eda"}, + {file = "cffi-2.1.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:f9912624a0c0b834b7520d7769b3644453aabc0a7e1c839da7359f050750e9bc"}, + {file = "cffi-2.1.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:df92f2aba50eb4d96718b68ef76f2e57a57b54f2fa62333496d16c6d585a85ca"}, + {file = "cffi-2.1.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0520e1f4c35f44e209cbbb421b67eec42e6a157f59444dfb6058874ff3610e5d"}, + {file = "cffi-2.1.0-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3681e031db29958a7502f5c0c9d6bbc4c36cb20f7b104086fa642d1799631ff8"}, + {file = "cffi-2.1.0-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:762f99479dcb369f60ab9017ad4ab97a36a1dd7c1ee5a3b15db0f4b8659120cd"}, + {file = "cffi-2.1.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0611e7ebf90573a535ebdc33ae9da222d037853983e13359f580fab781ca017f"}, + {file = "cffi-2.1.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:86cf8755a791f72c85dc287128cc62d4f24d392e3f1e15837245623f4a33cccc"}, + {file = "cffi-2.1.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:ba00f661f8ba35d075c937174e27c2c421cec3942fd2e0ea3e66996757c0fdd9"}, + {file = "cffi-2.1.0-cp315-cp315t-win32.whl", hash = "sha256:cb96698e3c7413d906ce83f8ffd245ec1bd94707541f299d0ce4d6b0193e982b"}, + {file = "cffi-2.1.0-cp315-cp315t-win_amd64.whl", hash = "sha256:f146d154428a2523f9cc7936c02353c2459b8f6cf07d3cd1ee1c0a611109c5d5"}, + {file = "cffi-2.1.0-cp315-cp315t-win_arm64.whl", hash = "sha256:cbb7640ce37159548d2147b5b8c241f962143d4c71231431820783f4dc78f210"}, + {file = "cffi-2.1.0.tar.gz", hash = "sha256:efc1cdd798b1aaf39b4610bba7aad28c9bea9b910f25c784ccf9ec1fa719d1f9"}, ] [package.dependencies] pycparser = {version = "*", markers = "implementation_name != \"PyPy\""} [[package]] -name = "coincurve" -version = "20.0.0" -description = "Cross-platform Python CFFI bindings for libsecp256k1" +name = "coincurve-cp314-fix" +version = "22.0.1" +description = "Safest and fastest Python library for secp256k1 elliptic curve operations" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["main"] files = [ - {file = "coincurve-20.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d559b22828638390118cae9372a1bb6f6594f5584c311deb1de6a83163a0919b"}, - {file = "coincurve-20.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:33d7f6ebd90fcc550f819f7f2cce2af525c342aac07f0ccda46ad8956ad9d99b"}, - {file = "coincurve-20.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22d70dd55d13fd427418eb41c20fde0a20a5e5f016e2b1bb94710701e759e7e0"}, - {file = "coincurve-20.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46f18d481eaae72c169f334cde1fd22011a884e0c9c6adc3fdc1fd13df8236a3"}, - {file = "coincurve-20.0.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9de1ec57f43c3526bc462be58fb97910dc1fdd5acab6c71eda9f9719a5bd7489"}, - {file = "coincurve-20.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a6f007c44c726b5c0b3724093c0d4fb8e294f6b6869beb02d7473b21777473a3"}, - {file = "coincurve-20.0.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0ff1f3b81330db5092c24da2102e4fcba5094f14945b3eb40746456ceabdd6d9"}, - {file = "coincurve-20.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:82f7de97694d9343f26bd1c8e081b168e5f525894c12445548ce458af227f536"}, - {file = "coincurve-20.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:e905b4b084b4f3b61e5a5d58ac2632fd1d07b7b13b4c6d778335a6ca1dafd7a3"}, - {file = "coincurve-20.0.0-cp310-cp310-win_arm64.whl", hash = "sha256:3657bb5ed0baf1cf8cf356e7d44aa90a7902cc3dd4a435c6d4d0bed0553ad4f7"}, - {file = "coincurve-20.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:44087d1126d43925bf9a2391ce5601bf30ce0dba4466c239172dc43226696018"}, - {file = "coincurve-20.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ccf0ba38b0f307a9b3ce28933f6c71dc12ef3a0985712ca09f48591afd597c8"}, - {file = "coincurve-20.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:566bc5986debdf8572b6be824fd4de03d533c49f3de778e29f69017ae3fe82d8"}, - {file = "coincurve-20.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4d70283168e146f025005c15406086513d5d35e89a60cf4326025930d45013a"}, - {file = "coincurve-20.0.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:763c6122dd7d5e7a81c86414ce360dbe9a2d4afa1ca6c853ee03d63820b3d0c5"}, - {file = "coincurve-20.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f00c361c356bcea386d47a191bb8ac60429f4b51c188966a201bfecaf306ff7f"}, - {file = "coincurve-20.0.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4af57bdadd2e64d117dd0b33cfefe76e90c7a6c496a7b034fc65fd01ec249b15"}, - {file = "coincurve-20.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a26437b7cbde13fb6e09261610b788ca2a0ca2195c62030afd1e1e0d1a62e035"}, - {file = "coincurve-20.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:ed51f8bba35e6c7676ad65539c3dbc35acf014fc402101fa24f6b0a15a74ab9e"}, - {file = "coincurve-20.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:594b840fc25d74118407edbbbc754b815f1bba9759dbf4f67f1c2b78396df2d3"}, - {file = "coincurve-20.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4df4416a6c0370d777aa725a25b14b04e45aa228da1251c258ff91444643f688"}, - {file = "coincurve-20.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1ccc3e4db55abf3fc0e604a187fdb05f0702bc5952e503d9a75f4ae6eeb4cb3a"}, - {file = "coincurve-20.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac8335b1658a2ef5b3eb66d52647742fe8c6f413ad5b9d5310d7ea6d8060d40f"}, - {file = "coincurve-20.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7ac025e485a0229fd5394e0bf6b4a75f8a4f6cee0dcf6f0b01a2ef05c5210ff"}, - {file = "coincurve-20.0.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e46e3f1c21b3330857bcb1a3a5b942f645c8bce912a8a2b252216f34acfe4195"}, - {file = "coincurve-20.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:df9ff9b17a1d27271bf476cf3fa92df4c151663b11a55d8cea838b8f88d83624"}, - {file = "coincurve-20.0.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4155759f071375699282e03b3d95fb473ee05c022641c077533e0d906311e57a"}, - {file = "coincurve-20.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0530b9dd02fc6f6c2916716974b79bdab874227f560c422801ade290e3fc5013"}, - {file = "coincurve-20.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:eacf9c0ce8739c84549a89c083b1f3526c8780b84517ee75d6b43d276e55f8a0"}, - {file = "coincurve-20.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:52a67bfddbd6224dfa42085c88ad176559801b57d6a8bd30d92ee040de88b7b3"}, - {file = "coincurve-20.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:61e951b1d695b62376f60519a84c4facaf756eeb9c5aff975bea0942833f185d"}, - {file = "coincurve-20.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4e9e548db77f4ea34c0d748dddefc698adb0ee3fab23ed19f80fb2118dac70f6"}, - {file = "coincurve-20.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8cdbf0da0e0809366fdfff236b7eb6e663669c7b1f46361a4c4d05f5b7e94c57"}, - {file = "coincurve-20.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d72222b4ecd3952e8ffcbf59bc7e0d1b181161ba170b60e5c8e1f359a43bbe7e"}, - {file = "coincurve-20.0.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9add43c4807f0c17a940ce4076334c28f51d09c145cd478400e89dcfb83fb59d"}, - {file = "coincurve-20.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bcc94cceea6ec8863815134083e6221a034b1ecef822d0277cf6ad2e70009b7f"}, - {file = "coincurve-20.0.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ffbdfef6a6d147988eabaed681287a9a7e6ba45ecc0a8b94ba62ad0a7656d97"}, - {file = "coincurve-20.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:13335c19c7e5f36eaba2a53c68073d981980d7dc7abfee68d29f2da887ccd24e"}, - {file = "coincurve-20.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:7fbfb8d16cf2bea2cf48fc5246d4cb0a06607d73bb5c57c007c9aed7509f855e"}, - {file = "coincurve-20.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4870047704cddaae7f0266a549c927407c2ba0ec92d689e3d2b511736812a905"}, - {file = "coincurve-20.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:81ce41263517b0a9f43cd570c87720b3c13324929584fa28d2e4095969b6015d"}, - {file = "coincurve-20.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:572083ccce6c7b514d482f25f394368f4ae888f478bd0b067519d33160ea2fcc"}, - {file = "coincurve-20.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee5bc78a31a2f1370baf28aaff3949bc48f940a12b0359d1cd2c4115742874e6"}, - {file = "coincurve-20.0.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2895d032e281c4e747947aae4bcfeef7c57eabfd9be22886c0ca4e1365c7c1f"}, - {file = "coincurve-20.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d3e2f21957ada0e1742edbde117bb41758fa8691b69c8d186c23e9e522ea71cd"}, - {file = "coincurve-20.0.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c2baa26b1aad1947ca07b3aa9e6a98940c5141c6bdd0f9b44d89e36da7282ffa"}, - {file = "coincurve-20.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7eacc7944ddf9e2b7448ecbe84753841ab9874b8c332a4f5cc3b2f184db9f4a2"}, - {file = "coincurve-20.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:c293c095dc690178b822cadaaeb81de3cc0d28f8bdf8216ed23551dcce153a26"}, - {file = "coincurve-20.0.0-cp39-cp39-win_arm64.whl", hash = "sha256:11a47083a0b7092d3eb50929f74ffd947c4a5e7035796b81310ea85289088c7a"}, - {file = "coincurve-20.0.0.tar.gz", hash = "sha256:872419e404300302e938849b6b92a196fabdad651060b559dc310e52f8392829"}, + {file = "coincurve_cp314_fix-22.0.1-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:9fec35946bfe7784e92aaa656b298b3b67f0a093f52c7970496dde4621bbe6c0"}, + {file = "coincurve_cp314_fix-22.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f5f4abc2e639a4007ca212b7029ea9fc549dc1e1207348f1c8729e34b6e0a94c"}, + {file = "coincurve_cp314_fix-22.0.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2dc1deb3cec48571fa05064fa8dad3488a0d63e3f16fa731c7815f3f204a2cb"}, + {file = "coincurve_cp314_fix-22.0.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5b60d06533f4820023a4e91679c2181ccc29a23193d55fc51e6d55874186b67"}, + {file = "coincurve_cp314_fix-22.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:01428e65cfac5bedbeb7a6c1e146970d8aa8a384a7dc39f0c45c38350c6960cc"}, + {file = "coincurve_cp314_fix-22.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b787b23c80501e1af903bfe4f89a07c51ccc02e2333913e152f4e4c2cdbf644f"}, + {file = "coincurve_cp314_fix-22.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:6b02bca3564e795a945c0a2a7f575d3af7d6e3c0e84133c610ca84cf0b824d21"}, + {file = "coincurve_cp314_fix-22.0.1-cp310-cp310-win_arm64.whl", hash = "sha256:c2a0afd16f410f0b9932cc2123ba1adceca8676cffd649c4a5c1fe344d3a55df"}, + {file = "coincurve_cp314_fix-22.0.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:c7beead9480fc1e47b3727172af2279f1043bacc68f1a7226af7687bd893058e"}, + {file = "coincurve_cp314_fix-22.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3a710296ef735bb96434a152101bcdef9bdabbec291305eb0e6cc864935e7db"}, + {file = "coincurve_cp314_fix-22.0.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8bb83a3ea92906d5fe1623c3554c4973c0b51cb7f3a5e10dae549eec9b1b1eb"}, + {file = "coincurve_cp314_fix-22.0.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c9d88f8faf7156fddad08dbd032671d6bb2427a262fc57e81be5fc4f9d1357aa"}, + {file = "coincurve_cp314_fix-22.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8a41bd1c4012d8ff480a3972cc9300400530edb8e7f0d16617e0f241fe0b72d2"}, + {file = "coincurve_cp314_fix-22.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b9083d1e5042866a1e28e91e9d5c8fdcf51629dd2a273f6b405059e7c95945fb"}, + {file = "coincurve_cp314_fix-22.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:918b4ad4d1e4f4cf38c11aa39b9d842418987f898caccc6114b45aa081ae2c90"}, + {file = "coincurve_cp314_fix-22.0.1-cp311-cp311-win_arm64.whl", hash = "sha256:ab926906a2718de26a3e23955103e41e39cb316e5cbb68489405d4a2bc2011c3"}, + {file = "coincurve_cp314_fix-22.0.1-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:b077081c058338aaab7fe634275da0248fe59b469be9ec2bfa598e6e328fc5d1"}, + {file = "coincurve_cp314_fix-22.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0ed7e6c3434333ecc17b00834f17effa5f48fc89b3e130d19157e3b18e0bd149"}, + {file = "coincurve_cp314_fix-22.0.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b72535b8303d45bfc47bb27e7b1b898cfba11ddb9ca6db9e528f0e23360da5f3"}, + {file = "coincurve_cp314_fix-22.0.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9a56ec57a1ce4116db6281703c5c64d35a9fbcb4ed2ab65ac38109c412afb3b6"}, + {file = "coincurve_cp314_fix-22.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0501e49a206b5ab4105f65daeb338dcf3559bd7d5392a03afc3f31db83f661fc"}, + {file = "coincurve_cp314_fix-22.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7a5d93127fea898e53882ac106535fbc39ff4f2a26e9c5f23e1efae716bcf6a6"}, + {file = "coincurve_cp314_fix-22.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:07fcc0a4b6c86566462c9918f6c68303e3699820c4df595daef9a8d131584f29"}, + {file = "coincurve_cp314_fix-22.0.1-cp312-cp312-win_arm64.whl", hash = "sha256:f7b282d27d234b96e064e6bf061d56a4148a4e4fb14f0309fdcc555206892ab6"}, + {file = "coincurve_cp314_fix-22.0.1-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:227158f4cbd329f0b75780198ab312ac72d697b2ec28daade45d0c3d8aa7ae3a"}, + {file = "coincurve_cp314_fix-22.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6cde6eda5348115cd46555aae8e5fc8a1329cdd34560293a371a3e8394390c16"}, + {file = "coincurve_cp314_fix-22.0.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:155c9364dcea3b4028fc03d02b5ac4c1d791c7989c54ea8d73ff52600fa9bab1"}, + {file = "coincurve_cp314_fix-22.0.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ccf73b280220759fa02251f09300d85af54ff23631da3e95c14eef30cba7408"}, + {file = "coincurve_cp314_fix-22.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5eb5a6aa08e8e07d2edb3a6b8e6602f0dc94a1b0fbf4d83138df749b921fe8b2"}, + {file = "coincurve_cp314_fix-22.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0bde261973270d2313bf82d526a6a395d084faa74f514d98c2dfe96bcb3d331f"}, + {file = "coincurve_cp314_fix-22.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:07ab4f37249dab54d3dc02e35dd82f0309c9995a1656f91ab1c8efebf7c35ed4"}, + {file = "coincurve_cp314_fix-22.0.1-cp313-cp313-win_arm64.whl", hash = "sha256:8d0d6057895da2d4fb7da49463c08ccbc3399a57df5b1ae18b296edcfe724cae"}, + {file = "coincurve_cp314_fix-22.0.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:6b18156408e60b12b87810ae323ef0b483251c33f05f172e344c325a034014e5"}, + {file = "coincurve_cp314_fix-22.0.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:15c9257f42a42c14e098e0f37b8b5fc32371854c84f3bebe2448a307ca674b3e"}, + {file = "coincurve_cp314_fix-22.0.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5c04475afd71244fb6e04af2d8f2e2ad98264f6b6f549826560ea96925425f33"}, + {file = "coincurve_cp314_fix-22.0.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2e1066e72ac20310fb2359f0c7bdcc7d09f796eb3d316b3e03b3c5e59fab349"}, + {file = "coincurve_cp314_fix-22.0.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0a629e282b8a9d531b882ee1735a6ce1cfc0c8c37531583131ade5c4ca5d08b1"}, + {file = "coincurve_cp314_fix-22.0.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7f7697cc7d75de9b9e34e041cfe7dd903db2141a4c31c92ec420674f937c3af8"}, + {file = "coincurve_cp314_fix-22.0.1-cp314-cp314-win_amd64.whl", hash = "sha256:56ddf3b2340c23c22fe16fbf171e18219de291cf2c26f75805c92640ec5ef8c8"}, + {file = "coincurve_cp314_fix-22.0.1-cp314-cp314-win_arm64.whl", hash = "sha256:acfcd79081fc04e4f699731973c41165dfeee85b855dc352ee2d46250dd46f6e"}, + {file = "coincurve_cp314_fix-22.0.1.tar.gz", hash = "sha256:b68397f902a73ba15ab5652fae712f6ba85625e382026be2a5c5e698845a79f4"}, ] -[package.dependencies] -asn1crypto = "*" -cffi = ">=1.3.0" - -[package.extras] -dev = ["coverage", "pytest", "pytest-benchmark"] - [[package]] name = "cryptography" -version = "48.0.0" +version = "50.0.0" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = "!=3.9.0,!=3.9.1,>=3.9" groups = ["main"] files = [ - {file = "cryptography-48.0.0-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:0c558d2cdffd8f4bbb30fc7134c74d2ca9a476f830bb053074498fbc86f41ed6"}, - {file = "cryptography-48.0.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f5333311663ea94f75dd408665686aaf426563556bb5283554a3539177e03b8c"}, - {file = "cryptography-48.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7995ef305d7165c3f11ae07f2517e5a4f1d5c18da1376a0a9ed496336b69e5f3"}, - {file = "cryptography-48.0.0-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:40ba1f85eaa6959837b1d51c9767e230e14612eea4ef110ee8854ada22da1bf5"}, - {file = "cryptography-48.0.0-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:369a6348999f94bbd53435c894377b20ab95f25a9065c283570e70150d8abc3c"}, - {file = "cryptography-48.0.0-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a0e692c683f4df67815a2d258b324e66f4738bd7a96a218c826dce4f4bd05d8f"}, - {file = "cryptography-48.0.0-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:18349bbc56f4743c8b12dc32e2bccb2cf83ee8b69a3bba74ef8ae857e26b3d25"}, - {file = "cryptography-48.0.0-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:7e8eac43dfca5c4cccc6dad9a80504436fca53bb9bc3100a2386d730fbe6b602"}, - {file = "cryptography-48.0.0-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:9ccdac7d40688ecb5a3b4a604b8a88c8002e3442d6c60aead1db2a89a041560c"}, - {file = "cryptography-48.0.0-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:bd72e68b06bb1e96913f97dd4901119bc17f39d4586a5adf2d3e47bc2b9d58b5"}, - {file = "cryptography-48.0.0-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:59baa2cb386c4f0b9905bd6eb4c2a79a69a128408fd31d32ca4d7102d4156321"}, - {file = "cryptography-48.0.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9249e3cd978541d665967ac2cb2787fd6a62bddf1e75b3e347a594d7dacf4f74"}, - {file = "cryptography-48.0.0-cp311-abi3-win32.whl", hash = "sha256:9c459db21422be75e2809370b829a87eb37f74cd785fc4aa9ea1e5f43b47cda4"}, - {file = "cryptography-48.0.0-cp311-abi3-win_amd64.whl", hash = "sha256:5b012212e08b8dd5edc78ef54da83dd9892fd9105323b3993eff6bea65dc21d7"}, - {file = "cryptography-48.0.0-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:3cb07a3ed6431663cd321ea8a000a1314c74211f823e4177fefa2255e057d1ec"}, - {file = "cryptography-48.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8c7378637d7d88016fa6791c159f698b3d3eed28ebf844ac36b9dc04a14dae18"}, - {file = "cryptography-48.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc90c0b39b2e3c65ef52c804b72e3c58f8a04ab2a1871272798e5f9572c17d20"}, - {file = "cryptography-48.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:76341972e1eff8b4bea859f09c0d3e64b96ce931b084f9b9b7db8ef364c30eff"}, - {file = "cryptography-48.0.0-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:55b7718303bf06a5753dcdccf2f3945cf18ad7bffde41b61226e4db31ab89a9c"}, - {file = "cryptography-48.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:a64697c641c7b1b2178e573cbc31c7c6684cd56883a478d75143dbb7118036db"}, - {file = "cryptography-48.0.0-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:561215ea3879cb1cbbf272867e2efda62476f240fb58c64de6b393ae19246741"}, - {file = "cryptography-48.0.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:ad64688338ed4bc1a6618076ba75fd7194a5f1797ac60b47afe926285adb3166"}, - {file = "cryptography-48.0.0-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:906cbf0670286c6e0044156bc7d4af9cbb0ef6db9f73e52c3ec56ba6bdde5336"}, - {file = "cryptography-48.0.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:ea8990436d914540a40ab24b6a77c0969695ed52f4a4874c5137ccf7045a7057"}, - {file = "cryptography-48.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c18684a7f0cc9a3cb60328f496b8e3372def7c5d2df39ac267878b05565aaaae"}, - {file = "cryptography-48.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9be5aafa5736574f8f15f262adc81b2a9869e2cfe9014d52a44633905b40d52c"}, - {file = "cryptography-48.0.0-cp314-cp314t-win32.whl", hash = "sha256:c17dfe85494deaeddc5ce251aebd1d60bbe6afc8b62071bb0b469431a000124f"}, - {file = "cryptography-48.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27241b1dc9962e056062a8eef1991d02c3a24569c95975bd2322a8a52c6e5e12"}, - {file = "cryptography-48.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:58d00498e8933e4a194f3076aee1b4a97dfec1a6da444535755822fe5d8b0b86"}, - {file = "cryptography-48.0.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:614d0949f4790582d2cc25553abd09dd723025f0c0e7c67376a1d77196743d6e"}, - {file = "cryptography-48.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7ce4bfae76319a532a2dc68f82cc32f5676ee792a983187dac07183690e5c66f"}, - {file = "cryptography-48.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:2eb992bbd4661238c5a397594c83f5b4dc2bc5b848c365c8f991b6780efcc5c7"}, - {file = "cryptography-48.0.0-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:22a5cb272895dce158b2cacdfdc3debd299019659f42947dbdac6f32d68fe832"}, - {file = "cryptography-48.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2b4d59804e8408e2fea7d1fbaf218e5ec984325221db76e6a241a9abd6cdd95c"}, - {file = "cryptography-48.0.0-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:984a20b0f62a26f48a3396c72e4bc34c66e356d356bf370053066b3b6d54634a"}, - {file = "cryptography-48.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:5a5ed8fde7a1d09376ca0b40e68cd59c69fe23b1f9768bd5824f54681626032a"}, - {file = "cryptography-48.0.0-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:8cd666227ef7af430aa5914a9910e0ddd703e75f039cef0825cd0da71b6b711a"}, - {file = "cryptography-48.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:9071196d81abc88b3516ac8cdfad32e2b66dd4a5393a8e68a961e9161ddc6239"}, - {file = "cryptography-48.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1e2d54c8be6152856a36f0882ab231e70f8ec7f14e93cf87db8a2ed056bf160c"}, - {file = "cryptography-48.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a5da777e32ffed6f85a7b2b3f7c5cbc88c146bfcd0a1d7baf5fcc6c52ee35dd4"}, - {file = "cryptography-48.0.0-cp39-abi3-win32.whl", hash = "sha256:77a2ccbbe917f6710e05ba9adaa25fb5075620bf3ea6fb751997875aff4ae4bd"}, - {file = "cryptography-48.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:16cd65b9330583e4619939b3a3843eec1e6e789744bb01e7c7e2e62e33c239c8"}, - {file = "cryptography-48.0.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:84cf79f0dc8b36ac5da873481716e87aef31fcfa0444f9e1d8b4b2cece142855"}, - {file = "cryptography-48.0.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:fdfef35d751d510fcef5252703621574364fec16418c4a1e5e1055248401054b"}, - {file = "cryptography-48.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:0890f502ddf7d9c6426129c3f49f5c0a39278ed7cd6322c8755ffca6ee675a13"}, - {file = "cryptography-48.0.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:ecde28a596bead48b0cfd2a1b4416c3d43074c2d785e3a398d7ec1fc4d0f7fbb"}, - {file = "cryptography-48.0.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:4defde8685ae324a9eb9d818717e93b4638ef67070ac9bc15b8ca85f63048355"}, - {file = "cryptography-48.0.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:db63bf618e5dea46c07de12e900fe1cdd2541e6dc9dbae772a70b7d4d4765f6a"}, - {file = "cryptography-48.0.0.tar.gz", hash = "sha256:5c3932f4436d1cccb036cb0eaef46e6e2db91035166f1ad6505c3c9d5a635920"}, + {file = "cryptography-50.0.0-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:031e2d5dd4bb9caa3ca9c82e5a197fd8ae680232cee62603d1a813f3f07e3d03"}, + {file = "cryptography-50.0.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fd9192b7b70c573d7f214eb1ae35e00d359f6f5e4b27c7e21e30de1fc6204645"}, + {file = "cryptography-50.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:06a32a980526a6ab9a4b9bf8f7385800791e2bb960903cb6b530e4817509a3b7"}, + {file = "cryptography-50.0.0-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:a1b30560f2acc95aa8b2e06e716a13dbfc97314747b80d9707e307f77b40d6b3"}, + {file = "cryptography-50.0.0-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:8d89f3976b10b4ce31118de72329025f70d2c6ead14a8217c5514dd2c6d5a78f"}, + {file = "cryptography-50.0.0-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:b42a28c1844fd9de8f3f7d540e36b66f3a9c83fceac7170ebc7a6a19edd9dcae"}, + {file = "cryptography-50.0.0-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:900131fafd8aead39ac7dd3a7e833be754c17a95cfd91221636949fe4eb0aa8a"}, + {file = "cryptography-50.0.0-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:07949c449a1abcf60d1ee6e88956d89404c7df3c8258f46589e912988e551987"}, + {file = "cryptography-50.0.0-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:f89831ef99dd7dd169ab06d63a831adb9e20a87aac6d380266bbda5823349169"}, + {file = "cryptography-50.0.0-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:82148ec5bddac30b51a5b3c1945075f896fa022cb93f8e4a01e9f6ee95292c5f"}, + {file = "cryptography-50.0.0-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1489e263a8048bb8b6a8bac662eb2d402ea5d2b7b4699b72f385f1e2772db105"}, + {file = "cryptography-50.0.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7cec5b856506da6defb290f30c9ee687d5f5e8cb0bd3f6459dde43b0b4fa40ef"}, + {file = "cryptography-50.0.0-cp311-abi3-win_amd64.whl", hash = "sha256:bd1c592e4d5974f0d08d4888e432157adba757c66da0246918e43677fafa2d30"}, + {file = "cryptography-50.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:49e7d93abdbd2990caced757e5fade25302f719c3c8fb6e6fff2dde98999fc41"}, + {file = "cryptography-50.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:19736989797678c6af1e55cd49055cdbcb55d8f6b5583ac5335f933aba9101dc"}, + {file = "cryptography-50.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:80b63928fa35083b33966ce1efb70e5b9607181e49dcd1c22c8c005e319f667f"}, + {file = "cryptography-50.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:d58c3db7cd6eed54e6c06744db55456b65ebd7492ddeae9c1e93cfca7aa857d3"}, + {file = "cryptography-50.0.0-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:df2a58a472f332225671c35b0a830208b86d004f82baa8530fa3782c85646533"}, + {file = "cryptography-50.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:11b74db56cdbe3cdee6e3f6982ecb70334fa10dce99ed58bf7894aaaa3b2a037"}, + {file = "cryptography-50.0.0-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:f59e38625469987d7ef6d495323c55e7db6c212eaf6112267e0d3b565a2e9c9f"}, + {file = "cryptography-50.0.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:ecfed7367f965a0328cfbdd70da860f15441f002f613185668c6e6ebf5a0ac11"}, + {file = "cryptography-50.0.0-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:9aa87839c383bdbab6ef865787a1fb877af8dd03464c4400322726feaaadfc6d"}, + {file = "cryptography-50.0.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:6ba6a53445bd3cfa809ef3ef5f1589aa6ba08784a1d962bf47d0940e871dab1c"}, + {file = "cryptography-50.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3f5735ffe4996d28b809371756219f5354864902a3b9e7c0b9ee87041209fc9c"}, + {file = "cryptography-50.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:1b4a266766514614f8aa60416e71f2fc6e575d36e7bdc90f644fadb2f4b75b95"}, + {file = "cryptography-50.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:12b9c6996425c76ea6c457ace4f3073e715b8c545add07cd1a8f3a4f90691269"}, + {file = "cryptography-50.0.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:ccdc4a71a4dabae05de219404f9f4abc38e3b58422177ff93d0da05967dafa07"}, + {file = "cryptography-50.0.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:910e1d2668e7de9648f2bcee30e180db2a6b15c30f887d7c4c93ddf96e3992e3"}, + {file = "cryptography-50.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a91296cb61e8df6f86d0c19cc4068228da256bf59bf86049fbd821084565327f"}, + {file = "cryptography-50.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:e722f16708d854fe924790e051061f6704a472c3bac347b6fd88033ea8dd0dc5"}, + {file = "cryptography-50.0.0-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:d764dcf130c428ef66786f866dd750f53182bc608813489915e9fc106bb0c82f"}, + {file = "cryptography-50.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:105110f43a471dbd0060b9c9516cb8a6a79233631a04cc2ba16f28323ac6e025"}, + {file = "cryptography-50.0.0-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:828743d939e9629bc267b8e2d08d8bb67cd4319c771a33d4b18b22dd8fb7440a"}, + {file = "cryptography-50.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:2a8183b489dc1f7f80f135780fadc1108f14b31b8a40411c7a5b17425f65f28b"}, + {file = "cryptography-50.0.0-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:6e7d61120573a7f2cd94cc095f9e81f6967c61ccdf194285aa143ecec8e0b708"}, + {file = "cryptography-50.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:37fdb0d0111f1e2ff07139dfb79f1b49531f8e213c46f1163dd7642979b58c47"}, + {file = "cryptography-50.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c87f62a3d3b9888ed0fdde100ec06aa61ca9cd44bad9057d1dff9a516b5f5bb9"}, + {file = "cryptography-50.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:65c2c3add92b45fd0709db8594536aea39c2a67af0e27ffcf049c498501140b7"}, + {file = "cryptography-50.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:d24fead1d4d076e1bfb006dcec392074a3cd8d7b4fc8a595aa64073b2b7a96ba"}, + {file = "cryptography-50.0.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:5e34edd123674534acd70147f0ca331eaa2c74e6325fb2028c886aa26ba0b68c"}, + {file = "cryptography-50.0.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:8eb5e1172eb569ea8a872796576e6a67c276351728b6455d5beb01242b027c6a"}, + {file = "cryptography-50.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:910d11e1a385c654bf738bf3e6b8e6ed5de0f5610fcae2be9e5b398d8081d20e"}, + {file = "cryptography-50.0.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:62598a8a57f815db4c6259a4e97d857dab56697e7de8e8ab02352ab74da1995d"}, + {file = "cryptography-50.0.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:07479a1cb08219ab719147e742e76090c9c773321959bb94946fffdd397a6437"}, + {file = "cryptography-50.0.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c99c003e088647b8a5b7c145d6f78c335f6348332b62e142d411c4b63d1460b9"}, + {file = "cryptography-50.0.0.tar.gz", hash = "sha256:eeac2acb5a20ed25e0ad6d1df9891a520b78b404266b6d11778f25d5d691a6c9"}, ] [package.dependencies] @@ -394,7 +380,7 @@ description = "C parser in Python" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "implementation_name != \"PyPy\"" +markers = "platform_python_implementation != \"PyPy\" and implementation_name != \"PyPy\"" files = [ {file = "pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992"}, {file = "pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29"}, @@ -430,20 +416,20 @@ pyln-proto = ">=23" [[package]] name = "pyln-proto" -version = "26.6.1" +version = "26.6.6" description = "This package implements some of the Lightning Network protocol in pure python. It is intended for protocol testing and some minor tooling only. It is not deemed secure enough to handle any amount of real funds (you have been warned!)." optional = false python-versions = "<4.0,>=3.10" groups = ["main"] files = [ - {file = "pyln_proto-26.6.1-py3-none-any.whl", hash = "sha256:834ee3b7c68604cb2a95baef45e6fd470f4ede1d6d1c6172e761d5658a5517c9"}, - {file = "pyln_proto-26.6.1.tar.gz", hash = "sha256:b56b3577e5b6b3488cd232b6191116323758aa51835fe925853f0a69576d51b7"}, + {file = "pyln_proto-26.6.6-py3-none-any.whl", hash = "sha256:b7b12769e2c37e6d1ce7c2063bbab67f5959e411459ff089d0dbc14109778e03"}, + {file = "pyln_proto-26.6.6.tar.gz", hash = "sha256:b6d424eb22d33de9fc21e4216502759e34a62eaf460a47cc45dbbb208096db8a"}, ] [package.dependencies] base58 = ">=2.1.1" bitstring = ">=4.3.0" -coincurve = "20.0.0" +coincurve-cp314-fix = ">=22.0.1" cryptography = ">=46" pysocks = ">=1" @@ -506,15 +492,15 @@ dev = ["build", "hypothesis (>=6.151.0)", "pyright (>=1.1.389)", "pytest (>=9.0. [[package]] name = "typing-extensions" -version = "4.15.0" +version = "4.16.0" description = "Backported and Experimental Type Hints for Python 3.9+" optional = false python-versions = ">=3.9" groups = ["main"] markers = "python_version == \"3.10\"" files = [ - {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, - {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, + {file = "typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8"}, + {file = "typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5"}, ] [metadata] diff --git a/tests/data/recklessrepo/lightningd/testpluguv/uv.lock b/tests/data/recklessrepo/lightningd/testpluguv/uv.lock index 405bde360385..89c16d595657 100644 --- a/tests/data/recklessrepo/lightningd/testpluguv/uv.lock +++ b/tests/data/recklessrepo/lightningd/testpluguv/uv.lock @@ -2,15 +2,6 @@ version = 1 revision = 3 requires-python = ">=3.10" -[[package]] -name = "asn1crypto" -version = "1.5.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/de/cf/d547feed25b5244fcb9392e288ff9fdc3280b10260362fc45d37a798a6ee/asn1crypto-1.5.1.tar.gz", hash = "sha256:13ae38502be632115abf8a24cbe5f4da52e3b5231990aff31123c805306ccb9c", size = 121080, upload-time = "2022-03-15T14:46:52.889Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c9/7f/09065fd9e27da0eda08b4d6897f1c13535066174cc023af248fc2a8d5e5a/asn1crypto-1.5.1-py2.py3-none-any.whl", hash = "sha256:db4e40728b728508912cbb3d44f19ce188f218e9eba635821bb4b68564f8fd67", size = 105045, upload-time = "2022-03-15T14:46:51.055Z" }, -] - [[package]] name = "base58" version = "2.1.1" @@ -22,230 +13,325 @@ wheels = [ [[package]] name = "bitarray" -version = "3.6.0" +version = "3.10.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e5/ee/3b2fcbac3a4192e5d079aaa1850dff2f9ac625861c4c644819c2b34292ec/bitarray-3.6.0.tar.gz", hash = "sha256:20febc849a1f858e6a57a7d47b323fe9e727c579ddd526d317ad8831748a66a8", size = 147946, upload-time = "2025-07-29T18:03:56.681Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/c9/df9a5450b54e6dcbb6e8f3fd95631ab849ba1ed8e7899844c0d71bab576c/bitarray-3.10.0.tar.gz", hash = "sha256:d8f8dbcda062ea59b3a6d5233b5a9b67f6bf58c1418ad8f418c5138361f9f068", size = 168648, upload-time = "2026-07-31T07:30:25.155Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/0e/52b66c2c36e938b0fc5160ba92034e949b1f7ec8c9f0b7d53188ebb3e8dc/bitarray-3.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6841c08b51417f8ffe398b2828fc0593440c99525c868f640e0302476745320b", size = 144421, upload-time = "2025-07-29T18:00:38.776Z" }, - { url = "https://files.pythonhosted.org/packages/f4/67/904b50387cdd8caa8ad66aed03d90bf0acb38d3d1393ead5349a643b2618/bitarray-3.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a04b7a9017b8d0341ebbe77f61b74df1cf1b714f42b671a06f4912dc93d82597", size = 140919, upload-time = "2025-07-29T18:00:41.264Z" }, - { url = "https://files.pythonhosted.org/packages/3b/d2/4371eba6e4626a663aca00bbf2a83c95498de794dd4536a7f355f177c878/bitarray-3.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:664d462a4c0783fd755fe3440f07b7e46d149859c96caacadf3f28890f19a8de", size = 314230, upload-time = "2025-07-29T18:00:42.653Z" }, - { url = "https://files.pythonhosted.org/packages/1e/a1/e2ecc61a1441dfb2a8ba7048bbe8a7e75a394a08e4a1ffd9ec530ccbb180/bitarray-3.6.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e997d22e0d1e08c8752f61675a75d93659f7aa4dbeaee54207f8d877817b4a0c", size = 330869, upload-time = "2025-07-29T18:00:43.838Z" }, - { url = "https://files.pythonhosted.org/packages/d7/5f/68e05c382bbbff1ff9f2c2cc343543bc755a0b7d20948a8ebb08a7e0e417/bitarray-3.6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6755cfcfa7d8966e704d580c831e39818f85e7b2b7852ad22708973176f0009e", size = 322249, upload-time = "2025-07-29T18:00:44.886Z" }, - { url = "https://files.pythonhosted.org/packages/0f/20/ab8784e2968deb6fba2d2bac6b9190efc1360cc2a6ed57482ad82f5757cf/bitarray-3.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4798f6744fa2633666e17b4ea8ff70250781b52a25afdbf5ffb5e176c58848f1", size = 316564, upload-time = "2025-07-29T18:00:45.941Z" }, - { url = "https://files.pythonhosted.org/packages/ac/1d/f28a148501f5fec33ad6e7f714bb4953ac3f80b8af4839c66767e874cd7a/bitarray-3.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:efa5834ba5e6c70b22afdca3894097e5a592d8d483c976359654ba990477799a", size = 304445, upload-time = "2025-07-29T18:00:47.325Z" }, - { url = "https://files.pythonhosted.org/packages/ce/e6/175f048b2e2c26253fbae7e8fc2fdb772bb74e03b2a8b9bfde8acc2f509d/bitarray-3.6.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d47e2bdeba4fb1986af2ba395ce51223f4d460e6e77119439e78f2b592cafade", size = 311974, upload-time = "2025-07-29T18:00:48.79Z" }, - { url = "https://files.pythonhosted.org/packages/b8/4b/03633ca351c8cce4902eea78cb1bbd75e4226c31da19e25df4e605372626/bitarray-3.6.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:2a324e3007afb5c667026f5235b35efe3c4a95f1b83cd93aa9fce67b42f08e7c", size = 305521, upload-time = "2025-07-29T18:00:50.457Z" }, - { url = "https://files.pythonhosted.org/packages/ef/cc/4a327a89b534f64f52d0ef232d3e12d179686914a0103636ddc1f77e89f7/bitarray-3.6.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:080a7bf55c432abdae74f25dc3dbff407418346aeae1d43e31f65e8ef114f785", size = 329032, upload-time = "2025-07-29T18:00:51.607Z" }, - { url = "https://files.pythonhosted.org/packages/1b/ab/0000b27c58955b09c56db37fce88d7cc54fd46fee5c472002e2d08be7cb3/bitarray-3.6.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:3eb1390a8b062fe9125e5cc4c5eba990b5d383eec54f2b996e7ce73ac43150f9", size = 327309, upload-time = "2025-07-29T18:00:53.069Z" }, - { url = "https://files.pythonhosted.org/packages/6c/7d/0ebb9dc7a5bc7c6bb764c43b5e551234e3fdb5d4f06b8cfa4eb4dc7df27c/bitarray-3.6.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2020102a40edd094c0aa80e09203af71c533c41f76ce3237c99fd194a473ea33", size = 313309, upload-time = "2025-07-29T18:00:54.175Z" }, - { url = "https://files.pythonhosted.org/packages/b7/f5/830d9f20cfb78759b2adfff01b695b40ebe26d76c256b6b228a4865ac26e/bitarray-3.6.0-cp310-cp310-win32.whl", hash = "sha256:01d6dc548e7fe5c66913c2274f44855b0f8474935acff7811e84fe1f4024c94f", size = 137611, upload-time = "2025-07-29T18:00:55.629Z" }, - { url = "https://files.pythonhosted.org/packages/c6/65/a180faa2573711ff1d00db3ed203aa88281502da62d8088aa13d39bef56a/bitarray-3.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:8d759cecfa8aab4a1eb4e23b6420126b15c7743e85b33f389916bb98c4ecbb84", size = 144329, upload-time = "2025-07-29T18:00:56.693Z" }, - { url = "https://files.pythonhosted.org/packages/90/bf/987f01842b3239fd5bb36b6f3aeba3070731d72f8d700a6a317f4731a0d7/bitarray-3.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7c20d6e6cafce5027e7092beb2ac6eec0d71045d6318b34f36e1387a8c8859a3", size = 144418, upload-time = "2025-07-29T18:00:58.057Z" }, - { url = "https://files.pythonhosted.org/packages/ac/7e/97902cf29a46d14c2b0a938c0f83bb1de1e117a56df61a88676d278359e8/bitarray-3.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cf36cadeb9c989f760a13058dbc455e5406ec3d2d247c705c8d4bc6dd1b0fcc6", size = 140917, upload-time = "2025-07-29T18:00:59.216Z" }, - { url = "https://files.pythonhosted.org/packages/a3/f6/0afe766d4bfc22403861f49a050b8ff9719a1783be25c85376cad2cbf06b/bitarray-3.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30ba4fba3de1dca653de41c879349ec6ca521d85cff6a7ca5d2fdd8f76c93781", size = 321827, upload-time = "2025-07-29T18:01:00.282Z" }, - { url = "https://files.pythonhosted.org/packages/4d/01/a0a24b2605a8f682283a083ae2c97531446523ef67387189a9570ac5daa2/bitarray-3.6.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77d2368a06a86a18919c05a9b4b0ee9869f770e6a5f414b0fecc911870fe3974", size = 339057, upload-time = "2025-07-29T18:01:01.597Z" }, - { url = "https://files.pythonhosted.org/packages/55/2f/0684beeaa874f321f0157206f3e625820935eb79837ca49a32aff2834097/bitarray-3.6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a39be79a7c36e9a2e20376261c30deb3cdca86b50f7462ae9ff10a755c6720b9", size = 331191, upload-time = "2025-07-29T18:01:02.892Z" }, - { url = "https://files.pythonhosted.org/packages/42/82/ead4f1b1aa6ce4112cc59b515453dcf194d7e83cdd5e0c34eb422df9b6c1/bitarray-3.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4695fcd37478988b1d0a16d5bc0df56dcb677fd5db37f1893d993fd3ebef914b", size = 324416, upload-time = "2025-07-29T18:01:04.333Z" }, - { url = "https://files.pythonhosted.org/packages/90/95/9558548842d249ba87caec43450cded1933e9ca0dec54bfb7cefbd146807/bitarray-3.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52328192d454ca2ddad09fbc088872b014c74b22ecdd5164717dc7e6442014fa", size = 312571, upload-time = "2025-07-29T18:01:05.808Z" }, - { url = "https://files.pythonhosted.org/packages/d7/cb/f9aad4e436d1bcda7f348a85458b197f54b3e2f9626caba850a79d09caf3/bitarray-3.6.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:96117212229905da864794df9ea7bd54987c30a5dcbab3432edc3f344231adae", size = 320005, upload-time = "2025-07-29T18:01:06.956Z" }, - { url = "https://files.pythonhosted.org/packages/28/e4/9830c088551eb9c055871843ed15cece9917249f60f6db7093c5c58cff46/bitarray-3.6.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:68f6e64d4867ee79e25c49d7f35b2b1f04a6d6f778176dcf5b759f3b17a02b2b", size = 313190, upload-time = "2025-07-29T18:01:08.087Z" }, - { url = "https://files.pythonhosted.org/packages/49/53/fde12dcf5eae0aabebc7b97e2226b2cdc9785ada2f38e9256b95c7402d71/bitarray-3.6.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:29ed022189a7997de46cb9bd4e2e49d6163d4f8d78dea72ac5a0e0293b856810", size = 337055, upload-time = "2025-07-29T18:01:09.292Z" }, - { url = "https://files.pythonhosted.org/packages/41/f2/dfb6e9a9bb94ccbe5b369a839df477ab3b73e90b7ba8c92974c26e7e26ba/bitarray-3.6.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e71c9dba78671d38a549e3b2d52514f50e199f9d7e18ed9b0180adeef0d04130", size = 335649, upload-time = "2025-07-29T18:01:10.832Z" }, - { url = "https://files.pythonhosted.org/packages/d8/30/4092ddf8ae0c566b9b157d0859d784e24f3b6d6ed90f437da304e29d3ee0/bitarray-3.6.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ddb319f869d497ef2d3d56319360b61284a9a1d8b3de3bc936748698acfda6be", size = 321512, upload-time = "2025-07-29T18:01:12.02Z" }, - { url = "https://files.pythonhosted.org/packages/d3/a5/1cf6b545a18c71c6984f55758c2ee9595441e537ea424855fb3fdb89597e/bitarray-3.6.0-cp311-cp311-win32.whl", hash = "sha256:25060e7162e44242a449ed1a14a4e94b5aef340812754c443459f19c7954be91", size = 137767, upload-time = "2025-07-29T18:01:13.33Z" }, - { url = "https://files.pythonhosted.org/packages/4b/66/4cd301ceb0b66281440011e539df82150b36457234ed8a6149136a8ab0ae/bitarray-3.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:f2d951002b11962b26afb31f758c18ad39771f287b100fa5adb1d09a47eaaf5b", size = 144547, upload-time = "2025-07-29T18:01:14.359Z" }, - { url = "https://files.pythonhosted.org/packages/36/1b/91ee39eb1f52261d8734453bf4480b77edb440e86fd8d006ccf66a14b497/bitarray-3.6.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b9616ea14917d06736339cf36bb9eaf4eb52110a74136b0dc5eff94e92417d22", size = 144173, upload-time = "2025-07-29T18:01:15.426Z" }, - { url = "https://files.pythonhosted.org/packages/73/5d/edadc94cbdbfd333795d3b52aecb0106eeb163da965485363b34af9ddebe/bitarray-3.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7e2e1ff784c2cdfd863bad31985851427f2d2796e445cec85080c7510cba4315", size = 140917, upload-time = "2025-07-29T18:01:17.02Z" }, - { url = "https://files.pythonhosted.org/packages/0e/cd/6a0d3d53118a148b9db13cf0d70a7fc8b61d77af1f85cb24a0c2dae62839/bitarray-3.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:911b4a16dce370657e5b8d8b6ba0fbb50dd5e2b24c4416f4b9e664503d3f0502", size = 324769, upload-time = "2025-07-29T18:01:18.508Z" }, - { url = "https://files.pythonhosted.org/packages/3e/85/d12273fc975f40da1baf8dbc50b240782010d18ade62b28d8b03a21dfb1c/bitarray-3.6.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b47843f2f288fa746dead4394591a3432a358aaad48240283fa230d6e74b0e7", size = 341502, upload-time = "2025-07-29T18:01:20.022Z" }, - { url = "https://files.pythonhosted.org/packages/f6/30/193980f3942280f22b2f602380c26e68d3b6e56791c27afac5497b72262b/bitarray-3.6.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8f95daf0ce2b24815ddf62667229ba5dfc0cfee43eb43b2549766170d0f24ae9", size = 333815, upload-time = "2025-07-29T18:01:21.8Z" }, - { url = "https://files.pythonhosted.org/packages/8a/1c/a35fe5f1eda54d1db3d71b56e39a3b928f1d99546507496a1aef53dceabc/bitarray-3.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c15b9e37bbca59657e4dcc63ad068c821a4676def15f04742c406748a0a11b9c", size = 327371, upload-time = "2025-07-29T18:01:23.001Z" }, - { url = "https://files.pythonhosted.org/packages/95/aa/b0d164489914a7c9d02f219911c05a57c7859e826fa6c0803c55339589e2/bitarray-3.6.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9d247fcc33c90f2758f4162693250341e3f38cd094f64390076ef33ad0887f9", size = 315020, upload-time = "2025-07-29T18:01:24.239Z" }, - { url = "https://files.pythonhosted.org/packages/70/2c/8c69c9c85e7d3d23418ce10067f083d9e4bdf63a88244eb7d004d348d37d/bitarray-3.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:84bb57010a1ab76cf880424a2e0bce8dd26989849d2122ff073aa11bfc271c27", size = 322487, upload-time = "2025-07-29T18:01:25.418Z" }, - { url = "https://files.pythonhosted.org/packages/0b/85/878fea379e568bf62175273e19b6c1a8b0b30a202f1885da693e5e037a06/bitarray-3.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:27d13c7b886afc5d2fc49d6e92f9c96b1f0a14dc7b5502520c29f3da7550d401", size = 316112, upload-time = "2025-07-29T18:01:26.831Z" }, - { url = "https://files.pythonhosted.org/packages/9e/dc/68d0c84a9c26ae2a291165c7915b45611db16f7143955a5fdd5aaf481a91/bitarray-3.6.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1c4e75bbf9ade3d2cdf1b607a8b353b17d9b3cf54e88b2a5a773f50ae6f1bfbc", size = 339348, upload-time = "2025-07-29T18:01:28.225Z" }, - { url = "https://files.pythonhosted.org/packages/be/7c/cf5de46403c4176b96f064614686a584bd90ed37d63ba374a51f0313db6b/bitarray-3.6.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:975a118aa019d745f1398613b27fd8789f60a8cea057a00cdc1abedee123ffe6", size = 338601, upload-time = "2025-07-29T18:01:29.784Z" }, - { url = "https://files.pythonhosted.org/packages/0f/8c/a725109141bc5a2e66a551d56461811d7fa506ace1a473a6455a658f5f03/bitarray-3.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9ed4a2852b3de7a64884afcc6936db771707943249a060aec8e551c16361d478", size = 324777, upload-time = "2025-07-29T18:01:31.4Z" }, - { url = "https://files.pythonhosted.org/packages/69/1b/15d438b6cfbee8f01208fa0e47282fb0dcf5df501523d779a85f77584ce2/bitarray-3.6.0-cp312-cp312-win32.whl", hash = "sha256:5dd9edcab8979a50c2c4dec6d5b66789fb6f630bb52ab90a4548111075a75e48", size = 137813, upload-time = "2025-07-29T18:01:32.629Z" }, - { url = "https://files.pythonhosted.org/packages/d3/80/14af316fe46be0d6c2624d75f138b5d29bf19846fd4e6faab4ca15c0f8b8/bitarray-3.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:552a93be286ca485914777461b384761519db313e0a7f3012dca424c9610a4d5", size = 144766, upload-time = "2025-07-29T18:01:34.098Z" }, - { url = "https://files.pythonhosted.org/packages/90/2c/21066c7a97b2c88037b0fc04480fa13b0031c30c6f70452dc9c84fb2b087/bitarray-3.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3f96f57cea35ba19fd23a20b38fa0dfa3d87d582507129b8c8e314aa298f59b", size = 144156, upload-time = "2025-07-29T18:01:35.58Z" }, - { url = "https://files.pythonhosted.org/packages/34/a5/9cc42ea0c440ac1c2a65375688ac5891da12b3820f4a32440791d25ed668/bitarray-3.6.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:81e84054b22babcd6c5cc1eac0de2bfc1054ecdf742720cbfb36efbe89ec6c30", size = 140916, upload-time = "2025-07-29T18:01:36.67Z" }, - { url = "https://files.pythonhosted.org/packages/d7/66/709d259d855528213b1099facddb08d6108cb0074cf88dc357cdd07bacff/bitarray-3.6.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca643295bf5441dd38dadf7571ca4b63961820eedbffbe46ceba0893bf226203", size = 324713, upload-time = "2025-07-29T18:01:37.925Z" }, - { url = "https://files.pythonhosted.org/packages/6c/67/831e366ea4f0d52d622482b8475f87040cbc210d8f5f383935a4cc6363fe/bitarray-3.6.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:139963494fc3dd5caee5e38c0a03783ef50be118565e94b1dbb0210770f0b32d", size = 341300, upload-time = "2025-07-29T18:01:39.56Z" }, - { url = "https://files.pythonhosted.org/packages/66/c9/197375b63ca768ac8b1e624f27dc0eccdd451f94c6b9bf8950500d8da134/bitarray-3.6.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:243825f56b58bef28bfc602992a8c6d09bbc625628c195498d6020120d632a09", size = 333724, upload-time = "2025-07-29T18:01:40.861Z" }, - { url = "https://files.pythonhosted.org/packages/e1/23/96c882d798b8bc9d5354ad1fba18ad3ad4f3c0a661a296c8e51ca2941e0f/bitarray-3.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:583b46b3ba44121de5e87e95ae379932dc5fd2e37ebdf2c11a6d7975891425c1", size = 327276, upload-time = "2025-07-29T18:01:42.039Z" }, - { url = "https://files.pythonhosted.org/packages/20/8e/51751fe0e6f9fe7980b0467b471ba9ab8d1713a2a6576980d18143511656/bitarray-3.6.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f0be27d06732e2833b672a8fcc32fa195bdb22161eb88f8890de15e30264a01", size = 314903, upload-time = "2025-07-29T18:01:43.302Z" }, - { url = "https://files.pythonhosted.org/packages/49/7a/e4db9876e6e8bb261e64a384d3adb4372f13099b356e559cec85d022b897/bitarray-3.6.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:507e567aee4806576e20752f22533e8b7ec61e7e75062a7ce9222a0675aa0da6", size = 322551, upload-time = "2025-07-29T18:01:44.548Z" }, - { url = "https://files.pythonhosted.org/packages/aa/5a/9460070e6cb671067cc2e115a82da6fc9ef0958542b98b07a5ed4a05a97b/bitarray-3.6.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:22188943a29072b684cd7c99e0b2cfc0af317cea3366c583d820507e6d1f2ed4", size = 316128, upload-time = "2025-07-29T18:01:45.789Z" }, - { url = "https://files.pythonhosted.org/packages/34/6f/f5d78c8e908750b9c3d5839eca2af5f6e99d6c7fe8a0498ef79a1af90bd8/bitarray-3.6.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f92462ea3888c99439f58f7561ecd5dd4cf8b8b1b259ccf5376667b8c46ee747", size = 339337, upload-time = "2025-07-29T18:01:47.684Z" }, - { url = "https://files.pythonhosted.org/packages/0d/d3/f740b601eae4e28e22d8560877fe9881f1b7a96fcb23b186e8580d328929/bitarray-3.6.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3800f3c8c9780f281cf590543fd4b3278fea6988202273a260ecc58136895efb", size = 338607, upload-time = "2025-07-29T18:01:49.328Z" }, - { url = "https://files.pythonhosted.org/packages/4e/81/b9451089eea0ef66996852d2694b0f5afc0a76b1bc45c9a4f8204ae8674d/bitarray-3.6.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a50a66fa34dd7f9dcdbc7602a1b7bf6f9ab030b4f43e892324193423d9ede180", size = 324788, upload-time = "2025-07-29T18:01:51.454Z" }, - { url = "https://files.pythonhosted.org/packages/82/e8/80620fc60ad34bff647881a4f25c15b992c524e0f7af9c7c6c573b03556e/bitarray-3.6.0-cp313-cp313-win32.whl", hash = "sha256:afa24e5750c9b89ad5a7efef037efe49f4e339f20a94bf678c422c0c71e1207a", size = 137841, upload-time = "2025-07-29T18:01:52.95Z" }, - { url = "https://files.pythonhosted.org/packages/3b/ee/303be88b847da29a067babc690e231d7838520dc1af57d14dad5a7ca095c/bitarray-3.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:e4c5e7edf1e7bcbde3b52058f171a411e2a24a081b3e951d685dfea4c3c383d5", size = 144820, upload-time = "2025-07-29T18:01:54.137Z" }, - { url = "https://files.pythonhosted.org/packages/94/25/d98d86777779c422cdc1a295848dfdb04b967d5b54e6824c009bd69842cd/bitarray-3.6.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a763dd33d6e27c9b4db3f8089a5fa39179a8a3cf48ce702b24a857d7c621333c", size = 139790, upload-time = "2025-07-29T18:03:17.536Z" }, - { url = "https://files.pythonhosted.org/packages/f7/37/4a85461ea71e0d735ec4e231a19057df156242f6b51c4d860367d8342ffc/bitarray-3.6.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8cf44b012e7493127ce7ca6e469138ac96b3295a117877d5469aabe7c8728d87", size = 136433, upload-time = "2025-07-29T18:03:18.935Z" }, - { url = "https://files.pythonhosted.org/packages/27/f3/873ccde5d86369268bceda91056f1baa87f3920f504390c5fd7a451ac964/bitarray-3.6.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e297fd2e58afe17e33dd80c231c3a9d850279a2a8625aed1d39f9be9534809e", size = 144952, upload-time = "2025-07-29T18:03:20.493Z" }, - { url = "https://files.pythonhosted.org/packages/cb/be/2cb43c165c6a239a9d662279f0be7ffb0903f6f889c1df3bafb3387fea44/bitarray-3.6.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11fc8bc65f964c7278deb1b7a69379dab3ecc90095f252deb17365637ebb274d", size = 145693, upload-time = "2025-07-29T18:03:22.274Z" }, - { url = "https://files.pythonhosted.org/packages/a9/86/1ffd91a77a1a5fa86bbd32d8c3c34bb066595574d3eb60c83a98f556d45f/bitarray-3.6.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa3c925502bd0b957a96a5619134bcdc0382ef73cffd40bad218ced3586bcf8d", size = 147466, upload-time = "2025-07-29T18:03:24.096Z" }, - { url = "https://files.pythonhosted.org/packages/a9/ff/30a1d2492c1d259a17084015c7b82cc31c49dd60f47f3c7a7b3ee923f45b/bitarray-3.6.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:9f7796959c9c036a115d34696563f75d4a2912d3b97c15c15f2a36bdd5496ce9", size = 143118, upload-time = "2025-07-29T18:03:25.6Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d4/6328210390d02229ea6baaf21e8151c9e5163b7fca3a96c855e8d3af44b6/bitarray-3.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:10d4c7ec4ce13852ccea9410c9bb139a8d614439be49d3ec4f13706da8d02867", size = 164212, upload-time = "2026-07-31T07:28:09.76Z" }, + { url = "https://files.pythonhosted.org/packages/ab/b3/838641bebbb65000fe6957366f09026cec17cc9b5326bb37db40b03ddfc3/bitarray-3.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6581ac6c78ce54939fd1234efae3f59904328b45c51716d44c3a492cb420bb45", size = 160651, upload-time = "2026-07-31T07:28:11.367Z" }, + { url = "https://files.pythonhosted.org/packages/9f/80/e5e7ce246016f91e2b44449ce523998a0ac325db1d7c12ef85551213feb0/bitarray-3.10.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:77135603f000f6a4da637aef4035bceb865ba1fedd480e6879902e5a20b8ddfc", size = 358089, upload-time = "2026-07-31T07:28:12.452Z" }, + { url = "https://files.pythonhosted.org/packages/68/6b/ecd041cb41d544e29da2b69900b11e7adb3ec3274e094ba3a6c6491a7f18/bitarray-3.10.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e50e50ce22c4e93a5e8205020b815c735707ffd623dd50a2af7627da2658c3c6", size = 379631, upload-time = "2026-07-31T07:28:13.758Z" }, + { url = "https://files.pythonhosted.org/packages/e3/57/af4554a243b8649d997071dcb862f0956b7b9420245663b2a7d095cbc89f/bitarray-3.10.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c8d24867c62db464410dcb4c04d1f6c341127da14f339bbcb428bdecf2e1a2f7", size = 392429, upload-time = "2026-07-31T07:28:15.017Z" }, + { url = "https://files.pythonhosted.org/packages/0e/b4/29483f759c421b0c78fbc7a152981af77cd9b72b975ae60a9d85740bebc3/bitarray-3.10.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c175f85b69b1a71af4f8732caa18e90086f494d4d23630960a821ba3c38bad29", size = 360781, upload-time = "2026-07-31T07:28:16.229Z" }, + { url = "https://files.pythonhosted.org/packages/0d/b6/f1d7fca50e5270b1f962419e57ed1cc72a8c28435dd49f0c7475af35d730/bitarray-3.10.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c5d647bbb4a0369333a74c437036e96cfa1964efc7a0bb421cb830e12c3b8e55", size = 355859, upload-time = "2026-07-31T07:28:17.534Z" }, + { url = "https://files.pythonhosted.org/packages/7f/84/a631be6a27cec89b8bb4bbf4d41a122913631b21a13d5884c72946173e4d/bitarray-3.10.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:28972a8e9e3596f93befd5d6c4364a22ca3d060a1fcfafe15ad540f00920819b", size = 377363, upload-time = "2026-07-31T07:28:18.811Z" }, + { url = "https://files.pythonhosted.org/packages/5a/94/ec19f76da96a545ed8422c8b7c1e134f554983b526174e32e19d4c71919d/bitarray-3.10.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2e2078e41451d7bee01addebf332a2e4cb49a10e27c4127911a9878c1578d426", size = 373407, upload-time = "2026-07-31T07:28:19.855Z" }, + { url = "https://files.pythonhosted.org/packages/12/0e/d5c89e6feb542ab3488264f0592a6a12945ce1ca1a77aedceb11df15b371/bitarray-3.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a9bea731f0e3bf2ef480d6db771bf515d1b535cb00fcde55ec9306a1f6f5f0dc", size = 357764, upload-time = "2026-07-31T07:28:21.22Z" }, + { url = "https://files.pythonhosted.org/packages/5d/19/df6fca472b2ccb124c7ad6abbaf0915c09ada621d6f3a36f9d84bccb859d/bitarray-3.10.0-cp310-cp310-win32.whl", hash = "sha256:661cbdf8a4c47af61d30f8b11a2c19c8ab0e666976b87f26f0d7e2c70edfa40c", size = 155863, upload-time = "2026-07-31T07:28:22.539Z" }, + { url = "https://files.pythonhosted.org/packages/81/92/cde15628dd99fcc1f3e5c198e34f2ba9865cdf5e391ff0505a2fd35cd392/bitarray-3.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:bfd975d09c2b43ea4ac5325b844fdcc2b9630220177f08ac60b68f8189b2a6b6", size = 165094, upload-time = "2026-07-31T07:28:23.54Z" }, + { url = "https://files.pythonhosted.org/packages/bd/67/984afe224f009424e4f5ff7c5aa9720556054a01b4782121bf820013be29/bitarray-3.10.0-cp310-cp310-win_arm64.whl", hash = "sha256:7587fb84e37c97029c33b11a8af8fe266e9a6664911d0d0747e5f744d2fa1d10", size = 161026, upload-time = "2026-07-31T07:28:24.486Z" }, + { url = "https://files.pythonhosted.org/packages/d2/3e/5f40ec0668b2a5af4541a85f84cf6712408b84d43c452ae3c13245096509/bitarray-3.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c63b721e6cbc638a0fef5ad55871c3ea9c0740f21ebc363b7987f13459d290ce", size = 164212, upload-time = "2026-07-31T07:28:25.586Z" }, + { url = "https://files.pythonhosted.org/packages/7f/2f/2189dcd9e7cc2b02098ae903b3a5dadda0d41a9e426b1e8ed667d4804baa/bitarray-3.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:05bd497036fefa4653bc73875ca62b22e3ce2d1619aac0ab989235374ad2623c", size = 160643, upload-time = "2026-07-31T07:28:26.831Z" }, + { url = "https://files.pythonhosted.org/packages/93/55/832637779d153bab64b53244a1dd33ed6ae90ecc28adc0c42ddb0ae9a095/bitarray-3.10.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d155b99dfce09cca080eda2fa1faa867d37b5372fffa2acc963bab254777552b", size = 367323, upload-time = "2026-07-31T07:28:27.901Z" }, + { url = "https://files.pythonhosted.org/packages/86/70/75f4af9d6f78887213b920956288e5b78307b24e2475d8ea440a2f0b9975/bitarray-3.10.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7cf4c368d960ea79b93948b0d704d38d73888f725821799c5eac6e3b93469234", size = 388482, upload-time = "2026-07-31T07:28:29.055Z" }, + { url = "https://files.pythonhosted.org/packages/23/47/042cb61371e0448e63e1d314d925a90db78f8fffb2665b4666af56a2a223/bitarray-3.10.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6d0f1c8f551493eedd8b349b5a208e1ece830e7d9ff9b5e5fa8fdd0c66cc69b6", size = 401774, upload-time = "2026-07-31T07:28:30.239Z" }, + { url = "https://files.pythonhosted.org/packages/4b/fa/4d5dec87494432c0be0a936bf7ed6ce7cee9c4af3ec56a983265809275cc/bitarray-3.10.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f011f2d585844bd96280db5c5ec20493ff80cbcb5c4bcd6bede05bb0d0b83697", size = 369697, upload-time = "2026-07-31T07:28:31.54Z" }, + { url = "https://files.pythonhosted.org/packages/30/c4/a2418a2ae44ced1e7435de3faf6be06258aa30677083a248b62f8380d2d5/bitarray-3.10.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b1139cd64b8c8a6efa6434fd3f070e44328b6462a00b6d1f878cc41bdad9cd1b", size = 364861, upload-time = "2026-07-31T07:28:32.764Z" }, + { url = "https://files.pythonhosted.org/packages/3a/cf/bba63bf50cae3d4741b91c4b498e5a9cc16035bf277136053c5cf813b347/bitarray-3.10.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:0e847fc2cb6f39ce63ba76b27649d7ff95b4e34873271e3a67d267bc5f307fab", size = 385443, upload-time = "2026-07-31T07:28:33.915Z" }, + { url = "https://files.pythonhosted.org/packages/b1/4a/fdd686ac423545e9443a47690d6df6844bc3dcdef2b4d1e512eeca81ffea/bitarray-3.10.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a5a8eab867951748694e59f96530e8c582d22c331f7079c1b82ccfe06fcc18cf", size = 382408, upload-time = "2026-07-31T07:28:34.969Z" }, + { url = "https://files.pythonhosted.org/packages/b3/35/adf8481a6899f35ac615337ab441cc00ac9bf559365a180a7854aaabc16b/bitarray-3.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:110a884f27c8151e4358bcc3db65598f3f53fc59a537b86f6db37b6d6ea2ebc8", size = 366737, upload-time = "2026-07-31T07:28:36.195Z" }, + { url = "https://files.pythonhosted.org/packages/6f/e6/05064dbb6ed2e48eb693f976735c540ce83d5237cf8a164cf49d5c61fef6/bitarray-3.10.0-cp311-cp311-win32.whl", hash = "sha256:47b89e7896ec01c6d89b85c89fa492cc1264f7f7667cb959e98f6050324df484", size = 156022, upload-time = "2026-07-31T07:28:37.265Z" }, + { url = "https://files.pythonhosted.org/packages/b4/95/fd8d0ec02edf2a4d8e46b5351ba9b4369148d3c51973bcdfce3c9b69f21c/bitarray-3.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:d2849c25f4f6d8ab61f1587e5914734d7eb2ad4fb0c026b96ecacd0bc1b92e33", size = 165521, upload-time = "2026-07-31T07:28:38.285Z" }, + { url = "https://files.pythonhosted.org/packages/c9/51/72f5e814fea57e600f99d3f8e8c482dc659fc6d72f41c0eb366a51a6d434/bitarray-3.10.0-cp311-cp311-win_arm64.whl", hash = "sha256:25369533c63c2602b947b764f82af90720857ad876a4047f9bf1a87f1b3fc051", size = 161397, upload-time = "2026-07-31T07:28:39.378Z" }, + { url = "https://files.pythonhosted.org/packages/81/23/6970115c501b8b2dfa9b9ab3f25c07351e5dbc8b28321796bbf2a4289428/bitarray-3.10.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d7bce4104be674de03bb0323504f02dc7a2e41507180c3484af2a11fd38be431", size = 164496, upload-time = "2026-07-31T07:28:40.584Z" }, + { url = "https://files.pythonhosted.org/packages/03/05/51d52f01c86d719ef3de1ba59a73f3589fa156ab068841959a726b4dd3c9/bitarray-3.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b1b2fae594370b7b54a4bdeb92389bfbfb6481ca27b3fbe607fe67f92bdebe40", size = 160609, upload-time = "2026-07-31T07:28:41.686Z" }, + { url = "https://files.pythonhosted.org/packages/86/fe/ab7deb5cbc795dc2697f4b2ad0411d540d876204d55cbdd83ad768288603/bitarray-3.10.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6f8a98a70e51bc27691df0640e363a743d722439bcdc5d0da6906340b2e10477", size = 369750, upload-time = "2026-07-31T07:28:42.768Z" }, + { url = "https://files.pythonhosted.org/packages/49/57/1a3fc6098262583e235ce0c93e662b2a4a62f9638af72599d6df64fdd006/bitarray-3.10.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:977d12432040d2db9d9e4ebf64b8c5fa5b8e7127f4d37018280bf45bb1403d9b", size = 390203, upload-time = "2026-07-31T07:28:43.999Z" }, + { url = "https://files.pythonhosted.org/packages/66/57/e9ae1ff4bba6f25debbfc29b652099e1bd9fe1cf13f49e5ba1971e2c56e6/bitarray-3.10.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4b809cdfab0ae2680101f0cfda8316b61055d9478cc224a61b4c682318971bf9", size = 404595, upload-time = "2026-07-31T07:28:45.038Z" }, + { url = "https://files.pythonhosted.org/packages/49/61/5dd152a8cff75e6ba6050126568696c7dc2ce401b47e9016ceef0b441595/bitarray-3.10.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:326f7fb7843e00c5fef9fca4c0055b475589c5a8d5aa57ac0b2e3ffa2d921454", size = 374052, upload-time = "2026-07-31T07:28:46.573Z" }, + { url = "https://files.pythonhosted.org/packages/83/1d/5107d2fc38af58a6f14a67979d7a1cae485372032df53b5249cfad3fcad5/bitarray-3.10.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b1faa9a34142ee424dbe46c653e5558ac258a7d42423c58566e79d9966997897", size = 367445, upload-time = "2026-07-31T07:28:47.741Z" }, + { url = "https://files.pythonhosted.org/packages/7b/91/85c2c7f997eab94362e9e410ef68b00fdc34d1e9d99fb5321f7af7331030/bitarray-3.10.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:73c9d91ade5e642f7d9eb50d4c324268e04c413c117dec40bffb8447d746fd74", size = 387606, upload-time = "2026-07-31T07:28:48.911Z" }, + { url = "https://files.pythonhosted.org/packages/75/c1/86883df78495d44e3adbd139aef21e693b53a5b1ace4accf17097991c6ac/bitarray-3.10.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e6ee87ef8ffa82553e7b9ff33b243125b2e3efdc5bfa7a5f883bc93f6297a3f9", size = 386037, upload-time = "2026-07-31T07:28:50.235Z" }, + { url = "https://files.pythonhosted.org/packages/5c/ad/3a746ceb4e47a8ceb6db330c84b58152c33d05985143ba5cd219135528e9/bitarray-3.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:934c77709aee789742c2de7e61e9c287cf9742c3e412a3f1177f6d5a65b8c910", size = 370532, upload-time = "2026-07-31T07:28:51.654Z" }, + { url = "https://files.pythonhosted.org/packages/0f/be/49b3f30264353724970b84a3aa65338308983c4feecfae9839879e01cedb/bitarray-3.10.0-cp312-cp312-win32.whl", hash = "sha256:440cd0dd0b6df6557eea3628af7a3db71ce98ff3ce81b8b424281b64e4cecabc", size = 156328, upload-time = "2026-07-31T07:28:52.848Z" }, + { url = "https://files.pythonhosted.org/packages/22/60/b4a77a00d2c0a9a08a2bd434ce04398eae1ca036f8abc1cac22b9fb7f27d/bitarray-3.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:1182b27142dbdb954a5231b6b364bfca943f2b9a7c432cea710eb5e84fcc0820", size = 165865, upload-time = "2026-07-31T07:28:53.92Z" }, + { url = "https://files.pythonhosted.org/packages/b2/5b/0061d8bde5fb47c40c1da8537108d2bc798dcedaef095d1516c36b119c1c/bitarray-3.10.0-cp312-cp312-win_arm64.whl", hash = "sha256:bf92d9a79b1b42cc1299b7a3c097386ab86c7101fefacab2f1cd6bfd3848bd43", size = 161554, upload-time = "2026-07-31T07:28:55.006Z" }, + { url = "https://files.pythonhosted.org/packages/1d/11/eff3ce329a0793504e7b045ed349f7b4f3fce51149fe5496bbec153c8041/bitarray-3.10.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:228c2b850164740133c6dd7a0cda4094b630eb74675a91ce62ec23db3db5fdfd", size = 164207, upload-time = "2026-07-31T07:28:56.107Z" }, + { url = "https://files.pythonhosted.org/packages/b9/65/3ab717eed012fbfceae0d874032a76c11b1bd0c8c8826bd0f8085cd33062/bitarray-3.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8029e7c4a60ab349299b47569d1d77b5481f916c794d5c1a9f4ec87460c836c8", size = 160355, upload-time = "2026-07-31T07:28:57.237Z" }, + { url = "https://files.pythonhosted.org/packages/f1/2f/f466070463df9ec6127d60669ea307e31aacb3659efc7b52b664765e6b2f/bitarray-3.10.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7c15d4e6fe0c10f225c634d4f02bf06485cc6045a23a9a09a326c28f396af5e0", size = 368126, upload-time = "2026-07-31T07:28:58.367Z" }, + { url = "https://files.pythonhosted.org/packages/0c/dd/b987ddd6d57971dfb906dc3c5fd80db67cbb5a82c7e5689a0ab10b31c80e/bitarray-3.10.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:07aa015f165d8c633a51e6f011d979f5a0ddcb518dcd5ec4ffe2fcbf389ab9cc", size = 388674, upload-time = "2026-07-31T07:28:59.549Z" }, + { url = "https://files.pythonhosted.org/packages/68/b6/c4750851d2756bf7929ab8ad410488cf56fe4700ed8d1ba9351b7e0d8488/bitarray-3.10.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:208ead5ca415b8298b04ac92eebde116aaa57ce8ec892a866760a6ffb667ed5f", size = 402574, upload-time = "2026-07-31T07:29:00.822Z" }, + { url = "https://files.pythonhosted.org/packages/83/60/d5fd73f891deb3c436e52ce14640020deae972dbe6ee992cc186f56fc843/bitarray-3.10.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f339b61b586a49309def0c97e210cd853c03babb405e53d4d4d76ff0a7b3e21c", size = 371909, upload-time = "2026-07-31T07:29:02.128Z" }, + { url = "https://files.pythonhosted.org/packages/00/5b/b5beee3f6eb2d614192aa5409033f545910307b3c2b8cc78a1c846a86047/bitarray-3.10.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:67ce4fc3b78124c15e2c2c91a9e151330026e941916a1565d0f033719b374148", size = 365518, upload-time = "2026-07-31T07:29:03.349Z" }, + { url = "https://files.pythonhosted.org/packages/81/b6/3613bb59f83598340d5cc35a88b9556a8870e9a2eae578fb812d41d2f0fd/bitarray-3.10.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:9775fefaeeb9846f8eab8ace7309caaae206d2057be024b861b5cce60169d7c0", size = 385394, upload-time = "2026-07-31T07:29:04.579Z" }, + { url = "https://files.pythonhosted.org/packages/8e/a0/e069fc9bb450804a7ce9fd933d287f1b9b1278e9b3bc3c3b2685e09dbcb0/bitarray-3.10.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:6f76c4163b4b4862bb47b53ccc747604ef1691766abeee6eeba456bca2787b5d", size = 384015, upload-time = "2026-07-31T07:29:06.306Z" }, + { url = "https://files.pythonhosted.org/packages/5d/e6/5bb06128d3be3b694a7d7a3d3ae9f872b51e5954e279cb5a4eb6cc7b9bfd/bitarray-3.10.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c66fe76ed2006fba1fe5c3627787b6d2aa1fff3e44da589ce268180aab5e1b83", size = 368473, upload-time = "2026-07-31T07:29:07.976Z" }, + { url = "https://files.pythonhosted.org/packages/71/49/a8610c69dd06521e6110f21c7491ca0a3194312a7ab4de84c8718c51c1da/bitarray-3.10.0-cp313-cp313-win32.whl", hash = "sha256:08b5fc5e0483c68e7c52b8553f7ed5c303dc84e4ae92fc4c76efd95fe700671f", size = 156186, upload-time = "2026-07-31T07:29:09.193Z" }, + { url = "https://files.pythonhosted.org/packages/81/c8/1f9c448a80c8403f3444436e37dfc377e11e8aac1713b391aebac67ddd35/bitarray-3.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:f60b7bce85754890e630872887006a10cbd035bf72bf7b8c9346b6e490a3139c", size = 165726, upload-time = "2026-07-31T07:29:10.955Z" }, + { url = "https://files.pythonhosted.org/packages/eb/2b/5e25c3d84c678ddfd41724af56f7ed11856ae08c38f3138639971dce6657/bitarray-3.10.0-cp313-cp313-win_arm64.whl", hash = "sha256:30096ea0fed5339cbb8466d5d2c21afbc1bfea074e8ff8fc70c05c6fe3e6effb", size = 161330, upload-time = "2026-07-31T07:29:12.337Z" }, + { url = "https://files.pythonhosted.org/packages/c4/3f/1124e6e78511dce37a2ac91d6eff58af5e9e3b27ecfbdb99d1e4f5b12b57/bitarray-3.10.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fa0af67f68964f6a0b510f3e2a6aef3f66872767c5fd3848b4e80488c21121db", size = 164199, upload-time = "2026-07-31T07:29:13.408Z" }, + { url = "https://files.pythonhosted.org/packages/6c/41/4cf54756e8edd020bbc882c266b0bcaa048dde4eace108c97cf1b26cd2dc/bitarray-3.10.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:18b323f5f7e27e5d8c45c8b529c3557df2127fca6af54b77524761091d483c6c", size = 160592, upload-time = "2026-07-31T07:29:14.574Z" }, + { url = "https://files.pythonhosted.org/packages/50/0f/806ec358b1e443104d9f4b45d0b9612022d938c7632302e273e7411b6b3d/bitarray-3.10.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:52d1aa7daa6708ba256513916caa564895bcee1d687fc1d3d00efca82925bb03", size = 367954, upload-time = "2026-07-31T07:29:15.676Z" }, + { url = "https://files.pythonhosted.org/packages/e3/03/a9e6c0a4378d8288cc7f1eec8bd86e9634af519521178fe475bea76f9119/bitarray-3.10.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:432ea140915124472a89fdacd622c42e041ba6c9a155be0d614d3a29378e6c2f", size = 388812, upload-time = "2026-07-31T07:29:16.822Z" }, + { url = "https://files.pythonhosted.org/packages/73/b7/ac5adfc24ac6d40cae960404e70a9f851292678ce98701b3db165427e613/bitarray-3.10.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6cc1273f52c760f73e7734bde66b966bcbbff31706f92425a6926c7d65f7cd63", size = 402014, upload-time = "2026-07-31T07:29:18.335Z" }, + { url = "https://files.pythonhosted.org/packages/99/0f/dd564e72a566f86197f91320d7753af099e260f17d7fcfb7e3c000378523/bitarray-3.10.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b31ffe9679e364dacdc3cc8a3de151b4da4ccb9b18685408add662e4fedcf57c", size = 371505, upload-time = "2026-07-31T07:29:19.726Z" }, + { url = "https://files.pythonhosted.org/packages/b8/a4/93754f58446846c56fcb5d6c0396848c556c50968152e3b1a5f8e455e74f/bitarray-3.10.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9a7b618c8c35bb429a58442b1f8bf08fda743163ff5d6404393270012a63442d", size = 365425, upload-time = "2026-07-31T07:29:20.951Z" }, + { url = "https://files.pythonhosted.org/packages/62/54/c8be9f88183b477f161dcd0b09abb75533e30778411ab4bd2a9e4bbe6ed1/bitarray-3.10.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:5a48cc66362ca31935ef98af6ee42d572a636f28cf026c7224950fc1509d2d20", size = 385606, upload-time = "2026-07-31T07:29:22.21Z" }, + { url = "https://files.pythonhosted.org/packages/94/00/8706ab34323cd2fe1fc73c2661af93ebeb33a1501f437b7362f32a269f12/bitarray-3.10.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:ee1cfc520fd097382ceb7d2ca595bef8d55db2d060fdfedacd49e2d239a742c7", size = 383689, upload-time = "2026-07-31T07:29:23.576Z" }, + { url = "https://files.pythonhosted.org/packages/8b/59/82d49b8763237d3971452b75170596edddaef7c35795d7f090d265f19853/bitarray-3.10.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6684bfd43dccc72a1f2c706956b45e14751d299c15c0446886775b4de75b92f4", size = 368138, upload-time = "2026-07-31T07:29:25.172Z" }, + { url = "https://files.pythonhosted.org/packages/08/7a/598957db905357c672de2f6fcf1c2b42a449911630d9cd2fc64c512b7970/bitarray-3.10.0-cp314-cp314-win32.whl", hash = "sha256:e7a24e2c070e55ae3492a47d548d782843adb1d8b9918034fa17fb81a7d7804f", size = 154999, upload-time = "2026-07-31T07:29:26.385Z" }, + { url = "https://files.pythonhosted.org/packages/47/ea/9542b9d40a96d669c21c7a51ce0b56301defdf3547c5ff5e02363902e5a6/bitarray-3.10.0-cp314-cp314-win_amd64.whl", hash = "sha256:f1df2c40bfe739d48dbcb67d506633c8daac380a35029f8bea5124122eaca389", size = 164687, upload-time = "2026-07-31T07:29:27.608Z" }, + { url = "https://files.pythonhosted.org/packages/26/f5/fb5246345d6c177cadab86ba0013c8a3e878ae0677637d7122a0fe504bab/bitarray-3.10.0-cp314-cp314-win_arm64.whl", hash = "sha256:a63a9e0b3b2cbb94bfa8762b823d2680fa9bd1863cce7432a1964aeea2270ac2", size = 160849, upload-time = "2026-07-31T07:29:28.955Z" }, + { url = "https://files.pythonhosted.org/packages/ce/a2/6fcfb12e25109cfd9154a7d3419a9840865402aa61b810d9c685d6e32d81/bitarray-3.10.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:d762e59781fdb6bb80aa9f70150170a8ab8f986ade56b42c6e687a053e354350", size = 167432, upload-time = "2026-07-31T07:29:30.145Z" }, + { url = "https://files.pythonhosted.org/packages/a5/02/41f957c593536f87574f42415151441e407cbc7b5662740b7337e936cb34/bitarray-3.10.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d085c425434e9f980df63adfdf6e9d20951daf71dcb4722ab135bb2a47cf5095", size = 163928, upload-time = "2026-07-31T07:29:31.39Z" }, + { url = "https://files.pythonhosted.org/packages/03/b4/a8e8034ca242f49c7f157dc7f1a421964025239e1a3d6f4f73ac30596d39/bitarray-3.10.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cec6e9b1a21153fba768e9e4cd9313fdc272a93538892288d8ba5ac56bd558f", size = 386588, upload-time = "2026-07-31T07:29:32.671Z" }, + { url = "https://files.pythonhosted.org/packages/ae/e4/a24790faf328d29c5c076d75301a345637ff260916e107a96193e5f9d440/bitarray-3.10.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c46d56e8c5aba09ddac7bb51792ae3c580d23ee4f99e18c9ee9106fa657ae264", size = 405764, upload-time = "2026-07-31T07:29:34.143Z" }, + { url = "https://files.pythonhosted.org/packages/a7/3f/61179230c59b41affac54fe1bcbe85628179f4698f5a20bdc24b4032710a/bitarray-3.10.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:88494ff66e5c1133293c26924698ccd7aa921397ca0d48dd1e271ae81d2afe5c", size = 419274, upload-time = "2026-07-31T07:29:35.789Z" }, + { url = "https://files.pythonhosted.org/packages/a2/49/8933bc31ca6a019e22943beb70764ffa9a0dc7a3022be4e782d15ce0f391/bitarray-3.10.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8241925a21313a38d88fcec9f6f4a928ab24b9ee85af570025d955c76603552d", size = 388192, upload-time = "2026-07-31T07:29:37.355Z" }, + { url = "https://files.pythonhosted.org/packages/31/a3/13fe11474500c1bf875c597599e2ce1ccab405634c2c8fe8801d8362f0a9/bitarray-3.10.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d989d1bf51a5af1fc96fa06781a3966ba25fbe6ba522a018ac244be286172416", size = 382375, upload-time = "2026-07-31T07:29:38.954Z" }, + { url = "https://files.pythonhosted.org/packages/4a/8d/f927c1ddab3dad7978b484a115227fab17f3e59f3efea797ff07013d7875/bitarray-3.10.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:1291ac954db1c74ac834c40c6da712dd5773806ebb2926443c1cf6454f6aac70", size = 401798, upload-time = "2026-07-31T07:29:40.286Z" }, + { url = "https://files.pythonhosted.org/packages/e4/b0/692b04525ab435592fb2b4ecb10a86c44a71788107b3468f83e1bf4b62dc/bitarray-3.10.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:bc82f3205a04e8b992830b218660291f9acfd2890048049b949ff21797330fb2", size = 399891, upload-time = "2026-07-31T07:29:42.03Z" }, + { url = "https://files.pythonhosted.org/packages/09/13/ac3bc03b2a00492486e8b5f7d8bf9f9df59bdf8aa8ea6917b275a7a4d3da/bitarray-3.10.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:4e633e6f3f817ba2aa738ca06d87d0cd2379c39b776ade63997ab47a2c924f34", size = 384197, upload-time = "2026-07-31T07:29:43.566Z" }, + { url = "https://files.pythonhosted.org/packages/26/d5/7b41d1df09fa719dadf5cbd6061dda60a0b1f5af69eb4944fb923f33fa43/bitarray-3.10.0-cp314-cp314t-win32.whl", hash = "sha256:c2f8e715d1d41f0d66e60229030ab2e81e41560d71a5582544ec34f360bbf3e3", size = 158353, upload-time = "2026-07-31T07:29:44.91Z" }, + { url = "https://files.pythonhosted.org/packages/3c/75/c66d5fcee700677fef02436bd8cd7f896f86a875a154746165bd846b203f/bitarray-3.10.0-cp314-cp314t-win_amd64.whl", hash = "sha256:a5ef997342f959f1534ae8d3e84f51b8343d503b711a1f3bafc2373c15ad3658", size = 168236, upload-time = "2026-07-31T07:29:46.142Z" }, + { url = "https://files.pythonhosted.org/packages/67/35/343cea7eb00d73ba5656f6b1b8e3d995a580cb12616bfe37ea98fe0cc2a4/bitarray-3.10.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0b9ad9ef026a7b9021b54a19152027c64499320c36f64be7c584db760854283f", size = 164050, upload-time = "2026-07-31T07:29:47.435Z" }, ] [[package]] name = "bitstring" -version = "4.3.1" +version = "4.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "bitarray" }, + { name = "tibs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/15/a8/a80c890db75d5bdd5314b5de02c4144c7de94fd0cefcae51acaeb14c6a3f/bitstring-4.3.1.tar.gz", hash = "sha256:a08bc09d3857216d4c0f412a1611056f1cc2b64fd254fb1e8a0afba7cfa1a95a", size = 251426, upload-time = "2025-03-22T09:39:06.978Z" } +sdist = { url = "https://files.pythonhosted.org/packages/36/d3/de6fe4e7065df8c2f1ac1766f5fdccbe75bc18af2cf2dbeecd34d68e1518/bitstring-4.4.0.tar.gz", hash = "sha256:e682ac522bb63e041d16cbc9d0ca86a4f00194db16d0847c7efe066f836b2e37", size = 255209, upload-time = "2026-03-10T20:29:14.824Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/75/2d/174566b533755ddf8efb32a5503af61c756a983de379f8ad3aed6a982d38/bitstring-4.3.1-py3-none-any.whl", hash = "sha256:69d1587f0ac18dc7d93fc7e80d5f447161a33e57027e726dc18a0a8bacf1711a", size = 71930, upload-time = "2025-03-22T09:39:05.163Z" }, + { url = "https://files.pythonhosted.org/packages/bf/02/1a870bab76f2896d827aa4963be95e56675ffa1453e53525d13c43036edf/bitstring-4.4.0-py3-none-any.whl", hash = "sha256:feac49524fcf3ef27e6081e86f02b10d2adf6c3773bf22fbe0e7eea9534bc737", size = 76846, upload-time = "2026-03-10T20:29:12.832Z" }, ] [[package]] name = "cffi" -version = "1.17.1" +version = "2.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pycparser" }, + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621, upload-time = "2024-09-04T20:45:21.852Z" } +sdist = { url = "https://files.pythonhosted.org/packages/57/5f/ff100cae70ebe9d8df1c01a00e510e45d9adb5c1fdda84791b199141de97/cffi-2.1.0.tar.gz", hash = "sha256:efc1cdd798b1aaf39b4610bba7aad28c9bea9b910f25c784ccf9ec1fa719d1f9", size = 531036, upload-time = "2026-07-06T21:34:30.382Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/90/07/f44ca684db4e4f08a3fdc6eeb9a0d15dc6883efc7b8c90357fdbf74e186c/cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14", size = 182191, upload-time = "2024-09-04T20:43:30.027Z" }, - { url = "https://files.pythonhosted.org/packages/08/fd/cc2fedbd887223f9f5d170c96e57cbf655df9831a6546c1727ae13fa977a/cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67", size = 178592, upload-time = "2024-09-04T20:43:32.108Z" }, - { url = "https://files.pythonhosted.org/packages/de/cc/4635c320081c78d6ffc2cab0a76025b691a91204f4aa317d568ff9280a2d/cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382", size = 426024, upload-time = "2024-09-04T20:43:34.186Z" }, - { url = "https://files.pythonhosted.org/packages/b6/7b/3b2b250f3aab91abe5f8a51ada1b717935fdaec53f790ad4100fe2ec64d1/cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702", size = 448188, upload-time = "2024-09-04T20:43:36.286Z" }, - { url = "https://files.pythonhosted.org/packages/d3/48/1b9283ebbf0ec065148d8de05d647a986c5f22586b18120020452fff8f5d/cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3", size = 455571, upload-time = "2024-09-04T20:43:38.586Z" }, - { url = "https://files.pythonhosted.org/packages/40/87/3b8452525437b40f39ca7ff70276679772ee7e8b394934ff60e63b7b090c/cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6", size = 436687, upload-time = "2024-09-04T20:43:40.084Z" }, - { url = "https://files.pythonhosted.org/packages/8d/fb/4da72871d177d63649ac449aec2e8a29efe0274035880c7af59101ca2232/cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17", size = 446211, upload-time = "2024-09-04T20:43:41.526Z" }, - { url = "https://files.pythonhosted.org/packages/ab/a0/62f00bcb411332106c02b663b26f3545a9ef136f80d5df746c05878f8c4b/cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8", size = 461325, upload-time = "2024-09-04T20:43:43.117Z" }, - { url = "https://files.pythonhosted.org/packages/36/83/76127035ed2e7e27b0787604d99da630ac3123bfb02d8e80c633f218a11d/cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e", size = 438784, upload-time = "2024-09-04T20:43:45.256Z" }, - { url = "https://files.pythonhosted.org/packages/21/81/a6cd025db2f08ac88b901b745c163d884641909641f9b826e8cb87645942/cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be", size = 461564, upload-time = "2024-09-04T20:43:46.779Z" }, - { url = "https://files.pythonhosted.org/packages/f8/fe/4d41c2f200c4a457933dbd98d3cf4e911870877bd94d9656cc0fcb390681/cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c", size = 171804, upload-time = "2024-09-04T20:43:48.186Z" }, - { url = "https://files.pythonhosted.org/packages/d1/b6/0b0f5ab93b0df4acc49cae758c81fe4e5ef26c3ae2e10cc69249dfd8b3ab/cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15", size = 181299, upload-time = "2024-09-04T20:43:49.812Z" }, - { url = "https://files.pythonhosted.org/packages/6b/f4/927e3a8899e52a27fa57a48607ff7dc91a9ebe97399b357b85a0c7892e00/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", size = 182264, upload-time = "2024-09-04T20:43:51.124Z" }, - { url = "https://files.pythonhosted.org/packages/6c/f5/6c3a8efe5f503175aaddcbea6ad0d2c96dad6f5abb205750d1b3df44ef29/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", size = 178651, upload-time = "2024-09-04T20:43:52.872Z" }, - { url = "https://files.pythonhosted.org/packages/94/dd/a3f0118e688d1b1a57553da23b16bdade96d2f9bcda4d32e7d2838047ff7/cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", size = 445259, upload-time = "2024-09-04T20:43:56.123Z" }, - { url = "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", size = 469200, upload-time = "2024-09-04T20:43:57.891Z" }, - { url = "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", size = 477235, upload-time = "2024-09-04T20:44:00.18Z" }, - { url = "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", size = 459721, upload-time = "2024-09-04T20:44:01.585Z" }, - { url = "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", size = 467242, upload-time = "2024-09-04T20:44:03.467Z" }, - { url = "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", size = 477999, upload-time = "2024-09-04T20:44:05.023Z" }, - { url = "https://files.pythonhosted.org/packages/44/74/f2a2460684a1a2d00ca799ad880d54652841a780c4c97b87754f660c7603/cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", size = 454242, upload-time = "2024-09-04T20:44:06.444Z" }, - { url = "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", size = 478604, upload-time = "2024-09-04T20:44:08.206Z" }, - { url = "https://files.pythonhosted.org/packages/34/33/e1b8a1ba29025adbdcda5fb3a36f94c03d771c1b7b12f726ff7fef2ebe36/cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", size = 171727, upload-time = "2024-09-04T20:44:09.481Z" }, - { url = "https://files.pythonhosted.org/packages/3d/97/50228be003bb2802627d28ec0627837ac0bf35c90cf769812056f235b2d1/cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", size = 181400, upload-time = "2024-09-04T20:44:10.873Z" }, - { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178, upload-time = "2024-09-04T20:44:12.232Z" }, - { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840, upload-time = "2024-09-04T20:44:13.739Z" }, - { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803, upload-time = "2024-09-04T20:44:15.231Z" }, - { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850, upload-time = "2024-09-04T20:44:17.188Z" }, - { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729, upload-time = "2024-09-04T20:44:18.688Z" }, - { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256, upload-time = "2024-09-04T20:44:20.248Z" }, - { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424, upload-time = "2024-09-04T20:44:21.673Z" }, - { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568, upload-time = "2024-09-04T20:44:23.245Z" }, - { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736, upload-time = "2024-09-04T20:44:24.757Z" }, - { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448, upload-time = "2024-09-04T20:44:26.208Z" }, - { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976, upload-time = "2024-09-04T20:44:27.578Z" }, - { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989, upload-time = "2024-09-04T20:44:28.956Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802, upload-time = "2024-09-04T20:44:30.289Z" }, - { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792, upload-time = "2024-09-04T20:44:32.01Z" }, - { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893, upload-time = "2024-09-04T20:44:33.606Z" }, - { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810, upload-time = "2024-09-04T20:44:35.191Z" }, - { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200, upload-time = "2024-09-04T20:44:36.743Z" }, - { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447, upload-time = "2024-09-04T20:44:38.492Z" }, - { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358, upload-time = "2024-09-04T20:44:40.046Z" }, - { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469, upload-time = "2024-09-04T20:44:41.616Z" }, - { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475, upload-time = "2024-09-04T20:44:43.733Z" }, - { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009, upload-time = "2024-09-04T20:44:45.309Z" }, + { url = "https://files.pythonhosted.org/packages/c0/e9/6d7724983b3d5a0908dbf74f64038ade77c18646ff6636ec7894fd392ce1/cffi-2.1.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:b65f590ef2a44640f9a05dbb548a429b4ade77913ce683ac8b1480777658a6c0", size = 183837, upload-time = "2026-07-06T21:32:09.655Z" }, + { url = "https://files.pythonhosted.org/packages/69/aa/24580a278de21fd7322635556334d9b535f1cbc00b0a3919447cdf464c65/cffi-2.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164bff1657b2a74f0b6d54e11c9b375bc97b931f2ca9c43fcf875838da1570dd", size = 184226, upload-time = "2026-07-06T21:32:11.196Z" }, + { url = "https://files.pythonhosted.org/packages/88/a9/02cae418ec4beb282ace11958d9d4737793439d561fadc7e6d56f2e2b354/cffi-2.1.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:c941bb58d5a6e1c3892d86e42927ed6c180302f07e6d395d08c416e594b98b46", size = 211107, upload-time = "2026-07-06T21:32:12.328Z" }, + { url = "https://files.pythonhosted.org/packages/3b/30/c806937ed5e4c2c7ac30d9d6b76b5dc57ff8b75d83800d9bb11a8253cf2a/cffi-2.1.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a016194dbe13d14ee9556e734b772d8d67b947092b268d757fd4290e3ba2dfc2", size = 218733, upload-time = "2026-07-06T21:32:13.67Z" }, + { url = "https://files.pythonhosted.org/packages/f9/cf/398272b8bbfd58aa314fda5a7f1cdbb26d1d78ae324a11211521315dd1f0/cffi-2.1.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:03e9810d18c646077e501f661b682fbf5dee4676048527ca3cffe66faa9960dd", size = 205543, upload-time = "2026-07-06T21:32:15.148Z" }, + { url = "https://files.pythonhosted.org/packages/45/ca/f91641185cdd90c36d317a9dc7f85e88ef8682d8b300977baff5e23c35d8/cffi-2.1.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:19c54ac121cad98450b4896fa9a43ee0180d57bc4bc911a33db6cab1efab6cd3", size = 205460, upload-time = "2026-07-06T21:32:16.479Z" }, + { url = "https://files.pythonhosted.org/packages/38/66/04781a77b411f0bb5b234d62c1814754ab75ebe455ccff1b08e8d7aae98f/cffi-2.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d433a51f1870e43a13b6732f92aaf540ff77c2015097c78556f75a2d6c030e0", size = 218760, upload-time = "2026-07-06T21:32:17.98Z" }, + { url = "https://files.pythonhosted.org/packages/d0/9a/bb1d5ed9c3fcae158e9f6391bf309c95d98c2ac37ed56573228471d0af5e/cffi-2.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3d7f118b5adbfdfead90c25822690b02bc8074fba949bb7858bec4ebd55adb43", size = 221230, upload-time = "2026-07-06T21:32:19.407Z" }, + { url = "https://files.pythonhosted.org/packages/41/aa/3c1409cdd26094efacd1c36c66e0a6eb9d4296e4fd4f9901b8b2042f4323/cffi-2.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:c5f5df567f6eb216de69be06ce55c8b714090fae02b18a3b40da8163b8c5fa9c", size = 213524, upload-time = "2026-07-06T21:32:20.828Z" }, + { url = "https://files.pythonhosted.org/packages/fa/75/74dfb7c3fc6ebbd408038476bd4c1d7e925c62614e7b9c534ecc34218288/cffi-2.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:11b3fb55f4f8ad92274ed26705f65d8f91457de71f5380061eb6d125a768fecd", size = 220341, upload-time = "2026-07-06T21:32:21.9Z" }, + { url = "https://files.pythonhosted.org/packages/70/b6/9003c33a3e7d2c1306f5962e646457dcfe5a8cd8fce6bbe02d7af25db783/cffi-2.1.0-cp310-cp310-win32.whl", hash = "sha256:9d72af0cf10a76a600a9690078fe31c63b9588c8e86bf9fd353f713c84b5db0f", size = 174578, upload-time = "2026-07-06T21:32:23.073Z" }, + { url = "https://files.pythonhosted.org/packages/8a/26/710688310447531c7a22f857c7f79d9855ec18b03e04494ced723fb37e2f/cffi-2.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb62edb5bb52cca65fab91a63afa7561607120d26090a7e8fda6fb9f064726da", size = 185071, upload-time = "2026-07-06T21:32:24.671Z" }, + { url = "https://files.pythonhosted.org/packages/d3/67/85c89a59ba36a671e79638f44d466749f08179266a57e4f2ffdf92174072/cffi-2.1.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:02cb7ff33ded4f1532476731f89ede53e2e488a8e6205515a82144246ffa7dcc", size = 183845, upload-time = "2026-07-06T21:32:26.32Z" }, + { url = "https://files.pythonhosted.org/packages/ea/dd/e3b0baa2d3d6a857ac72b7efbf18e32e487c9cdafcc13049ad765495b15e/cffi-2.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f5bce581e6b8c235e566a14768a943b172ada3ed73537bb0c0be1edee312d4e7", size = 184186, upload-time = "2026-07-06T21:32:28.025Z" }, + { url = "https://files.pythonhosted.org/packages/65/68/9f3ef890cf3c6ab97bd531c5677f67613d302165d16f8142b2811782a614/cffi-2.1.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:30b65779d598c370374fefabf138d456fd6f3216bfa7bedfab1ba82025b0cd93", size = 211892, upload-time = "2026-07-06T21:32:29.565Z" }, + { url = "https://files.pythonhosted.org/packages/22/d7/1a74539db16d8bfd839ff1515948948efbb162e574650fd3d846896eea95/cffi-2.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:88023dfe18799507b73f1dbb0d14326a17465de1bc9c9c7655c22845e9ddc3a2", size = 218793, upload-time = "2026-07-06T21:32:30.951Z" }, + { url = "https://files.pythonhosted.org/packages/ec/d1/9a5b7169499e8e8d8e636de70b97ac7c9447104d2ff1a2cd94790cea5162/cffi-2.1.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:0a96b74cda968eebbad56d973efe5098974f0a9fb323865bf99ea1fd24e3e64c", size = 205737, upload-time = "2026-07-06T21:32:32.216Z" }, + { url = "https://files.pythonhosted.org/packages/ba/b0/e131a9c41f10607926278453d9596163594fe1c4ebc46efe3b5e5b34eb84/cffi-2.1.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a5781494d4d400a3f47f8f1da94b324f6e6b440a53387774002890a2a2f4b50f", size = 204909, upload-time = "2026-07-06T21:32:33.655Z" }, + { url = "https://files.pythonhosted.org/packages/fb/d2/4398416cd699b35167947c6e22aca52c47e69ad5695073c9f1f2c52e04aa/cffi-2.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aa7a1b53a2a4452ada2d1b5dade9960b2522f1e61293a811a077439e39029565", size = 217883, upload-time = "2026-07-06T21:32:35.173Z" }, + { url = "https://files.pythonhosted.org/packages/a2/a5/d4fe77b589e5e82d43ebc809bf2e6474afe8e48e32ea050b9357645b6471/cffi-2.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9d8272c0e483b024e1b9ad029821470ed8ec65631dbd90217469da0e7cd89f1c", size = 221251, upload-time = "2026-07-06T21:32:36.527Z" }, + { url = "https://files.pythonhosted.org/packages/22/f0/a2fc43084c0433caf7f461bccc013e28f848d04ee1c5ed7fce71423cf4d9/cffi-2.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7762faa47e8ff7eb80bd261d9a7d8eea2d8baa69de5e95b70c1f338bbe712f02", size = 214250, upload-time = "2026-07-06T21:32:37.852Z" }, + { url = "https://files.pythonhosted.org/packages/04/8c/b925975448cf20634a9fbd5efceb807219db452653648d2897c0989cab2d/cffi-2.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:89095c1968b4ba8285840e131bf2891b09ae137fe2146905acae0354fbce1b5e", size = 219441, upload-time = "2026-07-06T21:32:39.146Z" }, + { url = "https://files.pythonhosted.org/packages/eb/da/5c4918a2d61d86fa927d716cb3d8e4626ef8dc8f605a599d32f33897f59a/cffi-2.1.0-cp311-cp311-win32.whl", hash = "sha256:64c753a0f87a256020004f37a1c8c02c480e725f910f0b2a0f3f07debd1b2479", size = 174496, upload-time = "2026-07-06T21:32:40.467Z" }, + { url = "https://files.pythonhosted.org/packages/f9/c8/6c2de1d55cf35ef8b92885d5ef280790f0fb9634d87ea1cc315176aecd61/cffi-2.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:4f26194e3d95e06501b942642855aed4f953d55e95d7d01b7c4483db3ecff458", size = 185113, upload-time = "2026-07-06T21:32:41.761Z" }, + { url = "https://files.pythonhosted.org/packages/9e/4e/e8d7cb5783f1841a3c8fb3a7735838d7484d08ec08c9f984b14cac1ac0e9/cffi-2.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:35aaea0c7ee0e58a5cd8c2fd1a48fdf7ece0d2699b7ecdda08194e9ce5dd9b3d", size = 179927, upload-time = "2026-07-06T21:32:42.961Z" }, + { url = "https://files.pythonhosted.org/packages/1e/85/990925db5df586ec90beb97529c853497e7f85ba0234830447faf41c3057/cffi-2.1.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:df2b82571a1b30f58a87bf4e5a9e78d2b1eff6c6ce8fd3aa3757221f93f0863f", size = 184829, upload-time = "2026-07-06T21:32:44.324Z" }, + { url = "https://files.pythonhosted.org/packages/4b/92/e7bb136ad6b5352603732cf907ef862ca103f20f2031c1735a46300c20c9/cffi-2.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78474632761faa0fb96f30b1c928c84ebcf68713cbb80d15bab09dfe61640fde", size = 184728, upload-time = "2026-07-06T21:32:45.683Z" }, + { url = "https://files.pythonhosted.org/packages/c3/c0/d1ec30ffb370f748f2fb54425972bfef9871e0132e82fb589c46b6676049/cffi-2.1.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:5972433ad71a9e46516584ef60a0fda12d9dc459938d1539c3ddecf9bdc1368d", size = 214815, upload-time = "2026-07-06T21:32:48.557Z" }, + { url = "https://files.pythonhosted.org/packages/1b/dc/5620cf930688be01f2d673804291de757a934c90b946dbdc3d84130c2ea4/cffi-2.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b6422532152adf4e59b110cb2808cee7a033800952f5c036b4af047ee43199e7", size = 222429, upload-time = "2026-07-06T21:32:49.848Z" }, + { url = "https://files.pythonhosted.org/packages/4b/a4/77b53abbf7a1e0beb9637edbef2a94d15f9c822f591e85d439ffd91519a6/cffi-2.1.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:46b1c8db8f6122420f32d02fffb924c2fe9bc772d228c7c711748fff56aabb2b", size = 210315, upload-time = "2026-07-06T21:32:51.221Z" }, + { url = "https://files.pythonhosted.org/packages/58/0c/f528df19cc94b675087324d4760d9e6d5bfae97d6217aa4fac43de4f5fcc/cffi-2.1.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9fafc5aa2e2a39aaf7f8cc0c1f044a9b07fca12e558dca53a3cc5c654ad67a7", size = 208859, upload-time = "2026-07-06T21:32:52.512Z" }, + { url = "https://files.pythonhosted.org/packages/62/f2/c9522a81c32132799a1972c39f5c5f8b4c8b9f00488a23feaa6c06f07741/cffi-2.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1e9f50d192a3e525b15a75ab5114e442d83d657b7ec29182a991bc9a88fd3a66", size = 221844, upload-time = "2026-07-06T21:32:53.704Z" }, + { url = "https://files.pythonhosted.org/packages/6e/28/bd53988b9833e8f8ad539d26f4c07a6b3f6bcb1e9e02e7ca038250b3428d/cffi-2.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98fff996e983a36d3aa2eca83af40c5821202e7e6f32d13ae94e3d2286f10cfe", size = 225287, upload-time = "2026-07-06T21:32:54.907Z" }, + { url = "https://files.pythonhosted.org/packages/79/99/0d0fd37f055224085f42bbb2c022d002e17dde4a97972822327b07d84101/cffi-2.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:379de10ce1ba048b1448599d1b37b24caee16309d1ac98d3982fc997f768700b", size = 223681, upload-time = "2026-07-06T21:32:56.329Z" }, + { url = "https://files.pythonhosted.org/packages/b0/80/c138990aa2a70b1a269f6e06348729836d733d6f970867943f61d367f8cc/cffi-2.1.0-cp312-cp312-win32.whl", hash = "sha256:9b8f0f26ca4e7513c534d351eca551947d053fac438f2a04ac96d882909b0d3a", size = 175269, upload-time = "2026-07-06T21:32:57.777Z" }, + { url = "https://files.pythonhosted.org/packages/a8/eb/f636456ff21a83fc13c032b58cc5dde061691546ac79efa284b2989b7982/cffi-2.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:c97f080ea627e2863524c5af3836e2270b5f5dfff1f104392b959f8df0c5d384", size = 185881, upload-time = "2026-07-06T21:32:59.253Z" }, + { url = "https://files.pythonhosted.org/packages/dd/2c/400ea43e721727dca8a65c4521390e9196757caba4a45643acb2b63271b8/cffi-2.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:6d194185eabd279f1c05ebe3504265ddfc5ad2b58d0714f7db9f01da592e9eb6", size = 180088, upload-time = "2026-07-06T21:33:02.278Z" }, + { url = "https://files.pythonhosted.org/packages/96/88/a996879e2eeccb815f6e3a5967b12a308257412acec882039d386bd2aa7b/cffi-2.1.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:10537b1df4967ca26d21e5072d7d54188354483b91dc75058968d3f0cf13fbda", size = 194331, upload-time = "2026-07-06T21:33:03.697Z" }, + { url = "https://files.pythonhosted.org/packages/58/85/7ae00d5c8dd6266f4e944c3db630f3c5c9a98b61d469c714d848b1d8138a/cffi-2.1.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:a95b05f9baf29b91171b3a8bd2020b028835243e7b0ff6bb23e2a3c228518b1b", size = 196966, upload-time = "2026-07-06T21:33:05.353Z" }, + { url = "https://files.pythonhosted.org/packages/8c/e9/45c3a76ad8d43ad9261f4c95436da61128d3ca545d72b9612c0ab5be0b1c/cffi-2.1.0-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:15faec4adfff450819f3aee0e2e02c812de6edb88203aa58807955db2003472a", size = 184795, upload-time = "2026-07-06T21:33:06.699Z" }, + { url = "https://files.pythonhosted.org/packages/84/4c/82f132cb4418ee6d953d982b19191e87e2a6372c8a4ce36e50b69d6ade4a/cffi-2.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:716ff8ec22f20b4d988b12884086bcef0fc99737043e503f7a3935a6be99b1ea", size = 184746, upload-time = "2026-07-06T21:33:08.071Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1c/4ed5a0e5bdca6cbc275556de3328dd1b76fd0c11cc13c88fe66d1d8715f2/cffi-2.1.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:63960549e4f8dc41e31accb97b975abaecfc44c03e396c093a6436763c2ea7db", size = 214747, upload-time = "2026-07-06T21:33:09.671Z" }, + { url = "https://files.pythonhosted.org/packages/3a/a6/e879bb68cc23a2bc9ba8f4b7d8019f0c2694bad2ab6c4a3701d429439f58/cffi-2.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff067a8d8d880e7809e4ac88eb009bb848870115317b306666502ccad30b147f", size = 222392, upload-time = "2026-07-06T21:33:10.896Z" }, + { url = "https://files.pythonhosted.org/packages/88/f6/01890cfd63c08f8eb96a8319b0443690197d240a8bd6346048cf7bde9190/cffi-2.1.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3b926723c13eba9f81d2ef3820d63aeceec3b2d4639906047bf675cb8a7a500d", size = 210285, upload-time = "2026-07-06T21:33:12.251Z" }, + { url = "https://files.pythonhosted.org/packages/a6/cf/2b684132056f438567b61e19d690dd31cd0921ace051e0a458be6074369e/cffi-2.1.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:47ff3a8bfd8cb9da1af7524b965127095055654c177fcfc7578debcb015eecd0", size = 208801, upload-time = "2026-07-06T21:33:13.617Z" }, + { url = "https://files.pythonhosted.org/packages/6f/08/f2e7d62c460faae0926f2d6e423694aa409ced3bc1fe2927a0a6e5f05416/cffi-2.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:799416bae98336e400981ff6e532d67d5c709cfb30afb79865a1315f94b0e224", size = 221808, upload-time = "2026-07-06T21:33:15.466Z" }, + { url = "https://files.pythonhosted.org/packages/38/37/04f54b8e63a02f3d908332c9effbf8c366167c6f733ed8a3d4f79b7e2a1e/cffi-2.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:961be50688f7fba2fa65f63712d3b9b341a22311f5253460ce933f52f0de1c8c", size = 225241, upload-time = "2026-07-06T21:33:16.869Z" }, + { url = "https://files.pythonhosted.org/packages/a9/d6/c72eecca433cd3e681c65ed313ab4835d9d4a379704d0f628a6a05f51c2e/cffi-2.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bf5c6cf48238b0eb4c086978c492ad1cbc22373fc5b2d7353b3a598ce6db887a", size = 223588, upload-time = "2026-07-06T21:33:18.239Z" }, + { url = "https://files.pythonhosted.org/packages/c6/4b/e706f67279140f92939da3475ad610df18bfd52d50f14953a8e5fede71d5/cffi-2.1.0-cp313-cp313-win32.whl", hash = "sha256:db3eb7d46527159a878ec3460e9d40615bc25ba337d477db681aea6e4f05c5d2", size = 175248, upload-time = "2026-07-06T21:33:19.799Z" }, + { url = "https://files.pythonhosted.org/packages/5a/47/59eb7975cb0e4ef0afa764ea945b29a5bb4537a9f771cb7d6c8a5dd74c95/cffi-2.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:8e74a6135550c4748af665b1b1118b6aab33b1fc6a16f9aff630af107c3b4512", size = 185717, upload-time = "2026-07-06T21:33:21.47Z" }, + { url = "https://files.pythonhosted.org/packages/5a/af/34fee85c48f8d94efc8597bc09470c9dd274c145f1c12e0fbc6ab6d38d74/cffi-2.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:2282cd5e38aa8accd03e99d1256af8411c84cdbee6a89d841b563fdbd1f3e50f", size = 180114, upload-time = "2026-07-06T21:33:22.515Z" }, + { url = "https://files.pythonhosted.org/packages/d8/f0/81478e482afa03f6d18dc8f2afb5edc45b3080853b634b5ed91961be0998/cffi-2.1.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:d2117334c3af3bdcb9a88522b844a2bdb5efdc4f71c6c822df55486ae1c3347a", size = 194142, upload-time = "2026-07-06T21:33:23.657Z" }, + { url = "https://files.pythonhosted.org/packages/7d/95/8de304305cd9204974b0ca051b86d307cafca13aa575a0ef1b44d92c0d8c/cffi-2.1.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:702c436735fbe99d59ada02a1f65cfc0d31c0ee8b7290912f8fbc5cd1e4b16c3", size = 196819, upload-time = "2026-07-06T21:33:25.007Z" }, + { url = "https://files.pythonhosted.org/packages/20/71/7c8372d30e42415602ed9f268f7cfd66f1b855fed881ecd168bcb45dbc0b/cffi-2.1.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1ff3456eab0d889592d1936d6125bbfbc7ae4d3354a700f8bd80450a66445d4d", size = 184965, upload-time = "2026-07-06T21:33:26.605Z" }, + { url = "https://files.pythonhosted.org/packages/d6/5c/584e626835f0375c928176c04137c96927165cb8733cdb3150ec04e5ee5e/cffi-2.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c4165821e131d6d4ca444347c2b694e2311bcfa3fe5a861cc72968f28867beac", size = 184952, upload-time = "2026-07-06T21:33:27.823Z" }, + { url = "https://files.pythonhosted.org/packages/2e/d2/065fcae1c73979fac8e054462478d0ff8a29c40cdc2ed7ea5676a061df53/cffi-2.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:276f20fffd7b396e12516ba8edf9509210ac248cbbc5acbc39cd512f9f59ebe6", size = 222353, upload-time = "2026-07-06T21:33:29.178Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a5/e8bbb1ce5b3ac2f53ad6a10bde44318a5a8d99d4f4a000d44a6e39aeb3e4/cffi-2.1.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:7d5980a3433d4b71a5e120f9dd551403d7824e31e2e67124fe2769c404c06913", size = 210051, upload-time = "2026-07-06T21:33:30.534Z" }, + { url = "https://files.pythonhosted.org/packages/28/ed/c127d3ac36e899c965e3361357c3befacd6578c03f40125183e41c3b219e/cffi-2.1.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:6ca4919c6e4f89aa99c42510b42cf54596892c00b3f9077f6bdd1505e24b9c8d", size = 208630, upload-time = "2026-07-06T21:33:31.753Z" }, + { url = "https://files.pythonhosted.org/packages/cc/d7/97d3136f81db489ec8d1d67748c110d6c994268fd7528014aa9f2b085e4e/cffi-2.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d53d10f7da99ae46f7373b9150393e9c5eab9b224909982b43832668de4779f5", size = 221593, upload-time = "2026-07-06T21:33:33.044Z" }, + { url = "https://files.pythonhosted.org/packages/d3/27/93195977168ee63aed233a1a0993a2178798654d1f4bddcdd321d6fd3b21/cffi-2.1.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c351efb95e832a853a29361675f33a7ce53de1a109cd73fd47af0712213aa4ce", size = 225146, upload-time = "2026-07-06T21:33:34.224Z" }, + { url = "https://files.pythonhosted.org/packages/b3/c1/6dbd291ee2ae5a50a034aa057207081f545923bbf15dad4511e985aafff5/cffi-2.1.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:dbf7c7a88e2bac086f06d14577332760bdeecc42bdec8ac4077f6260557d9326", size = 223240, upload-time = "2026-07-06T21:33:35.57Z" }, + { url = "https://files.pythonhosted.org/packages/0f/6f/ade5ce9863a57992a6ea3d0d10d7e29b8749fc127204b3d493d667b2815f/cffi-2.1.0-cp314-cp314-win32.whl", hash = "sha256:1854b724d00f6654c742097d5387569021be12d3a0f770eae1df8f8acfcc6acd", size = 177723, upload-time = "2026-07-06T21:33:51.626Z" }, + { url = "https://files.pythonhosted.org/packages/41/de/92b9eeed4ae4a21d6fd9b2a2c8505cbed573299902ea73981cc13f7ff62c/cffi-2.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:1b96bfe2c4bd825681b7d311ad6d9b7280a091f43e8f63da5729638083cd3bfb", size = 187937, upload-time = "2026-07-06T21:33:53.403Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1a/cc6ae6c2913a03aab8898eee57963cf1035b8df5872ed8b9115fcc7e2be8/cffi-2.1.0-cp314-cp314-win_arm64.whl", hash = "sha256:7d28dff1db6764108bc30788d85d61c876beff416d9a49cb9dd7c5a9f34f5804", size = 183001, upload-time = "2026-07-06T21:33:54.74Z" }, + { url = "https://files.pythonhosted.org/packages/14/f0/134c00ce0779ec86dea2aa1aac69339c2741a8045072676763512363a2ea/cffi-2.1.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7ea6b3e2c4250ff1de21c630fe72d0f63eb95c2c32ffbf64a358cf4a8836d714", size = 188538, upload-time = "2026-07-06T21:33:36.792Z" }, + { url = "https://files.pythonhosted.org/packages/50/d8/3b86aba791cb610d24e8a3e1b2cd529e71fa15096b04e4d4e360049d4a4c/cffi-2.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6af371f3767faeffc6ac1ef57cdfd25844403e9d3f476c5537caee499de96376", size = 188230, upload-time = "2026-07-06T21:33:38.011Z" }, + { url = "https://files.pythonhosted.org/packages/14/d0/117dcd9209255ad8571fbc8c92ef32593a1d294dcec91ddc4e4db50606f2/cffi-2.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb4e8997a49aa2c08a3e43c9045d224448b8941d88e7ac163c7d383e560cbf98", size = 223899, upload-time = "2026-07-06T21:33:39.514Z" }, + { url = "https://files.pythonhosted.org/packages/b6/3d/f20f8b886b254e3ad10e15cd4186d3aed49f3e6a35ab37aab9f8f25f7c03/cffi-2.1.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:bf01d8c84cbea96b944c73b22182e6c7c432b3475632b8111dbfdc95ddad6e13", size = 211652, upload-time = "2026-07-06T21:33:40.851Z" }, + { url = "https://files.pythonhosted.org/packages/28/3b/fad54de07260b93ddeef4b96d0131d57ea900675df1d410ae1deee52d7a6/cffi-2.1.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:33eb1ad83ebe8f313e0df035c406227d55a79456704a863fad9842136af5ad7d", size = 210755, upload-time = "2026-07-06T21:33:42.183Z" }, + { url = "https://files.pythonhosted.org/packages/cc/82/3d5c705acb7abbba9bbd7d79b8e62e0f25b6120eb7ae6ac49f1b721722fe/cffi-2.1.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ac0f1a2d0cfa7eea3f2aaf006ab6e70e8feeb16b75d65b7e5939982ca2f11056", size = 223933, upload-time = "2026-07-06T21:33:43.603Z" }, + { url = "https://files.pythonhosted.org/packages/6c/d0/47e338384ab6b1004241002fa616301020cea4fc95f283506565d252f276/cffi-2.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c16914df9fb7f500e440e6875fa23ff5e0b31db01fa9c06af98d59a91f0dc2e4", size = 226749, upload-time = "2026-07-06T21:33:45.046Z" }, + { url = "https://files.pythonhosted.org/packages/70/25/65bd5b58ea4bfdfc15cde02cb5365f89ef8ab8b2adfb8fe5c4bd4233382f/cffi-2.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5ecbd0499275d57506d397eebe1981cee87b47fcd9ef5c22cab7ed7644a39a94", size = 225703, upload-time = "2026-07-06T21:33:46.374Z" }, + { url = "https://files.pythonhosted.org/packages/dc/78/aa01ac599a8a4322533d45a1f9bc93b338276d2d59dabbe7c6d92a775c81/cffi-2.1.0-cp314-cp314t-win32.whl", hash = "sha256:7d034dcffa09e9a46c93fa3a3be402096cb5354ac6e41ab8e5cc9cd8b642ad76", size = 182857, upload-time = "2026-07-06T21:33:47.696Z" }, + { url = "https://files.pythonhosted.org/packages/b9/26/d00496b22de4d4228f32dde94ad996f350c8aad676d63bcca0743c8dea4d/cffi-2.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:0582a58f3051372229ca8e7f5f589f9e5632678208d8636fea3676711fdf7fe5", size = 194065, upload-time = "2026-07-06T21:33:48.953Z" }, + { url = "https://files.pythonhosted.org/packages/d5/dd/0c7dbf815a579ff005008a2d815a55d6bb047c349eef536d9dc53d3f0a8d/cffi-2.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:510aeeeac94811b138077451da1fb18b308a5feab47dd2b603af55804155e1c8", size = 186404, upload-time = "2026-07-06T21:33:50.309Z" }, + { url = "https://files.pythonhosted.org/packages/55/c7/8c8c50cb11c6750051daf12164098a9a6f027ac4356967fd4d800a07f242/cffi-2.1.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:2e9dabb9abcb7ad15938c7196ad5c1718a4e6d33cc79b4c0209bdb64c4a54a5c", size = 194121, upload-time = "2026-07-06T21:33:56.109Z" }, + { url = "https://files.pythonhosted.org/packages/99/e2/67680bf19a6b60d2bb7ff83baefa2a4c3d2d7dc0f3277034b802e1fc504c/cffi-2.1.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:37f525a7e7e50c017fdebe58b787be310ad59357ae43a053943a6e1a6c526001", size = 196820, upload-time = "2026-07-06T21:33:57.288Z" }, + { url = "https://files.pythonhosted.org/packages/ed/da/4bbe583a3b3a5c8c60892124fe17f3fa3656523faf0d3484eae90f091853/cffi-2.1.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:95f2954c2c9473d892eca6e0409f3568b37ab62a8eedb122461f73cc273476e3", size = 184936, upload-time = "2026-07-06T21:33:58.765Z" }, + { url = "https://files.pythonhosted.org/packages/e5/4b/1f4c36ab273980d7aa75bb126ea4f8971f24a96108acad3a0a084028c57b/cffi-2.1.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:cdf2448aab5f661c9315308ec8b93f4e8a1a67a3c733f8631067a2b67d5913dc", size = 185045, upload-time = "2026-07-06T21:34:00.085Z" }, + { url = "https://files.pythonhosted.org/packages/ef/c3/ad299dc38f3583f8d916b299f028af418a9ec98bc695fcbebeae7420691c/cffi-2.1.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:90bec57cf82089383bd06a605b3eb8daebf7e5a668520beaf6e327a83a947699", size = 222342, upload-time = "2026-07-06T21:34:01.814Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d8/df4543cc087245044ed02ef3ad8e0a26619d0075ac7a77a12dc81177851b/cffi-2.1.0-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6274dcb2d15cef48daa73ed1be5a40d501d74dccd0cd6db364776d12cb6ba022", size = 210073, upload-time = "2026-07-06T21:34:03.255Z" }, + { url = "https://files.pythonhosted.org/packages/2c/0e/fac738d73728c6cea2a88a2883dca54892496cbba88a1dc1f2909cb8a6f5/cffi-2.1.0-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:2b71d409cccee78310ab5dec549aed052aaea483346e282c7b02362596e01bb0", size = 208551, upload-time = "2026-07-06T21:34:04.433Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3f/0b04a700dd64f465c93020253a793a82c9b4dff9961f48facd0df945d9b8/cffi-2.1.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7d3538f9c0e50670f4deb93dbb696576e60590369cae2faf7de681e597a8a1f1", size = 221649, upload-time = "2026-07-06T21:34:06.157Z" }, + { url = "https://files.pythonhosted.org/packages/5d/7c/b7379a5704c79eda57ce075869ba70a0368d1c850f803b3c0d078d39dcaf/cffi-2.1.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:8f9ec95b8a043d3dfbc74d9abc6f7baf524dd27a8dc160b0a32ff9cdab650c28", size = 225203, upload-time = "2026-07-06T21:34:07.489Z" }, + { url = "https://files.pythonhosted.org/packages/5a/02/d5e6c43ea85c41bda2a184a3418f195fe7cf602967a8d2b94e085b83deef/cffi-2.1.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:af5e2915d41fe6c961694d7bfdc8562942638200f3ce2765dfb8b745cf997629", size = 223263, upload-time = "2026-07-06T21:34:08.712Z" }, + { url = "https://files.pythonhosted.org/packages/2c/d8/772b8259bf75749adffb1c546828978381fb516f60cf701f6c83daf60c85/cffi-2.1.0-cp315-cp315-win32.whl", hash = "sha256:0a42c688d19fca6e095a53c6a6e2295a5b050a8b289f109adab02a9e61a25de6", size = 177696, upload-time = "2026-07-06T21:34:26.355Z" }, + { url = "https://files.pythonhosted.org/packages/2f/dd/afa2191fc6d57fedd26e5844a2fe2fcc0bbfa00961bbaa5a41e4921e7cca/cffi-2.1.0-cp315-cp315-win_amd64.whl", hash = "sha256:bccbbb5ee76a61f9d99b5bf3846a51d7fca4b6a732fe46f89295610edaf41853", size = 187914, upload-time = "2026-07-06T21:34:27.58Z" }, + { url = "https://files.pythonhosted.org/packages/05/ef/6cd4f8c671517162379dc79cfae5aea9106bc38abb89628d5c16adf6a838/cffi-2.1.0-cp315-cp315-win_arm64.whl", hash = "sha256:8d35c139744adb3e727cd51b1a18324bbe44b8bd41bf8322bca4d41289f48eda", size = 183004, upload-time = "2026-07-06T21:34:28.905Z" }, + { url = "https://files.pythonhosted.org/packages/11/b6/12fc55092817a5faa26fb8c40c7f9d662e11a46ee248c137aafc42517d92/cffi-2.1.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:f9912624a0c0b834b7520d7769b3644453aabc0a7e1c839da7359f050750e9bc", size = 188378, upload-time = "2026-07-06T21:34:09.926Z" }, + { url = "https://files.pythonhosted.org/packages/8d/2e/cdac88979f295fde5daa69622c7d2111e56e7ceb94f211357fbe452339e4/cffi-2.1.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:df92f2aba50eb4d96718b68ef76f2e57a57b54f2fa62333496d16c6d585a85ca", size = 188319, upload-time = "2026-07-06T21:34:11.101Z" }, + { url = "https://files.pythonhosted.org/packages/e0/27/1d0b408497e41a74795af122d7b603c418c5fed0171450f899afd04e594f/cffi-2.1.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0520e1f4c35f44e209cbbb421b67eec42e6a157f59444dfb6058874ff3610e5d", size = 223904, upload-time = "2026-07-06T21:34:12.606Z" }, + { url = "https://files.pythonhosted.org/packages/8b/31/e115c985105dd7ffb32444505f18ceb874bb42d992af05d5dced7ecf1980/cffi-2.1.0-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3681e031db29958a7502f5c0c9d6bbc4c36cb20f7b104086fa642d1799631ff8", size = 211554, upload-time = "2026-07-06T21:34:13.987Z" }, + { url = "https://files.pythonhosted.org/packages/5a/67/9e6e09409336d9e515c58367e7cfcf4f89df06ad25252675595a58eb59d5/cffi-2.1.0-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:762f99479dcb369f60ab9017ad4ab97a36a1dd7c1ee5a3b15db0f4b8659120cd", size = 210795, upload-time = "2026-07-06T21:34:15.972Z" }, + { url = "https://files.pythonhosted.org/packages/19/e5/d3cc82a4a0be7902af279c04181ad038449c096734464a5ae1de3e1401bd/cffi-2.1.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0611e7ebf90573a535ebdc33ae9da222d037853983e13359f580fab781ca017f", size = 223843, upload-time = "2026-07-06T21:34:17.509Z" }, + { url = "https://files.pythonhosted.org/packages/b9/65/b434abc97ce7cecc2c640fde160507c0ecc7e21544b483ba3325d2e2ea17/cffi-2.1.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:86cf8755a791f72c85dc287128cc62d4f24d392e3f1e15837245623f4a33cccc", size = 226773, upload-time = "2026-07-06T21:34:19.05Z" }, + { url = "https://files.pythonhosted.org/packages/b5/9f/d4dc66ca651eb1145a133314cda721abf13cfac3d28c4a0402263ae6ad75/cffi-2.1.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:ba00f661f8ba35d075c937174e27c2c421cec3942fd2e0ea3e66996757c0fdd9", size = 225719, upload-time = "2026-07-06T21:34:20.576Z" }, + { url = "https://files.pythonhosted.org/packages/68/5a/e536c528bc8057496c360c0978559a2dc45653f89dd6151078aa7d8fca1a/cffi-2.1.0-cp315-cp315t-win32.whl", hash = "sha256:cb96698e3c7413d906ce83f8ffd245ec1bd94707541f299d0ce4d6b0193e982b", size = 182760, upload-time = "2026-07-06T21:34:22.059Z" }, + { url = "https://files.pythonhosted.org/packages/d3/0b/0ffe8b82d3875bced5fa1e7986a7a46b748262a40ab7f60b475eb9fb1bb3/cffi-2.1.0-cp315-cp315t-win_amd64.whl", hash = "sha256:f146d154428a2523f9cc7936c02353c2459b8f6cf07d3cd1ee1c0a611109c5d5", size = 193769, upload-time = "2026-07-06T21:34:23.589Z" }, + { url = "https://files.pythonhosted.org/packages/a0/17/1073b53b68c9b5ca6914adf5f8bf55aacc2d3be102418c90700160ea8605/cffi-2.1.0-cp315-cp315t-win_arm64.whl", hash = "sha256:cbb7640ce37159548d2147b5b8c241f962143d4c71231431820783f4dc78f210", size = 186405, upload-time = "2026-07-06T21:34:24.857Z" }, ] [[package]] -name = "coincurve" -version = "20.0.0" +name = "coincurve-cp314-fix" +version = "22.0.1" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "asn1crypto" }, - { name = "cffi" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d9/4c/9e5e51e6c12cec6444c86697992f9c6ccffa19f84d042ff939c8b89206ff/coincurve-20.0.0.tar.gz", hash = "sha256:872419e404300302e938849b6b92a196fabdad651060b559dc310e52f8392829", size = 122865, upload-time = "2024-06-02T18:15:50.787Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/f9/e9d3c502369933915d3e72d596a1ddf81b3d5ae986f5bd65bc5ada52e6b9/coincurve_cp314_fix-22.0.1.tar.gz", hash = "sha256:b68397f902a73ba15ab5652fae712f6ba85625e382026be2a5c5e698845a79f4", size = 129346, upload-time = "2026-07-17T14:49:10.202Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/14/0c/f6a8b06f461089aeab441824134ea5d5824dba3acaac0a9dbf8444cbe1d6/coincurve-20.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d559b22828638390118cae9372a1bb6f6594f5584c311deb1de6a83163a0919b", size = 1255634, upload-time = "2024-06-02T18:14:26.381Z" }, - { url = "https://files.pythonhosted.org/packages/62/c2/0dbabd2c6648f49f730fdcbba84c53b5ffaf452fca85c750633141fe049c/coincurve-20.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:33d7f6ebd90fcc550f819f7f2cce2af525c342aac07f0ccda46ad8956ad9d99b", size = 1255532, upload-time = "2024-06-02T18:14:28.792Z" }, - { url = "https://files.pythonhosted.org/packages/f5/77/c4fa50f8cb5d050a9bcab806503acdd1705b0dfb5c554eed15cc18bc12e8/coincurve-20.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22d70dd55d13fd427418eb41c20fde0a20a5e5f016e2b1bb94710701e759e7e0", size = 1191928, upload-time = "2024-06-02T18:14:30.874Z" }, - { url = "https://files.pythonhosted.org/packages/a3/11/6254ea354a32a3a1d70722daf58f2ebf0f689f0940eaced5127233416553/coincurve-20.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46f18d481eaae72c169f334cde1fd22011a884e0c9c6adc3fdc1fd13df8236a3", size = 1194364, upload-time = "2024-06-02T18:14:32.684Z" }, - { url = "https://files.pythonhosted.org/packages/a7/a9/d8717d41eb02688691adc30d7348f7c5fdc78e977f4cea83ee84622050b5/coincurve-20.0.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9de1ec57f43c3526bc462be58fb97910dc1fdd5acab6c71eda9f9719a5bd7489", size = 1204658, upload-time = "2024-06-02T18:14:33.919Z" }, - { url = "https://files.pythonhosted.org/packages/55/13/40923832d99c18fb01a00f83e5f6f702156e71cc0eb5d6281535eee662af/coincurve-20.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a6f007c44c726b5c0b3724093c0d4fb8e294f6b6869beb02d7473b21777473a3", size = 1215298, upload-time = "2024-06-02T18:14:35.318Z" }, - { url = "https://files.pythonhosted.org/packages/4d/87/646462a7a7810c7a3dcadae8969e1b78d535bcff072c26b17588e93a39b8/coincurve-20.0.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0ff1f3b81330db5092c24da2102e4fcba5094f14945b3eb40746456ceabdd6d9", size = 1204504, upload-time = "2024-06-02T18:14:36.567Z" }, - { url = "https://files.pythonhosted.org/packages/01/58/fbb9a312d559aee701491435b691e409fb0efa12eabf269ff651d537fed4/coincurve-20.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:82f7de97694d9343f26bd1c8e081b168e5f525894c12445548ce458af227f536", size = 1209298, upload-time = "2024-06-02T18:14:38.384Z" }, - { url = "https://files.pythonhosted.org/packages/ee/d0/1d5679c000b31f3b32512632d98571f2bb752cd25c127d6f5bf3711b6eae/coincurve-20.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:e905b4b084b4f3b61e5a5d58ac2632fd1d07b7b13b4c6d778335a6ca1dafd7a3", size = 1198934, upload-time = "2024-06-02T18:14:39.788Z" }, - { url = "https://files.pythonhosted.org/packages/a3/f6/8c1499f730fac49ec13740fb1c015ce8082fa6b917790056988559f22212/coincurve-20.0.0-cp310-cp310-win_arm64.whl", hash = "sha256:3657bb5ed0baf1cf8cf356e7d44aa90a7902cc3dd4a435c6d4d0bed0553ad4f7", size = 1193319, upload-time = "2024-06-02T18:14:41.165Z" }, - { url = "https://files.pythonhosted.org/packages/24/a7/d60a41b3f0a546854c9b7ca65ab99a5fdf1c9e158ae264a580de8f23fd1c/coincurve-20.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:44087d1126d43925bf9a2391ce5601bf30ce0dba4466c239172dc43226696018", size = 1255635, upload-time = "2024-06-02T18:14:42.483Z" }, - { url = "https://files.pythonhosted.org/packages/b7/4a/727fab66c0fbecfd7beeb38467910bd3652a77df649565e30160a9d2bae2/coincurve-20.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ccf0ba38b0f307a9b3ce28933f6c71dc12ef3a0985712ca09f48591afd597c8", size = 1255536, upload-time = "2024-06-02T18:14:44.077Z" }, - { url = "https://files.pythonhosted.org/packages/0f/8b/25d4ae5bb60665023e6d71681fada88ee95b5010dae6fc0b44d8b23b8df1/coincurve-20.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:566bc5986debdf8572b6be824fd4de03d533c49f3de778e29f69017ae3fe82d8", size = 1191928, upload-time = "2024-06-02T18:14:45.739Z" }, - { url = "https://files.pythonhosted.org/packages/0d/86/8c32c512fa27bfe7cfe70329fd43ebac23c0c8cec202cf6e4f52854e7ce3/coincurve-20.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4d70283168e146f025005c15406086513d5d35e89a60cf4326025930d45013a", size = 1194365, upload-time = "2024-06-02T18:14:47.008Z" }, - { url = "https://files.pythonhosted.org/packages/fe/74/fefbe512f54df7d02a7ea4821b87cf199a91b3565cdf0c94448b3f6b1af1/coincurve-20.0.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:763c6122dd7d5e7a81c86414ce360dbe9a2d4afa1ca6c853ee03d63820b3d0c5", size = 1204658, upload-time = "2024-06-02T18:14:48.348Z" }, - { url = "https://files.pythonhosted.org/packages/09/68/05b29f881f628ce8e8468f5f7420f6c4d7c129f43964e81d15bf388ae67a/coincurve-20.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f00c361c356bcea386d47a191bb8ac60429f4b51c188966a201bfecaf306ff7f", size = 1215301, upload-time = "2024-06-02T18:14:49.84Z" }, - { url = "https://files.pythonhosted.org/packages/ee/5d/d91549cf5a163797b0724dc2dcd551b908b6beddb6598b37743df7f6f3ec/coincurve-20.0.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4af57bdadd2e64d117dd0b33cfefe76e90c7a6c496a7b034fc65fd01ec249b15", size = 1204505, upload-time = "2024-06-02T18:14:51.816Z" }, - { url = "https://files.pythonhosted.org/packages/37/0f/898022e08760fb57d281f3695576e859b0f8a8ac629670223d9066c3f60d/coincurve-20.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a26437b7cbde13fb6e09261610b788ca2a0ca2195c62030afd1e1e0d1a62e035", size = 1209305, upload-time = "2024-06-02T18:14:53.39Z" }, - { url = "https://files.pythonhosted.org/packages/57/b9/643567d3f680ddf8d1bf10a56112ae7755296500d8eaaef498be637a8533/coincurve-20.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:ed51f8bba35e6c7676ad65539c3dbc35acf014fc402101fa24f6b0a15a74ab9e", size = 1198932, upload-time = "2024-06-02T18:14:54.751Z" }, - { url = "https://files.pythonhosted.org/packages/b3/3a/898f5c12469b292042608dd0702bcb0420ec32bac6b1ca2a0dd790f922bd/coincurve-20.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:594b840fc25d74118407edbbbc754b815f1bba9759dbf4f67f1c2b78396df2d3", size = 1193318, upload-time = "2024-06-02T18:14:55.981Z" }, - { url = "https://files.pythonhosted.org/packages/8f/24/e1bf259dd57186fbdc7cec51909db320884162cfad5ec72cbaa63573ff9d/coincurve-20.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4df4416a6c0370d777aa725a25b14b04e45aa228da1251c258ff91444643f688", size = 1255671, upload-time = "2024-06-02T18:14:57.863Z" }, - { url = "https://files.pythonhosted.org/packages/0a/c5/1817f87d1cd5ff50d8537fe60fb96f66b76dd02da885d970952e6189a801/coincurve-20.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1ccc3e4db55abf3fc0e604a187fdb05f0702bc5952e503d9a75f4ae6eeb4cb3a", size = 1255565, upload-time = "2024-06-02T18:14:59.128Z" }, - { url = "https://files.pythonhosted.org/packages/90/9f/35e15f993717ed1dcc4c26d9771f073a1054af26808a0f421783bb4cd7e0/coincurve-20.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac8335b1658a2ef5b3eb66d52647742fe8c6f413ad5b9d5310d7ea6d8060d40f", size = 1191953, upload-time = "2024-06-02T18:15:01.047Z" }, - { url = "https://files.pythonhosted.org/packages/4a/3d/6a9bc32e69b738b5e05f5027bace1da6722352a4a447e495d3c03a601d99/coincurve-20.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7ac025e485a0229fd5394e0bf6b4a75f8a4f6cee0dcf6f0b01a2ef05c5210ff", size = 1194425, upload-time = "2024-06-02T18:15:02.919Z" }, - { url = "https://files.pythonhosted.org/packages/1a/a6/15424973dc47fc7c87e3c0f8859f6f1b1032582ee9f1b85fdd5d1e33d630/coincurve-20.0.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e46e3f1c21b3330857bcb1a3a5b942f645c8bce912a8a2b252216f34acfe4195", size = 1204678, upload-time = "2024-06-02T18:15:04.308Z" }, - { url = "https://files.pythonhosted.org/packages/6a/e7/71ddb4d66c11c4ad13e729362f8852e048ae452eba3dfcf57751842bb292/coincurve-20.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:df9ff9b17a1d27271bf476cf3fa92df4c151663b11a55d8cea838b8f88d83624", size = 1215395, upload-time = "2024-06-02T18:15:05.701Z" }, - { url = "https://files.pythonhosted.org/packages/b9/7d/03e0a19cfff1d86f5d019afc69cfbff02caada701ed5a4a50abc63d4261c/coincurve-20.0.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4155759f071375699282e03b3d95fb473ee05c022641c077533e0d906311e57a", size = 1204552, upload-time = "2024-06-02T18:15:07.107Z" }, - { url = "https://files.pythonhosted.org/packages/07/cd/e9bd4ca7d931653a35c74194da04191a9aecc54b8f48a554cd538dc810e4/coincurve-20.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0530b9dd02fc6f6c2916716974b79bdab874227f560c422801ade290e3fc5013", size = 1209392, upload-time = "2024-06-02T18:15:08.663Z" }, - { url = "https://files.pythonhosted.org/packages/99/54/260053f14f74b99b645084231e1c76994134ded49407a3bba23a8ffc0ff6/coincurve-20.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:eacf9c0ce8739c84549a89c083b1f3526c8780b84517ee75d6b43d276e55f8a0", size = 1198932, upload-time = "2024-06-02T18:15:10.786Z" }, - { url = "https://files.pythonhosted.org/packages/b4/b5/c465e09345dd38b9415f5d47ae7683b3f461db02fcc03e699b6b5687ab2b/coincurve-20.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:52a67bfddbd6224dfa42085c88ad176559801b57d6a8bd30d92ee040de88b7b3", size = 1193324, upload-time = "2024-06-02T18:15:12.511Z" }, + { url = "https://files.pythonhosted.org/packages/af/ca/ec5e2c4ba1df02844e1087e58636ecc78a096fa7e7dfd85cab286c0c1c31/coincurve_cp314_fix-22.0.1-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:9fec35946bfe7784e92aaa656b298b3b67f0a093f52c7970496dde4621bbe6c0", size = 1388687, upload-time = "2026-07-17T14:48:04.925Z" }, + { url = "https://files.pythonhosted.org/packages/a2/01/5c0435325516a6d7ce2958e90e4d050652d105465a187ff8e983a1271370/coincurve_cp314_fix-22.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f5f4abc2e639a4007ca212b7029ea9fc549dc1e1207348f1c8729e34b6e0a94c", size = 1383962, upload-time = "2026-07-17T14:48:06.636Z" }, + { url = "https://files.pythonhosted.org/packages/4c/93/d9ea4c7955a1f67740e492adca7d8ffdb7b9434c2ddc9628e578d37552bb/coincurve_cp314_fix-22.0.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2dc1deb3cec48571fa05064fa8dad3488a0d63e3f16fa731c7815f3f204a2cb", size = 1371893, upload-time = "2026-07-17T14:48:08.247Z" }, + { url = "https://files.pythonhosted.org/packages/d6/0c/eec3262ad43b0f40203656d1a1e52377d603a47f76de6352dd15659285bc/coincurve_cp314_fix-22.0.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5b60d06533f4820023a4e91679c2181ccc29a23193d55fc51e6d55874186b67", size = 1370994, upload-time = "2026-07-17T14:48:09.9Z" }, + { url = "https://files.pythonhosted.org/packages/36/9c/733843a2423ec759ccdd78338dba53f9bb9093f011ea8b31feab07e510cc/coincurve_cp314_fix-22.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:01428e65cfac5bedbeb7a6c1e146970d8aa8a384a7dc39f0c45c38350c6960cc", size = 1377492, upload-time = "2026-07-17T14:48:11.756Z" }, + { url = "https://files.pythonhosted.org/packages/33/e1/6c8bca371a395b32ddd86b2bcbae146789984b0bdf329524f6e85a73846e/coincurve_cp314_fix-22.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b787b23c80501e1af903bfe4f89a07c51ccc02e2333913e152f4e4c2cdbf644f", size = 1374123, upload-time = "2026-07-17T14:48:13.33Z" }, + { url = "https://files.pythonhosted.org/packages/d7/52/e9a7a1c82d615e9f4060ac77509bae9d95e1c9a4ad24941abca9f356d091/coincurve_cp314_fix-22.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:6b02bca3564e795a945c0a2a7f575d3af7d6e3c0e84133c610ca84cf0b824d21", size = 1329759, upload-time = "2026-07-17T14:48:14.845Z" }, + { url = "https://files.pythonhosted.org/packages/5f/55/c858d0ce0a2a3ec590463838af052492680debae92ca38b071ee459f351c/coincurve_cp314_fix-22.0.1-cp310-cp310-win_arm64.whl", hash = "sha256:c2a0afd16f410f0b9932cc2123ba1adceca8676cffd649c4a5c1fe344d3a55df", size = 1320063, upload-time = "2026-07-17T14:48:16.294Z" }, + { url = "https://files.pythonhosted.org/packages/74/d9/6e191269f241861ed25ce193bb1d24e8758eb83276a0bc28d7f929704d45/coincurve_cp314_fix-22.0.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:c7beead9480fc1e47b3727172af2279f1043bacc68f1a7226af7687bd893058e", size = 1388699, upload-time = "2026-07-17T14:48:18.13Z" }, + { url = "https://files.pythonhosted.org/packages/d3/1e/a330eba734c262182bd7d35595c1e4b72a32cced388b649ab826b8b93d47/coincurve_cp314_fix-22.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3a710296ef735bb96434a152101bcdef9bdabbec291305eb0e6cc864935e7db", size = 1383919, upload-time = "2026-07-17T14:48:19.759Z" }, + { url = "https://files.pythonhosted.org/packages/52/ef/fa17567e5044fdbe958534191b31e461affc2019df6e21f6644981bc2cb1/coincurve_cp314_fix-22.0.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8bb83a3ea92906d5fe1623c3554c4973c0b51cb7f3a5e10dae549eec9b1b1eb", size = 1371952, upload-time = "2026-07-17T14:48:21.412Z" }, + { url = "https://files.pythonhosted.org/packages/5c/d1/b6cbf61dcbb11b053891d593d82fb976e5cc44092fef09d0787c8edb7071/coincurve_cp314_fix-22.0.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c9d88f8faf7156fddad08dbd032671d6bb2427a262fc57e81be5fc4f9d1357aa", size = 1370118, upload-time = "2026-07-17T14:48:23.358Z" }, + { url = "https://files.pythonhosted.org/packages/99/f5/8d629287c7c2e7b9efca2cab3cfa95a02c2312881551b39875cb81671edc/coincurve_cp314_fix-22.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8a41bd1c4012d8ff480a3972cc9300400530edb8e7f0d16617e0f241fe0b72d2", size = 1377513, upload-time = "2026-07-17T14:48:24.923Z" }, + { url = "https://files.pythonhosted.org/packages/d6/ca/8aac5adcd9616dd73095a2c4a707b30bc31674fae8522de44992309d34df/coincurve_cp314_fix-22.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b9083d1e5042866a1e28e91e9d5c8fdcf51629dd2a273f6b405059e7c95945fb", size = 1373226, upload-time = "2026-07-17T14:48:26.512Z" }, + { url = "https://files.pythonhosted.org/packages/dd/98/1b4f2f26d6980bdd17a8f2864832f9dff895b032a49234b51389ab58596d/coincurve_cp314_fix-22.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:918b4ad4d1e4f4cf38c11aa39b9d842418987f898caccc6114b45aa081ae2c90", size = 1329815, upload-time = "2026-07-17T14:48:27.899Z" }, + { url = "https://files.pythonhosted.org/packages/4a/e1/21f17125e8b9160dd5f6db3f92da6e18b1f4cdececfc3a154f023a7f9ad7/coincurve_cp314_fix-22.0.1-cp311-cp311-win_arm64.whl", hash = "sha256:ab926906a2718de26a3e23955103e41e39cb316e5cbb68489405d4a2bc2011c3", size = 1320212, upload-time = "2026-07-17T14:48:29.473Z" }, + { url = "https://files.pythonhosted.org/packages/4a/32/24fef91a512c51b57b5980207bdf4974ab6e998aefde3c50abb565b4f346/coincurve_cp314_fix-22.0.1-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:b077081c058338aaab7fe634275da0248fe59b469be9ec2bfa598e6e328fc5d1", size = 1389725, upload-time = "2026-07-17T14:48:31.19Z" }, + { url = "https://files.pythonhosted.org/packages/a6/7a/24b3079bee4bd2f081865e28a08eb13b909470c7d8ce3a8c4ac9aae80727/coincurve_cp314_fix-22.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0ed7e6c3434333ecc17b00834f17effa5f48fc89b3e130d19157e3b18e0bd149", size = 1384501, upload-time = "2026-07-17T14:48:32.942Z" }, + { url = "https://files.pythonhosted.org/packages/41/26/7a4fbaff523784b9339f247a315056f99439fe671705d92bd9df01612e59/coincurve_cp314_fix-22.0.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b72535b8303d45bfc47bb27e7b1b898cfba11ddb9ca6db9e528f0e23360da5f3", size = 1375639, upload-time = "2026-07-17T14:48:34.777Z" }, + { url = "https://files.pythonhosted.org/packages/82/2e/c6f93f5bbbe6c050f5425b9e1ebb1fc8a28e3074b4ebe6542c91be186e27/coincurve_cp314_fix-22.0.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9a56ec57a1ce4116db6281703c5c64d35a9fbcb4ed2ab65ac38109c412afb3b6", size = 1374117, upload-time = "2026-07-17T14:48:37.179Z" }, + { url = "https://files.pythonhosted.org/packages/a8/f0/911d0295ed3a199c7a4eb43d2f8ffff1d1dcca39f2128fe5fc7f1fe52c17/coincurve_cp314_fix-22.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0501e49a206b5ab4105f65daeb338dcf3559bd7d5392a03afc3f31db83f661fc", size = 1381644, upload-time = "2026-07-17T14:48:39.018Z" }, + { url = "https://files.pythonhosted.org/packages/be/68/b3ecefd5edccd3202f24c0cfb696aff0756e6095db9f7c67da78aff57f27/coincurve_cp314_fix-22.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7a5d93127fea898e53882ac106535fbc39ff4f2a26e9c5f23e1efae716bcf6a6", size = 1377529, upload-time = "2026-07-17T14:48:40.608Z" }, + { url = "https://files.pythonhosted.org/packages/57/54/be427f7e8b037b14b94eb97e22fab08b8d41535075dd1b1d7a668fc1d4dc/coincurve_cp314_fix-22.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:07fcc0a4b6c86566462c9918f6c68303e3699820c4df595daef9a8d131584f29", size = 1330618, upload-time = "2026-07-17T14:48:42.12Z" }, + { url = "https://files.pythonhosted.org/packages/c4/0b/1833d9b75a8d0dabba52db6a4e665cd0bf24401c513a062f82c8fc4f56a2/coincurve_cp314_fix-22.0.1-cp312-cp312-win_arm64.whl", hash = "sha256:f7b282d27d234b96e064e6bf061d56a4148a4e4fb14f0309fdcc555206892ab6", size = 1320184, upload-time = "2026-07-17T14:48:43.588Z" }, + { url = "https://files.pythonhosted.org/packages/93/9f/2d2576282a16fcddd4bacaae9767852203bc6fe6a851a2410b0dffb0bc87/coincurve_cp314_fix-22.0.1-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:227158f4cbd329f0b75780198ab312ac72d697b2ec28daade45d0c3d8aa7ae3a", size = 1389695, upload-time = "2026-07-17T14:48:45.298Z" }, + { url = "https://files.pythonhosted.org/packages/9b/6a/fc8e76c2f6d62af177960a719b5987e644412b13fd673175dea4f2696370/coincurve_cp314_fix-22.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6cde6eda5348115cd46555aae8e5fc8a1329cdd34560293a371a3e8394390c16", size = 1384517, upload-time = "2026-07-17T14:48:46.86Z" }, + { url = "https://files.pythonhosted.org/packages/63/f1/f3a62079cb2d4205712545d70e7bd221b276b0b379329d844ed825076014/coincurve_cp314_fix-22.0.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:155c9364dcea3b4028fc03d02b5ac4c1d791c7989c54ea8d73ff52600fa9bab1", size = 1375601, upload-time = "2026-07-17T14:48:48.388Z" }, + { url = "https://files.pythonhosted.org/packages/ac/1c/d4769d938a000d14ce99f08c42148e8fda85b5b243943e804a5f27e4d951/coincurve_cp314_fix-22.0.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ccf73b280220759fa02251f09300d85af54ff23631da3e95c14eef30cba7408", size = 1374082, upload-time = "2026-07-17T14:48:49.852Z" }, + { url = "https://files.pythonhosted.org/packages/fd/88/246bad1924267d0064a7a6092d10851f66765caefe9a0010be8c25c94a6c/coincurve_cp314_fix-22.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5eb5a6aa08e8e07d2edb3a6b8e6602f0dc94a1b0fbf4d83138df749b921fe8b2", size = 1381599, upload-time = "2026-07-17T14:48:51.33Z" }, + { url = "https://files.pythonhosted.org/packages/2d/e0/08dbec75aced7f23dba7dc52f1294f30e862de33cc9112bd01ccf3b3f50d/coincurve_cp314_fix-22.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0bde261973270d2313bf82d526a6a395d084faa74f514d98c2dfe96bcb3d331f", size = 1377435, upload-time = "2026-07-17T14:48:53.016Z" }, + { url = "https://files.pythonhosted.org/packages/28/ac/ff86fc78fa9dcf4792f57e0675030dd21701e0f121c165801a2434598e20/coincurve_cp314_fix-22.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:07ab4f37249dab54d3dc02e35dd82f0309c9995a1656f91ab1c8efebf7c35ed4", size = 1330553, upload-time = "2026-07-17T14:48:54.539Z" }, + { url = "https://files.pythonhosted.org/packages/1f/17/5f27565dd86fff04636b5a4a7a5450f6f35474b3c02ad6832852ce98e134/coincurve_cp314_fix-22.0.1-cp313-cp313-win_arm64.whl", hash = "sha256:8d0d6057895da2d4fb7da49463c08ccbc3399a57df5b1ae18b296edcfe724cae", size = 1320215, upload-time = "2026-07-17T14:48:56.047Z" }, + { url = "https://files.pythonhosted.org/packages/5b/60/721383a5cc7079360afa5a235c8bbddbdf09505f39cc315d5eafba90f638/coincurve_cp314_fix-22.0.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:6b18156408e60b12b87810ae323ef0b483251c33f05f172e344c325a034014e5", size = 1389892, upload-time = "2026-07-17T14:48:57.533Z" }, + { url = "https://files.pythonhosted.org/packages/fd/f2/9f8518e3b138256d80d40ccdb3cb8edb78dd01846ff221da3d212f6c44b9/coincurve_cp314_fix-22.0.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:15c9257f42a42c14e098e0f37b8b5fc32371854c84f3bebe2448a307ca674b3e", size = 1384743, upload-time = "2026-07-17T14:48:58.999Z" }, + { url = "https://files.pythonhosted.org/packages/44/40/913a7a3f02678bc1990e508fba9fa156d643a788cceb611d8c35b99a4436/coincurve_cp314_fix-22.0.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5c04475afd71244fb6e04af2d8f2e2ad98264f6b6f549826560ea96925425f33", size = 1375586, upload-time = "2026-07-17T14:49:00.759Z" }, + { url = "https://files.pythonhosted.org/packages/46/6d/21c2888ac918199cedd9b438a2bb5cd9e1746bff4cccbdf27f35c646b94d/coincurve_cp314_fix-22.0.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2e1066e72ac20310fb2359f0c7bdcc7d09f796eb3d316b3e03b3c5e59fab349", size = 1373843, upload-time = "2026-07-17T14:49:02.524Z" }, + { url = "https://files.pythonhosted.org/packages/61/64/d1ae34a2843dc76e69f65ef6c611fd3f09bc6a11924a56c555b6aea9339e/coincurve_cp314_fix-22.0.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0a629e282b8a9d531b882ee1735a6ce1cfc0c8c37531583131ade5c4ca5d08b1", size = 1381502, upload-time = "2026-07-17T14:49:03.993Z" }, + { url = "https://files.pythonhosted.org/packages/06/ad/1c0b90430feefd17594fda215880137a40bb7858dde62bb60c4b58cf0771/coincurve_cp314_fix-22.0.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7f7697cc7d75de9b9e34e041cfe7dd903db2141a4c31c92ec420674f937c3af8", size = 1377090, upload-time = "2026-07-17T14:49:05.59Z" }, + { url = "https://files.pythonhosted.org/packages/7c/20/1267eb8492b9d2d7a904739476eebc7d4d3921d13e716621ca99128e25cb/coincurve_cp314_fix-22.0.1-cp314-cp314-win_amd64.whl", hash = "sha256:56ddf3b2340c23c22fe16fbf171e18219de291cf2c26f75805c92640ec5ef8c8", size = 1334976, upload-time = "2026-07-17T14:49:07.092Z" }, + { url = "https://files.pythonhosted.org/packages/e6/e7/9765c390984195f79c6b0d3ab299cc17749f57a9856651db30065cc66264/coincurve_cp314_fix-22.0.1-cp314-cp314-win_arm64.whl", hash = "sha256:acfcd79081fc04e4f699731973c41165dfeee85b855dc352ee2d46250dd46f6e", size = 1327417, upload-time = "2026-07-17T14:49:08.695Z" }, ] [[package]] name = "cryptography" -version = "42.0.8" +version = "50.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/93/a7/1498799a2ea06148463a9a2c10ab2f6a921a74fb19e231b27dc412a748e2/cryptography-42.0.8.tar.gz", hash = "sha256:8d09d05439ce7baa8e9e95b07ec5b6c886f548deb7e0f69ef25f64b3bce842f2", size = 671250, upload-time = "2024-06-04T19:55:08.609Z" } +sdist = { url = "https://files.pythonhosted.org/packages/de/41/6cbdcf9142d00fe82836fbb51e503e58088575cf7a0fe1dbff6695bf0840/cryptography-50.0.0.tar.gz", hash = "sha256:eeac2acb5a20ed25e0ad6d1df9891a520b78b404266b6d11778f25d5d691a6c9", size = 880201, upload-time = "2026-07-31T14:25:10.11Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/8b/1b929ba8139430e09e140e6939c2b29c18df1f2fc2149e41bdbdcdaf5d1f/cryptography-42.0.8-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:81d8a521705787afe7a18d5bfb47ea9d9cc068206270aad0b96a725022e18d2e", size = 5899961, upload-time = "2024-06-04T19:53:57.933Z" }, - { url = "https://files.pythonhosted.org/packages/fa/5d/31d833daa800e4fab33209843095df7adb4a78ea536929145534cbc15026/cryptography-42.0.8-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:961e61cefdcb06e0c6d7e3a1b22ebe8b996eb2bf50614e89384be54c48c6b63d", size = 3114353, upload-time = "2024-06-04T19:54:12.171Z" }, - { url = "https://files.pythonhosted.org/packages/5d/32/f6326c70a9f0f258a201d3b2632bca586ea24d214cec3cf36e374040e273/cryptography-42.0.8-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3ec3672626e1b9e55afd0df6d774ff0e953452886e06e0f1eb7eb0c832e8902", size = 3647773, upload-time = "2024-06-04T19:54:07.051Z" }, - { url = "https://files.pythonhosted.org/packages/35/66/2d87e9ca95c82c7ee5f2c09716fc4c4242c1ae6647b9bd27e55e920e9f10/cryptography-42.0.8-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e599b53fd95357d92304510fb7bda8523ed1f79ca98dce2f43c115950aa78801", size = 3839763, upload-time = "2024-06-04T19:54:30.383Z" }, - { url = "https://files.pythonhosted.org/packages/c2/de/8083fa2e68d403553a01a9323f4f8b9d7ffed09928ba25635c29fb28c1e7/cryptography-42.0.8-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5226d5d21ab681f432a9c1cf8b658c0cb02533eece706b155e5fbd8a0cdd3949", size = 3632661, upload-time = "2024-06-04T19:54:32.955Z" }, - { url = "https://files.pythonhosted.org/packages/07/40/d6f6819c62e808ea74639c3c640f7edd636b86cce62cb14943996a15df92/cryptography-42.0.8-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6b7c4f03ce01afd3b76cf69a5455caa9cfa3de8c8f493e0d3ab7d20611c8dae9", size = 3851536, upload-time = "2024-06-04T19:53:53.131Z" }, - { url = "https://files.pythonhosted.org/packages/5c/46/de71d48abf2b6d3c808f4fbb0f4dc44a4e72786be23df0541aa2a3f6fd7e/cryptography-42.0.8-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:2346b911eb349ab547076f47f2e035fc8ff2c02380a7cbbf8d87114fa0f1c583", size = 3754209, upload-time = "2024-06-04T19:54:55.259Z" }, - { url = "https://files.pythonhosted.org/packages/25/c9/86f04e150c5d5d5e4a731a2c1e0e43da84d901f388e3fea3d5de98d689a7/cryptography-42.0.8-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ad803773e9df0b92e0a817d22fd8a3675493f690b96130a5e24f1b8fabbea9c7", size = 3923551, upload-time = "2024-06-04T19:54:16.46Z" }, - { url = "https://files.pythonhosted.org/packages/53/c2/903014dafb7271fb148887d4355b2e90319cad6e810663be622b0c933fc9/cryptography-42.0.8-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2f66d9cd9147ee495a8374a45ca445819f8929a3efcd2e3df6428e46c3cbb10b", size = 3739265, upload-time = "2024-06-04T19:54:23.194Z" }, - { url = "https://files.pythonhosted.org/packages/95/26/82d704d988a193cbdc69ac3b41c687c36eaed1642cce52530ad810c35645/cryptography-42.0.8-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d45b940883a03e19e944456a558b67a41160e367a719833c53de6911cabba2b7", size = 3937371, upload-time = "2024-06-04T19:55:04.303Z" }, - { url = "https://files.pythonhosted.org/packages/cf/71/4e0d05c9acd638a225f57fb6162aa3d03613c11b76893c23ea4675bb28c5/cryptography-42.0.8-cp37-abi3-win32.whl", hash = "sha256:a0c5b2b0585b6af82d7e385f55a8bc568abff8923af147ee3c07bd8b42cda8b2", size = 2438849, upload-time = "2024-06-04T19:54:27.39Z" }, - { url = "https://files.pythonhosted.org/packages/06/0f/78da3cad74f2ba6c45321dc90394d70420ea846730dc042ef527f5a224b5/cryptography-42.0.8-cp37-abi3-win_amd64.whl", hash = "sha256:57080dee41209e556a9a4ce60d229244f7a66ef52750f813bfbe18959770cfba", size = 2889090, upload-time = "2024-06-04T19:54:14.245Z" }, - { url = "https://files.pythonhosted.org/packages/60/12/f064af29190cdb1d38fe07f3db6126091639e1dece7ec77c4ff037d49193/cryptography-42.0.8-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28", size = 5901232, upload-time = "2024-06-04T19:54:52.722Z" }, - { url = "https://files.pythonhosted.org/packages/43/c2/4a3eef67e009a522711ebd8ac89424c3a7fe591ece7035d964419ad52a1d/cryptography-42.0.8-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4783183f7cb757b73b2ae9aed6599b96338eb957233c58ca8f49a49cc32fd5e", size = 3648711, upload-time = "2024-06-04T19:54:44.323Z" }, - { url = "https://files.pythonhosted.org/packages/49/1c/9f6d13cc8041c05eebff1154e4e71bedd1db8e174fff999054435994187a/cryptography-42.0.8-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0608251135d0e03111152e41f0cc2392d1e74e35703960d4190b2e0f4ca9c70", size = 3841968, upload-time = "2024-06-04T19:54:57.911Z" }, - { url = "https://files.pythonhosted.org/packages/5f/f9/c3d4f19b82bdb25a3d857fe96e7e571c981810e47e3f299cc13ac429066a/cryptography-42.0.8-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:dc0fdf6787f37b1c6b08e6dfc892d9d068b5bdb671198c72072828b80bd5fe4c", size = 3633032, upload-time = "2024-06-04T19:54:48.518Z" }, - { url = "https://files.pythonhosted.org/packages/fa/e2/b7e6e8c261536c489d9cf908769880d94bd5d9a187e166b0dc838d2e6a56/cryptography-42.0.8-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9c0c1716c8447ee7dbf08d6db2e5c41c688544c61074b54fc4564196f55c25a7", size = 3852478, upload-time = "2024-06-04T19:54:50.599Z" }, - { url = "https://files.pythonhosted.org/packages/a2/68/e16751f6b859bc120f53fddbf3ebada5c34f0e9689d8af32884d8b2e4b4c/cryptography-42.0.8-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fff12c88a672ab9c9c1cf7b0c80e3ad9e2ebd9d828d955c126be4fd3e5578c9e", size = 3754102, upload-time = "2024-06-04T19:54:46.231Z" }, - { url = "https://files.pythonhosted.org/packages/0f/38/85c74d0ac4c540780e072b1e6f148ecb718418c1062edcb20d22f3ec5bbb/cryptography-42.0.8-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:cafb92b2bc622cd1aa6a1dce4b93307792633f4c5fe1f46c6b97cf67073ec961", size = 3925042, upload-time = "2024-06-04T19:54:34.767Z" }, - { url = "https://files.pythonhosted.org/packages/89/f4/a8b982e88eb5350407ebdbf4717b55043271d878705329e107f4783555f2/cryptography-42.0.8-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:31f721658a29331f895a5a54e7e82075554ccfb8b163a18719d342f5ffe5ecb1", size = 3738833, upload-time = "2024-06-04T19:54:05.231Z" }, - { url = "https://files.pythonhosted.org/packages/fd/2b/be327b580645927bb1a1f32d5a175b897a9b956bc085b095e15c40bac9ed/cryptography-42.0.8-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b297f90c5723d04bcc8265fc2a0f86d4ea2e0f7ab4b6994459548d3a6b992a14", size = 3938751, upload-time = "2024-06-04T19:54:37.837Z" }, - { url = "https://files.pythonhosted.org/packages/3c/d5/c6a78ffccdbe4516711ebaa9ed2c7eb6ac5dfa3dc920f2c7e920af2418b0/cryptography-42.0.8-cp39-abi3-win32.whl", hash = "sha256:2f88d197e66c65be5e42cd72e5c18afbfae3f741742070e3019ac8f4ac57262c", size = 2439281, upload-time = "2024-06-04T19:53:55.903Z" }, - { url = "https://files.pythonhosted.org/packages/a2/7b/b0d330852dd5953daee6b15f742f15d9f18e9c0154eb4cfcc8718f0436da/cryptography-42.0.8-cp39-abi3-win_amd64.whl", hash = "sha256:fa76fbb7596cc5839320000cdd5d0955313696d9511debab7ee7278fc8b5c84a", size = 2886038, upload-time = "2024-06-04T19:54:18.707Z" }, - { url = "https://files.pythonhosted.org/packages/a3/fe/1e21699f0a7904e8a30d4fc6db262958f1edf5e505a02e7d97a5b419e482/cryptography-42.0.8-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ba4f0a211697362e89ad822e667d8d340b4d8d55fae72cdd619389fb5912eefe", size = 3014449, upload-time = "2024-06-04T19:54:40.379Z" }, - { url = "https://files.pythonhosted.org/packages/d5/f3/61b398b5ec61f4b6ffbf746227df7ebb421696458d9625d634043f236a13/cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:81884c4d096c272f00aeb1f11cf62ccd39763581645b0812e99a91505fa48e0c", size = 3558533, upload-time = "2024-06-04T19:54:42.123Z" }, - { url = "https://files.pythonhosted.org/packages/c1/e2/60b05e720766e185ef097d07068bd878a51d613ef91e4c241750f9c9192b/cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c9bb2ae11bfbab395bdd072985abde58ea9860ed84e59dbc0463a5d0159f5b71", size = 3759330, upload-time = "2024-06-04T19:54:09.258Z" }, - { url = "https://files.pythonhosted.org/packages/10/38/2c8dae407d301eaf942e377a5b2b30485cfa0df03c6c2dcc2ac044054ed9/cryptography-42.0.8-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7016f837e15b0a1c119d27ecd89b3515f01f90a8615ed5e9427e30d9cdbfed3d", size = 2801764, upload-time = "2024-06-04T19:54:25.455Z" }, + { url = "https://files.pythonhosted.org/packages/c5/5c/59086b4aac5e879d38ddbcf74e4be7ade89cebc3eb199a55da998c3bb46a/cryptography-50.0.0-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:031e2d5dd4bb9caa3ca9c82e5a197fd8ae680232cee62603d1a813f3f07e3d03", size = 4001252, upload-time = "2026-07-31T14:23:33.331Z" }, + { url = "https://files.pythonhosted.org/packages/57/ef/8f2df13c7216bcad3e1c74e07f6e193d93e998e114f524a53877c9af27ad/cryptography-50.0.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fd9192b7b70c573d7f214eb1ae35e00d359f6f5e4b27c7e21e30de1fc6204645", size = 4719554, upload-time = "2026-07-31T14:23:35.611Z" }, + { url = "https://files.pythonhosted.org/packages/d9/41/029086c34d91052fc3b88bcc8056f709a7c915c7a23b235a54eb800b1c97/cryptography-50.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:06a32a980526a6ab9a4b9bf8f7385800791e2bb960903cb6b530e4817509a3b7", size = 4702130, upload-time = "2026-07-31T14:23:37.635Z" }, + { url = "https://files.pythonhosted.org/packages/7d/ff/b6ce0954962e7f7b969f850a883744197bb3910bdfd7b6da162eab7d9f68/cryptography-50.0.0-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:a1b30560f2acc95aa8b2e06e716a13dbfc97314747b80d9707e307f77b40d6b3", size = 4725244, upload-time = "2026-07-31T14:23:39.471Z" }, + { url = "https://files.pythonhosted.org/packages/06/1e/63a1027cb7fec360a182208e1b7767d5aa1fe57be3d6aa856e69a321edc0/cryptography-50.0.0-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:8d89f3976b10b4ce31118de72329025f70d2c6ead14a8217c5514dd2c6d5a78f", size = 5342265, upload-time = "2026-07-31T14:23:41.286Z" }, + { url = "https://files.pythonhosted.org/packages/6b/72/a1116d683a6d7ece94590013882515de087edf9ef0e6292aae615a44df73/cryptography-50.0.0-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:b42a28c1844fd9de8f3f7d540e36b66f3a9c83fceac7170ebc7a6a19edd9dcae", size = 4734609, upload-time = "2026-07-31T14:23:43.139Z" }, + { url = "https://files.pythonhosted.org/packages/15/37/36a9c479bbe49acea2636c7fd3360d20f7b7e079c300352011c44850b181/cryptography-50.0.0-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:900131fafd8aead39ac7dd3a7e833be754c17a95cfd91221636949fe4eb0aa8a", size = 4356517, upload-time = "2026-07-31T14:23:44.939Z" }, + { url = "https://files.pythonhosted.org/packages/32/98/8a151d64367204cbc63ec65d37502f1d9c53cf4bfc6ec3c532614dbec60d/cryptography-50.0.0-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:07949c449a1abcf60d1ee6e88956d89404c7df3c8258f46589e912988e551987", size = 4724529, upload-time = "2026-07-31T14:23:46.93Z" }, + { url = "https://files.pythonhosted.org/packages/22/f6/ec13b470172126464a86bf54d2294a46d29837fc51ba3e45d4047946fb5e/cryptography-50.0.0-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:f89831ef99dd7dd169ab06d63a831adb9e20a87aac6d380266bbda5823349169", size = 5299852, upload-time = "2026-07-31T14:23:48.851Z" }, + { url = "https://files.pythonhosted.org/packages/da/3a/f05e32c99d440c9bb891ea0e36c9091891e36be5a9a87ab2ee6ea20729f6/cryptography-50.0.0-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:82148ec5bddac30b51a5b3c1945075f896fa022cb93f8e4a01e9f6ee95292c5f", size = 4734462, upload-time = "2026-07-31T14:23:50.861Z" }, + { url = "https://files.pythonhosted.org/packages/ca/dc/bd72b26be8953f80625f63151efd38eee71c76ca6cf591c08ff34615a79e/cryptography-50.0.0-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1489e263a8048bb8b6a8bac662eb2d402ea5d2b7b4699b72f385f1e2772db105", size = 4852708, upload-time = "2026-07-31T14:23:52.715Z" }, + { url = "https://files.pythonhosted.org/packages/27/20/c930314a2ab476d15dec966ec87e2e9637bb02b06106b12c0396c57bb603/cryptography-50.0.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7cec5b856506da6defb290f30c9ee687d5f5e8cb0bd3f6459dde43b0b4fa40ef", size = 5004179, upload-time = "2026-07-31T14:23:54.887Z" }, + { url = "https://files.pythonhosted.org/packages/32/2e/c9db68a0c4bfa28e310707527c0ee3a2bd254104d2e02e68f368e197aa4c/cryptography-50.0.0-cp311-abi3-win_amd64.whl", hash = "sha256:bd1c592e4d5974f0d08d4888e432157adba757c66da0246918e43677fafa2d30", size = 3840395, upload-time = "2026-07-31T14:23:56.677Z" }, + { url = "https://files.pythonhosted.org/packages/c3/fb/951032a3bf22a5697c83183fb6294a4843772947a70e616c57b3ff5f522e/cryptography-50.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:49e7d93abdbd2990caced757e5fade25302f719c3c8fb6e6fff2dde98999fc41", size = 3989258, upload-time = "2026-07-31T14:23:58.881Z" }, + { url = "https://files.pythonhosted.org/packages/d4/67/91eb047e69c5e845f2f14b8a2e4a1aab0f283cb885531e9e22c8adb176bc/cryptography-50.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:19736989797678c6af1e55cd49055cdbcb55d8f6b5583ac5335f933aba9101dc", size = 4700648, upload-time = "2026-07-31T14:24:00.702Z" }, + { url = "https://files.pythonhosted.org/packages/30/82/85f0f7425c856b9f96459411eb12e74ef72df9caf6f8f15bf23a33ff131f/cryptography-50.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:80b63928fa35083b33966ce1efb70e5b9607181e49dcd1c22c8c005e319f667f", size = 4682442, upload-time = "2026-07-31T14:24:02.538Z" }, + { url = "https://files.pythonhosted.org/packages/1a/28/b555a365adff1cca2fbe7b9e487d68a40de6bc67ff2cb587473eb43de0e7/cryptography-50.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:d58c3db7cd6eed54e6c06744db55456b65ebd7492ddeae9c1e93cfca7aa857d3", size = 4707596, upload-time = "2026-07-31T14:24:04.394Z" }, + { url = "https://files.pythonhosted.org/packages/72/d8/f52538140cc719df62a01cf87d1c7142318d235817109d6f4054d7c352d6/cryptography-50.0.0-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:df2a58a472f332225671c35b0a830208b86d004f82baa8530fa3782c85646533", size = 5314552, upload-time = "2026-07-31T14:24:06.31Z" }, + { url = "https://files.pythonhosted.org/packages/38/14/6120e5bd7c5aa022ad15424ba4d5c5269d0d9448ed4d55e492ea91e3c1c4/cryptography-50.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:11b74db56cdbe3cdee6e3f6982ecb70334fa10dce99ed58bf7894aaaa3b2a037", size = 4717113, upload-time = "2026-07-31T14:24:08.349Z" }, + { url = "https://files.pythonhosted.org/packages/fa/71/190bf38c3ee2e0f8efc9860ae100c9df4169742eef274b91e7aa1cb133b9/cryptography-50.0.0-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:f59e38625469987d7ef6d495323c55e7db6c212eaf6112267e0d3b565a2e9c9f", size = 4338580, upload-time = "2026-07-31T14:24:10.227Z" }, + { url = "https://files.pythonhosted.org/packages/3a/63/504ccfbbe61fd8aa983f7f146399cdf034c72c2fc55f5b2dfdcdcdb20c99/cryptography-50.0.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:ecfed7367f965a0328cfbdd70da860f15441f002f613185668c6e6ebf5a0ac11", size = 4707038, upload-time = "2026-07-31T14:24:12.169Z" }, + { url = "https://files.pythonhosted.org/packages/01/77/2cf79bbfc4d12ca106437a6e170d6aaa01a373e93093118aaaef0e801bd4/cryptography-50.0.0-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:9aa87839c383bdbab6ef865787a1fb877af8dd03464c4400322726feaaadfc6d", size = 5273110, upload-time = "2026-07-31T14:24:14.38Z" }, + { url = "https://files.pythonhosted.org/packages/e5/45/8aae2972c520145377ea3559a605a899bebe227bf070b33cdb445929a9b9/cryptography-50.0.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:6ba6a53445bd3cfa809ef3ef5f1589aa6ba08784a1d962bf47d0940e871dab1c", size = 4716439, upload-time = "2026-07-31T14:24:16.415Z" }, + { url = "https://files.pythonhosted.org/packages/7b/20/4fe50b619a48c2525cc46e2dbc1ac490708d704be5d467bdaac6dc955682/cryptography-50.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3f5735ffe4996d28b809371756219f5354864902a3b9e7c0b9ee87041209fc9c", size = 4837383, upload-time = "2026-07-31T14:24:18.553Z" }, + { url = "https://files.pythonhosted.org/packages/92/91/3a31366e183343d3703f8995c095f5734676bd6938118047e50fcf279eb4/cryptography-50.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:1b4a266766514614f8aa60416e71f2fc6e575d36e7bdc90f644fadb2f4b75b95", size = 4985772, upload-time = "2026-07-31T14:24:20.385Z" }, + { url = "https://files.pythonhosted.org/packages/74/9a/02ffe35b2853d121689871eb5dce862092562b3a1ed5cc98f1aaed441506/cryptography-50.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:12b9c6996425c76ea6c457ace4f3073e715b8c545add07cd1a8f3a4f90691269", size = 3816291, upload-time = "2026-07-31T14:24:22.125Z" }, + { url = "https://files.pythonhosted.org/packages/03/37/73d005be173aff344af30e9fd2a576575cb2391a7101d9cd3842e1fa8cce/cryptography-50.0.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:ccdc4a71a4dabae05de219404f9f4abc38e3b58422177ff93d0da05967dafa07", size = 4036009, upload-time = "2026-07-31T14:24:24.122Z" }, + { url = "https://files.pythonhosted.org/packages/ff/c6/7a6202a534e32103a285b7834a120869557fe198d51d7cfe59754c8bda9c/cryptography-50.0.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:910e1d2668e7de9648f2bcee30e180db2a6b15c30f887d7c4c93ddf96e3992e3", size = 4745252, upload-time = "2026-07-31T14:24:26.118Z" }, + { url = "https://files.pythonhosted.org/packages/85/4f/0fa8c2f4428198f15d9ff8d63400e27afbf94ce833f6108da1eb3753f945/cryptography-50.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a91296cb61e8df6f86d0c19cc4068228da256bf59bf86049fbd821084565327f", size = 4728939, upload-time = "2026-07-31T14:24:27.994Z" }, + { url = "https://files.pythonhosted.org/packages/d1/63/54dd723490ba2dc09b299682c10b38db38f159728bcaae8c591b8af2f22d/cryptography-50.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:e722f16708d854fe924790e051061f6704a472c3bac347b6fd88033ea8dd0dc5", size = 4748483, upload-time = "2026-07-31T14:24:30.254Z" }, + { url = "https://files.pythonhosted.org/packages/1d/dd/7c77d26285cc7f6991efce64a0f5b4f9383bfa5dd8c5033003eaf7db4cdb/cryptography-50.0.0-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:d764dcf130c428ef66786f866dd750f53182bc608813489915e9fc106bb0c82f", size = 5367599, upload-time = "2026-07-31T14:24:32.457Z" }, + { url = "https://files.pythonhosted.org/packages/46/c9/f60aed34c013f317f92817b6c171c2d22a78270fa41109bd4b08af26b194/cryptography-50.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:105110f43a471dbd0060b9c9516cb8a6a79233631a04cc2ba16f28323ac6e025", size = 4762647, upload-time = "2026-07-31T14:24:34.599Z" }, + { url = "https://files.pythonhosted.org/packages/be/f3/f9a0173b139372c3a48ed98154b45cc6b9de17c789d5ab552e621c293609/cryptography-50.0.0-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:828743d939e9629bc267b8e2d08d8bb67cd4319c771a33d4b18b22dd8fb7440a", size = 4385197, upload-time = "2026-07-31T14:24:36.647Z" }, + { url = "https://files.pythonhosted.org/packages/d8/36/83bb81f6e569bc38e1e4a7bc80f29b46bb9601920bc455fc8e888f5d5742/cryptography-50.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:2a8183b489dc1f7f80f135780fadc1108f14b31b8a40411c7a5b17425f65f28b", size = 4748095, upload-time = "2026-07-31T14:24:39.493Z" }, + { url = "https://files.pythonhosted.org/packages/6b/16/d3008eff98c764979865834c3d386d4fd041b5f52e7f34fc29ac1a5eb515/cryptography-50.0.0-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:6e7d61120573a7f2cd94cc095f9e81f6967c61ccdf194285aa143ecec8e0b708", size = 5325948, upload-time = "2026-07-31T14:24:41.556Z" }, + { url = "https://files.pythonhosted.org/packages/9c/f8/d97f9603efda3888187bfdb893f26c41be4735c10631d05d284ee6b047c4/cryptography-50.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:37fdb0d0111f1e2ff07139dfb79f1b49531f8e213c46f1163dd7642979b58c47", size = 4762400, upload-time = "2026-07-31T14:24:43.636Z" }, + { url = "https://files.pythonhosted.org/packages/64/a2/4615c8f7d81a00b1d6e6afe19f694e1543582349fb5f4076f6cb5dc36485/cryptography-50.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c87f62a3d3b9888ed0fdde100ec06aa61ca9cd44bad9057d1dff9a516b5f5bb9", size = 4878208, upload-time = "2026-07-31T14:24:45.522Z" }, + { url = "https://files.pythonhosted.org/packages/d2/1a/efcfb02f91407149a0dacffffab791f7e19bf6385f63b3666dc8b5e5c9c8/cryptography-50.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:65c2c3add92b45fd0709db8594536aea39c2a67af0e27ffcf049c498501140b7", size = 5037050, upload-time = "2026-07-31T14:24:47.697Z" }, + { url = "https://files.pythonhosted.org/packages/57/30/4a22984d4f1bdfb8c054f07a92bc176b97a3134cc1d6c4b3bffb1f3688b4/cryptography-50.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:d24fead1d4d076e1bfb006dcec392074a3cd8d7b4fc8a595aa64073b2b7a96ba", size = 3874135, upload-time = "2026-07-31T14:24:50.085Z" }, + { url = "https://files.pythonhosted.org/packages/9d/3e/e54cde8c01631a5a8226ccd617eab9e57fd5cfdad90f1a9e6bb570794631/cryptography-50.0.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:5e34edd123674534acd70147f0ca331eaa2c74e6325fb2028c886aa26ba0b68c", size = 3963170, upload-time = "2026-07-31T14:24:51.968Z" }, + { url = "https://files.pythonhosted.org/packages/01/b6/0b9e125e90f3d2dcf599a218a899cda7326a3158cfa258723f0b398b08f6/cryptography-50.0.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:8eb5e1172eb569ea8a872796576e6a67c276351728b6455d5beb01242b027c6a", size = 4692441, upload-time = "2026-07-31T14:24:53.743Z" }, + { url = "https://files.pythonhosted.org/packages/53/c9/a5151588710785a96d7bc4de27d4cd62f263bbbcb203cfe29df537eb6505/cryptography-50.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:910d11e1a385c654bf738bf3e6b8e6ed5de0f5610fcae2be9e5b398d8081d20e", size = 4699810, upload-time = "2026-07-31T14:24:55.746Z" }, + { url = "https://files.pythonhosted.org/packages/c7/1a/15b92b25eb6ce3089cd49377ae990a0f3ad485a510f968aed1f19dbdcdf2/cryptography-50.0.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:62598a8a57f815db4c6259a4e97d857dab56697e7de8e8ab02352ab74da1995d", size = 4691924, upload-time = "2026-07-31T14:24:58.082Z" }, + { url = "https://files.pythonhosted.org/packages/62/15/219075012ab13e8905f3cd572204f4acb4b111df787104346b9bc0cea789/cryptography-50.0.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:07479a1cb08219ab719147e742e76090c9c773321959bb94946fffdd397a6437", size = 4699593, upload-time = "2026-07-31T14:24:59.951Z" }, + { url = "https://files.pythonhosted.org/packages/8e/b5/c2c5fce26f0ee40d21bafe7f191d29a34b35a65ac4fe8a1191d1983612e9/cryptography-50.0.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c99c003e088647b8a5b7c145d6f78c335f6348332b62e142d411c4b63d1460b9", size = 3813796, upload-time = "2026-07-31T14:25:02.298Z" }, ] [[package]] name = "pycparser" -version = "2.22" +version = "3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736, upload-time = "2024-03-30T13:22:22.564Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552, upload-time = "2024-03-30T13:22:20.476Z" }, + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, ] [[package]] @@ -259,31 +345,31 @@ wheels = [ [[package]] name = "pyln-client" -version = "25.5" +version = "26.6.6" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyln-bolt7" }, { name = "pyln-proto" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f6/f5/70dae7e6985ba44f53e1c634e204ecc4e9ccde8de6cd90e009672203023f/pyln_client-25.5.tar.gz", hash = "sha256:18656e667c7218f8b40c70f893b936aef4518e87e3ce99081bd52f89e6e5af85", size = 36015, upload-time = "2025-06-16T18:13:48.973Z" } +sdist = { url = "https://files.pythonhosted.org/packages/25/5f/7e52fbe6b6d7d65651d2c908e1f68449256b3007a8259fa589282e9a4c0f/pyln_client-26.6.6.tar.gz", hash = "sha256:01c02021a62347d4d7dbaaa97bb627e9c2b60212a2e146107a782c1c156588ba", size = 92480, upload-time = "2026-07-20T12:39:51.278Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c8/45/c504ed8ea59577d8093d377e2f657482f08e87b93aaa039e64421297ff55/pyln_client-25.5-py3-none-any.whl", hash = "sha256:269f9ab346ff679b532af2d24c2a524201884efc5b4781dd40685c8ccaec9507", size = 37362, upload-time = "2025-06-16T18:13:47.394Z" }, + { url = "https://files.pythonhosted.org/packages/a6/c0/2efddeec3dda9c915b02fc406bcc1f179d8c45cc9a2e8089608cbdde1a0e/pyln_client-26.6.6-py3-none-any.whl", hash = "sha256:6afa9019aef1e54fa01e185be160773ac4db2fdc7cf864a319e7374b71cd6a6d", size = 37975, upload-time = "2026-07-20T12:39:50.024Z" }, ] [[package]] name = "pyln-proto" -version = "25.5" +version = "26.6.6" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "base58" }, { name = "bitstring" }, - { name = "coincurve" }, + { name = "coincurve-cp314-fix" }, { name = "cryptography" }, { name = "pysocks" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/44/6f/48b7879c11b698b0004e1b9cf820ce26454fbfa893181a009df7d7184189/pyln_proto-25.5.tar.gz", hash = "sha256:c5e38b726123af723f8c6a4f38ab310cbec46579f52c8e6f666e6beef320b96c", size = 27314, upload-time = "2025-06-16T18:13:46.302Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a8/97/219900f708391678165461e6b519c6272edb5966b2e20c62856e9c1f736a/pyln_proto-26.6.6.tar.gz", hash = "sha256:b6d424eb22d33de9fc21e4216502759e34a62eaf460a47cc45dbbb208096db8a", size = 44879, upload-time = "2026-07-20T12:40:07.68Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6d/31/4f5ef88ec5abe6a2e2b84f1bb5e1d0818d07f8afd372570916493849bf6c/pyln_proto-25.5-py3-none-any.whl", hash = "sha256:31abcf193744d6253b7f06b7712983c6a4d4c28815d46e1f3803eac17bfe1cf9", size = 31902, upload-time = "2025-06-16T18:13:45.07Z" }, + { url = "https://files.pythonhosted.org/packages/2c/18/ed5d323f55350b175e5f8bbed7b0c8acb988eb48ee37dd5b44d9e7a41799/pyln_proto-26.6.6-py3-none-any.whl", hash = "sha256:b7b12769e2c37e6d1ce7c2063bbab67f5959e411459ff089d0dbc14109778e03", size = 31833, upload-time = "2026-07-20T12:40:06.677Z" }, ] [[package]] @@ -305,3 +391,50 @@ dependencies = [ [package.metadata] requires-dist = [{ name = "pyln-client", specifier = ">=24.4" }] + +[[package]] +name = "tibs" +version = "0.5.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/57/cd/6cf028decf1c2df4d26077dd5d0532587d93d4917233d5e004133166a940/tibs-0.5.7.tar.gz", hash = "sha256:173dfbecb2309edd9771f453580c88cf251e775613461566b23dbd756b3d54cb", size = 78255, upload-time = "2026-03-12T13:06:29.79Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/4f/1149a5cf2c1be6862e1dcba0c22134c43c44f05ddeef4697ecf20067e508/tibs-0.5.7-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:01ea5258bdf942d21560dc07d532082cd04f07cfef65fedd58ae84f7d0d2562a", size = 401281, upload-time = "2026-03-12T13:06:25.78Z" }, + { url = "https://files.pythonhosted.org/packages/eb/af/59041580d51eb06077029cc64f0b2f9165b1c87075b7fe85f400e01ec6f9/tibs-0.5.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f5eea45851c960628a2bd29847765d55e19a687c5374456ad2c8cf6410eb1efa", size = 377945, upload-time = "2026-03-12T13:06:42.493Z" }, + { url = "https://files.pythonhosted.org/packages/ee/73/3b614d39221f02fca2f37dcdc1c65e25c963bf1da4b90ad9db393f9c130d/tibs-0.5.7-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a9feed5931b881809a950eca0e01e757113e2383a2af06a3e6982f110c869e2", size = 409620, upload-time = "2026-03-12T13:06:28.611Z" }, + { url = "https://files.pythonhosted.org/packages/16/a6/917ca6ca266135f0f52041700c4eb766097258dd987b81a630c061969db5/tibs-0.5.7-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:501728d096e10d9a165aa526743d47418a6bbfd7b084fa47ecb22be7641d3edb", size = 426017, upload-time = "2026-03-12T13:06:40.139Z" }, + { url = "https://files.pythonhosted.org/packages/ce/f6/3c795420f81bac44390d897712aebe186186d88ea5653e20f4ac5097b0b1/tibs-0.5.7-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77103a9f1af72ac4cf5006828d0fb21578d19ce55fd990e9a1c8e46fd549561f", size = 449717, upload-time = "2026-03-12T13:06:45.416Z" }, + { url = "https://files.pythonhosted.org/packages/98/00/700b97377b55973ac233a280d6ff81c0187710c73a5ac3356ef79bf15eb2/tibs-0.5.7-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f95d5db62960205a1e9eba73ce67dc14e7366ae080cd4e5b6f005ebd90faf02", size = 453131, upload-time = "2026-03-12T13:06:46.623Z" }, + { url = "https://files.pythonhosted.org/packages/6d/41/38ccfe6fe48432ea20f6e6a49a42aeb9662042e5f4e8f9a4029047a6c44a/tibs-0.5.7-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ace018a057459e3dccd06a4aae1c5c8cd57e352b263dcef534ae39bf3e03b5cf", size = 419054, upload-time = "2026-03-12T13:06:27.25Z" }, + { url = "https://files.pythonhosted.org/packages/73/08/d9a66639564b92d5be07eb30bbd7a5b9052f338da09fd4ec3732346ff129/tibs-0.5.7-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2a618de62004d9217d2d2ab0f7f9bbdd098c12642dc01f07b3fb00f0b5f3131a", size = 448585, upload-time = "2026-03-12T13:06:33.306Z" }, + { url = "https://files.pythonhosted.org/packages/70/c1/24131985486d5bf878468226d9d0bdff5a0b04838b773a7339d22965f74e/tibs-0.5.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42725200f1b02687ed6e6a1c01e0ec150dc829d21d901ffc74cc0ac4d821f57f", size = 586259, upload-time = "2026-03-12T13:06:14.095Z" }, + { url = "https://files.pythonhosted.org/packages/02/0c/f74c6672d28054c55b6c593588792858be420dbf4b56d0adbf79fc1b7f8f/tibs-0.5.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:63255749f937c5e6fedcc7d54e7bd359aef711017e6855f373b0510a14ee2215", size = 701427, upload-time = "2026-03-12T13:06:37.234Z" }, + { url = "https://files.pythonhosted.org/packages/f4/bf/2c39836a5a1664cda596ba069d065322976245a5f86dab9f2b9a3eaff024/tibs-0.5.7-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:4b7510235379368b7523f624d46e0680f3706e3a3965877a6583cdcb598b8bac", size = 660754, upload-time = "2026-03-12T13:06:38.67Z" }, + { url = "https://files.pythonhosted.org/packages/1d/77/5a7a10001c38f4d1266d4f7a84fae27357c88834a0266bc401e37e1a7884/tibs-0.5.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29480bf03e3372a5f9cc59ea0541f76f8efd696d4f0d214715e94247c342a037", size = 631034, upload-time = "2026-03-12T13:06:18.1Z" }, + { url = "https://files.pythonhosted.org/packages/0d/be/bb20938ab5d1e63ee4c5cf78be815ab2a8674e7aa0b2500db210f7db3e6d/tibs-0.5.7-cp314-cp314t-win32.whl", hash = "sha256:b9535dc7b7484904a58b51bd8e64da7efbf1d8466ff7e84ed1d78f4ddc561c99", size = 278952, upload-time = "2026-03-12T13:06:20.285Z" }, + { url = "https://files.pythonhosted.org/packages/d5/9a/e76888e8567dbe02a67a27d46e5acf06e3504df1268ebc6d8313942ec560/tibs-0.5.7-cp314-cp314t-win_amd64.whl", hash = "sha256:1906729038b85c3b4c040aa28a456d85bc976d0c5007177350eb73374ffa0fd0", size = 294069, upload-time = "2026-03-12T13:06:15.756Z" }, + { url = "https://files.pythonhosted.org/packages/10/37/f74a5f4288984cb909dbccd4cc254154f3ed97b16db1913406f1bd2914c9/tibs-0.5.7-cp314-cp314t-win_arm64.whl", hash = "sha256:7d6592ed93c6748acd39df484c1ee24d40ee247c2a20ca38ba03363506fd24f3", size = 278929, upload-time = "2026-03-12T13:06:43.962Z" }, + { url = "https://files.pythonhosted.org/packages/12/2d/de2c579d3eea0f18212b5b16decb04568b7a0ef912d00581a77492609d4e/tibs-0.5.7-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:859f05315ffb307d3474c505d694f3a547f00730a024c982f5f60316a5505b3c", size = 411352, upload-time = "2026-03-12T13:06:52.016Z" }, + { url = "https://files.pythonhosted.org/packages/74/71/4c21ccc5c2e1672f9cd91ed2c46604c250cffd9d386113772dded128b5cf/tibs-0.5.7-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:a883ca13a922a66b2c1326a9c188123a574741a72510a4bf52fd6f97db191e44", size = 383971, upload-time = "2026-03-12T13:06:50.143Z" }, + { url = "https://files.pythonhosted.org/packages/38/85/399940ac5393772792a209911a5efa42cf55cf621771e48b863211ac5a2a/tibs-0.5.7-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f70bd250769381c73110d6f24feaf8b6fcd44f680b3cb28a20ea06db3d04fb6f", size = 416256, upload-time = "2026-03-12T13:06:24.222Z" }, + { url = "https://files.pythonhosted.org/packages/02/94/481a73e74d398949f57d297b1809a10a951d252e7ec94b6715ed952ce500/tibs-0.5.7-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76746f01b3db9dbd802f5e615f11f68df7a29ecef521b082dca53f3fa7d0084f", size = 428003, upload-time = "2026-03-12T13:06:23.064Z" }, + { url = "https://files.pythonhosted.org/packages/9b/e0/72db1760a7f7fec1d5f3690e0855fbbccbcf0a4a2fd318c9d71f3b33f3a7/tibs-0.5.7-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:847709c108800ad6a45efaf9a040628278956938a4897f7427a2587013dc3b98", size = 455589, upload-time = "2026-03-12T13:06:53.144Z" }, + { url = "https://files.pythonhosted.org/packages/3e/26/9cd3395914bf705d6ae1e9a6c323f727e9dc88fef716327ce7f486e0b55a/tibs-0.5.7-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad61df93b50f875b277ab736c5d37b6bce56f9abce489a22f4e02d9daa2966e3", size = 459266, upload-time = "2026-03-12T13:06:21.678Z" }, + { url = "https://files.pythonhosted.org/packages/e9/3b/267f19a008d13c704dc0b044138a56239272a43531ccb05464129d0fbd01/tibs-0.5.7-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e13b9c7ff2604b0146772025e1ac6f85c8c625bf6ac73736ff671eaf357dda41", size = 423466, upload-time = "2026-03-12T13:06:41.212Z" }, + { url = "https://files.pythonhosted.org/packages/e5/d4/424ae3515e0e013ad83186074bf3beb53399b9052c00da703415ccc316ca/tibs-0.5.7-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0a7ce857ef05c59dc61abadc31c4b9b1e3c62f9e5fb29217988c308936aea71e", size = 452080, upload-time = "2026-03-12T13:06:32.112Z" }, + { url = "https://files.pythonhosted.org/packages/b0/15/ab80beba83a134745439d33763e1d3b017f994abeb9c309a3ac9fd94e90e/tibs-0.5.7-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1d5521cc6768bfa6282a0c591ba06b079ab91b5c7d5696925ad2abac59779a54", size = 592311, upload-time = "2026-03-12T13:06:47.807Z" }, + { url = "https://files.pythonhosted.org/packages/4c/21/f5cf41c15431e63aeaefb494e714d48d9e9061b4e01fcc01d1987e2e5faa/tibs-0.5.7-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:477608f9b87e24a22ab6d50b81da04a5cb59bfa49598ff7ec5165035a18fb392", size = 703400, upload-time = "2026-03-12T13:06:16.968Z" }, + { url = "https://files.pythonhosted.org/packages/4e/ec/b3bdb7dcc3de8513c5678a685f4e25bb85ef48526d7d535ddc592f9e8602/tibs-0.5.7-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:ac0aa2aae38f7325c91c261ce1d18f769c4c7033c98d6ea3ea5534585cf16452", size = 664623, upload-time = "2026-03-12T13:06:48.894Z" }, + { url = "https://files.pythonhosted.org/packages/a4/71/7b85af3ad1b2cd9871c8f50ba0eb17e54e12481b467678535e58aced0d98/tibs-0.5.7-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1b56583db148e5094d781c3d746815dbcbb6378c6f813c8ce291efd4ab21da8b", size = 635199, upload-time = "2026-03-12T13:06:34.798Z" }, + { url = "https://files.pythonhosted.org/packages/b9/63/60220fb502beb857306afd4a5bac4a8617ae496f3b1f4968d127380fdefe/tibs-0.5.7-cp38-abi3-win32.whl", hash = "sha256:d4f3ff613d486650816bc5516760c0382a2cc0ca8aeddd8914d011bc3b81d9a2", size = 288454, upload-time = "2026-03-12T13:06:30.978Z" }, + { url = "https://files.pythonhosted.org/packages/46/ab/aab78827ba7e0d65fe346b86d1d61e0792c38d5f9b7547e0f71b7027c835/tibs-0.5.7-cp38-abi3-win_amd64.whl", hash = "sha256:a61d36155f8ab8642e1b6744e13822f72050fc7ec4f86ec6965295afa04949e2", size = 304135, upload-time = "2026-03-12T13:06:35.884Z" }, + { url = "https://files.pythonhosted.org/packages/48/59/e9e6a610928a4bcbf04f0ac1436ee320aa8cbe95181f1aa32687c50e858b/tibs-0.5.7-cp38-abi3-win_arm64.whl", hash = "sha256:130bc68ff500fc8185677df7a97350b5d5339e6ba7e325bc3031337f6424ede7", size = 289272, upload-time = "2026-03-12T13:06:19.247Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, +] diff --git a/tests/test_reckless.py b/tests/test_reckless.py index 785aedb41c4e..10c042b0ef2f 100644 --- a/tests/test_reckless.py +++ b/tests/test_reckless.py @@ -32,17 +32,6 @@ def canned_github_server(directory): os.mkdir(repo_dir, 0o777) plugins_path = str(FILE_PATH / "data/recklessrepo/lightningd") - # Create requirements.txt file for the testpluginpass - # with pyln-client installed from the local source - requirements_file_path = os.path.join( - plugins_path, "testplugpass", "requirements.txt" - ) - with open(requirements_file_path, "w") as f: - pyln_client_path = os.path.abspath( - os.path.join(FILE_PATH, "..", "contrib", "pyln-client") - ) - f.write(f"pyln-client @ file://{pyln_client_path}\n") - # This lets us temporarily set .gitconfig user info in order to commit my_env["HOME"] = directory with open(os.path.join(directory, ".gitconfig"), "w") as conf: @@ -62,8 +51,20 @@ def canned_github_server(directory): # Bare repository must be initialized prior to setting other git env vars subprocess.check_output(["git", "init"], cwd=repo_dir, env=my_env) + copy_plugins = f"cp -r {plugins_path}/* .;" + + subprocess.check_output([copy_plugins], env=my_env, shell=True, cwd=repo_dir) + + # Create requirements.txt file for the testpluginpass + # with pyln-client installed from the local source + requirements_file_path = os.path.join(repo_dir, "testplugpass", "requirements.txt") + with open(requirements_file_path, "w") as f: + pyln_client_path = os.path.abspath( + os.path.join(FILE_PATH, "..", "contrib", "pyln-client") + ) + f.write(f"pyln-client @ file://{pyln_client_path}\n") + repo_initialization = ( - f"cp -r {plugins_path}/* .;" "git add --all;" 'git commit -m "initial commit - autogenerated by test_reckless.py";' "git remote add origin ./;" @@ -82,9 +83,6 @@ def canned_github_server(directory): subprocess.check_output([tag_and_update], env=my_env, shell=True, cwd=repo_dir) del my_env["HOME"] yield - # Delete requirements.txt from the testplugpass directory - with open(requirements_file_path, "w") as f: - f.write("pyln-client\n\n") class RecklessResult: @@ -236,7 +234,7 @@ def test_install(node_factory): assert any("dependencies installed successfully" in line for line in r["log"]) assert any("plugin installed:" in line for line in r["log"]) assert any("testplugpass enabled" in line for line in r["log"]) - # check_stderr(r["log"]) TODO: check logs + plugin_path = Path(n.lightning_dir) / "reckless/testplugpass" print(plugin_path) assert os.path.exists(plugin_path) @@ -279,7 +277,7 @@ def test_poetry_install(node_factory): assert any("plugin installed:" in line for line in r["log"]) # time.sleep(120) assert any("testplugpyproj enabled" in line for line in r["log"]) - # check_stderr(r["log"]) TODO: check logs + plugin_path = Path(n.lightning_dir) / "reckless/testplugpyproj" print(plugin_path) assert os.path.exists(plugin_path) @@ -326,7 +324,7 @@ def test_disable_enable(node_factory): assert any("dependencies installed successfully" in line for line in r["log"]) assert any("plugin installed:" in line for line in r["log"]) assert any("testplugpass enabled" in line for line in r["log"]) - # r.check_stderr() TODO: check logs + plugin_path = Path(n.lightning_dir) / "reckless/testplugpass" print(plugin_path) assert os.path.exists(plugin_path) @@ -427,7 +425,6 @@ def test_reckless_uv_install(node_factory): assert version == "v1" assert any("using installer pythonuv" in line for line in r["log"]) - # r.check_stderr() TODO: check logs @unittest.skipIf(VALGRIND, "virtual environment triggers memleak detection") @@ -480,6 +477,32 @@ def test_update(node_factory): assert version == "v2" +@unittest.skipIf(VALGRIND, "virtual environment triggers memleak detection") +def test_update_with_options_is_noop(node_factory): + """Updating a plugin that has configured options to the same + version should be a noop.""" + + node = node_factory.get_node(options={}) + r = node.rpc.call( + "reckless", ["install", "-v", "testplugreqopts", "required-opt=foo"] + ) + assert r["install"]["enabled"] + + config = node.rpc.listconfigs("required-opt")["configs"] + assert config["required-opt"]["value_str"] == "foo" + + # No newer version exists, but `update` still goes through the + # disable -> enable cycle. + r = node.rpc.call("reckless", ["update", "-v", "testplugreqopts"]) + assert r["update"][0]["plugin_name"] == "testplugreqopts" + assert r["update"][0]["enabled"], ( + "a no-op update must not disable a plugin that has configured options" + ) + + config = node.rpc.listconfigs("required-opt")["configs"] + assert config["required-opt"]["value_str"] == "foo" + + @unittest.skipIf(VALGRIND, "virtual environment triggers memleak detection") def test_listinstalled(node_factory): "install a plugin and list installed plugins" From 369fd431c69614f27b0428a9255abedac7706b17 Mon Sep 17 00:00:00 2001 From: daywalker90 Date: Mon, 3 Aug 2026 16:47:18 +0200 Subject: [PATCH 12/20] reckless: fix unix_timestamp in notification, it was missing the whole seconds --- plugins/reckless-plugin/src/structs.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/reckless-plugin/src/structs.rs b/plugins/reckless-plugin/src/structs.rs index e0b2d355ee3d..da5358666c53 100644 --- a/plugins/reckless-plugin/src/structs.rs +++ b/plugins/reckless-plugin/src/structs.rs @@ -53,6 +53,7 @@ impl<'a> RecklessLogger<'a> { verbose, } } + #[allow(clippy::cast_precision_loss)] pub async fn log(&mut self, line: &str, log_level: LogLevel) -> Result<(), anyhow::Error> { if !self.verbose && (log_level == LogLevel::IO @@ -92,7 +93,7 @@ impl<'a> RecklessLogger<'a> { if let RecklessTopic::Install = self.topic { let now = Utc::now(); - let unix_timestamp = f64::from(now.timestamp_subsec_millis()) / 1_000.0; + let unix_timestamp = now.timestamp_millis() as f64 / 1_000.0; let iso8601 = now.to_rfc3339(); self.plugin .send_custom_notification( From dba70151799bcf0cc77413ef548af16d9e9692e9 Mon Sep 17 00:00:00 2001 From: daywalker90 Date: Tue, 4 Aug 2026 13:18:41 +0200 Subject: [PATCH 13/20] reckless: replace two unwraps with ok_or_else --- plugins/reckless-plugin/src/cmds/update.rs | 5 ++++- plugins/reckless-plugin/src/util.rs | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/plugins/reckless-plugin/src/cmds/update.rs b/plugins/reckless-plugin/src/cmds/update.rs index 88fcc12a1b21..3c6d88494fc2 100644 --- a/plugins/reckless-plugin/src/cmds/update.rs +++ b/plugins/reckless-plugin/src/cmds/update.rs @@ -266,7 +266,10 @@ async fn update( let line = format!( "updating {} from {} to {ref_to_be_installed}", old_rl_plugin.name(), - old_rl_plugin.metadata().installed_commit().unwrap() + old_rl_plugin + .metadata() + .installed_commit() + .ok_or_else(|| anyhow!("corrupted metadata: missing installed commit"))? ); logger.log(&line, LogLevel::INFO).await?; diff --git a/plugins/reckless-plugin/src/util.rs b/plugins/reckless-plugin/src/util.rs index f145eed91917..064e1fb89803 100644 --- a/plugins/reckless-plugin/src/util.rs +++ b/plugins/reckless-plugin/src/util.rs @@ -1242,7 +1242,9 @@ pub async fn search_sources( rl_plugins.extend( find_plugin_locs( &plugin.state().reckless_dir, - path.to_str().unwrap().to_owned(), + path.to_str() + .ok_or_else(|| anyhow!("non-UTF-8 paths are not supported"))? + .to_owned(), path, 3, logger, From 56bd1b1574434c6fb9f0e8743106d61c51049f5c Mon Sep 17 00:00:00 2001 From: daywalker90 Date: Tue, 4 Aug 2026 15:01:31 +0200 Subject: [PATCH 14/20] reckless: make plugin search case insensitive --- plugins/reckless-plugin/src/util.rs | 4 ++-- tests/test_reckless.py | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/plugins/reckless-plugin/src/util.rs b/plugins/reckless-plugin/src/util.rs index 064e1fb89803..f3c3405ffc44 100644 --- a/plugins/reckless-plugin/src/util.rs +++ b/plugins/reckless-plugin/src/util.rs @@ -1259,7 +1259,7 @@ pub async fn search_sources( for (plugin_name, rl_plugin) in &rl_plugins { if search_name .as_ref() - .is_some_and(|search| plugin_name.contains(search)) + .is_some_and(|search| plugin_name.to_lowercase().contains(&search.to_lowercase())) { if !found_match { let line = format!("Plugins matching '{}':", search_name.as_ref().unwrap()); @@ -1274,7 +1274,7 @@ pub async fn search_sources( for (plugin_name, rl_plugin) in rl_plugins { if search_name .as_ref() - .is_none_or(|search| normalized_eq(&plugin_name, search)) + .is_none_or(|search| normalized_eq(&plugin_name.to_lowercase(), &search.to_lowercase())) { let line = format!("found {plugin_name} in source: {}", rl_plugin.origin()); logger.log(&line, LogLevel::INFO).await?; diff --git a/tests/test_reckless.py b/tests/test_reckless.py index 10c042b0ef2f..66658e956768 100644 --- a/tests/test_reckless.py +++ b/tests/test_reckless.py @@ -222,6 +222,12 @@ def test_list_partial_match(node_factory): # Search for something that doesn't exist r = n.rpc.call("reckless", ["listavailable", "-v", "nonexistent"]) assert "INFO: Search exhausted all sources" in r["log"] + assert all("nonexistent" not in plugin for plugin in r["log"]) + + # Test case insensitive + r = n.rpc.call("reckless", ["listavailable", "-v", "TestPlugPass"]) + assert len(r["listavailable"]) == 1 + assert r["listavailable"][0]["plugin_name"] == "testplugpass" @unittest.skipIf(VALGRIND, "virtual environment triggers memleak detection") From 3be850f88281eb10945b0a16215be82d1f79d647 Mon Sep 17 00:00:00 2001 From: daywalker90 Date: Tue, 4 Aug 2026 15:27:32 +0200 Subject: [PATCH 15/20] pytest: add test for reckless_log notification --- tests/test_reckless.py | 41 ++++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/tests/test_reckless.py b/tests/test_reckless.py index 66658e956768..1268232c448b 100644 --- a/tests/test_reckless.py +++ b/tests/test_reckless.py @@ -1,16 +1,16 @@ import json - -from pyln.client.lightning import RpcError - -from fixtures import * # noqa: F401,F403 -import subprocess -from pathlib import Path -from pyln.testing.utils import VALGRIND import os import re +import subprocess import time import unittest +from datetime import datetime +from pathlib import Path + import pytest +from fixtures import * # noqa: F401,F403 +from pyln.client.lightning import RpcError +from pyln.testing.utils import VALGRIND @pytest.fixture(autouse=True) @@ -140,6 +140,8 @@ def output_okay(out): "listinstalled", ] +LOG_LEVELS = ["io", "trace", "debug", "info", "unusual", "broken"] + def test_help(node_factory): """Validate that reckless provides overall and subcommand help.""" @@ -528,3 +530,28 @@ def test_listinstalled(node_factory): r["listinstalled"][0]["original_source"] == "https://github.com/lightningd/plugins" ) + + +@unittest.skipIf(VALGRIND, "virtual environment triggers memleak detection") +def test_notification(node_factory): + "install a plugin and list installed plugins" + + notifs = [] + + def notif(plugin): + @plugin.subscribe("reckless_log") + def emit_notif(plugin, reckless_log, **kwargs): + notifs.append(reckless_log) + + node = node_factory.get_node(inline_plugin=notif, options={}) + + r = node.rpc.call("reckless", ["install", "-v", "testplugpass"]) + assert r["install"]["enabled"] + assert r["install"]["plugin_name"] == "testplugpass" + + assert len(notifs) >= 1 + assert notifs[0]["level"] in LOG_LEVELS + assert len(notifs[0]["log"]) >= 1 + assert float(notifs[0]["time"]) > 1785849336.0 + assert float(notifs[0]["time"]) < 17858493360.0 + datetime.fromisoformat(notifs[0]["timestamp"].replace("Z", "+00:00")) From b33c30610a2b87fece2ab86abe93da3c3b6a7364 Mon Sep 17 00:00:00 2001 From: daywalker90 Date: Tue, 4 Aug 2026 16:19:16 +0200 Subject: [PATCH 16/20] reckless: only attempt to remove source cache after it was found in .sources --- plugins/reckless-plugin/src/cmds/source.rs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/plugins/reckless-plugin/src/cmds/source.rs b/plugins/reckless-plugin/src/cmds/source.rs index 61bf40dea749..3ddebf60a25b 100644 --- a/plugins/reckless-plugin/src/cmds/source.rs +++ b/plugins/reckless-plugin/src/cmds/source.rs @@ -104,14 +104,6 @@ pub async fn handle_source_remove( let del_source = PluginOrigin::new(&target)?; - match remove_source(&plugin, &del_source, &mut logger).await { - Ok(res) => res, - Err(e) => { - logger.log(&e.to_string(), LogLevel::BROKEN).await?; - return Err(e); - } - } - let Ok(mut file_handle) = OpenOptions::new() .write(true) .truncate(true) @@ -139,6 +131,13 @@ pub async fn handle_source_remove( if let Some(i) = remove_index { sources.remove(i); + match remove_source(&plugin, &del_source, &mut logger).await { + Ok(res) => res, + Err(e) => { + logger.log(&e.to_string(), LogLevel::BROKEN).await?; + return Err(e); + } + } } else { return Err(anyhow!("source {target} not found")); } From 4bfc78f875d637ceee5e4f0b2998aeae31a92da1 Mon Sep 17 00:00:00 2001 From: daywalker90 Date: Wed, 5 Aug 2026 16:19:27 +0200 Subject: [PATCH 17/20] reckless: use platform specific python outside venv --- plugins/reckless-plugin/src/installers.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plugins/reckless-plugin/src/installers.rs b/plugins/reckless-plugin/src/installers.rs index 5f1cc026d787..8c0c9a7f4ce0 100644 --- a/plugins/reckless-plugin/src/installers.rs +++ b/plugins/reckless-plugin/src/installers.rs @@ -527,7 +527,13 @@ async fn create_venv( let line = format!("creating venv at: {}", venv_dir.display()); logger.log(&line, LogLevel::INFO).await?; - let mut command = Command::new("python"); + let mut command = if cfg!(windows) { + let mut cmd = Command::new("py"); + cmd.arg("-3"); + cmd + } else { + Command::new("python3") + }; command .arg("-m") .arg("venv") From a0e2bfcdb7c52605f0a3b8bac52f001a66efec06 Mon Sep 17 00:00:00 2001 From: daywalker90 Date: Wed, 5 Aug 2026 16:38:08 +0200 Subject: [PATCH 18/20] pytests: fix iso parser in python 3.10 not working with nanosecond precision --- tests/test_reckless.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/test_reckless.py b/tests/test_reckless.py index 1268232c448b..edc207a9f88b 100644 --- a/tests/test_reckless.py +++ b/tests/test_reckless.py @@ -554,4 +554,9 @@ def emit_notif(plugin, reckless_log, **kwargs): assert len(notifs[0]["log"]) >= 1 assert float(notifs[0]["time"]) > 1785849336.0 assert float(notifs[0]["time"]) < 17858493360.0 - datetime.fromisoformat(notifs[0]["timestamp"].replace("Z", "+00:00")) + + ts = notifs[0]["timestamp"] + # python 3.10 iso parser doesn't support nanosecond precision + datetime.fromisoformat( + re.sub(r"\.(\d{6})\d+([+-]\d{2}:\d{2}|Z)$", r".\1\2", ts).replace("Z", "+00:00") + ) From a1d01abbe67e26caaf96bd47cf3856fa5af6391e Mon Sep 17 00:00:00 2001 From: daywalker90 Date: Wed, 5 Aug 2026 16:53:40 +0200 Subject: [PATCH 19/20] reckless: improve cli help texts --- plugins/reckless-plugin/src/structs.rs | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/plugins/reckless-plugin/src/structs.rs b/plugins/reckless-plugin/src/structs.rs index da5358666c53..566857b38fe9 100644 --- a/plugins/reckless-plugin/src/structs.rs +++ b/plugins/reckless-plugin/src/structs.rs @@ -116,7 +116,13 @@ impl<'a> RecklessLogger<'a> { #[command(name = "reckless", no_binary_name = true, disable_help_flag = true)] #[allow(clippy::struct_excessive_bools)] pub struct RecklessArgs { - #[arg(short = 'v', long, default_value_t = false, global = true)] + #[arg( + short = 'v', + long, + default_value_t = false, + global = true, + help = "increase log verbosity from INFO to IO" + )] pub verbose: bool, #[command(subcommand)] @@ -134,16 +140,16 @@ pub enum RecklessCmd { /// List plugins available from the sources list Listavailable(ListArgs), - /// Dynamically enable a plugin and update config + /// Enable a plugin, start it and update config Enable(EnableArgs), - /// Disable a plugin, remove it from the config, but keep the plugin files + /// Stop a plugin, disable it, remove it from the config, but keep the plugin files Disable(TargetArgs), /// Manage plugin search sources Source(SourceArgs), - /// Update plugins to latest version + /// Update one or all plugins, supports git references Update(UpdateArgs), /// List reckless-installed plugins @@ -156,11 +162,13 @@ pub enum RecklessCmd { /// Shared args for commands that take one or more plugin name targets #[derive(Args, Debug, Deserialize, PartialEq)] pub struct TargetArgs { + #[arg(help = "name of the plugin")] pub target: String, } #[derive(Args, Debug, Deserialize, PartialEq)] pub struct ListArgs { + #[arg(help = "name of the plugin")] pub target: Option, } @@ -179,7 +187,7 @@ pub struct InstallArgs { #[arg(long, help = "build plugins in debug mode and keep build files")] pub developer: bool, - #[arg(value_parser = parse_key_val)] + #[arg(value_parser = parse_key_val, help = "plugin config options in key=value format")] pub options: Vec<(String, Option)>, } @@ -191,16 +199,16 @@ pub struct UpdateArgs { #[arg(long, help = "build plugins in debug mode and keep build files")] pub developer: bool, - #[arg(value_parser = parse_key_val)] + #[arg(value_parser = parse_key_val, help = "plugin config options in key=value format")] pub options: Vec<(String, Option)>, } #[derive(Args, Debug, Deserialize, PartialEq)] pub struct EnableArgs { - #[arg(help = "name of plugin to install")] + #[arg(help = "name of plugin to enable")] pub target: String, - #[arg(value_parser = parse_key_val)] + #[arg(value_parser = parse_key_val, help = "plugin config options in key=value format")] pub options: Vec<(String, Option)>, } @@ -215,7 +223,7 @@ pub fn parse_key_val(s: &str) -> Result<(String, Option), String> { #[derive(Args, Debug, Deserialize, PartialEq)] pub struct TipArgs { - #[arg(help = "plugin name which author to tip")] + #[arg(help = "plugin name whose author to tip")] pub target: String, #[arg(help = "tip amount in msat")] From 4a983ddd7b1f9ab2dc6e83d362d3efa54247ca62 Mon Sep 17 00:00:00 2001 From: daywalker90 Date: Fri, 14 Aug 2026 16:49:01 +0200 Subject: [PATCH 20/20] reckless: use .call_typed when starting a plugin with options After https://github.com/ElementsProject/lightning/commit/fce9d6e0b1861687aac9afc9d3b03538c3dff49e we can now use it. Also fix writing flag options to config file. --- plugins/reckless-plugin/src/util.rs | 78 +++++++------------ .../testplugreqopts/testplugreqopts.py | 3 + tests/test_reckless.py | 29 ++++++- 3 files changed, 57 insertions(+), 53 deletions(-) diff --git a/plugins/reckless-plugin/src/util.rs b/plugins/reckless-plugin/src/util.rs index f3c3405ffc44..a7156f12a93c 100644 --- a/plugins/reckless-plugin/src/util.rs +++ b/plugins/reckless-plugin/src/util.rs @@ -9,9 +9,7 @@ use std::{ use anyhow::anyhow; use cln_plugin::{Plugin, options}; use cln_rpc::{ - codec::MultiLineCodec, - model::{requests::PluginRequest, responses::PluginResponse}, - notifications::LogLevel, + codec::MultiLineCodec, model::requests::PluginRequest, notifications::LogLevel, primitives::PluginSubcommand, }; use futures::StreamExt; @@ -1105,57 +1103,30 @@ pub async fn cln_start_plugin( Some(v) => format!("{k}={v}"), None => k.clone(), }) - .collect::>() - .join(", "); + .collect::>(); let line = if options.is_empty() { format!("Starting {plugin_name}") } else { - format!("Starting {plugin_name} with options: {options_str}") + format!( + "Starting {plugin_name} with options: {}", + options_str.join(", ") + ) }; logger.log(&line, LogLevel::INFO).await?; - // Can not pass options with cln-rpc because of - // - // so we use .call_raw - let mut obj = serde_json::Map::new(); - - obj.insert( - "subcommand".to_owned(), - serde_json::Value::String("start".to_owned()), - ); - obj.insert( - "plugin".to_owned(), - serde_json::Value::String( - plugin_entry - .to_str() - .ok_or_else(|| anyhow!("plugin path invalid: {}", plugin_entry.display()))? - .to_string(), - ), - ); - - let options_val = options - .iter() - .map(|(k, v)| Ok((k.clone(), serde_json::to_value(v)?))) - .collect::, serde_json::Error>>()?; - - obj.extend(options_val); - - let line = format!("{obj:#?}"); - logger.log(&line, LogLevel::TRACE).await?; - let mut rpc = plugin.state().rpc.lock().await; match rpc - // .call_typed(&PluginRequest { - // directory: None, - // plugin: Some( - // path.to_str() - // .ok_or_else(|| anyhow!("plugin path invalid: {}", path.display()))? - // .to_string(), - // ), - // options: Some(options), - // subcommand: PluginSubcommand::START, - // }) - .call_raw::("plugin", &serde_json::Value::Object(obj)) + .call_typed(&PluginRequest { + directory: None, + plugin: Some( + plugin_entry + .to_str() + .ok_or_else(|| anyhow!("plugin path invalid: {}", plugin_entry.display()))? + .to_string(), + ), + options: Some(options_str), + subcommand: PluginSubcommand::START, + }) .await { Ok(_) => { @@ -1307,14 +1278,17 @@ pub async fn add_plugin_to_config( .map(|(name, value)| { let value_str = match value { Some(v) => match v { - options::Value::String(s) => s.clone(), - options::Value::Integer(i) => i.to_string(), - options::Value::Boolean(b) => b.to_string(), - _ => panic!("Unsupported value type"), + options::Value::String(s) => Some(s.clone()), + options::Value::Integer(i) => Some(i.to_string()), + options::Value::Boolean(b) => Some(b.to_string()), + _ => return Err(anyhow!("Unsupported value type")), }, - None => name.clone(), + None => None, + }; + let line = match value_str { + Some(v) => format!("{name}={v}"), + None => name.to_owned(), }; - let line = format!("{name}={value_str}"); Ok((name.clone(), line)) }) .collect::>()?; diff --git a/tests/data/recklessrepo/lightningd/testplugreqopts/testplugreqopts.py b/tests/data/recklessrepo/lightningd/testplugreqopts/testplugreqopts.py index 959a7e70f9fc..f263391fa352 100644 --- a/tests/data/recklessrepo/lightningd/testplugreqopts/testplugreqopts.py +++ b/tests/data/recklessrepo/lightningd/testplugreqopts/testplugreqopts.py @@ -19,4 +19,7 @@ def init(options, configuration, plugin, **kwargs): plugin.add_option("required-opt", None, "required option") +plugin.add_option("int-opt", None, "int option", opt_type="int") +plugin.add_option("bool-opt", None, "bool option", opt_type="bool") +plugin.add_flag_option("flag-opt", "flag option") plugin.run() diff --git a/tests/test_reckless.py b/tests/test_reckless.py index edc207a9f88b..5e6ebfefb4ad 100644 --- a/tests/test_reckless.py +++ b/tests/test_reckless.py @@ -410,13 +410,40 @@ def test_install_plugin_requiring_opts(node_factory): assert not plugin_path.exists() r = node.rpc.call( - "reckless", ["install", "-v", "testplugreqopts", "required-opt=foo"] + "reckless", + [ + "install", + "-v", + "testplugreqopts", + "required-opt=foo", + "int-opt=1", + "bool-opt=true", + "flag-opt", + ], ) assert r["install"]["enabled"] assert r["install"]["plugin_name"] == "testplugreqopts" assert any("plugin installed:" in line for line in r["log"]) assert any("testplugreqopts enabled" in line for line in r["log"]) + assert ( + node.rpc.listconfigs("required-opt")["configs"]["required-opt"]["value_str"] + == "foo" + ) + assert node.rpc.listconfigs("int-opt")["configs"]["int-opt"]["value_int"] == 1 + assert node.rpc.listconfigs("bool-opt")["configs"]["bool-opt"]["value_bool"] + assert node.rpc.listconfigs("flag-opt")["configs"]["flag-opt"]["set"] + + node.restart() + + assert ( + node.rpc.listconfigs("required-opt")["configs"]["required-opt"]["value_str"] + == "foo" + ) + assert node.rpc.listconfigs("int-opt")["configs"]["int-opt"]["value_int"] == 1 + assert node.rpc.listconfigs("bool-opt")["configs"]["bool-opt"]["value_bool"] + assert node.rpc.listconfigs("flag-opt")["configs"]["flag-opt"]["set"] + # Note: uv timeouts from the GH network seem to happen? @pytest.mark.slow_test