diff --git a/.config/dictionaries/project.dic b/.config/dictionaries/project.dic index 4ed180b5659..f07f6deb191 100644 --- a/.config/dictionaries/project.dic +++ b/.config/dictionaries/project.dic @@ -320,5 +320,8 @@ xcodeproj xctest xctestrun xcworkspace +xprv +xpub +xpublic xvfb yoroi diff --git a/.earthlyignore b/.earthlyignore index 9cc8aa7e850..c0dad16a97f 100644 --- a/.earthlyignore +++ b/.earthlyignore @@ -11,6 +11,7 @@ **/*.iml **/coverage/ **/test_reports/ +**/*.log # node related diff --git a/.github/workflows/build-flutter-web.yml b/.github/workflows/build-flutter-web.yml deleted file mode 100644 index c7bfff78407..00000000000 --- a/.github/workflows/build-flutter-web.yml +++ /dev/null @@ -1,69 +0,0 @@ -name: Deploy Catalyst Voices Web App - -on: - push: - branches: - - main - -permissions: - contents: write - pull-requests: write - id-token: write - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} - cancel-in-progress: true - -env: - AWS_REGION: eu-central-1 - AWS_ROLE_ARN: arn:aws:iam::332405224602:role/ci - EARTHLY_TARGET: docker - ECR_REGISTRY: 332405224602.dkr.ecr.eu-central-1.amazonaws.com - -jobs: - deploy-voices-web-app: - name: Deploy Catalyst Voices Web App - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Setup CI - uses: input-output-hk/catalyst-ci/actions/setup@master - with: - aws_role_arn: ${{ env.AWS_ROLE_ARN }} - aws_region: ${{ env.AWS_REGION }} - earthly_runner_secret: ${{ secrets.EARTHLY_RUNNER_SECRET }} - - - name: Build Flutter Web - uses: input-output-hk/catalyst-ci/actions/run@master - if: always() - continue-on-error: false - with: - earthfile: ./catalyst_voices/ - flags: --allow-privileged - targets: build-web - target_flags: --RUN_ON_PR=false --SENTRY_DSN=${{ secrets.SENTRY_DSN }} - runner_address: ${{ secrets.EARTHLY_SATELLITE_ADDRESS }} - artifact: "true" - - - name: Package Flutter Web - uses: input-output-hk/catalyst-ci/actions/run@master - if: always() - continue-on-error: false - with: - earthfile: ./catalyst_voices/ - flags: --allow-privileged - targets: package - runner_address: ${{ secrets.EARTHLY_SATELLITE_ADDRESS }} - artifact: "true" - - - name: Publish Flutter Web - uses: input-output-hk/catalyst-ci/actions/run@master - if: always() - continue-on-error: false - with: - earthfile: ./catalyst_voices/ - flags: --allow-privileged - targets: publish - runner_address: ${{ secrets.EARTHLY_SATELLITE_ADDRESS }} - artifact: "true" diff --git a/.vscode/launch.recommended.json b/.vscode/launch.recommended.json index b9de6a4e6e4..1230be7f0ca 100644 --- a/.vscode/launch.recommended.json +++ b/.vscode/launch.recommended.json @@ -22,7 +22,12 @@ "program": "lib/configs/main_web.dart", "args": [ "--dart-define", - "SENTRY_DSN=REPLACE_WITH_SENTRY_DSN_URL" + "SENTRY_DSN=REPLACE_WITH_SENTRY_DSN_URL", + // flutter_rust_bridge: https://cjycode.com/flutter_rust_bridge/manual/miscellaneous/web-cross-origin#when-flutter-run + "--web-header", + "Cross-Origin-Opener-Policy=same-origin", + "--web-header", + "Cross-Origin-Embedder-Policy=require-corp" ] }, { diff --git a/Earthfile b/Earthfile index 4898523c5ff..99b54f456cb 100644 --- a/Earthfile +++ b/Earthfile @@ -1,8 +1,8 @@ VERSION 0.8 -IMPORT github.com/input-output-hk/catalyst-ci/earthly/mdlint:v3.2.23 AS mdlint-ci -IMPORT github.com/input-output-hk/catalyst-ci/earthly/cspell:v3.2.23 AS cspell-ci -IMPORT github.com/input-output-hk/catalyst-ci/earthly/postgresql:v3.2.23 AS postgresql-ci +IMPORT github.com/input-output-hk/catalyst-ci/earthly/mdlint:v3.2.24 AS mdlint-ci +IMPORT github.com/input-output-hk/catalyst-ci/earthly/cspell:v3.2.24 AS cspell-ci +IMPORT github.com/input-output-hk/catalyst-ci/earthly/postgresql:v3.2.24 AS postgresql-ci FROM debian:stable-slim diff --git a/catalyst-gateway/Earthfile b/catalyst-gateway/Earthfile index 96ee8ec7243..1cde02848f7 100644 --- a/catalyst-gateway/Earthfile +++ b/catalyst-gateway/Earthfile @@ -1,6 +1,6 @@ VERSION 0.8 -IMPORT github.com/input-output-hk/catalyst-ci/earthly/rust:v3.2.23 AS rust-ci +IMPORT github.com/input-output-hk/catalyst-ci/earthly/rust:v3.2.24 AS rust-ci #cspell: words rustfmt toolsets USERARCH stdcfgs diff --git a/catalyst-gateway/event-db/Earthfile b/catalyst-gateway/event-db/Earthfile index 79bc5a5a20e..dac2e2647ca 100644 --- a/catalyst-gateway/event-db/Earthfile +++ b/catalyst-gateway/event-db/Earthfile @@ -3,7 +3,7 @@ # the database and its associated software. VERSION 0.8 -IMPORT github.com/input-output-hk/catalyst-ci/earthly/postgresql:v3.2.23 AS postgresql-ci +IMPORT github.com/input-output-hk/catalyst-ci/earthly/postgresql:v3.2.24 AS postgresql-ci # cspell: words diff --git a/catalyst-gateway/rustfmt.toml b/catalyst-gateway/rustfmt.toml index b0f20832c9f..fa6d8c2e906 100644 --- a/catalyst-gateway/rustfmt.toml +++ b/catalyst-gateway/rustfmt.toml @@ -36,7 +36,7 @@ max_width = 100 # Comments: normalize_comments = true -normalize_doc_attributes = true +normalize_doc_attributes = false wrap_comments = true comment_width = 90 # small excess is okay but prefer 80 format_code_in_doc_comments = true @@ -65,4 +65,4 @@ condense_wildcard_suffixes = true hex_literal_case = "Upper" # Ignored files: -ignore = [] +ignore = [] \ No newline at end of file diff --git a/catalyst-gateway/tests/Earthfile b/catalyst-gateway/tests/Earthfile index d5b0f76de80..979773202f8 100644 --- a/catalyst-gateway/tests/Earthfile +++ b/catalyst-gateway/tests/Earthfile @@ -1,5 +1,5 @@ VERSION 0.8 -IMPORT github.com/input-output-hk/catalyst-ci/earthly/spectral:v3.2.23 AS spectral-ci +IMPORT github.com/input-output-hk/catalyst-ci/earthly/spectral:v3.2.24 AS spectral-ci # cspell: words oapi # test-lint-openapi - OpenAPI linting from an artifact diff --git a/catalyst-gateway/tests/api_tests/Earthfile b/catalyst-gateway/tests/api_tests/Earthfile index 40551a40233..e0bb11a20cb 100644 --- a/catalyst-gateway/tests/api_tests/Earthfile +++ b/catalyst-gateway/tests/api_tests/Earthfile @@ -1,6 +1,6 @@ VERSION 0.8 -IMPORT github.com/input-output-hk/catalyst-ci/earthly/python:v3.2.23 AS python-ci +IMPORT github.com/input-output-hk/catalyst-ci/earthly/python:v3.2.24 AS python-ci builder: FROM python-ci+python-base diff --git a/catalyst_voices/.earthlyignore b/catalyst_voices/.earthlyignore index 9cc8aa7e850..c0dad16a97f 100644 --- a/catalyst_voices/.earthlyignore +++ b/catalyst_voices/.earthlyignore @@ -11,6 +11,7 @@ **/*.iml **/coverage/ **/test_reports/ +**/*.log # node related diff --git a/catalyst_voices/.gitignore b/catalyst_voices/.gitignore index ac235143a1b..a77786aa472 100644 --- a/catalyst_voices/.gitignore +++ b/catalyst_voices/.gitignore @@ -1,6 +1,26 @@ ### Dart ### # See https://www.dartlang.org/guides/libraries/private-files +# Generated files from code generation tools +*.g.dart +*.freezed.dart +*.chopper.dart +*.swagger.dart +*.openapi.dart +*.gen.dart + +# Un-ignore generated files in public packages +!**/packages/libs/**/*.g.dart +!**/packages/libs/**/*.freezed.dart +!**/packages/libs/**/*.chopper.dart +!**/packages/libs/**/*.swagger.dart +!**/packages/libs/**/*.openapi.dart +!**/packages/libs/**/*.gen.dart + +# Localization (l10n) generated files +packages/internal/catalyst_voices_localization/lib/generated/catalyst_voices_localizations_*.dart +packages/internal/catalyst_voices_localization/lib/generated/catalyst_voices_localizations.dart + # Files and directories created by pub .dart_tool/ .packages diff --git a/catalyst_voices/.idea/.name b/catalyst_voices/.idea/.name deleted file mode 100644 index 8482e6c4500..00000000000 --- a/catalyst_voices/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -catalyst_voices \ No newline at end of file diff --git a/catalyst_voices/.idea/libraries/Dart_Packages.xml b/catalyst_voices/.idea/libraries/Dart_Packages.xml deleted file mode 100644 index aeb7850fae9..00000000000 --- a/catalyst_voices/.idea/libraries/Dart_Packages.xml +++ /dev/null @@ -1,668 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/catalyst_voices/.idea/libraries/Dart_SDK.xml b/catalyst_voices/.idea/libraries/Dart_SDK.xml deleted file mode 100644 index 3b3c0ad641e..00000000000 --- a/catalyst_voices/.idea/libraries/Dart_SDK.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/catalyst_voices/.idea/libraries/Flutter_Plugins.xml b/catalyst_voices/.idea/libraries/Flutter_Plugins.xml deleted file mode 100644 index b0f697111e2..00000000000 --- a/catalyst_voices/.idea/libraries/Flutter_Plugins.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/catalyst_voices/.idea/misc.xml b/catalyst_voices/.idea/misc.xml deleted file mode 100644 index 469b00f42fa..00000000000 --- a/catalyst_voices/.idea/misc.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/catalyst_voices/.idea/modules.xml b/catalyst_voices/.idea/modules.xml deleted file mode 100644 index 3bdcc0b0a8e..00000000000 --- a/catalyst_voices/.idea/modules.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/catalyst_voices/.idea/runConfigurations/melos_bootstrap.xml b/catalyst_voices/.idea/runConfigurations/melos_bootstrap.xml deleted file mode 100644 index d5715306fb6..00000000000 --- a/catalyst_voices/.idea/runConfigurations/melos_bootstrap.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - diff --git a/catalyst_voices/.idea/runConfigurations/melos_clean.xml b/catalyst_voices/.idea/runConfigurations/melos_clean.xml deleted file mode 100644 index f45d4362496..00000000000 --- a/catalyst_voices/.idea/runConfigurations/melos_clean.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - diff --git a/catalyst_voices/.idea/runConfigurations/melos_run_format_check.xml b/catalyst_voices/.idea/runConfigurations/melos_run_format_check.xml deleted file mode 100644 index 08ebebf1f5b..00000000000 --- a/catalyst_voices/.idea/runConfigurations/melos_run_format_check.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - diff --git a/catalyst_voices/.idea/runConfigurations/melos_run_metrics.xml b/catalyst_voices/.idea/runConfigurations/melos_run_metrics.xml deleted file mode 100644 index 3e62682eadc..00000000000 --- a/catalyst_voices/.idea/runConfigurations/melos_run_metrics.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - diff --git a/catalyst_voices/.idea/runConfigurations/melos_run_test.xml b/catalyst_voices/.idea/runConfigurations/melos_run_test.xml deleted file mode 100644 index a4f0c21a950..00000000000 --- a/catalyst_voices/.idea/runConfigurations/melos_run_test.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - diff --git a/catalyst_voices/.idea/runConfigurations/melos_run_test_select.xml b/catalyst_voices/.idea/runConfigurations/melos_run_test_select.xml deleted file mode 100644 index 7d5400cbf64..00000000000 --- a/catalyst_voices/.idea/runConfigurations/melos_run_test_select.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - diff --git a/catalyst_voices/.idea/vcs.xml b/catalyst_voices/.idea/vcs.xml deleted file mode 100644 index 6c0b8635858..00000000000 --- a/catalyst_voices/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/catalyst_voices/.idea/workspace.xml b/catalyst_voices/.idea/workspace.xml deleted file mode 100644 index 0e2110b31b3..00000000000 --- a/catalyst_voices/.idea/workspace.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - { - "keyToString": { - "RunOnceActivity.OpenProjectViewOnStart": "true", - "RunOnceActivity.ShowReadmeOnStart": "true", - "RunOnceActivity.cidr.known.project.marker": "true", - "cidr.known.project.marker": "true", - "dart.analysis.tool.window.visible": "false", - "last_opened_file_path": "/Users/minikin/IOG/Code/temp-catalyst-voices/catalyst_voices", - "settings.editor.selected.configurable": "AndroidSdkUpdater", - "show.migrate.to.gradle.popup": "false" - } -} - - - - - - - - - - - - - - - - - - - - - - - 1694788208043 - - - - \ No newline at end of file diff --git a/catalyst_voices/Earthfile b/catalyst_voices/Earthfile index 82dbe168a08..1a854036125 100644 --- a/catalyst_voices/Earthfile +++ b/catalyst_voices/Earthfile @@ -1,13 +1,12 @@ VERSION 0.8 IMPORT ../catalyst-gateway AS catalyst-gateway -IMPORT github.com/input-output-hk/catalyst-ci/earthly/flutter:v3.2.23 AS flutter-ci +IMPORT github.com/input-output-hk/catalyst-ci/earthly/flutter:v3.2.24 AS flutter-ci # repo-catalyst-voices - Creates artifacts of all configuration files, # packages and folders related to catalyst_voices frontend. repo-catalyst-voices: FROM scratch - WORKDIR /repo COPY --dir . . @@ -20,17 +19,28 @@ builder: DO flutter-ci+BOOTSTRAP # Generates flutter code. -# Based on Catalyst Gateway OpenAPI specifications generates models, clients -# and serialization logic. +# Generates codes for Catalyst Gateway OpenAPI, Voices Localization and +# VoicesAssets and other packages that depend on code-generator. # It accepts [save_locally] ARG that when true place the artifacts in the -# proper folder of `catalyst_voices_services` local code. +# proper folders code-generator: ARG save_locally=false - + FROM +builder LET gen_code_path = lib/generated/catalyst_gateway LET local_gen_code_path = packages/internal/catalyst_voices_services/lib/generated/catalyst_gateway/ - FROM +builder + RUN melos l10n + RUN melos build_runner + + IF [ $save_locally = true ] + RUN find . \( -name "*.g.dart" -o -name "*.freezed.dart" -o -name "*.chopper.dart" -o -name "*.swagger.dart" -o -name "*.openapi.dart" -o -name "*.gen.dart" -o -name "catalyst_voices_localizations*.dart" \) + + FOR generated_file IN $(find . \( -name "*.g.dart" -o -name "*.freezed.dart" -o -name "*.chopper.dart" -o -name "*.swagger.dart" -o -name "*.openapi.dart" -o -name "*.gen.dart" -o -name "catalyst_voices_localizations*.dart" \)) + SAVE ARTIFACT $generated_file AS LOCAL $generated_file + END + ELSE + SAVE ARTIFACT . + END WORKDIR packages/internal/catalyst_voices_services COPY catalyst-gateway+build/doc/cat-gateway-api.json openapi/cat-gateway-api.json DO flutter-ci+OPENAPI_CODE_GEN \ @@ -38,20 +48,12 @@ code-generator: --GEN_CODE_PATH=$gen_code_path \ --LOCAL_GEN_CODE_PATH=$local_gen_code_path -# Tests that the code generation is consistent -# with the generated code currently in the repo. -# This MUST be a test target because it requires artifacts from build targets. -test-flutter-code-generator: - FROM +code-generator - # Copy generated files in the local file tree to a temporary folder - COPY packages/internal/catalyst_voices_services/lib/generated/catalyst_gateway /tmp/repo_generated - # Check diff between local code and earthly artifacts - RUN diff /tmp/repo_generated lib/generated/catalyst_gateway + # Runs static analysis on the code. check-static-analysis: - FROM +builder - DO flutter-ci+ANALYZE + FROM +code-generator + DO flutter-ci+ANALYZE # Runs code formatting checks. check-code-formatting: @@ -70,12 +72,12 @@ check-license: # Run unit tests test-unit: - FROM +builder + FROM +code-generator DO flutter-ci+UNIT_TESTS # Build web version of Catalyst Voices build-web: - FROM +builder + FROM +code-generator ARG RUN_ON_PR=true ARG SENTRY_DSN diff --git a/catalyst_voices/README.md b/catalyst_voices/README.md index 831b18ad42d..9871aab483a 100644 --- a/catalyst_voices/README.md +++ b/catalyst_voices/README.md @@ -11,6 +11,10 @@ This repository contains the Catalyst Voices app and packages. * [Packages](#packages) * [Flavors](#flavors) * [Environment variables](#environment-variables) + * [Code Generation](#code-generation) + * [Running Code Generation](#running-code-generation) + * [GitHub Token / PAT Setup](#github-token--pat-setup) + * [Security Notes](#security-notes) * [Running Tests](#running-tests) * [Common issues](#common-issues) @@ -97,6 +101,42 @@ you can use the following command: flutter build web --target apps/voices/lib/configs/main_web.dart --dart-define SENTRY_DSN=REPLACE_WITH_SENTRY_DSN_URL ``` +### Code Generation + +This project utilizes automatic code generation for the following components: + +* Catalyst Gateway OpenAPI +* Localization files +* Asset files +* Navigation route files + +#### Running Code Generation + +##### Basic Generation + +To generate code, run the following command in the root directory: +`earthly ./catalyst_voices+code-generator` + +##### Local Saving + +To save the generated code locally, use the `--save_locally` flag: +`earthly ./catalyst_voices+code-generator --save_locally=true` + +#### GitHub Token / PAT Setup + +**Important** A valid `GITHUB_TOKEN`/ `PAT` is required to run the earthly target. + +**Token Configuration:** + +1. Locate the `.secret.template` file in the root directory +2. Create a copy of this file and name it `.secret` +3. Add your `GITHUB_TOKEN` to the `.secret` file + +#### Security Notes + +* The `.secret` file should be included in `.gitignore` +* Verify that git does not track the `.secret` file before committing + ## Running Tests To run all unit and widget tests use the following command: diff --git a/catalyst_voices/apps/voices/integration_test/Earthfile b/catalyst_voices/apps/voices/integration_test/Earthfile index d4df74940d6..822e0559415 100644 --- a/catalyst_voices/apps/voices/integration_test/Earthfile +++ b/catalyst_voices/apps/voices/integration_test/Earthfile @@ -3,7 +3,7 @@ VERSION 0.8 IMPORT ../../.. AS catalyst-voices integration-test-web: - FROM catalyst-voices+build-web + FROM catalyst-voices+code-generator ARG TARGETARCH ARG browser LET driver_port = 4444 @@ -21,6 +21,9 @@ integration-test-web: # IF [ $browser = "edge" && $TARGETARCH = "amd64" ]] # LET driver = "msedgedriver" # END + + WORKDIR /frontend/apps/voices + RUN ($driver --port=$driver_port > $driver.log &) && \ sleep 5 && \ flutter drive --driver=test_driver/integration_tests.dart \ @@ -35,6 +38,7 @@ integration-test-web: WAIT SAVE ARTIFACT $driver.log AS LOCAL $driver.log END + IF [ -f fail ] RUN --no-cache echo ""$browser" integration test failed" && \ echo "Printing "$driver" logs..." && \ diff --git a/catalyst_voices/apps/voices/lib/configs/bootstrap.dart b/catalyst_voices/apps/voices/lib/configs/bootstrap.dart index 3c5b9a0a97e..764087cb9dc 100644 --- a/catalyst_voices/apps/voices/lib/configs/bootstrap.dart +++ b/catalyst_voices/apps/voices/lib/configs/bootstrap.dart @@ -1,5 +1,6 @@ import 'dart:async'; +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:catalyst_voices/app/app.dart'; import 'package:catalyst_voices/configs/app_bloc_observer.dart'; import 'package:catalyst_voices/configs/sentry_service.dart'; @@ -90,6 +91,9 @@ Future bootstrap() async { await Dependencies.instance.init(); + // Key derivation needs to be initialized before it can be used + await CatalystKeyDerivation.init(); + final router = AppRouter.init( guards: const [ MilestoneGuard(), diff --git a/catalyst_voices/apps/voices/lib/dependency/dependencies.dart b/catalyst_voices/apps/voices/lib/dependency/dependencies.dart index 681a569e3f0..e93ed705f77 100644 --- a/catalyst_voices/apps/voices/lib/dependency/dependencies.dart +++ b/catalyst_voices/apps/voices/lib/dependency/dependencies.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'package:catalyst_cardano/catalyst_cardano.dart'; +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:catalyst_voices_blocs/catalyst_voices_blocs.dart'; import 'package:catalyst_voices_repositories/catalyst_voices_repositories.dart'; import 'package:catalyst_voices_services/catalyst_voices_services.dart'; @@ -66,7 +67,8 @@ final class Dependencies extends DependencyProvider { void _registerServices() { registerLazySingleton(() => const SecureStorage()); - registerLazySingleton(KeyDerivation.new); + registerLazySingleton(CatalystKeyDerivation.new); + registerLazySingleton(() => KeyDerivation(get())); registerLazySingleton(VaultKeychainProvider.new); registerLazySingleton(SecureDummyAuthStorage.new); registerLazySingleton(Downloader.new); diff --git a/catalyst_voices/apps/voices/lib/pages/registration/wallet_link/stage/rbac_transaction_panel.dart b/catalyst_voices/apps/voices/lib/pages/registration/wallet_link/stage/rbac_transaction_panel.dart index b894dbd1801..11e4598ee23 100644 --- a/catalyst_voices/apps/voices/lib/pages/registration/wallet_link/stage/rbac_transaction_panel.dart +++ b/catalyst_voices/apps/voices/lib/pages/registration/wallet_link/stage/rbac_transaction_panel.dart @@ -118,7 +118,7 @@ class _BlocSummary extends StatelessWidget { }, builder: (context, state) { if (state == null) { - return const Offstage(); + return const _SummaryPlaceholder(); } return _Summary( @@ -131,6 +131,20 @@ class _BlocSummary extends StatelessWidget { } } +class _SummaryPlaceholder extends StatelessWidget { + const _SummaryPlaceholder(); + + @override + Widget build(BuildContext context) { + return const Center( + child: Padding( + padding: EdgeInsets.all(32), + child: CircularProgressIndicator(), + ), + ); + } +} + class _Summary extends StatelessWidget { final Set roles; final WalletInfo walletInfo; diff --git a/catalyst_voices/apps/voices/lib/pages/treasury/campaign_builder_panel.dart b/catalyst_voices/apps/voices/lib/pages/treasury/campaign_builder_panel.dart deleted file mode 100644 index 6fe8cb7e341..00000000000 --- a/catalyst_voices/apps/voices/lib/pages/treasury/campaign_builder_panel.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:catalyst_voices/pages/treasury/campaign_segment_controller.dart'; -import 'package:catalyst_voices/pages/treasury/treasury_campaign_builder_ext.dart'; -import 'package:catalyst_voices/widgets/widgets.dart'; -import 'package:catalyst_voices_localization/catalyst_voices_localization.dart'; -import 'package:catalyst_voices_models/catalyst_voices_models.dart'; -import 'package:flutter/material.dart'; - -class CampaignBuilderPanel extends StatelessWidget { - final TreasuryCampaignBuilder builder; - - const CampaignBuilderPanel({ - super.key, - required this.builder, - }); - - @override - Widget build(BuildContext context) { - return SpaceSidePanel( - isLeft: true, - name: context.l10n.treasuryCampaignBuilder, - onCollapseTap: () {}, - tabs: [ - if (builder.segments.isNotEmpty) - SpaceSidePanelTab( - name: context.l10n.treasuryCampaignBuilderSegments, - body: Column( - children: builder.segments.map( - (segment) { - return _CampaignSegmentBody( - key: ValueKey('CampaignSegment${segment.id}Key'), - segment: segment, - controller: CampaignControllerScope.of( - context, - id: segment.id, - ), - ); - }, - ).toList(), - ), - ), - ], - ); - } -} - -class _CampaignSegmentBody extends StatelessWidget { - final TreasuryCampaignSegment segment; - final VoicesNodeMenuController? controller; - - const _CampaignSegmentBody({ - super.key, - required this.segment, - this.controller, - }); - - @override - Widget build(BuildContext context) { - final l10n = context.l10n; - - return VoicesNodeMenu( - name: segment.localizedName(l10n), - controller: controller, - items: segment.steps.map( - (step) { - return VoicesNodeMenuItem( - id: step.id, - label: step.localizedName(l10n), - ); - }, - ).toList(), - ); - } -} diff --git a/catalyst_voices/apps/voices/lib/pages/treasury/campaign_details.dart b/catalyst_voices/apps/voices/lib/pages/treasury/campaign_details.dart deleted file mode 100644 index ad0ba654280..00000000000 --- a/catalyst_voices/apps/voices/lib/pages/treasury/campaign_details.dart +++ /dev/null @@ -1,144 +0,0 @@ -import 'package:catalyst_voices/pages/treasury/campaign_segment_controller.dart'; -import 'package:catalyst_voices/pages/treasury/treasury_campaign_builder_ext.dart'; -import 'package:catalyst_voices/widgets/widgets.dart'; -import 'package:catalyst_voices_localization/catalyst_voices_localization.dart'; -import 'package:catalyst_voices_models/catalyst_voices_models.dart'; -import 'package:catalyst_voices_shared/catalyst_voices_shared.dart'; -import 'package:flutter/material.dart'; - -class CampaignDetails extends StatelessWidget { - final TreasuryCampaignBuilder builder; - - const CampaignDetails({ - super.key, - required this.builder, - }); - - @override - Widget build(BuildContext context) { - return ListView.builder( - padding: const EdgeInsets.only(top: 10), - itemCount: builder.segments.length, - itemBuilder: (context, index) { - final segment = builder.segments[index]; - - return _ListenableSegmentDetails( - key: ValueKey('ListenableSegment${segment.id}DetailsKey'), - segment: segment, - controller: CampaignControllerScope.of( - context, - id: segment.id, - ), - ); - }, - ); - } -} - -class _ListenableSegmentDetails extends StatelessWidget { - final TreasuryCampaignSegment segment; - final VoicesNodeMenuController controller; - - const _ListenableSegmentDetails({ - super.key, - required this.segment, - required this.controller, - }); - - @override - Widget build(BuildContext context) { - return ValueListenableBuilder( - valueListenable: controller, - builder: (context, value, _) { - return _SegmentDetails( - key: ValueKey('Segment${segment.id}DetailsKey'), - name: segment.localizedName(context.l10n), - steps: segment.steps, - selected: controller.selected, - isExpanded: controller.isExpanded, - onChevronTap: () { - controller.isExpanded = !controller.isExpanded; - }, - ); - }, - ); - } -} - -class _SegmentDetails extends StatelessWidget { - final String name; - final List steps; - final int? selected; - final bool isExpanded; - final VoidCallback? onChevronTap; - - const _SegmentDetails({ - super.key, - required this.name, - required this.steps, - this.selected, - this.isExpanded = false, - this.onChevronTap, - }); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - SegmentHeader( - leading: ChevronExpandButton( - onTap: onChevronTap, - isExpanded: isExpanded, - ), - name: name, - isSelected: isExpanded, - ), - if (isExpanded) - ...steps.map( - (step) { - return _StepDetails( - key: ValueKey('WorkspaceStep${step.id}TileKey'), - id: step.id, - name: step.localizedName(context.l10n), - desc: step.tempDescription(), - isSelected: step.id == selected, - isEditable: step.isEditable, - ); - }, - ), - ].separatedBy(const SizedBox(height: 12)).toList(), - ); - } -} - -class _StepDetails extends StatelessWidget { - const _StepDetails({ - super.key, - required this.id, - required this.name, - required this.desc, - this.isSelected = false, - this.isEditable = false, - }); - - final int id; - final String name; - final String desc; - final bool isSelected; - final bool isEditable; - - @override - Widget build(BuildContext context) { - return WorkspaceTextTileContainer( - name: name, - isSelected: isSelected, - headerActions: [ - VoicesTextButton( - onTap: isEditable ? () {} : null, - child: Text(context.l10n.stepEdit), - ), - ], - content: desc, - ); - } -} diff --git a/catalyst_voices/apps/voices/lib/pages/treasury/campaign_segment_controller.dart b/catalyst_voices/apps/voices/lib/pages/treasury/campaign_segment_controller.dart deleted file mode 100644 index d0ae60abadf..00000000000 --- a/catalyst_voices/apps/voices/lib/pages/treasury/campaign_segment_controller.dart +++ /dev/null @@ -1,117 +0,0 @@ -// ignore_for_file: prefer_asserts_with_message - -import 'package:catalyst_voices/widgets/menu/voices_node_menu.dart'; -import 'package:flutter/material.dart'; - -typedef CampaignControllerBuilder = CampaignController Function(Object id); - -final class CampaignControllerStateData extends VoicesNodeMenuStateData { - const CampaignControllerStateData({ - super.selectedItemId, - super.isExpanded, - }); -} - -/// Direct extension of [VoicesNodeMenuController]. -/// Probably we'll need extend controller with additional fields. -final class CampaignController extends VoicesNodeMenuController { - CampaignController(CampaignControllerStateData super._value); -} - -/// Keeps together [CampaignControllerStateData] tied to ids. -class CampaignControllerScope extends StatefulWidget { - final CampaignControllerBuilder builder; - final Widget child; - - const CampaignControllerScope({ - super.key, - required this.builder, - required this.child, - }); - - /// The closes instance of [CampaignControllerScope] - /// that encloses the given context, or null if none found. - /// - /// Uses [builder] with given [id] to build [CampaignController] - /// if none already created for this [id]. - static CampaignController? maybeOf( - BuildContext context, { - required Object id, - }) { - return context - .findAncestorStateOfType<_CampaignControllerScopeState>() - ?._getSegmentController(id); - } - - /// Wrapper on [maybeOf] but forcing null unwrapping. - static CampaignController of( - BuildContext context, { - required Object id, - }) { - final controller = maybeOf(context, id: id); - - assert( - controller != null, - 'Unable to find CampaignControllerScope as parent widget', - ); - - return controller!; - } - - @override - State createState() { - return _CampaignControllerScopeState(); - } -} - -class _CampaignControllerScopeState extends State { - final _cache = {}; - - bool _debugDisposed = false; - - static bool _debugAssertNotDisposed( - _CampaignControllerScopeState screenState, - ) { - assert(() { - if (screenState._debugDisposed) { - throw FlutterError( - 'A ${screenState.runtimeType} was used after being disposed.\n' - 'Once you have called dispose() on a ${screenState.runtimeType}, it ' - 'can no longer be used.', - ); - } - return true; - }()); - return true; - } - - @override - void dispose() { - assert(_debugAssertNotDisposed(this)); - assert(() { - _debugDisposed = true; - return true; - }()); - - final controllers = List.of(_cache.values); - for (final controller in controllers) { - controller.dispose(); - } - _cache.clear(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return widget.child; - } - - CampaignController _getSegmentController(Object segmentId) { - _debugAssertNotDisposed(this); - - return _cache.putIfAbsent( - segmentId, - () => widget.builder(segmentId), - ); - } -} diff --git a/catalyst_voices/apps/voices/lib/pages/treasury/treasury_body.dart b/catalyst_voices/apps/voices/lib/pages/treasury/treasury_body.dart new file mode 100644 index 00000000000..700afefca60 --- /dev/null +++ b/catalyst_voices/apps/voices/lib/pages/treasury/treasury_body.dart @@ -0,0 +1,32 @@ +import 'package:catalyst_voices/pages/treasury/treasury_dummy_topic_step.dart'; +import 'package:catalyst_voices/widgets/widgets.dart'; +import 'package:catalyst_voices_view_models/catalyst_voices_view_models.dart'; +import 'package:flutter/material.dart'; +import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; + +class TreasuryBody extends StatelessWidget { + final ItemScrollController itemScrollController; + + const TreasuryBody({ + super.key, + required this.itemScrollController, + }); + + @override + Widget build(BuildContext context) { + return SectionsListViewBuilder( + builder: (context, value, child) { + return SectionsListView( + itemScrollController: itemScrollController, + items: value, + stepBuilder: (context, step) { + switch (step) { + case DummyTopicStep(): + return TreasuryDummyTopicStep(step: step); + } + }, + ); + }, + ); + } +} diff --git a/catalyst_voices/apps/voices/lib/pages/treasury/treasury_campaign_builder_ext.dart b/catalyst_voices/apps/voices/lib/pages/treasury/treasury_campaign_builder_ext.dart deleted file mode 100644 index b97e351243b..00000000000 --- a/catalyst_voices/apps/voices/lib/pages/treasury/treasury_campaign_builder_ext.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:catalyst_voices_localization/catalyst_voices_localization.dart'; -import 'package:catalyst_voices_models/catalyst_voices_models.dart'; - -extension TreasuryCampaignSegmentExt on TreasuryCampaignSegment { - String localizedName(VoicesLocalizations localizations) { - return switch (this) { - TreasuryCampaignSetup() => localizations.treasuryCampaignSetup, - }; - } -} - -extension TreasuryCampaignSegmentStepExt on TreasuryCampaignSegmentStep { - String localizedName(VoicesLocalizations localizations) { - return switch (this) { - TreasuryCampaignTitle() => localizations.treasuryCampaignTitle, - TreasuryCampaignTopicX(:final nr) => 'Other topic $nr', - }; - } - - String tempDescription() { - return switch (this) { - TreasuryCampaignTitle() => 'F14 / Promote Social Entrepreneurs and a ' - 'longer title up-to 60 characters', - TreasuryCampaignTopicX(:final nr) => 'Other topic $nr', - }; - } -} diff --git a/catalyst_voices/apps/voices/lib/pages/treasury/campaign_comments_panel.dart b/catalyst_voices/apps/voices/lib/pages/treasury/treasury_details_panel.dart similarity index 80% rename from catalyst_voices/apps/voices/lib/pages/treasury/campaign_comments_panel.dart rename to catalyst_voices/apps/voices/lib/pages/treasury/treasury_details_panel.dart index 3b3f594c4b6..98e0a5e5583 100644 --- a/catalyst_voices/apps/voices/lib/pages/treasury/campaign_comments_panel.dart +++ b/catalyst_voices/apps/voices/lib/pages/treasury/treasury_details_panel.dart @@ -1,8 +1,8 @@ import 'package:catalyst_voices/widgets/widgets.dart'; import 'package:flutter/material.dart'; -class CampaignCommentsPanel extends StatelessWidget { - const CampaignCommentsPanel({super.key}); +class TreasuryDetailsPanel extends StatelessWidget { + const TreasuryDetailsPanel({super.key}); @override Widget build(BuildContext context) { diff --git a/catalyst_voices/apps/voices/lib/pages/treasury/treasury_dummy_topic_step.dart b/catalyst_voices/apps/voices/lib/pages/treasury/treasury_dummy_topic_step.dart new file mode 100644 index 00000000000..ad89a55c21e --- /dev/null +++ b/catalyst_voices/apps/voices/lib/pages/treasury/treasury_dummy_topic_step.dart @@ -0,0 +1,34 @@ +import 'package:catalyst_voices/widgets/navigation/section_step_state_builder.dart'; +import 'package:catalyst_voices/widgets/widgets.dart'; +import 'package:catalyst_voices_localization/catalyst_voices_localization.dart'; +import 'package:catalyst_voices_view_models/catalyst_voices_view_models.dart'; +import 'package:flutter/material.dart'; + +class TreasuryDummyTopicStep extends StatelessWidget { + final DummyTopicStep step; + + const TreasuryDummyTopicStep({ + super.key, + required this.step, + }); + + @override + Widget build(BuildContext context) { + return SectionStepStateBuilder( + id: step.sectionStepId, + builder: (context, value, child) { + return WorkspaceTextTileContainer( + name: step.localizedName(context), + isSelected: value.isSelected, + headerActions: [ + VoicesTextButton( + onTap: step.isEditable ? () {} : null, + child: Text(context.l10n.stepEdit), + ), + ], + content: step.localizedDesc(context), + ); + }, + ); + } +} diff --git a/catalyst_voices/apps/voices/lib/pages/treasury/treasury_navigation_panel.dart b/catalyst_voices/apps/voices/lib/pages/treasury/treasury_navigation_panel.dart new file mode 100644 index 00000000000..ca51983c7a2 --- /dev/null +++ b/catalyst_voices/apps/voices/lib/pages/treasury/treasury_navigation_panel.dart @@ -0,0 +1,26 @@ +import 'package:catalyst_voices/widgets/widgets.dart'; +import 'package:catalyst_voices_localization/catalyst_voices_localization.dart'; +import 'package:flutter/material.dart'; + +class TreasuryNavigationPanel extends StatelessWidget { + const TreasuryNavigationPanel({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return SpaceSidePanel( + isLeft: true, + name: context.l10n.treasuryCampaignBuilder, + onCollapseTap: () {}, + tabs: [ + SpaceSidePanelTab( + name: context.l10n.treasuryCampaignBuilderSegments, + body: SectionsMenuListener( + controller: SectionsControllerScope.of(context), + ), + ), + ], + ); + } +} diff --git a/catalyst_voices/apps/voices/lib/pages/treasury/treasury_page.dart b/catalyst_voices/apps/voices/lib/pages/treasury/treasury_page.dart index 778433e64eb..e5250fb8910 100644 --- a/catalyst_voices/apps/voices/lib/pages/treasury/treasury_page.dart +++ b/catalyst_voices/apps/voices/lib/pages/treasury/treasury_page.dart @@ -1,26 +1,26 @@ -import 'package:catalyst_voices/pages/treasury/campaign_builder_panel.dart'; -import 'package:catalyst_voices/pages/treasury/campaign_comments_panel.dart'; -import 'package:catalyst_voices/pages/treasury/campaign_details.dart'; -import 'package:catalyst_voices/pages/treasury/campaign_segment_controller.dart'; +import 'package:catalyst_voices/pages/treasury/treasury_body.dart'; +import 'package:catalyst_voices/pages/treasury/treasury_details_panel.dart'; +import 'package:catalyst_voices/pages/treasury/treasury_navigation_panel.dart'; import 'package:catalyst_voices/widgets/widgets.dart'; -import 'package:catalyst_voices_models/catalyst_voices_models.dart'; +import 'package:catalyst_voices_view_models/catalyst_voices_view_models.dart'; import 'package:flutter/material.dart'; +import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; -const _setupSegmentId = 'setup'; - -const _campaignBuilder = TreasuryCampaignBuilder( - segments: [ - TreasuryCampaignSetup( - id: _setupSegmentId, - steps: [ - TreasuryCampaignTitle(id: 0, isEditable: true), - TreasuryCampaignTopicX(id: 1, nr: 1), - TreasuryCampaignTopicX(id: 2, nr: 2), - TreasuryCampaignTopicX(id: 3, nr: 2), - ], - ), - ], -); +const sections = [ + CampaignSetup( + id: 0, + steps: [ + DummyTopicStep( + id: 0, + sectionId: 0, + isEditable: false, + ), + DummyTopicStep(id: 1, sectionId: 0), + DummyTopicStep(id: 2, sectionId: 0), + DummyTopicStep(id: 3, sectionId: 0), + ], + ), +]; class TreasuryPage extends StatefulWidget { const TreasuryPage({ @@ -32,31 +32,44 @@ class TreasuryPage extends StatefulWidget { } class _TreasuryPageState extends State { + late final SectionsController _sectionsController; + late final ItemScrollController _bodyItemScrollController; + + @override + void initState() { + super.initState(); + + _sectionsController = SectionsController(); + _bodyItemScrollController = ItemScrollController(); + + _sectionsController.attachItemsScrollController(_bodyItemScrollController); + + _populateSections(); + } + + @override + void dispose() { + _sectionsController.dispose(); + super.dispose(); + } + @override Widget build(BuildContext context) { - return CampaignControllerScope( - builder: _buildSegmentController, - child: const SpaceScaffold( - left: CampaignBuilderPanel( - builder: _campaignBuilder, - ), - right: CampaignCommentsPanel(), - child: CampaignDetails( - builder: _campaignBuilder, + return SectionsControllerScope( + controller: _sectionsController, + child: SpaceScaffold( + left: const TreasuryNavigationPanel(), + body: TreasuryBody( + itemScrollController: _bodyItemScrollController, ), + right: const TreasuryDetailsPanel(), ), ); } - // Only creates initial controller one time - CampaignController _buildSegmentController(Object segmentId) { - final value = segmentId == _setupSegmentId - ? const CampaignControllerStateData( - selectedItemId: 0, - isExpanded: true, - ) - : const CampaignControllerStateData(); - - return CampaignController(value); + void _populateSections() { + _sectionsController.value = SectionsControllerState.initial( + sections: sections, + ); } } diff --git a/catalyst_voices/apps/voices/lib/pages/workspace/proposal_details.dart b/catalyst_voices/apps/voices/lib/pages/workspace/proposal_details.dart deleted file mode 100644 index 9a52f62dda1..00000000000 --- a/catalyst_voices/apps/voices/lib/pages/workspace/proposal_details.dart +++ /dev/null @@ -1,168 +0,0 @@ -import 'package:catalyst_voices/pages/workspace/proposal_segment_controller.dart'; -import 'package:catalyst_voices/pages/workspace/workspace_proposal_navigation_ext.dart'; -import 'package:catalyst_voices/widgets/rich_text/voices_rich_text.dart'; -import 'package:catalyst_voices/widgets/widgets.dart'; -import 'package:catalyst_voices_localization/catalyst_voices_localization.dart'; -import 'package:catalyst_voices_models/catalyst_voices_models.dart'; -import 'package:catalyst_voices_shared/catalyst_voices_shared.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_quill/flutter_quill.dart'; - -class ProposalDetails extends StatelessWidget { - final WorkspaceProposalNavigation navigation; - - const ProposalDetails({ - super.key, - required this.navigation, - }); - - @override - Widget build(BuildContext context) { - return ListView.builder( - padding: const EdgeInsets.only(top: 10), - itemCount: navigation.segments.length, - itemBuilder: (context, index) { - final segment = navigation.segments[index]; - - return _ListenableSegmentDetails( - key: ValueKey('ListenableSegment${segment.id}DetailsKey'), - segment: segment, - controller: ProposalControllerScope.of( - context, - id: segment.id, - ), - ); - }, - ); - } -} - -class _ListenableSegmentDetails extends StatelessWidget { - final WorkspaceProposalSegment segment; - final VoicesNodeMenuController controller; - - const _ListenableSegmentDetails({ - super.key, - required this.segment, - required this.controller, - }); - - @override - Widget build(BuildContext context) { - return ValueListenableBuilder( - valueListenable: controller, - builder: (context, value, _) { - return _SegmentDetails( - key: ValueKey('Segment${segment.id}DetailsKey'), - name: segment.localizedName(context.l10n), - steps: segment.steps, - selected: controller.selected, - isExpanded: controller.isExpanded, - onChevronTap: () { - controller.isExpanded = !controller.isExpanded; - }, - ); - }, - ); - } -} - -class _SegmentDetails extends StatelessWidget { - final String name; - final List steps; - final int? selected; - final bool isExpanded; - final VoidCallback? onChevronTap; - - const _SegmentDetails({ - super.key, - required this.name, - required this.steps, - this.selected, - this.isExpanded = false, - this.onChevronTap, - }); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - SegmentHeader( - leading: ChevronExpandButton( - onTap: onChevronTap, - isExpanded: isExpanded, - ), - name: name, - isSelected: isExpanded, - ), - if (isExpanded) - ...steps.map( - (step) { - return _StepDetails( - key: ValueKey('WorkspaceStep${step.id}TileKey'), - id: step.id, - title: step.titleInDetails != null - ? step.titleInDetails! - : step.title, - desc: step.description, - richTextParams: step.richTextParams, - isSelected: step.id == selected, - isEditable: step.isEditable, - ); - }, - ), - const SizedBox(height: 24), - ].separatedBy(const SizedBox(height: 12)).toList(), - ); - } -} - -class _StepDetails extends StatelessWidget { - const _StepDetails({ - super.key, - required this.id, - required this.title, - this.desc, - this.richTextParams, - this.isSelected = false, - this.isEditable = false, - }); - - final int id; - final String title; - final String? desc; - final RichTextParams? richTextParams; - final bool isSelected; - final bool isEditable; - - @override - Widget build(BuildContext context) { - if (desc != null) { - return WorkspaceTextTileContainer( - name: title, - isSelected: isSelected, - headerActions: [ - TextButton( - onPressed: isEditable ? () {} : null, - child: Text( - context.l10n.stepEdit, - style: Theme.of(context).textTheme.labelSmall, - ), - ), - ], - content: desc!, - ); - } else if (richTextParams != null) { - return WorkspaceTileContainer( - isSelected: isSelected, - content: VoicesRichText( - title: title, - document: Document.fromJson(richTextParams!.documentJson.value), - charsLimit: richTextParams!.charsLimit, - ), - ); - } else { - return const SizedBox(); - } - } -} diff --git a/catalyst_voices/apps/voices/lib/pages/workspace/proposal_navigation_panel.dart b/catalyst_voices/apps/voices/lib/pages/workspace/proposal_navigation_panel.dart deleted file mode 100644 index f1ddf09ae05..00000000000 --- a/catalyst_voices/apps/voices/lib/pages/workspace/proposal_navigation_panel.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:catalyst_voices/pages/workspace/proposal_segment_controller.dart'; -import 'package:catalyst_voices/pages/workspace/workspace_proposal_navigation_ext.dart'; -import 'package:catalyst_voices/widgets/widgets.dart'; -import 'package:catalyst_voices_localization/catalyst_voices_localization.dart'; -import 'package:catalyst_voices_models/catalyst_voices_models.dart'; -import 'package:flutter/material.dart'; - -class ProposalNavigationPanel extends StatelessWidget { - final WorkspaceProposalNavigation navigation; - - const ProposalNavigationPanel({ - super.key, - required this.navigation, - }); - - @override - Widget build(BuildContext context) { - return SpaceSidePanel( - isLeft: true, - name: context.l10n.workspaceProposalNavigation, - onCollapseTap: () {}, - tabs: [ - if (navigation.segments.isNotEmpty) - SpaceSidePanelTab( - name: context.l10n.workspaceProposalNavigationSegments, - body: Column( - children: navigation.segments.map( - (segment) { - return _ProposalSegmentBody( - key: ValueKey('ProposalSegment${segment.id}Key'), - segment: segment, - controller: ProposalControllerScope.of( - context, - id: segment.id, - ), - ); - }, - ).toList(), - ), - ), - ], - ); - } -} - -class _ProposalSegmentBody extends StatelessWidget { - final WorkspaceProposalSegment segment; - final VoicesNodeMenuController? controller; - - const _ProposalSegmentBody({ - super.key, - required this.segment, - this.controller, - }); - - @override - Widget build(BuildContext context) { - final l10n = context.l10n; - - return VoicesNodeMenu( - name: segment.localizedName(l10n), - controller: controller, - items: segment.steps.map( - (step) { - return VoicesNodeMenuItem( - id: step.id, - label: step.title, - ); - }, - ).toList(), - ); - } -} diff --git a/catalyst_voices/apps/voices/lib/pages/workspace/proposal_segment_controller.dart b/catalyst_voices/apps/voices/lib/pages/workspace/proposal_segment_controller.dart deleted file mode 100644 index 410911673c7..00000000000 --- a/catalyst_voices/apps/voices/lib/pages/workspace/proposal_segment_controller.dart +++ /dev/null @@ -1,117 +0,0 @@ -// ignore_for_file: prefer_asserts_with_message - -import 'package:catalyst_voices/widgets/menu/voices_node_menu.dart'; -import 'package:flutter/material.dart'; - -typedef ProposalControllerBuilder = ProposalController Function(Object id); - -final class ProposalControllerStateData extends VoicesNodeMenuStateData { - const ProposalControllerStateData({ - super.selectedItemId, - super.isExpanded, - }); -} - -/// Direct extension of [VoicesNodeMenuController]. -/// Probably we'll need extend controller with additional fields. -final class ProposalController extends VoicesNodeMenuController { - ProposalController(ProposalControllerStateData super._value); -} - -/// Keeps together [ProposalControllerStateData] tied to ids. -class ProposalControllerScope extends StatefulWidget { - final ProposalControllerBuilder builder; - final Widget child; - - const ProposalControllerScope({ - super.key, - required this.builder, - required this.child, - }); - - /// The closes instance of [ProposalControllerScope] - /// that encloses the given context, or null if none found. - /// - /// Uses [builder] with given [id] to build [ProposalController] - /// if none already created for this [id]. - static ProposalController? maybeOf( - BuildContext context, { - required Object id, - }) { - return context - .findAncestorStateOfType<_ProposalControllerScopeState>() - ?._getSegmentController(id); - } - - /// Wrapper on [maybeOf] but forcing null unwrapping. - static ProposalController of( - BuildContext context, { - required Object id, - }) { - final controller = maybeOf(context, id: id); - - assert( - controller != null, - 'Unable to find ProposalControllerScope as parent widget', - ); - - return controller!; - } - - @override - State createState() { - return _ProposalControllerScopeState(); - } -} - -class _ProposalControllerScopeState extends State { - final _cache = {}; - - bool _debugDisposed = false; - - static bool _debugAssertNotDisposed( - _ProposalControllerScopeState screenState, - ) { - assert(() { - if (screenState._debugDisposed) { - throw FlutterError( - 'A ${screenState.runtimeType} was used after being disposed.\n' - 'Once you have called dispose() on a ${screenState.runtimeType}, it ' - 'can no longer be used.', - ); - } - return true; - }()); - return true; - } - - @override - void dispose() { - assert(_debugAssertNotDisposed(this)); - assert(() { - _debugDisposed = true; - return true; - }()); - - final controllers = List.of(_cache.values); - for (final controller in controllers) { - controller.dispose(); - } - _cache.clear(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return widget.child; - } - - ProposalController _getSegmentController(Object segmentId) { - _debugAssertNotDisposed(this); - - return _cache.putIfAbsent( - segmentId, - () => widget.builder(segmentId), - ); - } -} diff --git a/catalyst_voices/apps/voices/lib/pages/workspace/workspace_body.dart b/catalyst_voices/apps/voices/lib/pages/workspace/workspace_body.dart new file mode 100644 index 00000000000..5b8b811a9fe --- /dev/null +++ b/catalyst_voices/apps/voices/lib/pages/workspace/workspace_body.dart @@ -0,0 +1,33 @@ +import 'package:catalyst_voices/pages/workspace/workspace_rich_text_step.dart'; +import 'package:catalyst_voices/widgets/navigation/sections_list_view.dart'; +import 'package:catalyst_voices/widgets/navigation/sections_list_view_builder.dart'; +import 'package:catalyst_voices_view_models/catalyst_voices_view_models.dart'; +import 'package:flutter/material.dart'; +import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; + +class WorkspaceBody extends StatelessWidget { + final ItemScrollController itemScrollController; + + const WorkspaceBody({ + super.key, + required this.itemScrollController, + }); + + @override + Widget build(BuildContext context) { + return SectionsListViewBuilder( + builder: (context, value, child) { + return SectionsListView( + itemScrollController: itemScrollController, + items: value, + stepBuilder: (context, step) { + switch (step) { + case RichTextStep(): + return WorkspaceRichTextStep(step: step); + } + }, + ); + }, + ); + } +} diff --git a/catalyst_voices/apps/voices/lib/pages/workspace/workspace_navigation_panel.dart b/catalyst_voices/apps/voices/lib/pages/workspace/workspace_navigation_panel.dart new file mode 100644 index 00000000000..a8ffc7fa7f0 --- /dev/null +++ b/catalyst_voices/apps/voices/lib/pages/workspace/workspace_navigation_panel.dart @@ -0,0 +1,24 @@ +import 'package:catalyst_voices/widgets/widgets.dart'; +import 'package:catalyst_voices_localization/catalyst_voices_localization.dart'; +import 'package:flutter/material.dart'; + +class WorkspaceNavigationPanel extends StatelessWidget { + const WorkspaceNavigationPanel({super.key}); + + @override + Widget build(BuildContext context) { + return SpaceSidePanel( + isLeft: true, + name: context.l10n.workspaceProposalNavigation, + onCollapseTap: () {}, + tabs: [ + SpaceSidePanelTab( + name: context.l10n.workspaceProposalNavigationSegments, + body: SectionsMenuListener( + controller: SectionsControllerScope.of(context), + ), + ), + ], + ); + } +} diff --git a/catalyst_voices/apps/voices/lib/pages/workspace/workspace_page.dart b/catalyst_voices/apps/voices/lib/pages/workspace/workspace_page.dart index 266e0de14f7..45db388c0f0 100644 --- a/catalyst_voices/apps/voices/lib/pages/workspace/workspace_page.dart +++ b/catalyst_voices/apps/voices/lib/pages/workspace/workspace_page.dart @@ -1,7 +1,3 @@ -import 'package:catalyst_voices/pages/workspace/proposal_details.dart'; -import 'package:catalyst_voices/pages/workspace/proposal_navigation_panel.dart'; -import 'package:catalyst_voices/pages/workspace/proposal_segment_controller.dart'; -import 'package:catalyst_voices/pages/workspace/proposal_setup_panel.dart'; import 'package:catalyst_voices/pages/workspace/rich_text/answer.dart'; import 'package:catalyst_voices/pages/workspace/rich_text/bonus_mark_up.dart'; import 'package:catalyst_voices/pages/workspace/rich_text/delivery_and_accountability.dart'; @@ -11,137 +7,106 @@ import 'package:catalyst_voices/pages/workspace/rich_text/public_description.dar import 'package:catalyst_voices/pages/workspace/rich_text/solution_statement.dart'; import 'package:catalyst_voices/pages/workspace/rich_text/title.dart'; import 'package:catalyst_voices/pages/workspace/rich_text/value_for_money.dart'; -import 'package:catalyst_voices/widgets/widgets.dart'; +import 'package:catalyst_voices/pages/workspace/workspace_body.dart'; +import 'package:catalyst_voices/pages/workspace/workspace_navigation_panel.dart'; +import 'package:catalyst_voices/pages/workspace/workspace_setup_panel.dart'; +import 'package:catalyst_voices/widgets/containers/space_scaffold.dart'; +import 'package:catalyst_voices/widgets/navigation/sections_controller.dart'; import 'package:catalyst_voices_models/catalyst_voices_models.dart'; +import 'package:catalyst_voices_view_models/catalyst_voices_view_models.dart'; import 'package:flutter/material.dart'; +import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; -const _setupSegmentId = 'setup'; -const _summarySegmentId = 'summary'; -const _solutionSegmentId = 'solution'; -const _impactSegmentId = 'impact'; -const _capabilityAndFeasibilitySegmentId = 'capabilityAndFeasibility'; - -final _proposalNavigation = WorkspaceProposalNavigation( - segments: [ - WorkspaceProposalSetup( - id: _setupSegmentId, - steps: [ - WorkspaceProposalSegmentStep( - id: 0, - title: 'Title', - richTextParams: RichTextParams( - documentJson: const DocumentJson(title), - ), - ), - ], - ), - WorkspaceProposalSummary( - id: _summarySegmentId, - steps: [ - WorkspaceProposalSegmentStep( - id: 0, - title: 'Problem statement', - richTextParams: RichTextParams( - documentJson: const DocumentJson(problemStatement), - charsLimit: 200, - ), - ), - WorkspaceProposalSegmentStep( - id: 1, - title: 'Solution statement', - richTextParams: RichTextParams( - documentJson: const DocumentJson(solutionStatement), - charsLimit: 200, - ), - ), - WorkspaceProposalSegmentStep( - id: 2, - title: 'Public description', - richTextParams: RichTextParams( - documentJson: const DocumentJson(publicDescription), - charsLimit: 3000, - ), - ), - ], - ), - WorkspaceProposalSolution( - id: _solutionSegmentId, - steps: [ - WorkspaceProposalSegmentStep( - id: 0, - title: 'Problem perspective', - titleInDetails: - "What is your perspective on the problem you're solving?", - richTextParams: RichTextParams( - documentJson: const DocumentJson(answer), - charsLimit: 200, - ), - ), - WorkspaceProposalSegmentStep( - id: 1, - title: 'Perspective rationale', - titleInDetails: 'Why did you choose this perspective?', - richTextParams: RichTextParams( - documentJson: const DocumentJson(answer), - charsLimit: 200, - ), - ), - WorkspaceProposalSegmentStep( - id: 2, - title: 'Project engagement', - titleInDetails: 'Who will your project engage?', - richTextParams: RichTextParams( - documentJson: const DocumentJson(answer), - charsLimit: 200, - ), - ), - ], - ), - WorkspaceProposalImpact( - id: _impactSegmentId, - steps: [ - WorkspaceProposalSegmentStep( - id: 0, - title: 'Bonus mark-up', - richTextParams: RichTextParams( - documentJson: const DocumentJson(bonusMarkUp), - charsLimit: 900, - ), - ), - WorkspaceProposalSegmentStep( - id: 1, - title: 'Value for Money', - richTextParams: RichTextParams( - documentJson: const DocumentJson(valueForMoney), - charsLimit: 2600, - ), - ), - ], - ), - WorkspaceProposalCapabilityAndFeasibility( - id: _capabilityAndFeasibilitySegmentId, - steps: [ - WorkspaceProposalSegmentStep( - id: 0, - title: 'Delivery & Accountability', - titleInDetails: - 'How do you proof trust and accountability for your project?', - richTextParams: RichTextParams( - documentJson: const DocumentJson(deliveryAndAccountability), - ), - ), - WorkspaceProposalSegmentStep( - id: 1, - title: 'Feasibility checks', - titleInDetails: 'How will you check if your approach will work?', - richTextParams: RichTextParams( - documentJson: const DocumentJson(feasibilityChecks), - ), - ), - ], - ), - ], -); +const sections = [ + ProposalSetup( + id: 0, + steps: [ + TitleStep( + id: 0, + sectionId: 0, + data: DocumentJson(title), + ), + ], + ), + ProposalSummary( + id: 1, + steps: [ + ProblemStep( + id: 0, + sectionId: 1, + data: DocumentJson(problemStatement), + charsLimit: 200, + ), + SolutionStep( + id: 1, + sectionId: 1, + data: DocumentJson(solutionStatement), + charsLimit: 200, + ), + PublicDescriptionStep( + id: 2, + sectionId: 1, + data: DocumentJson(publicDescription), + charsLimit: 3000, + ), + ], + ), + ProposalSolution( + id: 2, + steps: [ + ProblemPerspectiveStep( + id: 0, + sectionId: 2, + data: DocumentJson(answer), + charsLimit: 200, + ), + PerspectiveRationaleStep( + id: 1, + sectionId: 2, + data: DocumentJson(answer), + charsLimit: 200, + ), + ProjectEngagementStep( + id: 2, + sectionId: 2, + data: DocumentJson(answer), + charsLimit: 200, + ), + ], + ), + ProposalImpact( + id: 3, + steps: [ + BonusMarkUpStep( + id: 0, + sectionId: 3, + data: DocumentJson(bonusMarkUp), + charsLimit: 900, + ), + ValueForMoneyStep( + id: 1, + sectionId: 3, + data: DocumentJson(valueForMoney), + charsLimit: 2600, + ), + ], + ), + CompatibilityAndFeasibility( + id: 4, + steps: [ + DeliveryAndAccountabilityStep( + id: 0, + sectionId: 4, + data: DocumentJson(deliveryAndAccountability), + ), + FeasibilityChecksStep( + id: 1, + sectionId: 4, + data: DocumentJson(feasibilityChecks), + ), + ], + ), +]; class WorkspacePage extends StatefulWidget { const WorkspacePage({ @@ -153,31 +118,44 @@ class WorkspacePage extends StatefulWidget { } class _WorkspacePageState extends State { + late final SectionsController _sectionsController; + late final ItemScrollController _bodyItemScrollController; + + @override + void initState() { + super.initState(); + + _sectionsController = SectionsController(); + _bodyItemScrollController = ItemScrollController(); + + _sectionsController.attachItemsScrollController(_bodyItemScrollController); + + _populateSections(); + } + + @override + void dispose() { + _sectionsController.dispose(); + super.dispose(); + } + @override Widget build(BuildContext context) { - return ProposalControllerScope( - builder: _buildSegmentController, + return SectionsControllerScope( + controller: _sectionsController, child: SpaceScaffold( - left: ProposalNavigationPanel( - navigation: _proposalNavigation, - ), - right: const ProposalSetupPanel(), - child: ProposalDetails( - navigation: _proposalNavigation, + left: const WorkspaceNavigationPanel(), + body: WorkspaceBody( + itemScrollController: _bodyItemScrollController, ), + right: const WorkspaceSetupPanel(), ), ); } - // Only creates initial controller one time - ProposalController _buildSegmentController(Object segmentId) { - final value = segmentId == _setupSegmentId - ? const ProposalControllerStateData( - selectedItemId: 0, - isExpanded: true, - ) - : const ProposalControllerStateData(); - - return ProposalController(value); + void _populateSections() { + _sectionsController.value = SectionsControllerState.initial( + sections: sections, + ); } } diff --git a/catalyst_voices/apps/voices/lib/pages/workspace/workspace_proposal_navigation_ext.dart b/catalyst_voices/apps/voices/lib/pages/workspace/workspace_proposal_navigation_ext.dart deleted file mode 100644 index d453d2665e6..00000000000 --- a/catalyst_voices/apps/voices/lib/pages/workspace/workspace_proposal_navigation_ext.dart +++ /dev/null @@ -1,14 +0,0 @@ -import 'package:catalyst_voices_localization/catalyst_voices_localization.dart'; -import 'package:catalyst_voices_models/catalyst_voices_models.dart'; - -extension WorkspaceProposalSegmentExt on WorkspaceProposalSegment { - String localizedName(VoicesLocalizations localizations) { - return switch (this) { - WorkspaceProposalSetup() => localizations.workspaceProposalSetup, - WorkspaceProposalSummary() => 'Proposal summary', - WorkspaceProposalSolution() => 'Proposal solution', - WorkspaceProposalImpact() => 'Proposal Impact', - WorkspaceProposalCapabilityAndFeasibility() => 'Capability & Feasibility', - }; - } -} diff --git a/catalyst_voices/apps/voices/lib/pages/workspace/workspace_rich_text_step.dart b/catalyst_voices/apps/voices/lib/pages/workspace/workspace_rich_text_step.dart new file mode 100644 index 00000000000..9d5814abbc7 --- /dev/null +++ b/catalyst_voices/apps/voices/lib/pages/workspace/workspace_rich_text_step.dart @@ -0,0 +1,102 @@ +import 'package:catalyst_voices/widgets/navigation/section_step_state_builder.dart'; +import 'package:catalyst_voices/widgets/rich_text/voices_rich_text.dart'; +import 'package:catalyst_voices/widgets/widgets.dart'; +import 'package:catalyst_voices_localization/catalyst_voices_localization.dart'; +import 'package:catalyst_voices_view_models/catalyst_voices_view_models.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_quill/flutter_quill.dart'; + +class WorkspaceRichTextStep extends StatefulWidget { + final RichTextStep step; + + const WorkspaceRichTextStep({ + super.key, + required this.step, + }); + + @override + State createState() => _WorkspaceRichTextStepState(); +} + +class _WorkspaceRichTextStepState extends State { + late final VoicesRichTextController _controller; + late final VoicesRichTextEditModeController _editModeController; + + @override + void initState() { + super.initState(); + + final document = Document.fromJson(widget.step.data.value); + final selectionOffset = document.length == 0 ? 0 : document.length - 1; + + _controller = VoicesRichTextController( + document: document, + selection: TextSelection.collapsed(offset: selectionOffset), + ); + _editModeController = VoicesRichTextEditModeController(); + _editModeController.addListener(_onEditModeControllerChanged); + } + + @override + void dispose() { + _editModeController.dispose(); + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return SectionStepStateBuilder( + id: widget.step.sectionStepId, + builder: (context, value, child) { + return WorkspaceTileContainer( + isSelected: value.isSelected, + content: child!, + ); + }, + child: VoicesRichText( + title: widget.step.localizedDesc(context), + controller: _controller, + editModeController: _editModeController, + charsLimit: widget.step.charsLimit, + canEditDocumentGetter: _canEditDocument, + onEditBlocked: _showEditBlockedRationale, + ), + ); + } + + bool _canEditDocument(Document document) { + final sectionsController = SectionsControllerScope.of(context); + + final ids = sectionsController.value.editStepsIds; + final isEditing = ids.isNotEmpty; + + return !isEditing; + } + + Future _showEditBlockedRationale() async { + await VoicesDialog.show( + context: context, + builder: (context) { + return VoicesAlertDialog( + title: Text(context.l10n.warning), + subtitle: Text(context.l10n.saveBeforeEditingErrorText), + buttons: [ + VoicesFilledButton( + child: Text(context.l10n.ok), + onTap: () => Navigator.of(context).pop(), + ), + ], + ); + }, + ); + } + + void _onEditModeControllerChanged() { + final isEditMode = _editModeController.value; + final sectionsController = SectionsControllerScope.of(context); + final id = widget.step.sectionStepId; + + sectionsController.editStep(id, enabled: isEditMode); + } +} diff --git a/catalyst_voices/apps/voices/lib/pages/workspace/proposal_setup_panel.dart b/catalyst_voices/apps/voices/lib/pages/workspace/workspace_setup_panel.dart similarity index 87% rename from catalyst_voices/apps/voices/lib/pages/workspace/proposal_setup_panel.dart rename to catalyst_voices/apps/voices/lib/pages/workspace/workspace_setup_panel.dart index eadbdb510b1..7d20a385c49 100644 --- a/catalyst_voices/apps/voices/lib/pages/workspace/proposal_setup_panel.dart +++ b/catalyst_voices/apps/voices/lib/pages/workspace/workspace_setup_panel.dart @@ -2,8 +2,8 @@ import 'package:catalyst_voices/widgets/widgets.dart'; import 'package:catalyst_voices_localization/catalyst_voices_localization.dart'; import 'package:flutter/material.dart'; -class ProposalSetupPanel extends StatelessWidget { - const ProposalSetupPanel({super.key}); +class WorkspaceSetupPanel extends StatelessWidget { + const WorkspaceSetupPanel({super.key}); @override Widget build(BuildContext context) { diff --git a/catalyst_voices/apps/voices/lib/routes/routing/account_route.g.dart b/catalyst_voices/apps/voices/lib/routes/routing/account_route.g.dart deleted file mode 100644 index c6fd4539508..00000000000 --- a/catalyst_voices/apps/voices/lib/routes/routing/account_route.g.dart +++ /dev/null @@ -1,33 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'account_route.dart'; - -// ************************************************************************** -// GoRouterGenerator -// ************************************************************************** - -List get $appRoutes => [ - $accountRoute, - ]; - -RouteBase get $accountRoute => GoRouteData.$route( - path: '/m4/account', - factory: $AccountRouteExtension._fromState, - ); - -extension $AccountRouteExtension on AccountRoute { - static AccountRoute _fromState(GoRouterState state) => const AccountRoute(); - - String get location => GoRouteData.$location( - '/m4/account', - ); - - void go(BuildContext context) => context.go(location); - - Future push(BuildContext context) => context.push(location); - - void pushReplacement(BuildContext context) => - context.pushReplacement(location); - - void replace(BuildContext context) => context.replace(location); -} diff --git a/catalyst_voices/apps/voices/lib/routes/routing/coming_soon_route.g.dart b/catalyst_voices/apps/voices/lib/routes/routing/coming_soon_route.g.dart deleted file mode 100644 index 8c843d09165..00000000000 --- a/catalyst_voices/apps/voices/lib/routes/routing/coming_soon_route.g.dart +++ /dev/null @@ -1,34 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'coming_soon_route.dart'; - -// ************************************************************************** -// GoRouterGenerator -// ************************************************************************** - -List get $appRoutes => [ - $comingSoonRoute, - ]; - -RouteBase get $comingSoonRoute => GoRouteData.$route( - path: '/', - factory: $ComingSoonRouteExtension._fromState, - ); - -extension $ComingSoonRouteExtension on ComingSoonRoute { - static ComingSoonRoute _fromState(GoRouterState state) => - const ComingSoonRoute(); - - String get location => GoRouteData.$location( - '/', - ); - - void go(BuildContext context) => context.go(location); - - Future push(BuildContext context) => context.push(location); - - void pushReplacement(BuildContext context) => - context.pushReplacement(location); - - void replace(BuildContext context) => context.replace(location); -} diff --git a/catalyst_voices/apps/voices/lib/routes/routing/login_route.g.dart b/catalyst_voices/apps/voices/lib/routes/routing/login_route.g.dart deleted file mode 100644 index 5d87880c7a8..00000000000 --- a/catalyst_voices/apps/voices/lib/routes/routing/login_route.g.dart +++ /dev/null @@ -1,33 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'login_route.dart'; - -// ************************************************************************** -// GoRouterGenerator -// ************************************************************************** - -List get $appRoutes => [ - $loginRoute, - ]; - -RouteBase get $loginRoute => GoRouteData.$route( - path: '/login', - factory: $LoginRouteExtension._fromState, - ); - -extension $LoginRouteExtension on LoginRoute { - static LoginRoute _fromState(GoRouterState state) => const LoginRoute(); - - String get location => GoRouteData.$location( - '/login', - ); - - void go(BuildContext context) => context.go(location); - - Future push(BuildContext context) => context.push(location); - - void pushReplacement(BuildContext context) => - context.pushReplacement(location); - - void replace(BuildContext context) => context.replace(location); -} diff --git a/catalyst_voices/apps/voices/lib/routes/routing/overall_spaces_route.g.dart b/catalyst_voices/apps/voices/lib/routes/routing/overall_spaces_route.g.dart deleted file mode 100644 index 3160be0e8b2..00000000000 --- a/catalyst_voices/apps/voices/lib/routes/routing/overall_spaces_route.g.dart +++ /dev/null @@ -1,34 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'overall_spaces_route.dart'; - -// ************************************************************************** -// GoRouterGenerator -// ************************************************************************** - -List get $appRoutes => [ - $overallSpacesRoute, - ]; - -RouteBase get $overallSpacesRoute => GoRouteData.$route( - path: '/m4/spaces', - factory: $OverallSpacesRouteExtension._fromState, - ); - -extension $OverallSpacesRouteExtension on OverallSpacesRoute { - static OverallSpacesRoute _fromState(GoRouterState state) => - const OverallSpacesRoute(); - - String get location => GoRouteData.$location( - '/m4/spaces', - ); - - void go(BuildContext context) => context.go(location); - - Future push(BuildContext context) => context.push(location); - - void pushReplacement(BuildContext context) => - context.pushReplacement(location); - - void replace(BuildContext context) => context.replace(location); -} diff --git a/catalyst_voices/apps/voices/lib/routes/routing/spaces_route.g.dart b/catalyst_voices/apps/voices/lib/routes/routing/spaces_route.g.dart deleted file mode 100644 index a3ae841792e..00000000000 --- a/catalyst_voices/apps/voices/lib/routes/routing/spaces_route.g.dart +++ /dev/null @@ -1,130 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'spaces_route.dart'; - -// ************************************************************************** -// GoRouterGenerator -// ************************************************************************** - -List get $appRoutes => [ - $spacesShellRouteData, - ]; - -RouteBase get $spacesShellRouteData => ShellRouteData.$route( - factory: $SpacesShellRouteDataExtension._fromState, - routes: [ - GoRouteData.$route( - path: '/m4/discovery', - factory: $DiscoveryRouteExtension._fromState, - ), - GoRouteData.$route( - path: '/m4/workspace', - factory: $WorkspaceRouteExtension._fromState, - ), - GoRouteData.$route( - path: '/m4/voting', - factory: $VotingRouteExtension._fromState, - ), - GoRouteData.$route( - path: '/m4/funded_projects', - factory: $FundedProjectsRouteExtension._fromState, - ), - GoRouteData.$route( - path: '/m4/treasury', - factory: $TreasuryRouteExtension._fromState, - ), - ], - ); - -extension $SpacesShellRouteDataExtension on SpacesShellRouteData { - static SpacesShellRouteData _fromState(GoRouterState state) => - const SpacesShellRouteData(); -} - -extension $DiscoveryRouteExtension on DiscoveryRoute { - static DiscoveryRoute _fromState(GoRouterState state) => - const DiscoveryRoute(); - - String get location => GoRouteData.$location( - '/m4/discovery', - ); - - void go(BuildContext context) => context.go(location); - - Future push(BuildContext context) => context.push(location); - - void pushReplacement(BuildContext context) => - context.pushReplacement(location); - - void replace(BuildContext context) => context.replace(location); -} - -extension $WorkspaceRouteExtension on WorkspaceRoute { - static WorkspaceRoute _fromState(GoRouterState state) => - const WorkspaceRoute(); - - String get location => GoRouteData.$location( - '/m4/workspace', - ); - - void go(BuildContext context) => context.go(location); - - Future push(BuildContext context) => context.push(location); - - void pushReplacement(BuildContext context) => - context.pushReplacement(location); - - void replace(BuildContext context) => context.replace(location); -} - -extension $VotingRouteExtension on VotingRoute { - static VotingRoute _fromState(GoRouterState state) => const VotingRoute(); - - String get location => GoRouteData.$location( - '/m4/voting', - ); - - void go(BuildContext context) => context.go(location); - - Future push(BuildContext context) => context.push(location); - - void pushReplacement(BuildContext context) => - context.pushReplacement(location); - - void replace(BuildContext context) => context.replace(location); -} - -extension $FundedProjectsRouteExtension on FundedProjectsRoute { - static FundedProjectsRoute _fromState(GoRouterState state) => - const FundedProjectsRoute(); - - String get location => GoRouteData.$location( - '/m4/funded_projects', - ); - - void go(BuildContext context) => context.go(location); - - Future push(BuildContext context) => context.push(location); - - void pushReplacement(BuildContext context) => - context.pushReplacement(location); - - void replace(BuildContext context) => context.replace(location); -} - -extension $TreasuryRouteExtension on TreasuryRoute { - static TreasuryRoute _fromState(GoRouterState state) => const TreasuryRoute(); - - String get location => GoRouteData.$location( - '/m4/treasury', - ); - - void go(BuildContext context) => context.go(location); - - Future push(BuildContext context) => context.push(location); - - void pushReplacement(BuildContext context) => - context.pushReplacement(location); - - void replace(BuildContext context) => context.replace(location); -} diff --git a/catalyst_voices/apps/voices/lib/widgets/buttons/voices_buttons.dart b/catalyst_voices/apps/voices/lib/widgets/buttons/voices_buttons.dart index 3b5c495f1d4..408077d9fd8 100644 --- a/catalyst_voices/apps/voices/lib/widgets/buttons/voices_buttons.dart +++ b/catalyst_voices/apps/voices/lib/widgets/buttons/voices_buttons.dart @@ -4,6 +4,7 @@ import 'package:catalyst_voices/widgets/buttons/voices_filled_button.dart'; import 'package:catalyst_voices/widgets/buttons/voices_icon_button.dart'; import 'package:catalyst_voices/widgets/buttons/voices_outlined_button.dart'; import 'package:catalyst_voices/widgets/buttons/voices_text_button.dart'; +import 'package:catalyst_voices/widgets/common/animated_expand_chevron.dart'; import 'package:catalyst_voices_assets/catalyst_voices_assets.dart'; import 'package:catalyst_voices_localization/catalyst_voices_localization.dart'; import 'package:flutter/material.dart'; @@ -100,9 +101,10 @@ class ChevronExpandButton extends StatelessWidget { @override Widget build(BuildContext context) { - return isExpanded - ? ChevronDownButton(onTap: onTap) - : ChevronRightButton(onTap: onTap); + return VoicesIconButton( + onTap: onTap, + child: AnimatedExpandChevron(isExpanded: isExpanded), + ); } } diff --git a/catalyst_voices/apps/voices/lib/widgets/common/animated_expand_chevron.dart b/catalyst_voices/apps/voices/lib/widgets/common/animated_expand_chevron.dart new file mode 100644 index 00000000000..13d56f3b923 --- /dev/null +++ b/catalyst_voices/apps/voices/lib/widgets/common/animated_expand_chevron.dart @@ -0,0 +1,20 @@ +import 'package:catalyst_voices_assets/catalyst_voices_assets.dart'; +import 'package:flutter/material.dart'; + +class AnimatedExpandChevron extends StatelessWidget { + final bool isExpanded; + + const AnimatedExpandChevron({ + super.key, + required this.isExpanded, + }); + + @override + Widget build(BuildContext context) { + return AnimatedRotation( + turns: isExpanded ? 0.25 : 0, + duration: const Duration(milliseconds: 250), + child: VoicesAssets.icons.chevronRight.buildIcon(), + ); + } +} diff --git a/catalyst_voices/apps/voices/lib/widgets/containers/sidebar_scaffold.dart b/catalyst_voices/apps/voices/lib/widgets/containers/sidebar_scaffold.dart index 14ed50f26c7..4636541cf17 100644 --- a/catalyst_voices/apps/voices/lib/widgets/containers/sidebar_scaffold.dart +++ b/catalyst_voices/apps/voices/lib/widgets/containers/sidebar_scaffold.dart @@ -16,8 +16,8 @@ class SidebarScaffold extends StatelessWidget { final Widget rightRail; final double railWidth; final double railsGap; - final double childMaxWidth; - final Widget child; + final double bodyMaxWidth; + final Widget body; const SidebarScaffold({ super.key, @@ -25,8 +25,8 @@ class SidebarScaffold extends StatelessWidget { this.rightRail = const SizedBox(), this.railWidth = 326, this.railsGap = 56, - this.childMaxWidth = 612, - required this.child, + this.bodyMaxWidth = 612, + required this.body, }); @override @@ -39,7 +39,7 @@ class SidebarScaffold extends StatelessWidget { child: leftRail, ), SizedBox(width: railsGap), - Expanded(child: child), + Expanded(child: body), SizedBox(width: railsGap), ConstrainedBox( constraints: BoxConstraints.tightFor(width: railWidth), diff --git a/catalyst_voices/apps/voices/lib/widgets/containers/space_scaffold.dart b/catalyst_voices/apps/voices/lib/widgets/containers/space_scaffold.dart index 701fcd01c29..c24bf155e89 100644 --- a/catalyst_voices/apps/voices/lib/widgets/containers/space_scaffold.dart +++ b/catalyst_voices/apps/voices/lib/widgets/containers/space_scaffold.dart @@ -6,32 +6,30 @@ import 'package:flutter/material.dart'; /// does not require any specific child types but /// is common to use [SpaceSidePanel] as [left] and [right]. /// -/// Only difference from [SidebarScaffold] is that main content, [child], +/// Only difference from [SidebarScaffold] is that main content, [body], /// has maxWidth so it does not expand indefinitely but spacing -/// between [child] and [left],[right] does. +/// between [body] and [left],[right] does. class SpaceScaffold extends StatelessWidget { final Widget left; + final Widget body; final Widget right; - final Widget child; const SpaceScaffold({ super.key, required this.left, + required this.body, required this.right, - required this.child, }); @override Widget build(BuildContext context) { return SidebarScaffold( leftRail: left, - rightRail: right, - child: Center( - child: ConstrainedBox( - constraints: const BoxConstraints(maxWidth: 612), - child: child, - ), + body: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 612), + child: body, ), + rightRail: right, ); } } diff --git a/catalyst_voices/apps/voices/lib/widgets/headers/segment_header.dart b/catalyst_voices/apps/voices/lib/widgets/headers/segment_header.dart index 0781122e192..e1892893135 100644 --- a/catalyst_voices/apps/voices/lib/widgets/headers/segment_header.dart +++ b/catalyst_voices/apps/voices/lib/widgets/headers/segment_header.dart @@ -6,6 +6,7 @@ class SegmentHeader extends StatelessWidget { final Widget? leading; final List actions; final bool isSelected; + final VoidCallback? onTap; const SegmentHeader({ super.key, @@ -13,6 +14,7 @@ class SegmentHeader extends StatelessWidget { this.leading, this.actions = const [], this.isSelected = false, + this.onTap, }); Set get _states => { @@ -47,21 +49,24 @@ class SegmentHeader extends StatelessWidget { style: textStyle, maxLines: 1, overflow: TextOverflow.ellipsis, - child: AnimatedContainer( - duration: kThemeChangeDuration, - constraints: const BoxConstraints(minHeight: 52), - decoration: BoxDecoration( - color: backgroundColor.resolve(_states), - ), - padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12), - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - if (leading != null) leading!, - Expanded(child: Text(name)), - if (actions.isNotEmpty) ...actions, - ], + child: GestureDetector( + onTap: onTap, + child: AnimatedContainer( + duration: kThemeChangeDuration, + constraints: const BoxConstraints(minHeight: 52), + decoration: BoxDecoration( + color: backgroundColor.resolve(_states), + ), + padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + if (leading != null) leading!, + Expanded(child: Text(name)), + if (actions.isNotEmpty) ...actions, + ], + ), ), ), ), diff --git a/catalyst_voices/apps/voices/lib/widgets/menu/voices_node_menu.dart b/catalyst_voices/apps/voices/lib/widgets/menu/voices_node_menu.dart index fa2874d35ab..8a365d2b104 100644 --- a/catalyst_voices/apps/voices/lib/widgets/menu/voices_node_menu.dart +++ b/catalyst_voices/apps/voices/lib/widgets/menu/voices_node_menu.dart @@ -24,130 +24,56 @@ final class VoicesNodeMenuItem extends Equatable { ]; } -class VoicesNodeMenuStateData extends Equatable { - final int? selectedItemId; - final bool isExpanded; - - const VoicesNodeMenuStateData({ - this.selectedItemId, - this.isExpanded = false, - }); - - VoicesNodeMenuStateData copyWith({ - int? selectedItemId, - bool? isExpanded, - }) { - return VoicesNodeMenuStateData( - selectedItemId: selectedItemId ?? this.selectedItemId, - isExpanded: isExpanded ?? this.isExpanded, - ); - } - - VoicesNodeMenuStateData clearSelection() { - return VoicesNodeMenuStateData( - selectedItemId: null, - isExpanded: isExpanded, - ); - } - - @override - List get props => [ - selectedItemId, - isExpanded, - ]; -} - -class VoicesNodeMenuController extends ValueNotifier { - VoicesNodeMenuController([ - super._value = const VoicesNodeMenuStateData(), - ]); - - int? get selected => value.selectedItemId; - - set selected(int? newValue) { - value = newValue != null - ? value.copyWith(selectedItemId: newValue) - : value.clearSelection(); - } - - bool get isExpanded => value.isExpanded; - - set isExpanded(bool newValue) { - value = value.copyWith(isExpanded: newValue); - } -} - -class VoicesNodeMenu extends StatefulWidget { +class VoicesNodeMenu extends StatelessWidget { final String name; - final VoicesNodeMenuController? controller; + final Widget? icon; + final VoidCallback? onHeaderTap; + final int? selectedItemId; + final ValueChanged onItemTap; final List items; final bool isExpandable; + final bool isExpanded; const VoicesNodeMenu({ super.key, required this.name, - this.controller, + this.icon, + this.onHeaderTap, + this.selectedItemId, + required this.onItemTap, required this.items, this.isExpandable = true, - }); - - @override - State createState() => _VoicesNodeMenuState(); -} - -class _VoicesNodeMenuState extends State { - VoicesNodeMenuController? _controller; - - VoicesNodeMenuController get _effectiveController => - widget.controller ?? (_controller ??= VoicesNodeMenuController()); - - @override - void dispose() { - _controller?.dispose(); - _controller = null; - super.dispose(); - } + this.isExpanded = false, + }) : assert( + !isExpanded || isExpandable, + 'Can not be expanded and not expandable at same time', + ); @override Widget build(BuildContext context) { - return ValueListenableBuilder( - valueListenable: _effectiveController, - builder: (context, value, _) { - return SimpleTreeView( - isExpanded: value.isExpanded, - root: SimpleTreeViewRootRow( - onTap: widget.isExpandable ? _onRootTap : null, - leading: [ - _NodeIcon(isOpen: value.isExpanded), - VoicesAssets.icons.viewGrid.buildIcon(), - ], - child: Text(widget.name), - ), - children: widget.items.mapIndexed( - (index, item) { - return SimpleTreeViewChildRow( - key: ValueKey('NodeMenu${item.id}RowKey'), - hasNext: index < widget.items.length - 1, - isSelected: item.id == value.selectedItemId, - onTap: item.isEnabled ? () => _onMenuItemTap(item) : null, - child: Text(item.label), - ); - }, - ).toList(), - ); - }, + return SimpleTreeView( + isExpanded: isExpanded, + root: SimpleTreeViewRootRow( + onTap: isExpandable ? onHeaderTap : null, + leading: [ + _NodeIcon(isOpen: isExpanded), + icon ?? VoicesAssets.icons.viewGrid.buildIcon(), + ], + child: Text(name), + ), + children: items.mapIndexed( + (index, item) { + return SimpleTreeViewChildRow( + key: ValueKey('NodeMenu${item.id}RowKey'), + hasNext: index < items.length - 1, + isSelected: item.id == selectedItemId, + onTap: item.isEnabled ? () => onItemTap(item.id) : null, + child: Text(item.label), + ); + }, + ).toList(), ); } - - void _onRootTap() { - _effectiveController.isExpanded = !_effectiveController.isExpanded; - } - - void _onMenuItemTap(VoicesNodeMenuItem item) { - final id = item.id != _effectiveController.selected ? item.id : null; - - _effectiveController.selected = id; - } } class _NodeIcon extends StatelessWidget { diff --git a/catalyst_voices/apps/voices/lib/widgets/navigation/section_header.dart b/catalyst_voices/apps/voices/lib/widgets/navigation/section_header.dart new file mode 100644 index 00000000000..dc214b43394 --- /dev/null +++ b/catalyst_voices/apps/voices/lib/widgets/navigation/section_header.dart @@ -0,0 +1,35 @@ +import 'package:catalyst_voices/widgets/widgets.dart'; +import 'package:catalyst_voices_view_models/catalyst_voices_view_models.dart'; +import 'package:flutter/material.dart'; + +class SectionHeader extends StatelessWidget { + final Section section; + + const SectionHeader({ + super.key, + required this.section, + }); + + @override + Widget build(BuildContext context) { + final controller = SectionsControllerScope.of(context); + + return ValueListenableBuilder( + valueListenable: controller, + builder: (context, value, child) { + final isOpened = value.openedSections.contains(section.id); + final hasSelectedStep = value.activeSectionId == section.id; + + return SegmentHeader( + leading: ChevronExpandButton( + onTap: () => controller.toggleSection(section.id), + isExpanded: isOpened, + ), + name: section.localizedName(context), + isSelected: isOpened && hasSelectedStep, + onTap: () => controller.focusSection(section.id), + ); + }, + ); + } +} diff --git a/catalyst_voices/apps/voices/lib/widgets/navigation/section_step_state_builder.dart b/catalyst_voices/apps/voices/lib/widgets/navigation/section_step_state_builder.dart new file mode 100644 index 00000000000..d5424fc4664 --- /dev/null +++ b/catalyst_voices/apps/voices/lib/widgets/navigation/section_step_state_builder.dart @@ -0,0 +1,49 @@ +import 'package:catalyst_voices/widgets/widgets.dart'; +import 'package:catalyst_voices_view_models/catalyst_voices_view_models.dart'; +import 'package:equatable/equatable.dart'; +import 'package:flutter/material.dart'; + +final class SectionStepState extends Equatable { + final bool isSelected; + + const SectionStepState({ + required this.isSelected, + }); + + @override + List get props => [ + isSelected, + ]; +} + +class SectionStepStateBuilder extends StatelessWidget { + final SectionStepId id; + final ValueWidgetBuilder builder; + final Widget? child; + + const SectionStepStateBuilder({ + super.key, + required this.id, + required this.builder, + this.child, + }); + + @override + Widget build(BuildContext context) { + final controller = SectionsControllerScope.of(context); + + return ValueListenableBuilder( + valueListenable: controller, + builder: (context, value, child) { + final isSelected = value.activeStepId == id; + + final state = SectionStepState( + isSelected: isSelected, + ); + + return builder(context, state, child); + }, + child: child, + ); + } +} diff --git a/catalyst_voices/apps/voices/lib/widgets/navigation/sections_controller.dart b/catalyst_voices/apps/voices/lib/widgets/navigation/sections_controller.dart new file mode 100644 index 00000000000..2de195aff90 --- /dev/null +++ b/catalyst_voices/apps/voices/lib/widgets/navigation/sections_controller.dart @@ -0,0 +1,219 @@ +import 'dart:async'; + +import 'package:catalyst_voices_models/catalyst_voices_models.dart'; +import 'package:catalyst_voices_view_models/catalyst_voices_view_models.dart'; +import 'package:collection/collection.dart'; +import 'package:equatable/equatable.dart'; +import 'package:flutter/material.dart'; +import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; + +final class SectionsControllerState extends Equatable { + final List
sections; + final Set openedSections; + final SectionStepId? activeStepId; + final Set editStepsIds; + + const SectionsControllerState({ + this.sections = const [], + this.openedSections = const {}, + this.activeStepId, + this.editStepsIds = const {}, + }); + + int? get activeSectionId => activeStepId?.sectionId; + + bool get allSegmentsClosed => openedSections.isEmpty; + + List get listItems { + final openedSections = {...this.openedSections}; + + return sections + .expand( + (element) => [ + element, + if (openedSections.contains(element.id)) ...element.steps, + ], + ) + .toList(); + } + + /// All [sections] are opened and first section is selected. + factory SectionsControllerState.initial({ + required List
sections, + }) { + final openedSections = sections.map((e) => e.id).toSet(); + + final section = sections.firstWhereOrNull((e) => e.steps.isNotEmpty); + + final activeStepId = section != null + ? (sectionId: section.id, stepId: section.steps.first.id) + : null; + + return SectionsControllerState( + sections: sections, + openedSections: openedSections, + activeStepId: activeStepId, + ); + } + + SectionsControllerState copyWith({ + List
? sections, + Set? openedSections, + Optional? activeStepId, + Set? editStepsIds, + }) { + return SectionsControllerState( + sections: sections ?? this.sections, + openedSections: openedSections ?? this.openedSections, + activeStepId: activeStepId.dataOr(this.activeStepId), + editStepsIds: editStepsIds ?? this.editStepsIds, + ); + } + + @override + List get props => [ + sections, + openedSections, + activeStepId, + editStepsIds, + ]; +} + +final class SectionsController extends ValueNotifier { + ItemScrollController? _itemsScrollController; + + SectionsController([ + super.value = const SectionsControllerState(), + ]) : super(); + + // ignore: use_setters_to_change_properties + void attachItemsScrollController(ItemScrollController value) { + _itemsScrollController = value; + } + + void detachItemsScrollController() { + _itemsScrollController = null; + } + + void toggleSection(int id) { + final openedSections = {...value.openedSections}; + final allSegmentsClosed = value.allSegmentsClosed; + final shouldOpen = !openedSections.contains(id); + + Optional? activeStepId; + + if (shouldOpen) { + openedSections.add(id); + } else { + openedSections.remove(id); + } + + if (shouldOpen && allSegmentsClosed) { + final section = value.sections.firstWhere((element) => element.id == id); + + final newStepId = section.steps.isNotEmpty + ? (sectionId: section.id, stepId: section.steps.first.id) + : null; + + if (newStepId != null) { + activeStepId = Optional.of(newStepId); + unawaited(_scrollToSectionStep(newStepId)); + } + } + + value = value.copyWith( + openedSections: openedSections, + activeStepId: activeStepId, + ); + } + + void selectSectionStep(SectionStepId id) { + value = value.copyWith(activeStepId: Optional(id)); + + unawaited(_scrollToSectionStep(id)); + } + + void focusSection(int id) { + unawaited(_scrollToSection(id)); + } + + void editStep( + SectionStepId id, { + required bool enabled, + }) { + final editStepsIds = {...value.editStepsIds}; + Optional? activeStepId; + + if (enabled) { + editStepsIds.add(id); + activeStepId = Optional.of(id); + } else { + editStepsIds.remove(id); + } + + value = value.copyWith( + editStepsIds: editStepsIds, + activeStepId: activeStepId, + ); + } + + @override + void dispose() { + detachItemsScrollController(); + super.dispose(); + } + + Future _scrollToSection(int id) async { + final index = value.listItems.indexWhere((e) => e is Section && e.id == id); + if (index == -1) { + return; + } + + await _scrollToIndex(index); + } + + Future _scrollToSectionStep(SectionStepId id) async { + final index = value.listItems + .indexWhere((e) => e is SectionStep && e.sectionStepId == id); + if (index == -1) { + return; + } + + await _scrollToIndex(index); + } + + Future _scrollToIndex(int index) async { + await _itemsScrollController?.scrollTo( + index: index, + duration: const Duration(milliseconds: 300), + ); + } +} + +final class SectionsControllerScope extends InheritedWidget { + final SectionsController controller; + + const SectionsControllerScope({ + super.key, + required this.controller, + required super.child, + }); + + static SectionsController of(BuildContext context) { + final controller = context + .dependOnInheritedWidgetOfExactType() + ?.controller; + + assert( + controller != null, + 'Unable to find SectionsControllerScope in widget tree', + ); + + return controller!; + } + + @override + bool updateShouldNotify(covariant SectionsControllerScope oldWidget) { + return controller != oldWidget.controller; + } +} diff --git a/catalyst_voices/apps/voices/lib/widgets/navigation/sections_list_view.dart b/catalyst_voices/apps/voices/lib/widgets/navigation/sections_list_view.dart new file mode 100644 index 00000000000..5d53389bc69 --- /dev/null +++ b/catalyst_voices/apps/voices/lib/widgets/navigation/sections_list_view.dart @@ -0,0 +1,75 @@ +import 'package:catalyst_voices/widgets/navigation/section_header.dart'; +import 'package:catalyst_voices_view_models/catalyst_voices_view_models.dart'; +import 'package:flutter/material.dart'; +import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; + +typedef SectionHeaderWidgetBuilder = Widget Function( + BuildContext context, + T section, +); + +typedef SectionStepWidgetBuilder = Widget Function( + BuildContext context, + T step, +); + +class SectionsListView + extends StatelessWidget { + final List items; + final SectionHeaderWidgetBuilder headerBuilder; + final SectionStepWidgetBuilder stepBuilder; + final EdgeInsetsGeometry? padding; + final ItemScrollController? itemScrollController; + + const SectionsListView({ + super.key, + required this.items, + this.headerBuilder = _defaultHeaderBuilder, + required this.stepBuilder, + this.padding = const EdgeInsets.symmetric(vertical: 12), + this.itemScrollController, + }); + + @override + Widget build(BuildContext context) { + return ScrollablePositionedList.separated( + padding: padding?.resolve(Directionality.of(context)), + itemScrollController: itemScrollController, + itemBuilder: (context, index) { + final item = items[index]; + + if (item is T) { + return KeyedSubtree( + key: item.buildKey(), + child: headerBuilder(context, item), + ); + } + + if (item is T2) { + return KeyedSubtree( + key: item.buildKey(), + child: stepBuilder(context, item), + ); + } + + throw ArgumentError('Unknown section item type[${item.runtimeType}]'); + }, + separatorBuilder: (context, index) { + final item = items[index]; + + if (item is SectionStep) { + return const SizedBox(height: 12); + } + + return const SizedBox(height: 24); + }, + itemCount: items.length, + ); + } +} + +Widget _defaultHeaderBuilder(BuildContext context, Section section) { + return SectionHeader( + section: section, + ); +} diff --git a/catalyst_voices/apps/voices/lib/widgets/navigation/sections_list_view_builder.dart b/catalyst_voices/apps/voices/lib/widgets/navigation/sections_list_view_builder.dart new file mode 100644 index 00000000000..8af009c5e6a --- /dev/null +++ b/catalyst_voices/apps/voices/lib/widgets/navigation/sections_list_view_builder.dart @@ -0,0 +1,24 @@ +import 'package:catalyst_voices/widgets/widgets.dart'; +import 'package:catalyst_voices_view_models/catalyst_voices_view_models.dart'; +import 'package:flutter/material.dart'; + +class SectionsListViewBuilder extends StatelessWidget { + final ValueWidgetBuilder> builder; + final Widget? child; + + const SectionsListViewBuilder({ + super.key, + required this.builder, + this.child, + }); + + @override + Widget build(BuildContext context) { + return ValueListenableBuilder( + valueListenable: SectionsControllerScope.of(context), + builder: (context, value, child) { + return builder(context, value.listItems, child); + }, + ); + } +} diff --git a/catalyst_voices/apps/voices/lib/widgets/navigation/sections_menu.dart b/catalyst_voices/apps/voices/lib/widgets/navigation/sections_menu.dart new file mode 100644 index 00000000000..d0435ea1206 --- /dev/null +++ b/catalyst_voices/apps/voices/lib/widgets/navigation/sections_menu.dart @@ -0,0 +1,82 @@ +import 'package:catalyst_voices/widgets/menu/voices_node_menu.dart'; +import 'package:catalyst_voices/widgets/navigation/sections_controller.dart'; +import 'package:catalyst_voices_assets/catalyst_voices_assets.dart'; +import 'package:catalyst_voices_view_models/catalyst_voices_view_models.dart'; +import 'package:flutter/material.dart'; + +class SectionsMenuListener extends StatelessWidget { + final SectionsController controller; + + const SectionsMenuListener({ + super.key, + required this.controller, + }); + + @override + Widget build(BuildContext context) { + return ValueListenableBuilder( + valueListenable: controller, + builder: (context, value, _) { + return SectionsMenu( + sections: value.sections, + openedSections: value.openedSections, + selectedStep: value.activeStepId, + onSectionTap: controller.toggleSection, + onStepSelected: controller.selectSectionStep, + ); + }, + ); + } +} + +class SectionsMenu extends StatelessWidget { + final List
sections; + final Set openedSections; + final SectionStepId? selectedStep; + final ValueChanged onSectionTap; + final ValueChanged onStepSelected; + + const SectionsMenu({ + super.key, + required this.sections, + this.openedSections = const {}, + this.selectedStep, + required this.onSectionTap, + required this.onStepSelected, + }); + + @override + Widget build(BuildContext context) { + return Column( + mainAxisSize: MainAxisSize.min, + children: sections.map( + (section) { + return VoicesNodeMenu( + key: ValueKey('Section[${section.id}]NodeMenu'), + name: section.localizedName(context), + icon: section.icon.buildIcon(), + onHeaderTap: () { + onSectionTap(section.id); + }, + onItemTap: (stepId) { + onStepSelected((sectionId: section.id, stepId: stepId)); + }, + selectedItemId: selectedStep?.sectionId == section.id + ? selectedStep?.stepId + : null, + isExpanded: openedSections.contains(section.id), + items: section.steps.map( + (step) { + return VoicesNodeMenuItem( + id: step.id, + label: step.localizedName(context), + isEnabled: step.isEnabled, + ); + }, + ).toList(), + ); + }, + ).toList(), + ); + } +} diff --git a/catalyst_voices/apps/voices/lib/widgets/rich_text/voices_rich_text.dart b/catalyst_voices/apps/voices/lib/widgets/rich_text/voices_rich_text.dart index 964c6eb5707..848796f5364 100644 --- a/catalyst_voices/apps/voices/lib/widgets/rich_text/voices_rich_text.dart +++ b/catalyst_voices/apps/voices/lib/widgets/rich_text/voices_rich_text.dart @@ -1,5 +1,8 @@ +import 'dart:async'; + import 'package:catalyst_voices/widgets/buttons/voices_filled_button.dart'; import 'package:catalyst_voices/widgets/buttons/voices_text_button.dart'; +import 'package:catalyst_voices/widgets/rich_text/voices_rich_text_limit.dart'; import 'package:catalyst_voices_assets/catalyst_voices_assets.dart'; import 'package:catalyst_voices_brands/catalyst_voices_brands.dart'; import 'package:catalyst_voices_localization/catalyst_voices_localization.dart'; @@ -8,21 +11,45 @@ import 'package:flutter/material.dart'; import 'package:flutter_quill/flutter_quill.dart'; import 'package:flutter_quill_extensions/flutter_quill_extensions.dart'; +typedef CanEditDocumentGetter = bool Function(Document document); + +bool _alwaysAllowEdit(Document document) => true; + +final class VoicesRichTextController extends QuillController { + VoicesRichTextController({ + required super.document, + required super.selection, + }); +} + +final class VoicesRichTextEditModeController extends ValueNotifier { + //ignore: avoid_positional_boolean_parameters + VoicesRichTextEditModeController([super.value = false]); +} + /// A component for rich text writing /// using Quill under the hood /// https://pub.dev/packages/flutter_quill class VoicesRichText extends StatefulWidget { final String title; - final Document? document; - final ValueChanged? onSave; + final VoicesRichTextController? controller; + final VoicesRichTextEditModeController? editModeController; + final FocusNode? focusNode; final int? charsLimit; + final CanEditDocumentGetter canEditDocumentGetter; + final VoidCallback? onEditBlocked; + final ValueChanged? onSaved; const VoicesRichText({ super.key, this.title = '', - this.document, - this.onSave, + this.controller, + this.editModeController, + this.focusNode, this.charsLimit, + this.canEditDocumentGetter = _alwaysAllowEdit, + this.onEditBlocked, + this.onSaved, }); @override @@ -30,118 +57,239 @@ class VoicesRichText extends StatefulWidget { } class _VoicesRichTextState extends State { - final QuillController _controller = QuillController.basic(); - int _documentLength = 0; - bool _editMode = false; - Document _preEditDocument = Document(); - final FocusNode _focusNode = FocusNode(); + VoicesRichTextController? _controller; + + VoicesRichTextController get _effectiveController { + return widget.controller ?? + (_controller ??= VoicesRichTextController( + document: Document(), + selection: const TextSelection.collapsed(offset: 0), + )); + } + + VoicesRichTextEditModeController? _editModeController; + + VoicesRichTextEditModeController get _effectiveEditModeController { + return widget.editModeController ?? + (_editModeController ??= VoicesRichTextEditModeController()); + } + + FocusNode? _focusNode; + + FocusNode get _effectiveFocusNode { + return widget.focusNode ?? + (_focusNode ??= FocusNode( + canRequestFocus: _effectiveEditModeController.value, + )); + } + + ScrollController? _scrollController; + + ScrollController get _effectiveScrollController { + return (_scrollController ??= ScrollController()); + } + + Document? _observedDocument; + StreamSubscription? _documentChangeSub; + + Document? _preEditDocument; + + @override + void initState() { + super.initState(); + + _effectiveController.addListener(_onControllerChanged); + _effectiveEditModeController.addListener(_onEditModeControllerChanged); + + _updateObservedDocument(); + } + + @override + void didUpdateWidget(covariant VoicesRichText oldWidget) { + super.didUpdateWidget(oldWidget); + + if (widget.controller == null && oldWidget.controller != null) { + _controller = VoicesRichTextController( + document: oldWidget.controller!.document, + selection: oldWidget.controller!.selection, + ); + } else if (widget.controller != null && oldWidget.controller == null) { + _controller?.removeListener(_onControllerChanged); + _controller?.dispose(); + _controller = null; + } + + if (widget.controller != oldWidget.controller) { + final old = oldWidget.controller ?? _controller; + final current = widget.controller ?? _controller; + + old?.removeListener(_onControllerChanged); + current?.addListener(_onControllerChanged); + + _updateObservedDocument(); + } + + if (widget.editModeController != oldWidget.editModeController) { + final old = oldWidget.editModeController ?? _editModeController; + final current = widget.editModeController ?? _editModeController; + + old?.removeListener(_onEditModeControllerChanged); + current?.addListener(_onEditModeControllerChanged); + } + } + + @override + void dispose() { + _controller?.dispose(); + _controller = null; + + _editModeController?.dispose(); + _editModeController = null; + + _focusNode?.dispose(); + _focusNode = null; + + _scrollController?.dispose(); + _scrollController = null; + + super.dispose(); + } @override Widget build(BuildContext context) { + final charsLimit = widget.charsLimit; + return Column( children: [ Padding( - padding: const EdgeInsets.only( - left: 24, - top: 20, - bottom: 20, - ), + padding: const EdgeInsets.only(left: 24, top: 20, bottom: 20), child: _TopBar( title: widget.title, - editMode: _editMode, - onToggleEditMode: () { - setState(() { - if (_editMode) { - _controller.document = - Document.fromDelta(_preEditDocument.toDelta()); - } else { - _preEditDocument = - Document.fromDelta(_controller.document.toDelta()); - } - _editMode = !_editMode; - }); - }, + isEditMode: _effectiveEditModeController.value, + onToggleEditMode: _toggleEditMode, ), ), - if (_editMode) - Padding( + Offstage( + offstage: !_effectiveEditModeController.value, + child: Padding( padding: const EdgeInsets.only(bottom: 16), - child: _Toolbar(controller: _controller), + child: _Toolbar(controller: _effectiveController), ), - _Editor( - editMode: _editMode, - controller: _controller, - focusNode: _focusNode, ), - if (widget.charsLimit != null) - _Limit( - documentLength: _documentLength, - charsLimit: widget.charsLimit!, + _EditorDecoration( + isEditMode: _effectiveEditModeController.value, + child: _Editor( + controller: _effectiveController, + focusNode: _effectiveFocusNode, + scrollController: _effectiveScrollController, ), + ), + Offstage( + offstage: charsLimit == null, + child: VoicesRichTextLimit( + document: _effectiveController.document, + charsLimit: charsLimit, + ), + ), const SizedBox(height: 16), - if (_editMode) - _Footer( - controller: _controller, - onSave: (document) { - widget.onSave?.call(document); - setState(() { - _editMode = false; - }); - }, - ) - else - const SizedBox(height: 24), + Offstage( + offstage: !_effectiveEditModeController.value, + child: _Footer( + onSave: _saveDocument, + ), + ), + if (!_effectiveEditModeController.value) const SizedBox(height: 24), ], ); } - @override - void dispose() { - _controller.dispose(); - _focusNode.dispose(); - super.dispose(); + Future _toggleEditMode() async { + if (!_effectiveEditModeController.value) { + if (!widget.canEditDocumentGetter(_effectiveController.document)) { + widget.onEditBlocked?.call(); + return; + } + } + + if (_effectiveEditModeController.value) { + _stopEdit(); + } else { + _startEdit(); + } } - @override - void initState() { - super.initState(); - if (widget.document != null) _controller.document = widget.document!; - _controller.document.changes.listen(_onDocumentChange); - _documentLength = _controller.document.length; + void _saveDocument() { + _preEditDocument = null; + _effectiveEditModeController.value = false; + + widget.onSaved?.call(_effectiveController.document); + } + + void _startEdit() { + final currentDocument = _effectiveController.document; + _preEditDocument = Document.fromDelta(currentDocument.toDelta()); + _effectiveEditModeController.value = true; + } + + void _stopEdit() { + final preEditDocument = _preEditDocument; + _preEditDocument = null; + _effectiveEditModeController.value = false; + + if (preEditDocument != null) { + _effectiveController.document = preEditDocument; + } } - void _onDocumentChange(DocChange docChange) { - final documentLength = _controller.document.length; + void _onControllerChanged() { + if (_observedDocument != _effectiveController.document) { + _updateObservedDocument(); + } + } + void _onEditModeControllerChanged() { setState(() { - _documentLength = documentLength; + _effectiveFocusNode.canRequestFocus = _effectiveEditModeController.value; }); + } - final limit = widget.charsLimit; + void _onDocumentChanged(DocChange change) { + _enforceChatLimit(); + } - if (limit == null) return; + void _updateObservedDocument() { + _observedDocument = _effectiveController.document; + unawaited(_documentChangeSub?.cancel()); + _documentChangeSub = _observedDocument?.changes.listen(_onDocumentChanged); + } - if (documentLength > limit) { - final latestIndex = limit - 1; - _controller.replaceText( - latestIndex, - documentLength - limit, - '', - TextSelection.collapsed(offset: latestIndex), - ); + void _enforceChatLimit() { + final charsLimit = widget.charsLimit; + if (charsLimit != null) { + _clipDocument(charsLimit); } } + + void _clipDocument(int limit) { + final documentLength = _effectiveController.document.length; + final latestIndex = limit - 1; + + _effectiveController.replaceText( + latestIndex, + documentLength - limit, + '', + TextSelection.collapsed(offset: latestIndex), + ); + } } -class _Editor extends StatelessWidget { - final bool editMode; - final QuillController controller; - final FocusNode focusNode; +class _EditorDecoration extends StatelessWidget { + final bool isEditMode; + final Widget child; - const _Editor({ - required this.editMode, - required this.controller, - required this.focusNode, + const _EditorDecoration({ + required this.isEditMode, + required this.child, }); @override @@ -155,7 +303,7 @@ class _Editor extends StatelessWidget { // resizableHorizontally: false, child: DecoratedBox( decoration: BoxDecoration( - color: editMode + color: isEditMode ? Theme.of(context).colors.onSurfaceNeutralOpaqueLv1 : Theme.of(context).colors.elevationsOnSurfaceNeutralLv1White, border: Border.all( @@ -164,18 +312,8 @@ class _Editor extends StatelessWidget { borderRadius: BorderRadius.circular(8), ), child: IgnorePointer( - ignoring: !editMode, - child: QuillEditor.basic( - controller: controller, - focusNode: focusNode, - configurations: QuillEditorConfigurations( - padding: const EdgeInsets.all(16), - placeholder: context.l10n.placeholderRichText, - embedBuilders: CatalystPlatform.isWeb - ? FlutterQuillEmbeds.editorWebBuilders() - : FlutterQuillEmbeds.editorBuilders(), - ), - ), + ignoring: !isEditMode, + child: child, ), ), // ), @@ -183,12 +321,38 @@ class _Editor extends StatelessWidget { } } +class _Editor extends StatelessWidget { + final VoicesRichTextController controller; + final FocusNode focusNode; + final ScrollController scrollController; + + const _Editor({ + required this.controller, + required this.focusNode, + required this.scrollController, + }); + + @override + Widget build(BuildContext context) { + return QuillEditor( + controller: controller, + focusNode: focusNode, + scrollController: scrollController, + configurations: QuillEditorConfigurations( + padding: const EdgeInsets.all(16), + placeholder: context.l10n.placeholderRichText, + embedBuilders: CatalystPlatform.isWeb + ? FlutterQuillEmbeds.editorWebBuilders() + : FlutterQuillEmbeds.editorBuilders(), + ), + ); + } +} + class _Footer extends StatelessWidget { - final QuillController controller; - final ValueChanged? onSave; + final VoidCallback? onSave; const _Footer({ - required this.controller, this.onSave, }); @@ -202,39 +366,8 @@ class _Footer extends StatelessWidget { alignment: Alignment.centerRight, color: Theme.of(context).colors.onSurfaceNeutralOpaqueLv1, child: VoicesFilledButton( + onTap: onSave, child: Text(context.l10n.saveButtonText.toUpperCase()), - onTap: () => onSave?.call(controller.document), - ), - ); - } -} - -class _Limit extends StatelessWidget { - final int documentLength; - final int charsLimit; - - const _Limit({ - required this.documentLength, - required this.charsLimit, - }); - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 32), - child: Row( - children: [ - Expanded( - child: Text( - context.l10n.supportingTextLabelText, - style: Theme.of(context).textTheme.bodySmall, - ), - ), - Text( - '$documentLength/$charsLimit', - style: Theme.of(context).textTheme.bodySmall, - ), - ], ), ); } @@ -251,6 +384,7 @@ class _Toolbar extends StatelessWidget { Widget build(BuildContext context) { return Container( color: Theme.of(context).colors.onSurfaceNeutralOpaqueLv1, + padding: const EdgeInsets.symmetric(horizontal: 18), child: QuillToolbar( configurations: const QuillToolbarConfigurations(), child: Row( @@ -364,12 +498,12 @@ class _ToolbarIconButton extends StatelessWidget { class _TopBar extends StatelessWidget { final String title; - final bool editMode; + final bool isEditMode; final VoidCallback? onToggleEditMode; const _TopBar({ required this.title, - required this.editMode, + required this.isEditMode, this.onToggleEditMode, }); @@ -385,7 +519,7 @@ class _TopBar extends StatelessWidget { VoicesTextButton( onTap: onToggleEditMode, child: Text( - editMode + isEditMode ? context.l10n.cancelButtonText : context.l10n.editButtonText, style: Theme.of(context).textTheme.labelSmall, diff --git a/catalyst_voices/apps/voices/lib/widgets/rich_text/voices_rich_text_limit.dart b/catalyst_voices/apps/voices/lib/widgets/rich_text/voices_rich_text_limit.dart new file mode 100644 index 00000000000..5153c124815 --- /dev/null +++ b/catalyst_voices/apps/voices/lib/widgets/rich_text/voices_rich_text_limit.dart @@ -0,0 +1,81 @@ +import 'dart:async'; + +import 'package:catalyst_voices_localization/catalyst_voices_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_quill/flutter_quill.dart'; + +class VoicesRichTextLimit extends StatefulWidget { + final Document document; + final int? charsLimit; + + const VoicesRichTextLimit({ + super.key, + required this.document, + this.charsLimit, + }); + + @override + State createState() => _VoicesRichTextLimitState(); +} + +class _VoicesRichTextLimitState extends State { + StreamSubscription? _docChangesSub; + + @override + void initState() { + super.initState(); + _docChangesSub = widget.document.changes.listen(_updateDocLength); + } + + @override + void didUpdateWidget(covariant VoicesRichTextLimit oldWidget) { + super.didUpdateWidget(oldWidget); + + if (widget.document != oldWidget.document) { + unawaited(_docChangesSub?.cancel()); + _docChangesSub = widget.document.changes.listen(_updateDocLength); + } + } + + @override + void dispose() { + unawaited(_docChangesSub?.cancel()); + _docChangesSub = null; + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 32), + child: Row( + children: [ + Expanded( + child: Text( + context.l10n.supportingTextLabelText, + style: Theme.of(context).textTheme.bodySmall, + ), + ), + Text( + _formatText(), + style: Theme.of(context).textTheme.bodySmall, + ), + ], + ), + ); + } + + String _formatText() { + final charsLimit = widget.charsLimit; + final documentLength = widget.document.length; + if (charsLimit == null) { + return '$documentLength'; + } + + return '$documentLength/$charsLimit'; + } + + void _updateDocLength(DocChange change) { + setState(() {}); + } +} diff --git a/catalyst_voices/apps/voices/lib/widgets/widgets.dart b/catalyst_voices/apps/voices/lib/widgets/widgets.dart index 22a479af65a..d3ad43f3ba5 100644 --- a/catalyst_voices/apps/voices/lib/widgets/widgets.dart +++ b/catalyst_voices/apps/voices/lib/widgets/widgets.dart @@ -54,6 +54,10 @@ export 'modals/voices_dialog.dart'; export 'modals/voices_info_dialog.dart'; export 'modals/voices_question_dialog.dart'; export 'modals/voices_upload_file_dialog.dart'; +export 'navigation/sections_controller.dart'; +export 'navigation/sections_list_view.dart'; +export 'navigation/sections_list_view_builder.dart'; +export 'navigation/sections_menu.dart'; export 'scrollbar/voices_scrollbar.dart'; export 'seed_phrase/seed_phrases_completer.dart'; export 'seed_phrase/seed_phrases_picker.dart'; diff --git a/catalyst_voices/apps/voices/pubspec.yaml b/catalyst_voices/apps/voices/pubspec.yaml index c9947487de5..1dd7683242f 100644 --- a/catalyst_voices/apps/voices/pubspec.yaml +++ b/catalyst_voices/apps/voices/pubspec.yaml @@ -13,6 +13,7 @@ dependencies: catalyst_cardano: ^0.3.0 catalyst_cardano_serialization: ^0.4.0 catalyst_cardano_web: ^0.3.0 + catalyst_key_derivation: ^0.1.0 catalyst_voices_assets: path: ../../packages/internal/catalyst_voices_assets catalyst_voices_blocs: @@ -54,6 +55,7 @@ dependencies: google_fonts: ^6.2.1 intl: ^0.19.0 result_type: ^0.2.0 + scrollable_positioned_list: ^0.3.8 sentry_flutter: ^8.8.0 url_launcher: ^6.2.2 url_strategy: ^0.3.0 diff --git a/catalyst_voices/apps/voices/web/enable-threads.js b/catalyst_voices/apps/voices/web/enable-threads.js new file mode 100644 index 00000000000..3beb7e215b3 --- /dev/null +++ b/catalyst_voices/apps/voices/web/enable-threads.js @@ -0,0 +1,80 @@ +// TODO(dtscalac): remove workaround when flutter_rust_bridge supports crossOriginIsolated for flutter drive: +// https://github.com/fzyzcjy/flutter_rust_bridge/issues/2407 + +// https://github.com/orgs/community/discussions/13309#discussioncomment-3844940 +// NOTE: This file creates a service worker that cross-origin-isolates the page (read more here: https://web.dev/coop-coep/) which allows us to use wasm threads. +// Normally you would set the COOP and COEP headers on the server to do this, but Github Pages doesn't allow this, so this is a hack to do that. + +/* Edited version of: coi-serviceworker v0.1.6 - Guido Zuidhof, licensed under MIT */ +// From here: https://github.com/gzuidhof/coi-serviceworker +if (typeof window === 'undefined') { + self.addEventListener("install", () => self.skipWaiting()); + self.addEventListener("activate", e => e.waitUntil(self.clients.claim())); + + async function handleFetch(request) { + if (request.cache === "only-if-cached" && request.mode !== "same-origin") { + return; + } + + if (request.mode === "no-cors") { // We need to set `credentials` to "omit" for no-cors requests, per this comment: https://bugs.chromium.org/p/chromium/issues/detail?id=1309901#c7 + request = new Request(request.url, { + cache: request.cache, + credentials: "omit", + headers: request.headers, + integrity: request.integrity, + destination: request.destination, + keepalive: request.keepalive, + method: request.method, + mode: request.mode, + redirect: request.redirect, + referrer: request.referrer, + referrerPolicy: request.referrerPolicy, + signal: request.signal, + }); + } + + let r = await fetch(request).catch(e => console.error(e)); + + if (r.status === 0) { + return r; + } + + const headers = new Headers(r.headers); + // NOTE https://github.com/fzyzcjy/flutter_rust_bridge/issues/1618 changes to require-corp + headers.set("Cross-Origin-Embedder-Policy", "require-corp"); // credentialless or require-corp + headers.set("Cross-Origin-Opener-Policy", "same-origin"); + + return new Response(r.body, { status: r.status, statusText: r.statusText, headers }); + } + + self.addEventListener("fetch", function (e) { + e.respondWith(handleFetch(e.request)); // respondWith must be executed synchonously (but can be passed a Promise) + }); + +} else { + (async function () { + if (window.crossOriginIsolated !== false) return; + + let registration = await navigator.serviceWorker.register(window.document.currentScript.src).catch(e => console.error("COOP/COEP Service Worker failed to register:", e)); + if (registration) { + console.log("COOP/COEP Service Worker registered", registration.scope); + + registration.addEventListener("updatefound", () => { + console.log("Reloading page to make use of updated COOP/COEP Service Worker."); + window.location.reload(); + }); + + // If the registration is active, but it's not controlling the page + if (registration.active && !navigator.serviceWorker.controller) { + console.log("Reloading page to make use of COOP/COEP Service Worker."); + window.location.reload(); + } + } + })(); +} + +// Code to deregister: +// let registrations = await navigator.serviceWorker.getRegistrations(); +// for(let registration of registrations) { +// await registration.unregister(); +// } \ No newline at end of file diff --git a/catalyst_voices/apps/voices/web/index.html b/catalyst_voices/apps/voices/web/index.html index eecf0595883..10a99fe80ad 100644 --- a/catalyst_voices/apps/voices/web/index.html +++ b/catalyst_voices/apps/voices/web/index.html @@ -37,7 +37,9 @@ - + + + \ No newline at end of file diff --git a/catalyst_voices/melos.yaml b/catalyst_voices/melos.yaml index e6635fec0f9..08bc314ff73 100644 --- a/catalyst_voices/melos.yaml +++ b/catalyst_voices/melos.yaml @@ -123,6 +123,7 @@ command: ulid: ^2.0.0 uuid: ^4.5.1 sentry_flutter: ^8.8.0 + scrollable_positioned_list: ^0.3.8 # TODO(dtscalac): win32 dependency is just a transitive dependency and shouldn't be imported # but here we import it explicitly to make sure the latest version is used which addresses # the problem from here: https://github.com/jonataslaw/get_cli/issues/263 diff --git a/catalyst_voices/nginx.conf b/catalyst_voices/nginx.conf index 8fdfc1091eb..7fcc05e6bbd 100644 --- a/catalyst_voices/nginx.conf +++ b/catalyst_voices/nginx.conf @@ -17,6 +17,11 @@ http { server { listen 80; server_name localhost; + + # https://cjycode.com/flutter_rust_bridge/manual/miscellaneous/web-cross-origin#background + add_header Cross-Origin-Opener-Policy "same-origin"; + add_header Cross-Origin-Embedder-Policy "require-corp"; + location / { root /app; index index.html; diff --git a/catalyst_voices/packages/internal/catalyst_voices_assets/lib/generated/assets.gen.dart b/catalyst_voices/packages/internal/catalyst_voices_assets/lib/generated/assets.gen.dart deleted file mode 100644 index 3cc6458354c..00000000000 --- a/catalyst_voices/packages/internal/catalyst_voices_assets/lib/generated/assets.gen.dart +++ /dev/null @@ -1,1477 +0,0 @@ -/// GENERATED CODE - DO NOT MODIFY BY HAND -/// ***************************************************** -/// FlutterGen -/// ***************************************************** - -// coverage:ignore-file -// ignore_for_file: type=lint -// ignore_for_file: directives_ordering,unnecessary_import,implicit_dynamic_list_literal,deprecated_member_use - -import 'package:flutter/services.dart'; -import 'package:flutter/widgets.dart'; -import 'package:flutter_svg/flutter_svg.dart' as _svg; -import 'package:vector_graphics/vector_graphics.dart' as _vg; - -class $AssetsIconsGen { - const $AssetsIconsGen(); - - /// File path: assets/icons/academic-cap.svg - SvgGenImage get academicCap => - const SvgGenImage('assets/icons/academic-cap.svg'); - - /// File path: assets/icons/adjustments.svg - SvgGenImage get adjustments => - const SvgGenImage('assets/icons/adjustments.svg'); - - /// File path: assets/icons/all spaces menu-1.svg - SvgGenImage get allSpacesMenu1 => - const SvgGenImage('assets/icons/all spaces menu-1.svg'); - - /// File path: assets/icons/all spaces menu.svg - SvgGenImage get allSpacesMenu => - const SvgGenImage('assets/icons/all spaces menu.svg'); - - /// File path: assets/icons/annotation.svg - SvgGenImage get annotation => - const SvgGenImage('assets/icons/annotation.svg'); - - /// File path: assets/icons/archive.svg - SvgGenImage get archive => const SvgGenImage('assets/icons/archive.svg'); - - /// File path: assets/icons/arrow-circle-down.svg - SvgGenImage get arrowCircleDown => - const SvgGenImage('assets/icons/arrow-circle-down.svg'); - - /// File path: assets/icons/arrow-circle-left.svg - SvgGenImage get arrowCircleLeft => - const SvgGenImage('assets/icons/arrow-circle-left.svg'); - - /// File path: assets/icons/arrow-circle-right.svg - SvgGenImage get arrowCircleRight => - const SvgGenImage('assets/icons/arrow-circle-right.svg'); - - /// File path: assets/icons/arrow-circle-up.svg - SvgGenImage get arrowCircleUp => - const SvgGenImage('assets/icons/arrow-circle-up.svg'); - - /// File path: assets/icons/arrow-down.svg - SvgGenImage get arrowDown => const SvgGenImage('assets/icons/arrow-down.svg'); - - /// File path: assets/icons/arrow-left.svg - SvgGenImage get arrowLeft => const SvgGenImage('assets/icons/arrow-left.svg'); - - /// File path: assets/icons/arrow-narrow-down.svg - SvgGenImage get arrowNarrowDown => - const SvgGenImage('assets/icons/arrow-narrow-down.svg'); - - /// File path: assets/icons/arrow-narrow-left.svg - SvgGenImage get arrowNarrowLeft => - const SvgGenImage('assets/icons/arrow-narrow-left.svg'); - - /// File path: assets/icons/arrow-narrow-right.svg - SvgGenImage get arrowNarrowRight => - const SvgGenImage('assets/icons/arrow-narrow-right.svg'); - - /// File path: assets/icons/arrow-narrow-up.svg - SvgGenImage get arrowNarrowUp => - const SvgGenImage('assets/icons/arrow-narrow-up.svg'); - - /// File path: assets/icons/arrow-right.svg - SvgGenImage get arrowRight => - const SvgGenImage('assets/icons/arrow-right.svg'); - - /// File path: assets/icons/arrow-triangle-down.svg - SvgGenImage get arrowTriangleDown => - const SvgGenImage('assets/icons/arrow-triangle-down.svg'); - - /// File path: assets/icons/arrow-triangle-up.svg - SvgGenImage get arrowTriangleUp => - const SvgGenImage('assets/icons/arrow-triangle-up.svg'); - - /// File path: assets/icons/arrow-up.svg - SvgGenImage get arrowUp => const SvgGenImage('assets/icons/arrow-up.svg'); - - /// File path: assets/icons/arrows-expand.svg - SvgGenImage get arrowsExpand => - const SvgGenImage('assets/icons/arrows-expand.svg'); - - /// File path: assets/icons/at-symbol.svg - SvgGenImage get atSymbol => const SvgGenImage('assets/icons/at-symbol.svg'); - - /// File path: assets/icons/backspace.svg - SvgGenImage get backspace => const SvgGenImage('assets/icons/backspace.svg'); - - /// File path: assets/icons/badge-check.svg - SvgGenImage get badgeCheck => - const SvgGenImage('assets/icons/badge-check.svg'); - - /// File path: assets/icons/ban.svg - SvgGenImage get ban => const SvgGenImage('assets/icons/ban.svg'); - - /// File path: assets/icons/beaker.svg - SvgGenImage get beaker => const SvgGenImage('assets/icons/beaker.svg'); - - /// File path: assets/icons/bell.svg - SvgGenImage get bell => const SvgGenImage('assets/icons/bell.svg'); - - /// File path: assets/icons/book-open.svg - SvgGenImage get bookOpen => const SvgGenImage('assets/icons/book-open.svg'); - - /// File path: assets/icons/bookmark-alt.svg - SvgGenImage get bookmarkAlt => - const SvgGenImage('assets/icons/bookmark-alt.svg'); - - /// File path: assets/icons/bookmark.svg - SvgGenImage get bookmark => const SvgGenImage('assets/icons/bookmark.svg'); - - /// File path: assets/icons/bottom-main-content.svg - SvgGenImage get bottomMainContent => - const SvgGenImage('assets/icons/bottom-main-content.svg'); - - /// File path: assets/icons/bottom-rail-toggle-1.svg - SvgGenImage get bottomRailToggle1 => - const SvgGenImage('assets/icons/bottom-rail-toggle-1.svg'); - - /// File path: assets/icons/bottom-rail-toggle.svg - SvgGenImage get bottomRailToggle => - const SvgGenImage('assets/icons/bottom-rail-toggle.svg'); - - /// File path: assets/icons/briefcase.svg - SvgGenImage get briefcase => const SvgGenImage('assets/icons/briefcase.svg'); - - /// File path: assets/icons/cake.svg - SvgGenImage get cake => const SvgGenImage('assets/icons/cake.svg'); - - /// File path: assets/icons/calculator.svg - SvgGenImage get calculator => - const SvgGenImage('assets/icons/calculator.svg'); - - /// File path: assets/icons/calendar.svg - SvgGenImage get calendar => const SvgGenImage('assets/icons/calendar.svg'); - - /// File path: assets/icons/camera.svg - SvgGenImage get camera => const SvgGenImage('assets/icons/camera.svg'); - - /// File path: assets/icons/cash.svg - SvgGenImage get cash => const SvgGenImage('assets/icons/cash.svg'); - - /// File path: assets/icons/chart-bar.svg - SvgGenImage get chartBar => const SvgGenImage('assets/icons/chart-bar.svg'); - - /// File path: assets/icons/chart-pie.svg - SvgGenImage get chartPie => const SvgGenImage('assets/icons/chart-pie.svg'); - - /// File path: assets/icons/chart-square-bar.svg - SvgGenImage get chartSquareBar => - const SvgGenImage('assets/icons/chart-square-bar.svg'); - - /// File path: assets/icons/chat-alt-2.svg - SvgGenImage get chatAlt2 => const SvgGenImage('assets/icons/chat-alt-2.svg'); - - /// File path: assets/icons/chat-alt.svg - SvgGenImage get chatAlt => const SvgGenImage('assets/icons/chat-alt.svg'); - - /// File path: assets/icons/chat.svg - SvgGenImage get chat => const SvgGenImage('assets/icons/chat.svg'); - - /// File path: assets/icons/check-circle.svg - SvgGenImage get checkCircle => - const SvgGenImage('assets/icons/check-circle.svg'); - - /// File path: assets/icons/check.svg - SvgGenImage get check => const SvgGenImage('assets/icons/check.svg'); - - /// File path: assets/icons/chevron-double-down.svg - SvgGenImage get chevronDoubleDown => - const SvgGenImage('assets/icons/chevron-double-down.svg'); - - /// File path: assets/icons/chevron-double-left.svg - SvgGenImage get chevronDoubleLeft => - const SvgGenImage('assets/icons/chevron-double-left.svg'); - - /// File path: assets/icons/chevron-double-right.svg - SvgGenImage get chevronDoubleRight => - const SvgGenImage('assets/icons/chevron-double-right.svg'); - - /// File path: assets/icons/chevron-double-up.svg - SvgGenImage get chevronDoubleUp => - const SvgGenImage('assets/icons/chevron-double-up.svg'); - - /// File path: assets/icons/chevron-down-1.svg - SvgGenImage get chevronDown1 => - const SvgGenImage('assets/icons/chevron-down-1.svg'); - - /// File path: assets/icons/chevron-down.svg - SvgGenImage get chevronDown => - const SvgGenImage('assets/icons/chevron-down.svg'); - - /// File path: assets/icons/chevron-left.svg - SvgGenImage get chevronLeft => - const SvgGenImage('assets/icons/chevron-left.svg'); - - /// File path: assets/icons/chevron-right.svg - SvgGenImage get chevronRight => - const SvgGenImage('assets/icons/chevron-right.svg'); - - /// File path: assets/icons/chevron-up.svg - SvgGenImage get chevronUp => const SvgGenImage('assets/icons/chevron-up.svg'); - - /// File path: assets/icons/chip.svg - SvgGenImage get chip => const SvgGenImage('assets/icons/chip.svg'); - - /// File path: assets/icons/clipboard-check.svg - SvgGenImage get clipboardCheck => - const SvgGenImage('assets/icons/clipboard-check.svg'); - - /// File path: assets/icons/clipboard-copy.svg - SvgGenImage get clipboardCopy => - const SvgGenImage('assets/icons/clipboard-copy.svg'); - - /// File path: assets/icons/clipboard-list.svg - SvgGenImage get clipboardList => - const SvgGenImage('assets/icons/clipboard-list.svg'); - - /// File path: assets/icons/clipboard.svg - SvgGenImage get clipboard => const SvgGenImage('assets/icons/clipboard.svg'); - - /// File path: assets/icons/clock.svg - SvgGenImage get clock => const SvgGenImage('assets/icons/clock.svg'); - - /// File path: assets/icons/cloud-download.svg - SvgGenImage get cloudDownload => - const SvgGenImage('assets/icons/cloud-download.svg'); - - /// File path: assets/icons/cloud-upload.svg - SvgGenImage get cloudUpload => - const SvgGenImage('assets/icons/cloud-upload.svg'); - - /// File path: assets/icons/cloud.svg - SvgGenImage get cloud => const SvgGenImage('assets/icons/cloud.svg'); - - /// File path: assets/icons/code.svg - SvgGenImage get code => const SvgGenImage('assets/icons/code.svg'); - - /// File path: assets/icons/cog-gear.svg - SvgGenImage get cogGear => const SvgGenImage('assets/icons/cog-gear.svg'); - - /// File path: assets/icons/collection.svg - SvgGenImage get collection => - const SvgGenImage('assets/icons/collection.svg'); - - /// File path: assets/icons/color-swatch.svg - SvgGenImage get colorSwatch => - const SvgGenImage('assets/icons/color-swatch.svg'); - - /// File path: assets/icons/credit-card.svg - SvgGenImage get creditCard => - const SvgGenImage('assets/icons/credit-card.svg'); - - /// File path: assets/icons/cube-transparent.svg - SvgGenImage get cubeTransparent => - const SvgGenImage('assets/icons/cube-transparent.svg'); - - /// File path: assets/icons/cube.svg - SvgGenImage get cube => const SvgGenImage('assets/icons/cube.svg'); - - /// File path: assets/icons/currency-bangladeshi.svg - SvgGenImage get currencyBangladeshi => - const SvgGenImage('assets/icons/currency-bangladeshi.svg'); - - /// File path: assets/icons/currency-dollar.svg - SvgGenImage get currencyDollar => - const SvgGenImage('assets/icons/currency-dollar.svg'); - - /// File path: assets/icons/currency-euro.svg - SvgGenImage get currencyEuro => - const SvgGenImage('assets/icons/currency-euro.svg'); - - /// File path: assets/icons/currency-pound.svg - SvgGenImage get currencyPound => - const SvgGenImage('assets/icons/currency-pound.svg'); - - /// File path: assets/icons/currency-rupee.svg - SvgGenImage get currencyRupee => - const SvgGenImage('assets/icons/currency-rupee.svg'); - - /// File path: assets/icons/currency-yen.svg - SvgGenImage get currencyYen => - const SvgGenImage('assets/icons/currency-yen.svg'); - - /// File path: assets/icons/cursor-click.svg - SvgGenImage get cursorClick => - const SvgGenImage('assets/icons/cursor-click.svg'); - - /// File path: assets/icons/database.svg - SvgGenImage get database => const SvgGenImage('assets/icons/database.svg'); - - /// File path: assets/icons/desktop-computer.svg - SvgGenImage get desktopComputer => - const SvgGenImage('assets/icons/desktop-computer.svg'); - - /// File path: assets/icons/device-mobile.svg - SvgGenImage get deviceMobile => - const SvgGenImage('assets/icons/device-mobile.svg'); - - /// File path: assets/icons/device-tablet.svg - SvgGenImage get deviceTablet => - const SvgGenImage('assets/icons/device-tablet.svg'); - - /// File path: assets/icons/document-add.svg - SvgGenImage get documentAdd => - const SvgGenImage('assets/icons/document-add.svg'); - - /// File path: assets/icons/document-remove.svg - SvgGenImage get documentRemove => - const SvgGenImage('assets/icons/document-remove.svg'); - - /// File path: assets/icons/document-report.svg - SvgGenImage get documentReport => - const SvgGenImage('assets/icons/document-report.svg'); - - /// File path: assets/icons/document-search.svg - SvgGenImage get documentSearch => - const SvgGenImage('assets/icons/document-search.svg'); - - /// File path: assets/icons/document-text.svg - SvgGenImage get documentText => - const SvgGenImage('assets/icons/document-text.svg'); - - /// File path: assets/icons/document.svg - SvgGenImage get document => const SvgGenImage('assets/icons/document.svg'); - - /// File path: assets/icons/dots-circle-horizontal.svg - SvgGenImage get dotsCircleHorizontal => - const SvgGenImage('assets/icons/dots-circle-horizontal.svg'); - - /// File path: assets/icons/dots-horizontal.svg - SvgGenImage get dotsHorizontal => - const SvgGenImage('assets/icons/dots-horizontal.svg'); - - /// File path: assets/icons/dots-vertical.svg - SvgGenImage get dotsVertical => - const SvgGenImage('assets/icons/dots-vertical.svg'); - - /// File path: assets/icons/download.svg - SvgGenImage get download => const SvgGenImage('assets/icons/download.svg'); - - /// File path: assets/icons/duplicate.svg - SvgGenImage get duplicate => const SvgGenImage('assets/icons/duplicate.svg'); - - /// File path: assets/icons/emoji-happy.svg - SvgGenImage get emojiHappy => - const SvgGenImage('assets/icons/emoji-happy.svg'); - - /// File path: assets/icons/emoji-sad.svg - SvgGenImage get emojiSad => const SvgGenImage('assets/icons/emoji-sad.svg'); - - /// File path: assets/icons/exclamation-circle.svg - SvgGenImage get exclamationCircle => - const SvgGenImage('assets/icons/exclamation-circle.svg'); - - /// File path: assets/icons/exclamation.svg - SvgGenImage get exclamation => - const SvgGenImage('assets/icons/exclamation.svg'); - - /// File path: assets/icons/external-link.svg - SvgGenImage get externalLink => - const SvgGenImage('assets/icons/external-link.svg'); - - /// File path: assets/icons/eye-off.svg - SvgGenImage get eyeOff => const SvgGenImage('assets/icons/eye-off.svg'); - - /// File path: assets/icons/eye.svg - SvgGenImage get eye => const SvgGenImage('assets/icons/eye.svg'); - - /// File path: assets/icons/fast-forward.svg - SvgGenImage get fastForward => - const SvgGenImage('assets/icons/fast-forward.svg'); - - /// File path: assets/icons/film.svg - SvgGenImage get film => const SvgGenImage('assets/icons/film.svg'); - - /// File path: assets/icons/filter.svg - SvgGenImage get filter => const SvgGenImage('assets/icons/filter.svg'); - - /// File path: assets/icons/finger-print.svg - SvgGenImage get fingerPrint => - const SvgGenImage('assets/icons/finger-print.svg'); - - /// File path: assets/icons/fire.svg - SvgGenImage get fire => const SvgGenImage('assets/icons/fire.svg'); - - /// File path: assets/icons/flag.svg - SvgGenImage get flag => const SvgGenImage('assets/icons/flag.svg'); - - /// File path: assets/icons/folder-add.svg - SvgGenImage get folderAdd => const SvgGenImage('assets/icons/folder-add.svg'); - - /// File path: assets/icons/folder-download.svg - SvgGenImage get folderDownload => - const SvgGenImage('assets/icons/folder-download.svg'); - - /// File path: assets/icons/folder-open.svg - SvgGenImage get folderOpen => - const SvgGenImage('assets/icons/folder-open.svg'); - - /// File path: assets/icons/folder-remove.svg - SvgGenImage get folderRemove => - const SvgGenImage('assets/icons/folder-remove.svg'); - - /// File path: assets/icons/folder.svg - SvgGenImage get folder => const SvgGenImage('assets/icons/folder.svg'); - - /// File path: assets/icons/fund.svg - SvgGenImage get fund => const SvgGenImage('assets/icons/fund.svg'); - - /// File path: assets/icons/gift.svg - SvgGenImage get gift => const SvgGenImage('assets/icons/gift.svg'); - - /// File path: assets/icons/globe-alt.svg - SvgGenImage get globeAlt => const SvgGenImage('assets/icons/globe-alt.svg'); - - /// File path: assets/icons/globe.svg - SvgGenImage get globe => const SvgGenImage('assets/icons/globe.svg'); - - /// File path: assets/icons/hand.svg - SvgGenImage get hand => const SvgGenImage('assets/icons/hand.svg'); - - /// File path: assets/icons/hashtag.svg - SvgGenImage get hashtag => const SvgGenImage('assets/icons/hashtag.svg'); - - /// File path: assets/icons/heart.svg - SvgGenImage get heart => const SvgGenImage('assets/icons/heart.svg'); - - /// File path: assets/icons/home.svg - SvgGenImage get home => const SvgGenImage('assets/icons/home.svg'); - - /// File path: assets/icons/icon-user-remove.svg - SvgGenImage get iconUserRemove => - const SvgGenImage('assets/icons/icon-user-remove.svg'); - - /// File path: assets/icons/identification.svg - SvgGenImage get identification => - const SvgGenImage('assets/icons/identification.svg'); - - /// File path: assets/icons/inbox-in.svg - SvgGenImage get inboxIn => const SvgGenImage('assets/icons/inbox-in.svg'); - - /// File path: assets/icons/inbox.svg - SvgGenImage get inbox => const SvgGenImage('assets/icons/inbox.svg'); - - /// File path: assets/icons/information-circle.svg - SvgGenImage get informationCircle => - const SvgGenImage('assets/icons/information-circle.svg'); - - /// File path: assets/icons/key.svg - SvgGenImage get key => const SvgGenImage('assets/icons/key.svg'); - - /// File path: assets/icons/left-rail-toggle.svg - SvgGenImage get leftRailToggle => - const SvgGenImage('assets/icons/left-rail-toggle.svg'); - - /// File path: assets/icons/library.svg - SvgGenImage get library => const SvgGenImage('assets/icons/library.svg'); - - /// File path: assets/icons/light-bulb.svg - SvgGenImage get lightBulb => const SvgGenImage('assets/icons/light-bulb.svg'); - - /// File path: assets/icons/lightning-bolt.svg - SvgGenImage get lightningBolt => - const SvgGenImage('assets/icons/lightning-bolt.svg'); - - /// File path: assets/icons/link.svg - SvgGenImage get link => const SvgGenImage('assets/icons/link.svg'); - - /// File path: assets/icons/location-marker.svg - SvgGenImage get locationMarker => - const SvgGenImage('assets/icons/location-marker.svg'); - - /// File path: assets/icons/lock-closed.svg - SvgGenImage get lockClosed => - const SvgGenImage('assets/icons/lock-closed.svg'); - - /// File path: assets/icons/lock-open.svg - SvgGenImage get lockOpen => const SvgGenImage('assets/icons/lock-open.svg'); - - /// File path: assets/icons/logout-1.svg - SvgGenImage get logout1 => const SvgGenImage('assets/icons/logout-1.svg'); - - /// File path: assets/icons/logout.svg - SvgGenImage get logout => const SvgGenImage('assets/icons/logout.svg'); - - /// File path: assets/icons/mail-open.svg - SvgGenImage get mailOpen => const SvgGenImage('assets/icons/mail-open.svg'); - - /// File path: assets/icons/mail.svg - SvgGenImage get mail => const SvgGenImage('assets/icons/mail.svg'); - - /// File path: assets/icons/map.svg - SvgGenImage get map => const SvgGenImage('assets/icons/map.svg'); - - /// File path: assets/icons/maximize-toggle.svg - SvgGenImage get maximizeToggle => - const SvgGenImage('assets/icons/maximize-toggle.svg'); - - /// File path: assets/icons/menu-alt-1.svg - SvgGenImage get menuAlt1 => const SvgGenImage('assets/icons/menu-alt-1.svg'); - - /// File path: assets/icons/menu-alt-2.svg - SvgGenImage get menuAlt2 => const SvgGenImage('assets/icons/menu-alt-2.svg'); - - /// File path: assets/icons/menu-alt-3.svg - SvgGenImage get menuAlt3 => const SvgGenImage('assets/icons/menu-alt-3.svg'); - - /// File path: assets/icons/menu-alt-4.svg - SvgGenImage get menuAlt4 => const SvgGenImage('assets/icons/menu-alt-4.svg'); - - /// File path: assets/icons/menu.svg - SvgGenImage get menu => const SvgGenImage('assets/icons/menu.svg'); - - /// File path: assets/icons/microphone.svg - SvgGenImage get microphone => - const SvgGenImage('assets/icons/microphone.svg'); - - /// File path: assets/icons/minimize-toggle.svg - SvgGenImage get minimizeToggle => - const SvgGenImage('assets/icons/minimize-toggle.svg'); - - /// File path: assets/icons/minus-circle.svg - SvgGenImage get minusCircle => - const SvgGenImage('assets/icons/minus-circle.svg'); - - /// File path: assets/icons/minus.svg - SvgGenImage get minus => const SvgGenImage('assets/icons/minus.svg'); - - /// File path: assets/icons/moon.svg - SvgGenImage get moon => const SvgGenImage('assets/icons/moon.svg'); - - /// File path: assets/icons/move-item.svg - SvgGenImage get moveItem => const SvgGenImage('assets/icons/move-item.svg'); - - /// File path: assets/icons/music-note.svg - SvgGenImage get musicNote => const SvgGenImage('assets/icons/music-note.svg'); - - /// File path: assets/icons/newspaper.svg - SvgGenImage get newspaper => const SvgGenImage('assets/icons/newspaper.svg'); - - /// File path: assets/icons/node-closed.svg - SvgGenImage get nodeClosed => - const SvgGenImage('assets/icons/node-closed.svg'); - - /// File path: assets/icons/node-line-end.svg - SvgGenImage get nodeLineEnd => - const SvgGenImage('assets/icons/node-line-end.svg'); - - /// File path: assets/icons/node-line.svg - SvgGenImage get nodeLine => const SvgGenImage('assets/icons/node-line.svg'); - - /// File path: assets/icons/node-open.svg - SvgGenImage get nodeOpen => const SvgGenImage('assets/icons/node-open.svg'); - - /// File path: assets/icons/office-building.svg - SvgGenImage get officeBuilding => - const SvgGenImage('assets/icons/office-building.svg'); - - /// File path: assets/icons/paper-airplane.svg - SvgGenImage get paperAirplane => - const SvgGenImage('assets/icons/paper-airplane.svg'); - - /// File path: assets/icons/paper-clip.svg - SvgGenImage get paperClip => const SvgGenImage('assets/icons/paper-clip.svg'); - - /// File path: assets/icons/pause.svg - SvgGenImage get pause => const SvgGenImage('assets/icons/pause.svg'); - - /// File path: assets/icons/pencil-alt.svg - SvgGenImage get pencilAlt => const SvgGenImage('assets/icons/pencil-alt.svg'); - - /// File path: assets/icons/pencil.svg - SvgGenImage get pencil => const SvgGenImage('assets/icons/pencil.svg'); - - /// File path: assets/icons/phone-incoming.svg - SvgGenImage get phoneIncoming => - const SvgGenImage('assets/icons/phone-incoming.svg'); - - /// File path: assets/icons/phone-missed-call.svg - SvgGenImage get phoneMissedCall => - const SvgGenImage('assets/icons/phone-missed-call.svg'); - - /// File path: assets/icons/phone-outgoing.svg - SvgGenImage get phoneOutgoing => - const SvgGenImage('assets/icons/phone-outgoing.svg'); - - /// File path: assets/icons/phone.svg - SvgGenImage get phone => const SvgGenImage('assets/icons/phone.svg'); - - /// File path: assets/icons/photograph.svg - SvgGenImage get photograph => - const SvgGenImage('assets/icons/photograph.svg'); - - /// File path: assets/icons/play.svg - SvgGenImage get play => const SvgGenImage('assets/icons/play.svg'); - - /// File path: assets/icons/plus.svg - SvgGenImage get plus => const SvgGenImage('assets/icons/plus.svg'); - - /// File path: assets/icons/plus_circle_filled.svg - SvgGenImage get plusCircleFilled => - const SvgGenImage('assets/icons/plus_circle_filled.svg'); - - /// File path: assets/icons/plus_circle_outlined.svg - SvgGenImage get plusCircleOutlined => - const SvgGenImage('assets/icons/plus_circle_outlined.svg'); - - /// File path: assets/icons/presentation-chart-bar.svg - SvgGenImage get presentationChartBar => - const SvgGenImage('assets/icons/presentation-chart-bar.svg'); - - /// File path: assets/icons/presentation-chart-line.svg - SvgGenImage get presentationChartLine => - const SvgGenImage('assets/icons/presentation-chart-line.svg'); - - /// File path: assets/icons/printer.svg - SvgGenImage get printer => const SvgGenImage('assets/icons/printer.svg'); - - /// File path: assets/icons/progress-track-warning.svg - SvgGenImage get progressTrackWarning => - const SvgGenImage('assets/icons/progress-track-warning.svg'); - - /// File path: assets/icons/puzzle.svg - SvgGenImage get puzzle => const SvgGenImage('assets/icons/puzzle.svg'); - - /// File path: assets/icons/qrcode.svg - SvgGenImage get qrcode => const SvgGenImage('assets/icons/qrcode.svg'); - - /// File path: assets/icons/question-mark-circle.svg - SvgGenImage get questionMarkCircle => - const SvgGenImage('assets/icons/question-mark-circle.svg'); - - /// File path: assets/icons/receipt-refund.svg - SvgGenImage get receiptRefund => - const SvgGenImage('assets/icons/receipt-refund.svg'); - - /// File path: assets/icons/receipt-tax.svg - SvgGenImage get receiptTax => - const SvgGenImage('assets/icons/receipt-tax.svg'); - - /// File path: assets/icons/refresh.svg - SvgGenImage get refresh => const SvgGenImage('assets/icons/refresh.svg'); - - /// File path: assets/icons/reply.svg - SvgGenImage get reply => const SvgGenImage('assets/icons/reply.svg'); - - /// File path: assets/icons/rewind.svg - SvgGenImage get rewind => const SvgGenImage('assets/icons/rewind.svg'); - - /// File path: assets/icons/right-rail-toggle.svg - SvgGenImage get rightRailToggle => - const SvgGenImage('assets/icons/right-rail-toggle.svg'); - - /// File path: assets/icons/rss.svg - SvgGenImage get rss => const SvgGenImage('assets/icons/rss.svg'); - - /// File path: assets/icons/rt_bold.svg - SvgGenImage get rtBold => const SvgGenImage('assets/icons/rt_bold.svg'); - - /// File path: assets/icons/rt_decrease_indent.svg - SvgGenImage get rtDecreaseIndent => - const SvgGenImage('assets/icons/rt_decrease_indent.svg'); - - /// File path: assets/icons/rt_heading.svg - SvgGenImage get rtHeading => const SvgGenImage('assets/icons/rt_heading.svg'); - - /// File path: assets/icons/rt_increase_indent.svg - SvgGenImage get rtIncreaseIndent => - const SvgGenImage('assets/icons/rt_increase_indent.svg'); - - /// File path: assets/icons/rt_italic.svg - SvgGenImage get rtItalic => const SvgGenImage('assets/icons/rt_italic.svg'); - - /// File path: assets/icons/rt_ordered_list.svg - SvgGenImage get rtOrderedList => - const SvgGenImage('assets/icons/rt_ordered_list.svg'); - - /// File path: assets/icons/rt_unordered_list.svg - SvgGenImage get rtUnorderedList => - const SvgGenImage('assets/icons/rt_unordered_list.svg'); - - /// File path: assets/icons/save-as.svg - SvgGenImage get saveAs => const SvgGenImage('assets/icons/save-as.svg'); - - /// File path: assets/icons/save.svg - SvgGenImage get save => const SvgGenImage('assets/icons/save.svg'); - - /// File path: assets/icons/scale.svg - SvgGenImage get scale => const SvgGenImage('assets/icons/scale.svg'); - - /// File path: assets/icons/scissors.svg - SvgGenImage get scissors => const SvgGenImage('assets/icons/scissors.svg'); - - /// File path: assets/icons/search-circle.svg - SvgGenImage get searchCircle => - const SvgGenImage('assets/icons/search-circle.svg'); - - /// File path: assets/icons/search.svg - SvgGenImage get search => const SvgGenImage('assets/icons/search.svg'); - - /// File path: assets/icons/selector.svg - SvgGenImage get selector => const SvgGenImage('assets/icons/selector.svg'); - - /// File path: assets/icons/send-airplane.svg - SvgGenImage get sendAirplane => - const SvgGenImage('assets/icons/send-airplane.svg'); - - /// File path: assets/icons/server.svg - SvgGenImage get server => const SvgGenImage('assets/icons/server.svg'); - - /// File path: assets/icons/share.svg - SvgGenImage get share => const SvgGenImage('assets/icons/share.svg'); - - /// File path: assets/icons/shield-check.svg - SvgGenImage get shieldCheck => - const SvgGenImage('assets/icons/shield-check.svg'); - - /// File path: assets/icons/shield-exclamation.svg - SvgGenImage get shieldExclamation => - const SvgGenImage('assets/icons/shield-exclamation.svg'); - - /// File path: assets/icons/shopping-bag.svg - SvgGenImage get shoppingBag => - const SvgGenImage('assets/icons/shopping-bag.svg'); - - /// File path: assets/icons/shopping-cart.svg - SvgGenImage get shoppingCart => - const SvgGenImage('assets/icons/shopping-cart.svg'); - - /// File path: assets/icons/sm-view-grid-add.svg - SvgGenImage get smViewGridAdd => - const SvgGenImage('assets/icons/sm-view-grid-add.svg'); - - /// File path: assets/icons/sort-ascending.svg - SvgGenImage get sortAscending => - const SvgGenImage('assets/icons/sort-ascending.svg'); - - /// File path: assets/icons/sort-descending.svg - SvgGenImage get sortDescending => - const SvgGenImage('assets/icons/sort-descending.svg'); - - /// File path: assets/icons/sparkles.svg - SvgGenImage get sparkles => const SvgGenImage('assets/icons/sparkles.svg'); - - /// File path: assets/icons/speakerphone.svg - SvgGenImage get speakerphone => - const SvgGenImage('assets/icons/speakerphone.svg'); - - /// File path: assets/icons/star_filled.svg - SvgGenImage get starFilled => - const SvgGenImage('assets/icons/star_filled.svg'); - - /// File path: assets/icons/star_outlined.svg - SvgGenImage get starOutlined => - const SvgGenImage('assets/icons/star_outlined.svg'); - - /// File path: assets/icons/status-offline.svg - SvgGenImage get statusOffline => - const SvgGenImage('assets/icons/status-offline.svg'); - - /// File path: assets/icons/status-online.svg - SvgGenImage get statusOnline => - const SvgGenImage('assets/icons/status-online.svg'); - - /// File path: assets/icons/stop.svg - SvgGenImage get stop => const SvgGenImage('assets/icons/stop.svg'); - - /// File path: assets/icons/sun.svg - SvgGenImage get sun => const SvgGenImage('assets/icons/sun.svg'); - - /// File path: assets/icons/support.svg - SvgGenImage get support => const SvgGenImage('assets/icons/support.svg'); - - /// File path: assets/icons/switch-horizontal.svg - SvgGenImage get switchHorizontal => - const SvgGenImage('assets/icons/switch-horizontal.svg'); - - /// File path: assets/icons/switch-vertical.svg - SvgGenImage get switchVertical => - const SvgGenImage('assets/icons/switch-vertical.svg'); - - /// File path: assets/icons/table.svg - SvgGenImage get table => const SvgGenImage('assets/icons/table.svg'); - - /// File path: assets/icons/tag.svg - SvgGenImage get tag => const SvgGenImage('assets/icons/tag.svg'); - - /// File path: assets/icons/template.svg - SvgGenImage get template => const SvgGenImage('assets/icons/template.svg'); - - /// File path: assets/icons/terminal.svg - SvgGenImage get terminal => const SvgGenImage('assets/icons/terminal.svg'); - - /// File path: assets/icons/thumb-down.svg - SvgGenImage get thumbDown => const SvgGenImage('assets/icons/thumb-down.svg'); - - /// File path: assets/icons/thumb-up.svg - SvgGenImage get thumbUp => const SvgGenImage('assets/icons/thumb-up.svg'); - - /// File path: assets/icons/ticket.svg - SvgGenImage get ticket => const SvgGenImage('assets/icons/ticket.svg'); - - /// File path: assets/icons/translate.svg - SvgGenImage get translate => const SvgGenImage('assets/icons/translate.svg'); - - /// File path: assets/icons/trash.svg - SvgGenImage get trash => const SvgGenImage('assets/icons/trash.svg'); - - /// File path: assets/icons/trending-down.svg - SvgGenImage get trendingDown => - const SvgGenImage('assets/icons/trending-down.svg'); - - /// File path: assets/icons/trending-up.svg - SvgGenImage get trendingUp => - const SvgGenImage('assets/icons/trending-up.svg'); - - /// File path: assets/icons/truck.svg - SvgGenImage get truck => const SvgGenImage('assets/icons/truck.svg'); - - /// File path: assets/icons/upload.svg - SvgGenImage get upload => const SvgGenImage('assets/icons/upload.svg'); - - /// File path: assets/icons/user-add.svg - SvgGenImage get userAdd => const SvgGenImage('assets/icons/user-add.svg'); - - /// File path: assets/icons/user-circle.svg - SvgGenImage get userCircle => - const SvgGenImage('assets/icons/user-circle.svg'); - - /// File path: assets/icons/user-group.svg - SvgGenImage get userGroup => const SvgGenImage('assets/icons/user-group.svg'); - - /// File path: assets/icons/user.svg - SvgGenImage get user => const SvgGenImage('assets/icons/user.svg'); - - /// File path: assets/icons/users.svg - SvgGenImage get users => const SvgGenImage('assets/icons/users.svg'); - - /// File path: assets/icons/variable.svg - SvgGenImage get variable => const SvgGenImage('assets/icons/variable.svg'); - - /// File path: assets/icons/video-camera.svg - SvgGenImage get videoCamera => - const SvgGenImage('assets/icons/video-camera.svg'); - - /// File path: assets/icons/view-boards.svg - SvgGenImage get viewBoards => - const SvgGenImage('assets/icons/view-boards.svg'); - - /// File path: assets/icons/view-grid.svg - SvgGenImage get viewGrid => const SvgGenImage('assets/icons/view-grid.svg'); - - /// File path: assets/icons/view-list.svg - SvgGenImage get viewList => const SvgGenImage('assets/icons/view-list.svg'); - - /// File path: assets/icons/volume-off.svg - SvgGenImage get volumeOff => const SvgGenImage('assets/icons/volume-off.svg'); - - /// File path: assets/icons/volume-up.svg - SvgGenImage get volumeUp => const SvgGenImage('assets/icons/volume-up.svg'); - - /// File path: assets/icons/vote.svg - SvgGenImage get vote => const SvgGenImage('assets/icons/vote.svg'); - - /// File path: assets/icons/wallet.svg - SvgGenImage get wallet => const SvgGenImage('assets/icons/wallet.svg'); - - /// File path: assets/icons/wifi.svg - SvgGenImage get wifi => const SvgGenImage('assets/icons/wifi.svg'); - - /// File path: assets/icons/x-circle.svg - SvgGenImage get xCircle => const SvgGenImage('assets/icons/x-circle.svg'); - - /// File path: assets/icons/x.svg - SvgGenImage get x => const SvgGenImage('assets/icons/x.svg'); - - /// File path: assets/icons/zoom-in.svg - SvgGenImage get zoomIn => const SvgGenImage('assets/icons/zoom-in.svg'); - - /// File path: assets/icons/zoom-out.svg - SvgGenImage get zoomOut => const SvgGenImage('assets/icons/zoom-out.svg'); - - /// List of all assets - List get values => [ - academicCap, - adjustments, - allSpacesMenu1, - allSpacesMenu, - annotation, - archive, - arrowCircleDown, - arrowCircleLeft, - arrowCircleRight, - arrowCircleUp, - arrowDown, - arrowLeft, - arrowNarrowDown, - arrowNarrowLeft, - arrowNarrowRight, - arrowNarrowUp, - arrowRight, - arrowTriangleDown, - arrowTriangleUp, - arrowUp, - arrowsExpand, - atSymbol, - backspace, - badgeCheck, - ban, - beaker, - bell, - bookOpen, - bookmarkAlt, - bookmark, - bottomMainContent, - bottomRailToggle1, - bottomRailToggle, - briefcase, - cake, - calculator, - calendar, - camera, - cash, - chartBar, - chartPie, - chartSquareBar, - chatAlt2, - chatAlt, - chat, - checkCircle, - check, - chevronDoubleDown, - chevronDoubleLeft, - chevronDoubleRight, - chevronDoubleUp, - chevronDown1, - chevronDown, - chevronLeft, - chevronRight, - chevronUp, - chip, - clipboardCheck, - clipboardCopy, - clipboardList, - clipboard, - clock, - cloudDownload, - cloudUpload, - cloud, - code, - cogGear, - collection, - colorSwatch, - creditCard, - cubeTransparent, - cube, - currencyBangladeshi, - currencyDollar, - currencyEuro, - currencyPound, - currencyRupee, - currencyYen, - cursorClick, - database, - desktopComputer, - deviceMobile, - deviceTablet, - documentAdd, - documentRemove, - documentReport, - documentSearch, - documentText, - document, - dotsCircleHorizontal, - dotsHorizontal, - dotsVertical, - download, - duplicate, - emojiHappy, - emojiSad, - exclamationCircle, - exclamation, - externalLink, - eyeOff, - eye, - fastForward, - film, - filter, - fingerPrint, - fire, - flag, - folderAdd, - folderDownload, - folderOpen, - folderRemove, - folder, - fund, - gift, - globeAlt, - globe, - hand, - hashtag, - heart, - home, - iconUserRemove, - identification, - inboxIn, - inbox, - informationCircle, - key, - leftRailToggle, - library, - lightBulb, - lightningBolt, - link, - locationMarker, - lockClosed, - lockOpen, - logout1, - logout, - mailOpen, - mail, - map, - maximizeToggle, - menuAlt1, - menuAlt2, - menuAlt3, - menuAlt4, - menu, - microphone, - minimizeToggle, - minusCircle, - minus, - moon, - moveItem, - musicNote, - newspaper, - nodeClosed, - nodeLineEnd, - nodeLine, - nodeOpen, - officeBuilding, - paperAirplane, - paperClip, - pause, - pencilAlt, - pencil, - phoneIncoming, - phoneMissedCall, - phoneOutgoing, - phone, - photograph, - play, - plus, - plusCircleFilled, - plusCircleOutlined, - presentationChartBar, - presentationChartLine, - printer, - progressTrackWarning, - puzzle, - qrcode, - questionMarkCircle, - receiptRefund, - receiptTax, - refresh, - reply, - rewind, - rightRailToggle, - rss, - rtBold, - rtDecreaseIndent, - rtHeading, - rtIncreaseIndent, - rtItalic, - rtOrderedList, - rtUnorderedList, - saveAs, - save, - scale, - scissors, - searchCircle, - search, - selector, - sendAirplane, - server, - share, - shieldCheck, - shieldExclamation, - shoppingBag, - shoppingCart, - smViewGridAdd, - sortAscending, - sortDescending, - sparkles, - speakerphone, - starFilled, - starOutlined, - statusOffline, - statusOnline, - stop, - sun, - support, - switchHorizontal, - switchVertical, - table, - tag, - template, - terminal, - thumbDown, - thumbUp, - ticket, - translate, - trash, - trendingDown, - trendingUp, - truck, - upload, - userAdd, - userCircle, - userGroup, - user, - users, - variable, - videoCamera, - viewBoards, - viewGrid, - viewList, - volumeOff, - volumeUp, - vote, - wallet, - wifi, - xCircle, - x, - zoomIn, - zoomOut - ]; -} - -class $AssetsImagesGen { - const $AssetsImagesGen(); - - /// File path: assets/images/account_bg.png - AssetGenImage get accountBg => - const AssetGenImage('assets/images/account_bg.png'); - - /// File path: assets/images/catalyst_logo.svg - SvgGenImage get catalystLogo => - const SvgGenImage('assets/images/catalyst_logo.svg'); - - /// File path: assets/images/catalyst_logo_icon.svg - SvgGenImage get catalystLogoIcon => - const SvgGenImage('assets/images/catalyst_logo_icon.svg'); - - /// File path: assets/images/catalyst_logo_icon_white.svg - SvgGenImage get catalystLogoIconWhite => - const SvgGenImage('assets/images/catalyst_logo_icon_white.svg'); - - /// File path: assets/images/catalyst_logo_white.svg - SvgGenImage get catalystLogoWhite => - const SvgGenImage('assets/images/catalyst_logo_white.svg'); - - /// File path: assets/images/coming_soon_bkg.webp - AssetGenImage get comingSoonBkg => - const AssetGenImage('assets/images/coming_soon_bkg.webp'); - - /// File path: assets/images/dragger.svg - SvgGenImage get dragger => const SvgGenImage('assets/images/dragger.svg'); - - /// File path: assets/images/dummy_catalyst_voices.webp - AssetGenImage get dummyCatalystVoices => - const AssetGenImage('assets/images/dummy_catalyst_voices.webp'); - - /// File path: assets/images/facebook.svg - SvgGenImage get facebook => const SvgGenImage('assets/images/facebook.svg'); - - /// File path: assets/images/facebook_mono.svg - SvgGenImage get facebookMono => - const SvgGenImage('assets/images/facebook_mono.svg'); - - /// File path: assets/images/fallback_logo.svg - SvgGenImage get fallbackLogo => - const SvgGenImage('assets/images/fallback_logo.svg'); - - /// File path: assets/images/fallback_logo_icon.svg - SvgGenImage get fallbackLogoIcon => - const SvgGenImage('assets/images/fallback_logo_icon.svg'); - - /// File path: assets/images/key_incorrect.webp - AssetGenImage get keyIncorrect => - const AssetGenImage('assets/images/key_incorrect.webp'); - - /// File path: assets/images/keychain.svg - SvgGenImage get keychain => const SvgGenImage('assets/images/keychain.svg'); - - /// File path: assets/images/linkedin.svg - SvgGenImage get linkedin => const SvgGenImage('assets/images/linkedin.svg'); - - /// File path: assets/images/linkedin_mono.svg - SvgGenImage get linkedinMono => - const SvgGenImage('assets/images/linkedin_mono.svg'); - - /// File path: assets/images/proposal_background_1.webp - AssetGenImage get proposalBackground1 => - const AssetGenImage('assets/images/proposal_background_1.webp'); - - /// File path: assets/images/proposal_background_2.webp - AssetGenImage get proposalBackground2 => - const AssetGenImage('assets/images/proposal_background_2.webp'); - - /// File path: assets/images/registration_summary_keychain.png - AssetGenImage get registrationSummaryKeychain => - const AssetGenImage('assets/images/registration_summary_keychain.png'); - - /// File path: assets/images/registration_summary_roles.png - AssetGenImage get registrationSummaryRoles => - const AssetGenImage('assets/images/registration_summary_roles.png'); - - /// File path: assets/images/registration_summary_wallet.png - AssetGenImage get registrationSummaryWallet => - const AssetGenImage('assets/images/registration_summary_wallet.png'); - - /// File path: assets/images/role_drep.webp - AssetGenImage get roleDrep => - const AssetGenImage('assets/images/role_drep.webp'); - - /// File path: assets/images/role_info_drep.png - AssetGenImage get roleInfoDrep => - const AssetGenImage('assets/images/role_info_drep.png'); - - /// File path: assets/images/role_info_proposer.png - AssetGenImage get roleInfoProposer => - const AssetGenImage('assets/images/role_info_proposer.png'); - - /// File path: assets/images/role_info_voter.png - AssetGenImage get roleInfoVoter => - const AssetGenImage('assets/images/role_info_voter.png'); - - /// File path: assets/images/role_proposer.webp - AssetGenImage get roleProposer => - const AssetGenImage('assets/images/role_proposer.webp'); - - /// File path: assets/images/role_voter.webp - AssetGenImage get roleVoter => - const AssetGenImage('assets/images/role_voter.webp'); - - /// File path: assets/images/task_illustration.webp - AssetGenImage get taskIllustration => - const AssetGenImage('assets/images/task_illustration.webp'); - - /// File path: assets/images/welcome_illustration.webp - AssetGenImage get welcomeIllustration => - const AssetGenImage('assets/images/welcome_illustration.webp'); - - /// File path: assets/images/x.svg - SvgGenImage get x => const SvgGenImage('assets/images/x.svg'); - - /// File path: assets/images/x_mono.svg - SvgGenImage get xMono => const SvgGenImage('assets/images/x_mono.svg'); - - /// List of all assets - List get values => [ - accountBg, - catalystLogo, - catalystLogoIcon, - catalystLogoIconWhite, - catalystLogoWhite, - comingSoonBkg, - dragger, - dummyCatalystVoices, - facebook, - facebookMono, - fallbackLogo, - fallbackLogoIcon, - keyIncorrect, - keychain, - linkedin, - linkedinMono, - proposalBackground1, - proposalBackground2, - registrationSummaryKeychain, - registrationSummaryRoles, - registrationSummaryWallet, - roleDrep, - roleInfoDrep, - roleInfoProposer, - roleInfoVoter, - roleProposer, - roleVoter, - taskIllustration, - welcomeIllustration, - x, - xMono - ]; -} - -class VoicesAssets { - VoicesAssets._(); - - static const $AssetsIconsGen icons = $AssetsIconsGen(); - static const $AssetsImagesGen images = $AssetsImagesGen(); -} - -class AssetGenImage { - const AssetGenImage( - this._assetName, { - this.size, - this.flavors = const {}, - }); - - final String _assetName; - - final Size? size; - final Set flavors; - - Image image({ - Key? key, - AssetBundle? bundle, - ImageFrameBuilder? frameBuilder, - ImageErrorWidgetBuilder? errorBuilder, - String? semanticLabel, - bool excludeFromSemantics = false, - double? scale, - double? width, - double? height, - Color? color, - Animation? opacity, - BlendMode? colorBlendMode, - BoxFit? fit, - AlignmentGeometry alignment = Alignment.center, - ImageRepeat repeat = ImageRepeat.noRepeat, - Rect? centerSlice, - bool matchTextDirection = false, - bool gaplessPlayback = true, - bool isAntiAlias = false, - String? package, - FilterQuality filterQuality = FilterQuality.low, - int? cacheWidth, - int? cacheHeight, - }) { - return Image.asset( - _assetName, - key: key, - bundle: bundle, - frameBuilder: frameBuilder, - errorBuilder: errorBuilder, - semanticLabel: semanticLabel, - excludeFromSemantics: excludeFromSemantics, - scale: scale, - width: width, - height: height, - color: color, - opacity: opacity, - colorBlendMode: colorBlendMode, - fit: fit, - alignment: alignment, - repeat: repeat, - centerSlice: centerSlice, - matchTextDirection: matchTextDirection, - gaplessPlayback: gaplessPlayback, - isAntiAlias: isAntiAlias, - package: package, - filterQuality: filterQuality, - cacheWidth: cacheWidth, - cacheHeight: cacheHeight, - ); - } - - ImageProvider provider({ - AssetBundle? bundle, - String? package, - }) { - return AssetImage( - _assetName, - bundle: bundle, - package: package, - ); - } - - String get path => _assetName; - - String get keyName => _assetName; -} - -class SvgGenImage { - const SvgGenImage( - this._assetName, { - this.size, - this.flavors = const {}, - }) : _isVecFormat = false; - - const SvgGenImage.vec( - this._assetName, { - this.size, - this.flavors = const {}, - }) : _isVecFormat = true; - - final String _assetName; - final Size? size; - final Set flavors; - final bool _isVecFormat; - - _svg.SvgPicture svg({ - Key? key, - bool matchTextDirection = false, - AssetBundle? bundle, - String? package, - double? width, - double? height, - BoxFit fit = BoxFit.contain, - AlignmentGeometry alignment = Alignment.center, - bool allowDrawingOutsideViewBox = false, - WidgetBuilder? placeholderBuilder, - String? semanticsLabel, - bool excludeFromSemantics = false, - _svg.SvgTheme? theme, - ColorFilter? colorFilter, - Clip clipBehavior = Clip.hardEdge, - @deprecated Color? color, - @deprecated BlendMode colorBlendMode = BlendMode.srcIn, - @deprecated bool cacheColorFilter = false, - }) { - final _svg.BytesLoader loader; - if (_isVecFormat) { - loader = _vg.AssetBytesLoader( - _assetName, - assetBundle: bundle, - packageName: package, - ); - } else { - loader = _svg.SvgAssetLoader( - _assetName, - assetBundle: bundle, - packageName: package, - theme: theme, - ); - } - return _svg.SvgPicture( - loader, - key: key, - matchTextDirection: matchTextDirection, - width: width, - height: height, - fit: fit, - alignment: alignment, - allowDrawingOutsideViewBox: allowDrawingOutsideViewBox, - placeholderBuilder: placeholderBuilder, - semanticsLabel: semanticsLabel, - excludeFromSemantics: excludeFromSemantics, - colorFilter: colorFilter ?? - (color == null ? null : ColorFilter.mode(color, colorBlendMode)), - clipBehavior: clipBehavior, - cacheColorFilter: cacheColorFilter, - ); - } - - String get path => _assetName; - - String get keyName => _assetName; -} diff --git a/catalyst_voices/packages/internal/catalyst_voices_assets/lib/generated/colors.gen.dart b/catalyst_voices/packages/internal/catalyst_voices_assets/lib/generated/colors.gen.dart deleted file mode 100644 index cdef49fdf06..00000000000 --- a/catalyst_voices/packages/internal/catalyst_voices_assets/lib/generated/colors.gen.dart +++ /dev/null @@ -1,424 +0,0 @@ -/// GENERATED CODE - DO NOT MODIFY BY HAND -/// ***************************************************** -/// FlutterGen -/// ***************************************************** - -// coverage:ignore-file -// ignore_for_file: type=lint -// ignore_for_file: directives_ordering,unnecessary_import,implicit_dynamic_list_literal,deprecated_member_use - -import 'package:flutter/painting.dart'; -import 'package:flutter/material.dart'; - -class VoicesColors { - VoicesColors._(); - - /// Color: #AD0000 - static const Color darkAvatarsError = Color(0xFFAD0000); - - /// Color: #1035BC - static const Color darkAvatarsPrimary = Color(0xFF1035BC); - - /// Color: #9910BC - static const Color darkAvatarsSecondary = Color(0xFF9910BC); - - /// Color: #1D722A - static const Color darkAvatarsSuccess = Color(0xFF1D722A); - - /// Color: #B64E07 - static const Color darkAvatarsWarning = Color(0xFFB64E07); - - /// Color: #121721 - static const Color darkElevationsOnSurfaceNeutralLv0 = Color(0xFF121721); - - /// Color: #212A3D - static const Color darkElevationsOnSurfaceNeutralLv1Grey = Color(0xFF212A3D); - - /// Color: #2D3953 - static const Color darkElevationsOnSurfaceNeutralLv1White = Color(0xFF2D3953); - - /// Color: #212A3D - static const Color darkElevationsOnSurfaceNeutralLv2 = Color(0xFF212A3D); - - /// Color: #FF9999 - static const Color darkError = Color(0xFFFF9999); - - /// Color: #AD0000 - static const Color darkErrorContainer = Color(0xFFAD0000); - - /// Color: #212A3D - static const Color darkIconsBackground = Color(0xFF212A3D); - - /// Color: #F2F4F8 - static const Color darkIconsBackgroundVariant = Color(0xFFF2F4F8); - - /// Color: #61BFC8D9 - static const Color darkIconsDisabled = Color(0x61BFC8D9); - - /// Color: #FF9999 - static const Color darkIconsError = Color(0xFFFF9999); - - /// Color: #F2F4F8 - static const Color darkIconsForeground = Color(0xFFF2F4F8); - - /// Color: #FFFFFF - static const Color darkIconsOnImage = Color(0xFFFFFFFF); - - /// Color: #728EF3 - static const Color darkIconsPrimary = Color(0xFF728EF3); - - /// Color: #DF8AF5 - static const Color darkIconsSecondary = Color(0xFFDF8AF5); - - /// Color: #85E093 - static const Color darkIconsSuccess = Color(0xFF85E093); - - /// Color: #FAB484 - static const Color darkIconsWarning = Color(0xFFFAB484); - - /// Color: #380000 - static const Color darkOnError = Color(0xFF380000); - - /// Color: #FFD1D1 - static const Color darkOnErrorContainer = Color(0xFFFFD1D1); - - /// Color: #FFFFFF - static const Color darkOnErrorVariant = Color(0xFFFFFFFF); - - /// Color: #0C288D - static const Color darkOnPrimary = Color(0xFF0C288D); - - /// Color: #E8ECFD - static const Color darkOnPrimaryContainer = Color(0xFFE8ECFD); - - /// Color: #26042F - static const Color darkOnSecondary = Color(0xFF26042F); - - /// Color: #9910BC - static const Color darkOnSecondaryContainer = Color(0xFF9910BC); - - /// Color: #08210C - static const Color darkOnSuccess = Color(0xFF08210C); - - /// Color: #CEF3D4 - static const Color darkOnSuccessContainer = Color(0xFFCEF3D4); - - /// Color: #1FCC0000 - static const Color darkOnSurfaceError012 = Color(0x1FCC0000); - - /// Color: #29CC0000 - static const Color darkOnSurfaceError016 = Color(0x29CC0000); - - /// Color: #1FFFC2C2 - static const Color darkOnSurfaceError08 = Color(0x1FFFC2C2); - - /// Color: #1FBFC8D9 - static const Color darkOnSurfaceNeutral012 = Color(0x1FBFC8D9); - - /// Color: #29212A3D - static const Color darkOnSurfaceNeutral016 = Color(0x29212A3D); - - /// Color: #1FBFC8D9 - static const Color darkOnSurfaceNeutral08 = Color(0x1FBFC8D9); - - /// Color: #000000 - static const Color darkOnSurfaceNeutralOpaqueLv0 = Color(0xFF000000); - - /// Color: #212A3D - static const Color darkOnSurfaceNeutralOpaqueLv1 = Color(0xFF212A3D); - - /// Color: #212A3D - static const Color darkOnSurfaceNeutralOpaqueLv2 = Color(0xFF212A3D); - - /// Color: #1F123CD3 - static const Color darkOnSurfacePrimary012 = Color(0x1F123CD3); - - /// Color: #29123CD3 - static const Color darkOnSurfacePrimary016 = Color(0x29123CD3); - - /// Color: #1F123CD3 - static const Color darkOnSurfacePrimary08 = Color(0x1F123CD3); - - /// Color: #0C288D - static const Color darkOnSurfacePrimaryContainer = Color(0xFF0C288D); - - /// Color: #1FC014EB - static const Color darkOnSurfaceSecondary012 = Color(0x1FC014EB); - - /// Color: #29C014EB - static const Color darkOnSurfaceSecondary016 = Color(0x29C014EB); - - /// Color: #1FD972F3 - static const Color darkOnSurfaceSecondary08 = Color(0x1FD972F3); - - /// Color: #2C1302 - static const Color darkOnWarning = Color(0xFF2C1302); - - /// Color: #FDE1CE - static const Color darkOnWarningContainer = Color(0xFFFDE1CE); - - /// Color: #7F90B3 - static const Color darkOutline = Color(0xFF7F90B3); - - /// Color: #FF7F90B3 - static const Color darkOutlineBorderOutline = Color(0xFF7F90B3); - - /// Color: #FF364463 - static const Color darkOutlineBorderOutlineVariant = Color(0xFF364463); - - /// Color: #364463 - static const Color darkOutlineVariant = Color(0xFF364463); - - /// Color: #728EF3 - static const Color darkPrimary = Color(0xFF728EF3); - - /// Color: #364463 - static const Color darkPrimary98 = Color(0xFF364463); - - /// Color: #1035BC - static const Color darkPrimaryContainer = Color(0xFF1035BC); - - /// Color: #DF8AF5 - static const Color darkSecondary = Color(0xFFDF8AF5); - - /// Color: #9910BC - static const Color darkSecondaryContainer = Color(0xFF9910BC); - - /// Color: #BAEDC2 - static const Color darkSuccess = Color(0xFFBAEDC2); - - /// Color: #1D722A - static const Color darkSuccessContainer = Color(0xFF1D722A); - - /// Color: #61D9DEE8 - static const Color darkTextDisabled = Color(0x61D9DEE8); - - /// Color: #E6E9F0 - static const Color darkTextOnPrimary = Color(0xFFE6E9F0); - - /// Color: #0C288D - static const Color darkTextOnPrimaryContainer = Color(0xFF0C288D); - - /// Color: #FFFFFF - static const Color darkTextOnPrimaryLevel0 = Color(0xFFFFFFFF); - - /// Color: #E6E9F0 - static const Color darkTextOnPrimaryLevel1 = Color(0xFFE6E9F0); - - /// Color: #0C288D - static const Color darkTextOnPrimaryWhite = Color(0xFF0C288D); - - /// Color: #FFFFFF - static const Color darkTextPrimary = Color(0xFFFFFFFF); - - /// Color: #FBC9A7 - static const Color darkWarning = Color(0xFFFBC9A7); - - /// Color: #B64E07 - static const Color darkWarningContainer = Color(0xFFB64E07); - - /// Color: #FFD1D1 - static const Color lightAvatarsError = Color(0xFFFFD1D1); - - /// Color: #D0D9FB - static const Color lightAvatarsPrimary = Color(0xFFD0D9FB); - - /// Color: #F2D0FB - static const Color lightAvatarsSecondary = Color(0xFFF2D0FB); - - /// Color: #CEF3D4 - static const Color lightAvatarsSuccess = Color(0xFFCEF3D4); - - /// Color: #FDE1CE - static const Color lightAvatarsWarning = Color(0xFFFDE1CE); - - /// Color: #FFFFFF - static const Color lightElevationsOnSurfaceNeutralLv0 = Color(0xFFFFFFFF); - - /// Color: #F2F4F8 - static const Color lightElevationsOnSurfaceNeutralLv1Grey = Color(0xFFF2F4F8); - - /// Color: #FFFFFF - static const Color lightElevationsOnSurfaceNeutralLv1White = - Color(0xFFFFFFFF); - - /// Color: #E6E9F0 - static const Color lightElevationsOnSurfaceNeutralLv2 = Color(0xFFE6E9F0); - - /// Color: #CC0000 - static const Color lightError = Color(0xFFCC0000); - - /// Color: #FFD1D1 - static const Color lightErrorContainer = Color(0xFFFFD1D1); - - /// Color: #FFFFFF - static const Color lightIconsBackground = Color(0xFFFFFFFF); - - /// Color: #F2F4F8 - static const Color lightIconsBackgroundVariant = Color(0xFFF2F4F8); - - /// Color: #61212A3D - static const Color lightIconsDisabled = Color(0x61212A3D); - - /// Color: #CC0000 - static const Color lightIconsError = Color(0xFFCC0000); - - /// Color: #212A3D - static const Color lightIconsForeground = Color(0xFF212A3D); - - /// Color: #FFFFFF - static const Color lightIconsOnImage = Color(0xFFFFFFFF); - - /// Color: #123CD3 - static const Color lightIconsPrimary = Color(0xFF123CD3); - - /// Color: #C014EB - static const Color lightIconsSecondary = Color(0xFFC014EB); - - /// Color: #218230 - static const Color lightIconsSuccess = Color(0xFF218230); - - /// Color: #E76309 - static const Color lightIconsWarning = Color(0xFFE76309); - - /// Color: #FFFFFF - static const Color lightOnError = Color(0xFFFFFFFF); - - /// Color: #700000 - static const Color lightOnErrorContainer = Color(0xFF700000); - - /// Color: #FFFFFF - static const Color lightOnErrorVariant = Color(0xFFFFFFFF); - - /// Color: #FFFFFF - static const Color lightOnPrimary = Color(0xFFFFFFFF); - - /// Color: #081B5E - static const Color lightOnPrimaryContainer = Color(0xFF081B5E); - - /// Color: #FFFFFF - static const Color lightOnSecondary = Color(0xFFFFFFFF); - - /// Color: #4D085E - static const Color lightOnSecondaryContainer = Color(0xFF4D085E); - - /// Color: #FFFFFF - static const Color lightOnSuccess = Color(0xFFFFFFFF); - - /// Color: #13491B - static const Color lightOnSuccessContainer = Color(0xFF13491B); - - /// Color: #1FCC0000 - static const Color lightOnSurfaceError012 = Color(0x1FCC0000); - - /// Color: #29CC0000 - static const Color lightOnSurfaceError016 = Color(0x29CC0000); - - /// Color: #14CC0000 - static const Color lightOnSurfaceError08 = Color(0x14CC0000); - - /// Color: #1F212A3D - static const Color lightOnSurfaceNeutral012 = Color(0x1F212A3D); - - /// Color: #29212A3D - static const Color lightOnSurfaceNeutral016 = Color(0x29212A3D); - - /// Color: #14212A3D - static const Color lightOnSurfaceNeutral08 = Color(0x14212A3D); - - /// Color: #FFFFFF - static const Color lightOnSurfaceNeutralOpaqueLv0 = Color(0xFFFFFFFF); - - /// Color: #F2F4F8 - static const Color lightOnSurfaceNeutralOpaqueLv1 = Color(0xFFF2F4F8); - - /// Color: #E6E9F0 - static const Color lightOnSurfaceNeutralOpaqueLv2 = Color(0xFFE6E9F0); - - /// Color: #1F123CD3 - static const Color lightOnSurfacePrimary012 = Color(0x1F123CD3); - - /// Color: #29123CD3 - static const Color lightOnSurfacePrimary016 = Color(0x29123CD3); - - /// Color: #14123CD3 - static const Color lightOnSurfacePrimary08 = Color(0x14123CD3); - - /// Color: #A1B4F7 - static const Color lightOnSurfacePrimaryContainer = Color(0xFFA1B4F7); - - /// Color: #1FC014EB - static const Color lightOnSurfaceSecondary012 = Color(0x1FC014EB); - - /// Color: #29C014EB - static const Color lightOnSurfaceSecondary016 = Color(0x29C014EB); - - /// Color: #14C014EB - static const Color lightOnSurfaceSecondary08 = Color(0x14C014EB); - - /// Color: #FFFFFF - static const Color lightOnWarning = Color(0xFFFFFFFF); - - /// Color: #582603 - static const Color lightOnWarningContainer = Color(0xFF582603); - - /// Color: #D9DEE8 - static const Color lightOutline = Color(0xFFD9DEE8); - - /// Color: #FFD9DEE8 - static const Color lightOutlineBorderOutline = Color(0xFFD9DEE8); - - /// Color: #61BFC8D9 - static const Color lightOutlineBorderOutlineVariant = Color(0x61BFC8D9); - - /// Color: #61BFC8D9 - static const Color lightOutlineVariant = Color(0x61BFC8D9); - - /// Color: #123CD3 - static const Color lightPrimary = Color(0xFF123CD3); - - /// Color: #E8ECFD - static const Color lightPrimary98 = Color(0xFFE8ECFD); - - /// Color: #A1B4F7 - static const Color lightPrimaryContainer = Color(0xFFA1B4F7); - - /// Color: #C014EB - static const Color lightSecondary = Color(0xFFC014EB); - - /// Color: #E6A1F7 - static const Color lightSecondaryContainer = Color(0xFFE6A1F7); - - /// Color: #218230 - static const Color lightSuccess = Color(0xFF218230); - - /// Color: #CEF3D4 - static const Color lightSuccessContainer = Color(0xFFCEF3D4); - - /// Color: #61212A3D - static const Color lightTextDisabled = Color(0x61212A3D); - - /// Color: #506288 - static const Color lightTextOnPrimary = Color(0xFF506288); - - /// Color: #FFFFFF - static const Color lightTextOnPrimaryContainer = Color(0xFFFFFFFF); - - /// Color: #212A3D - static const Color lightTextOnPrimaryLevel0 = Color(0xFF212A3D); - - /// Color: #506288 - static const Color lightTextOnPrimaryLevel1 = Color(0xFF506288); - - /// Color: #FFFFFF - static const Color lightTextOnPrimaryWhite = Color(0xFFFFFFFF); - - /// Color: #212A3D - static const Color lightTextPrimary = Color(0xFF212A3D); - - /// Color: #E76309 - static const Color lightWarning = Color(0xFFE76309); - - /// Color: #FDE1CE - static const Color lightWarningContainer = Color(0xFFFDE1CE); -} diff --git a/catalyst_voices/packages/internal/catalyst_voices_assets/lib/generated/fonts.gen.dart b/catalyst_voices/packages/internal/catalyst_voices_assets/lib/generated/fonts.gen.dart deleted file mode 100644 index a8241327cf6..00000000000 --- a/catalyst_voices/packages/internal/catalyst_voices_assets/lib/generated/fonts.gen.dart +++ /dev/null @@ -1,15 +0,0 @@ -/// GENERATED CODE - DO NOT MODIFY BY HAND -/// ***************************************************** -/// FlutterGen -/// ***************************************************** - -// coverage:ignore-file -// ignore_for_file: type=lint -// ignore_for_file: directives_ordering,unnecessary_import,implicit_dynamic_list_literal,deprecated_member_use - -class VoicesFonts { - VoicesFonts._(); - - /// Font family: SF-Pro - static const String sFPro = 'SF-Pro'; -} diff --git a/catalyst_voices/packages/internal/catalyst_voices_blocs/lib/src/registration/registration_cubit.dart b/catalyst_voices/packages/internal/catalyst_voices_blocs/lib/src/registration/registration_cubit.dart index 4b125734179..4367a6df56d 100644 --- a/catalyst_voices/packages/internal/catalyst_voices_blocs/lib/src/registration/registration_cubit.dart +++ b/catalyst_voices/packages/internal/catalyst_voices_blocs/lib/src/registration/registration_cubit.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'package:catalyst_cardano_serialization/catalyst_cardano_serialization.dart'; +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:catalyst_voices_blocs/catalyst_voices_blocs.dart'; import 'package:catalyst_voices_blocs/src/registration/cubits/keychain_creation_cubit.dart'; import 'package:catalyst_voices_blocs/src/registration/cubits/recover_cubit.dart'; @@ -27,7 +28,7 @@ final class RegistrationCubit extends Cubit final RegistrationService _registrationService; final RegistrationProgressNotifier _progressNotifier; - Ed25519KeyPair? _keyPair; + Bip32Ed25519XPrivateKey? _masterKey; Transaction? _transaction; /// Returns [RegistrationCubit] if found in widget tree. Does not add @@ -168,20 +169,18 @@ final class RegistrationCubit extends Cubit final wallet = _walletLinkCubit.selectedWallet!; final roles = _walletLinkCubit.roles; - final keyPair = await _registrationService.deriveAccountRoleKeyPair( - seedPhrase: seedPhrase, - roles: roles, - ); + final masterKey = + await _registrationService.deriveMasterKey(seedPhrase: seedPhrase); final transaction = await _registrationService.prepareRegistration( wallet: wallet, // TODO(dtscalac): inject the networkId networkId: NetworkId.testnet, - keyPair: keyPair, + masterKey: masterKey, roles: roles, ); - _keyPair = keyPair; + _masterKey = masterKey; _transaction = transaction; final fee = transaction.body.fee; @@ -197,7 +196,8 @@ final class RegistrationCubit extends Cubit } on RegistrationException catch (error, stackTrace) { _logger.severe('Prepare registration', error, stackTrace); - _keyPair = null; + _masterKey?.drop(); + _masterKey = null; _transaction = null; final exception = LocalizedRegistrationException.from(error); @@ -220,7 +220,7 @@ final class RegistrationCubit extends Cubit ), ); - final keyPair = _keyPair!; + final masterKey = _masterKey!; final transaction = _transaction!; final password = _keychainCreationCubit.password; @@ -234,8 +234,7 @@ final class RegistrationCubit extends Cubit unsignedTx: transaction, roles: roles, lockFactor: lockFactor, - // TODO(dtscalac): Update key value when derivation is final. - keyPair: keyPair, + masterKey: masterKey, ); await _userService.useAccount(account); diff --git a/catalyst_voices/packages/internal/catalyst_voices_blocs/pubspec.yaml b/catalyst_voices/packages/internal/catalyst_voices_blocs/pubspec.yaml index e915102c4f4..d8ba90d88d1 100644 --- a/catalyst_voices/packages/internal/catalyst_voices_blocs/pubspec.yaml +++ b/catalyst_voices/packages/internal/catalyst_voices_blocs/pubspec.yaml @@ -12,6 +12,7 @@ dependencies: catalyst_cardano: ^0.3.0 catalyst_cardano_serialization: ^0.4.0 catalyst_cardano_web: ^0.3.0 + catalyst_key_derivation: ^0.1.0 catalyst_voices_brands: path: ../catalyst_voices_brands catalyst_voices_models: diff --git a/catalyst_voices/packages/internal/catalyst_voices_localization/lib/generated/catalyst_voices_localizations.dart b/catalyst_voices/packages/internal/catalyst_voices_localization/lib/generated/catalyst_voices_localizations.dart deleted file mode 100644 index e25a788edee..00000000000 --- a/catalyst_voices/packages/internal/catalyst_voices_localization/lib/generated/catalyst_voices_localizations.dart +++ /dev/null @@ -1,1946 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/widgets.dart'; -import 'package:flutter_localizations/flutter_localizations.dart'; -import 'package:intl/intl.dart' as intl; - -import 'catalyst_voices_localizations_en.dart' deferred as catalyst_voices_localizations_en; -import 'catalyst_voices_localizations_es.dart' deferred as catalyst_voices_localizations_es; - -// ignore_for_file: type=lint - -/// Callers can lookup localized strings with an instance of VoicesLocalizations -/// returned by `VoicesLocalizations.of(context)`. -/// -/// Applications need to include `VoicesLocalizations.delegate()` in their app's -/// `localizationDelegates` list, and the locales they support in the app's -/// `supportedLocales` list. For example: -/// -/// ```dart -/// import 'generated/catalyst_voices_localizations.dart'; -/// -/// return MaterialApp( -/// localizationsDelegates: VoicesLocalizations.localizationsDelegates, -/// supportedLocales: VoicesLocalizations.supportedLocales, -/// home: MyApplicationHome(), -/// ); -/// ``` -/// -/// ## Update pubspec.yaml -/// -/// Please make sure to update your pubspec.yaml to include the following -/// packages: -/// -/// ```yaml -/// dependencies: -/// # Internationalization support. -/// flutter_localizations: -/// sdk: flutter -/// intl: any # Use the pinned version from flutter_localizations -/// -/// # Rest of dependencies -/// ``` -/// -/// ## iOS Applications -/// -/// iOS applications define key application metadata, including supported -/// locales, in an Info.plist file that is built into the application bundle. -/// To configure the locales supported by your app, you’ll need to edit this -/// file. -/// -/// First, open your project’s ios/Runner.xcworkspace Xcode workspace file. -/// Then, in the Project Navigator, open the Info.plist file under the Runner -/// project’s Runner folder. -/// -/// Next, select the Information Property List item, select Add Item from the -/// Editor menu, then select Localizations from the pop-up menu. -/// -/// Select and expand the newly-created Localizations item then, for each -/// locale your application supports, add a new item and select the locale -/// you wish to add from the pop-up menu in the Value field. This list should -/// be consistent with the languages listed in the VoicesLocalizations.supportedLocales -/// property. -abstract class VoicesLocalizations { - VoicesLocalizations(String locale) : localeName = intl.Intl.canonicalizedLocale(locale.toString()); - - final String localeName; - - static VoicesLocalizations? of(BuildContext context) { - return Localizations.of(context, VoicesLocalizations); - } - - static const LocalizationsDelegate delegate = _VoicesLocalizationsDelegate(); - - /// A list of this localizations delegate along with the default localizations - /// delegates. - /// - /// Returns a list of localizations delegates containing this delegate along with - /// GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, - /// and GlobalWidgetsLocalizations.delegate. - /// - /// Additional delegates can be added by appending to this list in - /// MaterialApp. This list does not have to be used at all if a custom list - /// of delegates is preferred or required. - static const List> localizationsDelegates = >[ - delegate, - GlobalMaterialLocalizations.delegate, - GlobalCupertinoLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - ]; - - /// A list of this localizations delegate's supported locales. - static const List supportedLocales = [ - Locale('en'), - Locale('es') - ]; - - /// Text shown in email field - /// - /// In en, this message translates to: - /// **'Email'** - String get emailLabelText; - - /// Text shown in email field when empty - /// - /// In en, this message translates to: - /// **'mail@example.com'** - String get emailHintText; - - /// Text shown in email field when input is invalid - /// - /// In en, this message translates to: - /// **'mail@example.com'** - String get emailErrorText; - - /// Text shown in cancel button - /// - /// In en, this message translates to: - /// **'Cancel'** - String get cancelButtonText; - - /// Text shown in edit button - /// - /// In en, this message translates to: - /// **'Edit'** - String get editButtonText; - - /// Text shown in header tooltip - /// - /// In en, this message translates to: - /// **'Header'** - String get headerTooltipText; - - /// Text shown as placeholder in rich text editor - /// - /// In en, this message translates to: - /// **'Start writing your text...'** - String get placeholderRichText; - - /// Text shown as placeholder in rich text editor - /// - /// In en, this message translates to: - /// **'Supporting text'** - String get supportingTextLabelText; - - /// Text shown in save button - /// - /// In en, this message translates to: - /// **'Save'** - String get saveButtonText; - - /// Text shown in password field - /// - /// In en, this message translates to: - /// **'Password'** - String get passwordLabelText; - - /// Text shown in password field when empty - /// - /// In en, this message translates to: - /// **'My1SecretPassword'** - String get passwordHintText; - - /// Text shown in password field when input is invalid - /// - /// In en, this message translates to: - /// **'Password must be at least 8 characters long'** - String get passwordErrorText; - - /// Text shown in the login screen title - /// - /// In en, this message translates to: - /// **'Login'** - String get loginTitleText; - - /// Text shown in the login screen for the login button - /// - /// In en, this message translates to: - /// **'Login'** - String get loginButtonText; - - /// Text shown in the login screen when the user enters wrong credentials - /// - /// In en, this message translates to: - /// **'Wrong credentials'** - String get loginScreenErrorMessage; - - /// Text shown in the home screen - /// - /// In en, this message translates to: - /// **'Catalyst Voices'** - String get homeScreenText; - - /// Text shown after logo in coming soon page - /// - /// In en, this message translates to: - /// **'Voices'** - String get comingSoonSubtitle; - - /// Text shown as main title in coming soon page - /// - /// In en, this message translates to: - /// **'Coming'** - String get comingSoonTitle1; - - /// Text shown as main title in coming soon page - /// - /// In en, this message translates to: - /// **'soon'** - String get comingSoonTitle2; - - /// Text shown as description in coming soon page - /// - /// In en, this message translates to: - /// **'Project Catalyst is the world\'s largest decentralized innovation engine for solving real-world challenges.'** - String get comingSoonDescription; - - /// Label text shown in the ConnectingStatus widget during re-connection. - /// - /// In en, this message translates to: - /// **'re-connecting'** - String get connectingStatusLabelText; - - /// Label text shown in the FinishAccountButton widget. - /// - /// In en, this message translates to: - /// **'Finish account'** - String get finishAccountButtonLabelText; - - /// Label text shown in the GetStartedButton widget. - /// - /// In en, this message translates to: - /// **'Get Started'** - String get getStartedButtonLabelText; - - /// Label text shown in the UnlockButton widget. - /// - /// In en, this message translates to: - /// **'Unlock'** - String get unlockButtonLabelText; - - /// Label text shown in the UserProfileButton widget when a user is not connected. - /// - /// In en, this message translates to: - /// **'Guest'** - String get userProfileGuestLabelText; - - /// Label text shown in the Search widget. - /// - /// In en, this message translates to: - /// **'[cmd=K]'** - String get searchButtonLabelText; - - /// Label text shown in the Snackbar widget when the message is an info message. - /// - /// In en, this message translates to: - /// **'Info'** - String get snackbarInfoLabelText; - - /// Text shown in the Snackbar widget when the message is an info message. - /// - /// In en, this message translates to: - /// **'This is an info message!'** - String get snackbarInfoMessageText; - - /// Label text shown in the Snackbar widget when the message is an success message. - /// - /// In en, this message translates to: - /// **'Success'** - String get snackbarSuccessLabelText; - - /// Text shown in the Snackbar widget when the message is an success message. - /// - /// In en, this message translates to: - /// **'This is a success message!'** - String get snackbarSuccessMessageText; - - /// Label text shown in the Snackbar widget when the message is an warning message. - /// - /// In en, this message translates to: - /// **'Warning'** - String get snackbarWarningLabelText; - - /// Text shown in the Snackbar widget when the message is an warning message. - /// - /// In en, this message translates to: - /// **'This is a warning message!'** - String get snackbarWarningMessageText; - - /// Label text shown in the Snackbar widget when the message is an error message. - /// - /// In en, this message translates to: - /// **'Error'** - String get snackbarErrorLabelText; - - /// Text shown in the Snackbar widget when the message is an error message. - /// - /// In en, this message translates to: - /// **'This is an error message!'** - String get snackbarErrorMessageText; - - /// Text shown in the Snackbar widget for the refresh button. - /// - /// In en, this message translates to: - /// **'Refresh'** - String get snackbarRefreshButtonText; - - /// Text shown in the Snackbar widget for the more button. - /// - /// In en, this message translates to: - /// **'Learn more'** - String get snackbarMoreButtonText; - - /// Text shown in the Snackbar widget for the ok button. - /// - /// In en, this message translates to: - /// **'Ok'** - String get snackbarOkButtonText; - - /// When user arranges seed phrases this text is shown when phrase was not selected - /// - /// In en, this message translates to: - /// **'Slot {nr}'** - String seedPhraseSlotNr(int nr); - - /// Indicates to user that status is in ready mode - /// - /// In en, this message translates to: - /// **'Ready'** - String get proposalStatusReady; - - /// Indicates to user that status is in draft mode - /// - /// In en, this message translates to: - /// **'Draft'** - String get proposalStatusDraft; - - /// Indicates to user that status is in progress - /// - /// In en, this message translates to: - /// **'In progress'** - String get proposalStatusInProgress; - - /// Indicates to user that status is in private mode - /// - /// In en, this message translates to: - /// **'Private'** - String get proposalStatusPrivate; - - /// Indicates to user that status is in live mode - /// - /// In en, this message translates to: - /// **'LIVE'** - String get proposalStatusLive; - - /// Indicates to user that status is completed - /// - /// In en, this message translates to: - /// **'Completed'** - String get proposalStatusCompleted; - - /// Indicates to user that status is in open mode - /// - /// In en, this message translates to: - /// **'Open'** - String get proposalStatusOpen; - - /// Label shown on a proposal card indicating that the proposal is funded. - /// - /// In en, this message translates to: - /// **'Funded proposal'** - String get fundedProposal; - - /// Label shown on a proposal card indicating that the proposal is not yet funded. - /// - /// In en, this message translates to: - /// **'Published proposal'** - String get publishedProposal; - - /// Indicates date of funding (a proposal). - /// - /// In en, this message translates to: - /// **'Funded {date}'** - String fundedProposalDate(DateTime date); - - /// Indicates a last update date. - /// - /// In en, this message translates to: - /// **'Last update: {date}.'** - String lastUpdateDate(String date); - - /// Indicates the amount of ADA requested in a fund on a proposal card. - /// - /// In en, this message translates to: - /// **'Funds requested'** - String get fundsRequested; - - /// Indicates the amount of comments on a proposal card. - /// - /// In en, this message translates to: - /// **'{count} {count, plural, =0{comments} =1{comment} other{comments}}'** - String noOfComments(num count); - - /// Indicates the amount of comments on a proposal card. - /// - /// In en, this message translates to: - /// **'{completed} of {total} ({percentage}%) {total, plural, =0{segments} =1{segment} other{segments}} completed'** - String noOfSegmentsCompleted(num completed, num total, num percentage); - - /// Refers to date which is today. - /// - /// In en, this message translates to: - /// **'Today'** - String get today; - - /// Refers to date which is yesterday. - /// - /// In en, this message translates to: - /// **'Yesterday'** - String get yesterday; - - /// Refers to date which is two days ago. - /// - /// In en, this message translates to: - /// **'2 days ago'** - String get twoDaysAgo; - - /// Refers to date which is tomorrow. - /// - /// In en, this message translates to: - /// **'Tomorrow'** - String get tomorrow; - - /// Title of the voting space. - /// - /// In en, this message translates to: - /// **'Active voting round 14'** - String get activeVotingRound; - - /// Tab label for all proposals in voting space - /// - /// In en, this message translates to: - /// **'All proposals ({count})'** - String noOfAllProposals(int count); - - /// Refers to a list of favorites. - /// - /// In en, this message translates to: - /// **'Favorites'** - String get favorites; - - /// Left panel name in treasury space - /// - /// In en, this message translates to: - /// **'Campaign builder'** - String get treasuryCampaignBuilder; - - /// Tab name in campaign builder panel - /// - /// In en, this message translates to: - /// **'Segments'** - String get treasuryCampaignBuilderSegments; - - /// Segment name - /// - /// In en, this message translates to: - /// **'Setup Campaign'** - String get treasuryCampaignSetup; - - /// Campaign title - /// - /// In en, this message translates to: - /// **'Campaign title'** - String get treasuryCampaignTitle; - - /// Button name in step - /// - /// In en, this message translates to: - /// **'Edit'** - String get stepEdit; - - /// Left panel name in workspace - /// - /// In en, this message translates to: - /// **'Proposal navigation'** - String get workspaceProposalNavigation; - - /// Tab name in proposal setup panel - /// - /// In en, this message translates to: - /// **'Segments'** - String get workspaceProposalNavigationSegments; - - /// Segment name - /// - /// In en, this message translates to: - /// **'Proposal setup'** - String get workspaceProposalSetup; - - /// Name shown in spaces shell drawer - /// - /// In en, this message translates to: - /// **'Treasury'** - String get drawerSpaceTreasury; - - /// Name shown in spaces shell drawer - /// - /// In en, this message translates to: - /// **'Discovery'** - String get drawerSpaceDiscovery; - - /// Name shown in spaces shell drawer - /// - /// In en, this message translates to: - /// **'Workspace'** - String get drawerSpaceWorkspace; - - /// Name shown in spaces shell drawer - /// - /// In en, this message translates to: - /// **'Voting'** - String get drawerSpaceVoting; - - /// Name shown in spaces shell drawer - /// - /// In en, this message translates to: - /// **'Funded projects'** - String get drawerSpaceFundedProjects; - - /// Title of the funded project space - /// - /// In en, this message translates to: - /// **'Funded project space'** - String get fundedProjectSpace; - - /// Tab label for funded proposals in funded projects space - /// - /// In en, this message translates to: - /// **'Funded proposals ({count})'** - String noOfFundedProposals(int count); - - /// Refers to a list of followed items. - /// - /// In en, this message translates to: - /// **'Followed'** - String get followed; - - /// Overall spaces search brands tile name - /// - /// In en, this message translates to: - /// **'Search Brands'** - String get overallSpacesSearchBrands; - - /// Overall spaces tasks tile name - /// - /// In en, this message translates to: - /// **'Tasks'** - String get overallSpacesTasks; - - /// In different places update popup title - /// - /// In en, this message translates to: - /// **'Voices update ready'** - String get voicesUpdateReady; - - /// In different places update popup body - /// - /// In en, this message translates to: - /// **'Click to restart'** - String get clickToRestart; - - /// Name of space shown in different spaces that indicates its origin - /// - /// In en, this message translates to: - /// **'Treasury space'** - String get spaceTreasuryName; - - /// Name of space shown in different spaces that indicates its origin - /// - /// In en, this message translates to: - /// **'Discovery space'** - String get spaceDiscoveryName; - - /// Name of space shown in different spaces that indicates its origin - /// - /// In en, this message translates to: - /// **'Workspace'** - String get spaceWorkspaceName; - - /// Name of space shown in different spaces that indicates its origin - /// - /// In en, this message translates to: - /// **'Voting space'** - String get spaceVotingName; - - /// Name of space shown in different spaces that indicates its origin - /// - /// In en, this message translates to: - /// **'Funded project space'** - String get spaceFundedProjects; - - /// Refers to a lock action, i.e. to lock the session. - /// - /// In en, this message translates to: - /// **'Lock'** - String get lock; - - /// Refers to a unlock action, i.e. to unlock the session. - /// - /// In en, this message translates to: - /// **'Unlock'** - String get unlock; - - /// Refers to a get started action, i.e. to register. - /// - /// In en, this message translates to: - /// **'Get Started'** - String get getStarted; - - /// Refers to guest user. - /// - /// In en, this message translates to: - /// **'Guest'** - String get guest; - - /// Refers to user that created keychain but is locked - /// - /// In en, this message translates to: - /// **'Visitor'** - String get visitor; - - /// Text shown in the No Internet Connection Banner widget for the refresh button. - /// - /// In en, this message translates to: - /// **'Refresh'** - String get noConnectionBannerRefreshButtonText; - - /// Text shown in the No Internet Connection Banner widget for the title. - /// - /// In en, this message translates to: - /// **'No internet connection'** - String get noConnectionBannerTitle; - - /// Text shown in the No Internet Connection Banner widget for the description below the title. - /// - /// In en, this message translates to: - /// **'Your internet is playing hide and seek. Check your internet connection, or try again in a moment.'** - String get noConnectionBannerDescription; - - /// Describes a password that is weak - /// - /// In en, this message translates to: - /// **'Weak password strength'** - String get weakPasswordStrength; - - /// Describes a password that has medium strength. - /// - /// In en, this message translates to: - /// **'Normal password strength'** - String get normalPasswordStrength; - - /// Describes a password that is strong. - /// - /// In en, this message translates to: - /// **'Good password strength'** - String get goodPasswordStrength; - - /// A button label to select a cardano wallet. - /// - /// In en, this message translates to: - /// **'Choose Cardano Wallet'** - String get chooseCardanoWallet; - - /// A button label to select another cardano wallet. - /// - /// In en, this message translates to: - /// **'Choose other wallet'** - String get chooseOtherWallet; - - /// A label on a clickable element that can show more content. - /// - /// In en, this message translates to: - /// **'Learn More'** - String get learnMore; - - /// A header in link wallet flow in registration. - /// - /// In en, this message translates to: - /// **'Link keys to your Catalyst Keychain'** - String get walletLinkHeader; - - /// A subheader in link wallet flow in registration for wallet connection. - /// - /// In en, this message translates to: - /// **'Link your Cardano wallet'** - String get walletLinkWalletSubheader; - - /// A subheader in link wallet flow in registration for role chooser state. - /// - /// In en, this message translates to: - /// **'Select your Catalyst roles'** - String get walletLinkRolesSubheader; - - /// A subheader in link wallet flow in registration for RBAC transaction. - /// - /// In en, this message translates to: - /// **'Sign your Catalyst roles to the\nCardano mainnet'** - String get walletLinkTransactionSubheader; - - /// A title in link wallet flow on intro screen. - /// - /// In en, this message translates to: - /// **'Link Cardano Wallet & Catalyst Roles to you Catalyst Keychain.'** - String get walletLinkIntroTitle; - - /// A message (content) in link wallet flow on intro screen. - /// - /// In en, this message translates to: - /// **'You\'re almost there! This is the final and most important step in your account setup.\n\nWe\'re going to link a Cardano Wallet to your Catalyst Keychain, so you can start collecting Role Keys.\n\nRole Keys allow you to enter new spaces, discover new ways to participate, and unlock new ways to earn rewards.\n\nWe\'ll start with your Voter Key by default. You can decide to add a Proposer Key and Drep key if you want, or you can always add them later.'** - String get walletLinkIntroContent; - - /// A title in link wallet flow on select wallet screen. - /// - /// In en, this message translates to: - /// **'Select the Cardano wallet to link\nto your Catalyst Keychain.'** - String get walletLinkSelectWalletTitle; - - /// A message (content) in link wallet flow on select wallet screen. - /// - /// In en, this message translates to: - /// **'To complete this action, you\'ll submit a signed transaction to Cardano. There will be an ADA transaction fee.'** - String get walletLinkSelectWalletContent; - - /// A title in link wallet flow on wallet details screen. - /// - /// In en, this message translates to: - /// **'Cardano wallet detection'** - String get walletLinkWalletDetailsTitle; - - /// A message in link wallet flow on wallet details screen. - /// - /// In en, this message translates to: - /// **'{wallet} connected successfully!'** - String walletLinkWalletDetailsContent(String wallet); - - /// A message in link wallet flow on wallet details screen when a user wallet doesn't have enough balance. - /// - /// In en, this message translates to: - /// **'Wallet and role registrations require a minimal transaction fee. You can setup your default dApp connector wallet in your browser extension settings.'** - String get walletLinkWalletDetailsNotice; - - /// A message recommending the user to top up ADA in wallet link on wallet details screen. - /// - /// In en, this message translates to: - /// **'Top up ADA'** - String get walletLinkWalletDetailsNoticeTopUp; - - /// A link to top-up provide when the user doesn't have enough balance on wallet link screen - /// - /// In en, this message translates to: - /// **'Link to top-up provider'** - String get walletLinkWalletDetailsNoticeTopUpLink; - - /// A title in link wallet flow on transaction screen. - /// - /// In en, this message translates to: - /// **'Let\'s make sure everything looks right.'** - String get walletLinkTransactionTitle; - - /// A subtitle in link wallet flow on transaction screen. - /// - /// In en, this message translates to: - /// **'Account completion for Catalyst'** - String get walletLinkTransactionAccountCompletion; - - /// An item in the transaction summary for the wallet link. - /// - /// In en, this message translates to: - /// **'1 Link {wallet} to Catalyst Keychain'** - String walletLinkTransactionLinkItem(String wallet); - - /// A side note on transaction summary in the wallet link explaining the positives about the registration. - /// - /// In en, this message translates to: - /// **'Positive small print'** - String get walletLinkTransactionPositiveSmallPrint; - - /// The first item for the positive small print message. - /// - /// In en, this message translates to: - /// **'Your registration is a one time event, cost will not renew periodically.'** - String get walletLinkTransactionPositiveSmallPrintItem1; - - /// The second item for the positive small print message. - /// - /// In en, this message translates to: - /// **'Your registrations can be found under your account profile after completion.'** - String get walletLinkTransactionPositiveSmallPrintItem2; - - /// The third item for the positive small print message. - /// - /// In en, this message translates to: - /// **'All registration fees go into the Cardano Treasury.'** - String get walletLinkTransactionPositiveSmallPrintItem3; - - /// The primary button label to sign a transaction on transaction summary screen. - /// - /// In en, this message translates to: - /// **'Sign transaction with wallet'** - String get walletLinkTransactionSign; - - /// The secondary button label to change the roles on transaction summary screen. - /// - /// In en, this message translates to: - /// **'Change role setup'** - String get walletLinkTransactionChangeRoles; - - /// An item in the transaction summary for the role registration - /// - /// In en, this message translates to: - /// **'1 {role} registration to Catalyst Keychain'** - String walletLinkTransactionRoleItem(String role); - - /// Indicates an error when submitting a registration transaction failed. - /// - /// In en, this message translates to: - /// **'Transaction failed'** - String get registrationTransactionFailed; - - /// Indicates an error when preparing a transaction has failed due to low wallet balance. - /// - /// In en, this message translates to: - /// **'Insufficient balance, please top up your wallet.'** - String get registrationInsufficientBalance; - - /// Error message shown when attempting to register or recover account but seed phrase was not found - /// - /// In en, this message translates to: - /// **'Seed phrase was not found. Make sure correct words are correct.'** - String get registrationSeedPhraseNotFound; - - /// Error message shown when attempting to register or recover account but password was not found - /// - /// In en, this message translates to: - /// **'Password was not found. Make sure valid password was created.'** - String get registrationUnlockPasswordNotFound; - - /// Error message shown when connect wallet but matching was not found - /// - /// In en, this message translates to: - /// **'Wallet not found'** - String get registrationWalletNotFound; - - /// A title on the role chooser screen in registration. - /// - /// In en, this message translates to: - /// **'How do you want to participate in Catalyst?'** - String get walletLinkRoleChooserTitle; - - /// A message on the role chooser screen in registration. - /// - /// In en, this message translates to: - /// **'In Catalyst you can take on different roles, learn more below and choose your additional roles now.'** - String get walletLinkRoleChooserContent; - - /// A title on the role summary screen in registration. - /// - /// In en, this message translates to: - /// **'Is this your correct Catalyst role setup?'** - String get walletLinkRoleSummaryTitle; - - /// The first part of the message on the role summary screen in registration. - /// - /// In en, this message translates to: - /// **'You would like to register '** - String get walletLinkRoleSummaryContent1; - - /// The middle (bold) part of the message on the role summary screen in registration. - /// - /// In en, this message translates to: - /// **'{count} active {count, plural, =0{roles} =1{role} other{roles}}'** - String walletLinkRoleSummaryContent2(num count); - - /// The last part of the message on the role summary screen in registration. - /// - /// In en, this message translates to: - /// **' in Catalyst.'** - String get walletLinkRoleSummaryContent3; - - /// Message shown when redirecting to external content that describes which wallets are supported. - /// - /// In en, this message translates to: - /// **'See all supported wallets'** - String get seeAllSupportedWallets; - - /// Message shown when presenting the details of a connected wallet. - /// - /// In en, this message translates to: - /// **'Wallet detection summary'** - String get walletDetectionSummary; - - /// The wallet balance in terms of Ada. - /// - /// In en, this message translates to: - /// **'Wallet balance'** - String get walletBalance; - - /// A cardano wallet address - /// - /// In en, this message translates to: - /// **'Wallet address'** - String get walletAddress; - - /// No description provided for @accountCreationCreate. - /// - /// In en, this message translates to: - /// **'Create a new 
Catalyst Keychain'** - String get accountCreationCreate; - - /// No description provided for @accountCreationRecover. - /// - /// In en, this message translates to: - /// **'Recover your
Catalyst Keychain'** - String get accountCreationRecover; - - /// Indicates that created keychain will be stored in this device only - /// - /// In en, this message translates to: - /// **'On this device'** - String get accountCreationOnThisDevice; - - /// No description provided for @accountCreationGetStartedTitle. - /// - /// In en, this message translates to: - /// **'Welcome to Catalyst'** - String get accountCreationGetStartedTitle; - - /// No description provided for @accountCreationGetStatedDesc. - /// - /// In en, this message translates to: - /// **'If you already have a Catalyst keychain you can restore it on this device, or you can create a new Catalyst Keychain.'** - String get accountCreationGetStatedDesc; - - /// No description provided for @accountCreationGetStatedWhatNext. - /// - /// In en, this message translates to: - /// **'What do you want to do?'** - String get accountCreationGetStatedWhatNext; - - /// Title of My Account page - /// - /// In en, this message translates to: - /// **'My Account / Profile & Keychain'** - String get myAccountProfileKeychain; - - /// Subtitle of My Account page - /// - /// In en, this message translates to: - /// **'Your Catalyst keychain & role registration'** - String get yourCatalystKeychainAndRoleRegistration; - - /// Tab on My Account page - /// - /// In en, this message translates to: - /// **'Profile & Keychain'** - String get profileAndKeychain; - - /// Action on Catalyst Keychain card - /// - /// In en, this message translates to: - /// **'Remove Keychain'** - String get removeKeychain; - - /// Describes that wallet is connected on Catalyst Keychain card - /// - /// In en, this message translates to: - /// **'Wallet connected'** - String get walletConnected; - - /// Describes roles on Catalyst Keychain card - /// - /// In en, this message translates to: - /// **'Current Role registrations'** - String get currentRoleRegistrations; - - /// Account role - /// - /// In en, this message translates to: - /// **'Voter'** - String get voter; - - /// Account role - /// - /// In en, this message translates to: - /// **'Proposer'** - String get proposer; - - /// Account role - /// - /// In en, this message translates to: - /// **'Drep'** - String get drep; - - /// Related to account role - /// - /// In en, this message translates to: - /// **'Default'** - String get defaultRole; - - /// No description provided for @catalystKeychain. - /// - /// In en, this message translates to: - /// **'Catalyst Keychain'** - String get catalystKeychain; - - /// No description provided for @accountCreationSplashTitle. - /// - /// In en, this message translates to: - /// **'Create your Catalyst Keychain'** - String get accountCreationSplashTitle; - - /// No description provided for @accountCreationSplashMessage. - /// - /// In en, this message translates to: - /// **'Your keychain is your ticket to participate in 
distributed innovation on the global stage. 

Once you have it, you\'ll be able to enter different spaces, discover awesome ideas, and share your feedback to hep improve ideas. 

As you add new keys to your keychain, you\'ll be able to enter new spaces, unlock new rewards opportunities, and have your voice heard in community decisions.'** - String get accountCreationSplashMessage; - - /// No description provided for @accountCreationSplashNextButton. - /// - /// In en, this message translates to: - /// **'Create your Keychain now'** - String get accountCreationSplashNextButton; - - /// No description provided for @accountInstructionsTitle. - /// - /// In en, this message translates to: - /// **'Great! Your Catalyst Keychain 
has been created.'** - String get accountInstructionsTitle; - - /// No description provided for @accountInstructionsMessage. - /// - /// In en, this message translates to: - /// **'On the next screen, you\'re going to see 12 words. 
This is called your \"seed phrase\". 

It\'s like a super secure password that only you know, 
that allows you to prove ownership of your keychain. 

You\'ll use it to login and recover your account on 
different devices, so be sure to put it somewhere safe!\n\nYou need to write this seed phrase down with pen and paper, so get this ready.'** - String get accountInstructionsMessage; - - /// For example in button that goes to next stage of registration - /// - /// In en, this message translates to: - /// **'Next'** - String get next; - - /// For example in button that goes to previous stage of registration - /// - /// In en, this message translates to: - /// **'Back'** - String get back; - - /// Retry action when something goes wrong. - /// - /// In en, this message translates to: - /// **'Retry'** - String get retry; - - /// Error description when something goes wrong. - /// - /// In en, this message translates to: - /// **'Something went wrong.'** - String get somethingWentWrong; - - /// A description when no wallet extension was found. - /// - /// In en, this message translates to: - /// **'No wallet found.'** - String get noWalletFound; - - /// A title on delete keychain dialog - /// - /// In en, this message translates to: - /// **'Delete Keychain?'** - String get deleteKeychainDialogTitle; - - /// A subtitle on delete keychain dialog - /// - /// In en, this message translates to: - /// **'Are you sure you wants to delete your\nCatalyst Keychain from this device?'** - String get deleteKeychainDialogSubtitle; - - /// A warning on delete keychain dialog - /// - /// In en, this message translates to: - /// **'Make sure you have a working Catalyst 12-word seedphrase!'** - String get deleteKeychainDialogWarning; - - /// A warning info on delete keychain dialog - /// - /// In en, this message translates to: - /// **'Your Catalyst account will be removed,\nthis action cannot be undone!'** - String get deleteKeychainDialogWarningInfo; - - /// A typing info on delete keychain dialog - /// - /// In en, this message translates to: - /// **'To avoid mistakes, please type ‘Remove Keychain’ below.'** - String get deleteKeychainDialogTypingInfo; - - /// An input label on delete keychain dialog - /// - /// In en, this message translates to: - /// **'Confirm removal'** - String get deleteKeychainDialogInputLabel; - - /// An error text on text field on delete keychain dialog - /// - /// In en, this message translates to: - /// **'Error. Please type \'Remove Keychain\' to remove your account from this device.'** - String get deleteKeychainDialogErrorText; - - /// A removing phrase on delete keychain dialog - /// - /// In en, this message translates to: - /// **'Remove Keychain'** - String get deleteKeychainDialogRemovingPhrase; - - /// A title on account role dialog - /// - /// In en, this message translates to: - /// **'Learn about Catalyst Roles'** - String get accountRoleDialogTitle; - - /// A label on account role dialog's button - /// - /// In en, this message translates to: - /// **'Continue Role setup'** - String get accountRoleDialogButton; - - /// A title for role summary on account role dialog - /// - /// In en, this message translates to: - /// **'{role} role summary'** - String accountRoleDialogRoleSummaryTitle(String role); - - /// A verbose name for voter - /// - /// In en, this message translates to: - /// **'Treasury guardian'** - String get voterVerboseName; - - /// A verbose name for proposer - /// - /// In en, this message translates to: - /// **'Main proposer'** - String get proposerVerboseName; - - /// A verbose name for drep - /// - /// In en, this message translates to: - /// **'Community expert'** - String get drepVerboseName; - - /// A description for voter - /// - /// In en, this message translates to: - /// **'The Voters are the guardians of Cardano treasury. They vote in projects for the growth of the Cardano Ecosystem.'** - String get voterDescription; - - /// A description for proposer - /// - /// In en, this message translates to: - /// **'The Main Proposers are the Innovators in Project Catalyst, they are the shapers of the future.'** - String get proposerDescription; - - /// A description for drep - /// - /// In en, this message translates to: - /// **'The dRep has an Expert Role in the Cardano/Catalyst as people can delegate their vote to Cardano Experts.'** - String get drepDescription; - - /// No description provided for @voterSummarySelectFavorites. - /// - /// In en, this message translates to: - /// **'Select favorites'** - String get voterSummarySelectFavorites; - - /// No description provided for @voterSummaryComment. - /// - /// In en, this message translates to: - /// **'Comment/Vote on Proposals'** - String get voterSummaryComment; - - /// No description provided for @voterSummaryCastVotes. - /// - /// In en, this message translates to: - /// **'Cast your votes'** - String get voterSummaryCastVotes; - - /// No description provided for @voterSummaryVoterRewards. - /// - /// In en, this message translates to: - /// **'Voter rewards'** - String get voterSummaryVoterRewards; - - /// No description provided for @proposerSummaryWriteEdit. - /// - /// In en, this message translates to: - /// **'Write/edit functionality'** - String get proposerSummaryWriteEdit; - - /// No description provided for @proposerSummarySubmitToFund. - /// - /// In en, this message translates to: - /// **'Rights to Submit to Fund'** - String get proposerSummarySubmitToFund; - - /// No description provided for @proposerSummaryInviteTeamMembers. - /// - /// In en, this message translates to: - /// **'Invite Team Members'** - String get proposerSummaryInviteTeamMembers; - - /// No description provided for @proposerSummaryComment. - /// - /// In en, this message translates to: - /// **'Comment functionality'** - String get proposerSummaryComment; - - /// No description provided for @drepSummaryDelegatedVotes. - /// - /// In en, this message translates to: - /// **'Delegated Votes'** - String get drepSummaryDelegatedVotes; - - /// No description provided for @drepSummaryRewards. - /// - /// In en, this message translates to: - /// **'dRep rewards'** - String get drepSummaryRewards; - - /// No description provided for @drepSummaryCastVotes. - /// - /// In en, this message translates to: - /// **'Cast delegated votes'** - String get drepSummaryCastVotes; - - /// No description provided for @drepSummaryComment. - /// - /// In en, this message translates to: - /// **'Comment Functionality'** - String get drepSummaryComment; - - /// No description provided for @delete. - /// - /// In en, this message translates to: - /// **'Delete'** - String get delete; - - /// No description provided for @close. - /// - /// In en, this message translates to: - /// **'Close'** - String get close; - - /// No description provided for @notice. - /// - /// In en, this message translates to: - /// **'Notice'** - String get notice; - - /// No description provided for @yes. - /// - /// In en, this message translates to: - /// **'Yes'** - String get yes; - - /// No description provided for @no. - /// - /// In en, this message translates to: - /// **'No'** - String get no; - - /// No description provided for @total. - /// - /// In en, this message translates to: - /// **'Total'** - String get total; - - /// No description provided for @file. - /// - /// In en, this message translates to: - /// **'file'** - String get file; - - /// No description provided for @key. - /// - /// In en, this message translates to: - /// **'key'** - String get key; - - /// No description provided for @upload. - /// - /// In en, this message translates to: - /// **'Upload'** - String get upload; - - /// No description provided for @browse. - /// - /// In en, this message translates to: - /// **'browse'** - String get browse; - - /// An info on upload dialog - /// - /// In en, this message translates to: - /// **'Drop your {itemNameToUpload} here or '** - String uploadDropInfo(String itemNameToUpload); - - /// No description provided for @uploadProgressInfo. - /// - /// In en, this message translates to: - /// **'Upload in progress'** - String get uploadProgressInfo; - - /// A title on keychain upload dialog - /// - /// In en, this message translates to: - /// **'Upload Catalyst Keychain'** - String get uploadKeychainTitle; - - /// An info on keychain upload dialog - /// - /// In en, this message translates to: - /// **'Make sure it\'s a correct Catalyst keychain file.'** - String get uploadKeychainInfo; - - /// Refers to a light theme mode. - /// - /// In en, this message translates to: - /// **'Light'** - String get themeLight; - - /// Refers to a dark theme mode. - /// - /// In en, this message translates to: - /// **'Dark'** - String get themeDark; - - /// No description provided for @keychainDeletedDialogTitle. - /// - /// In en, this message translates to: - /// **'Catalyst keychain removed'** - String get keychainDeletedDialogTitle; - - /// No description provided for @keychainDeletedDialogSubtitle. - /// - /// In en, this message translates to: - /// **'Your Catalyst Keychain is removed successfully from this device.'** - String get keychainDeletedDialogSubtitle; - - /// No description provided for @keychainDeletedDialogInfo. - /// - /// In en, this message translates to: - /// **'We reverted this device to Catalyst first use.'** - String get keychainDeletedDialogInfo; - - /// No description provided for @registrationCompletedTitle. - /// - /// In en, this message translates to: - /// **'Catalyst account setup'** - String get registrationCompletedTitle; - - /// No description provided for @registrationCompletedSubtitle. - /// - /// In en, this message translates to: - /// **'Completed!'** - String get registrationCompletedSubtitle; - - /// No description provided for @registrationCompletedSummaryHeader. - /// - /// In en, this message translates to: - /// **'Summary'** - String get registrationCompletedSummaryHeader; - - /// No description provided for @registrationCompletedKeychainTitle. - /// - /// In en, this message translates to: - /// **'Catalyst Keychain created'** - String get registrationCompletedKeychainTitle; - - /// No description provided for @registrationCompletedKeychainInfo. - /// - /// In en, this message translates to: - /// **'You created a Catalyst Keychain, backed up its seed phrase and set an unlock password.'** - String get registrationCompletedKeychainInfo; - - /// No description provided for @registrationCompletedWalletTitle. - /// - /// In en, this message translates to: - /// **'Cardano {walletName} wallet selected'** - String registrationCompletedWalletTitle(String walletName); - - /// No description provided for @registrationCompletedWalletInfo. - /// - /// In en, this message translates to: - /// **'You selected your {walletName} wallet as primary wallet for your voting power.'** - String registrationCompletedWalletInfo(String walletName); - - /// No description provided for @registrationCompletedRolesTitle. - /// - /// In en, this message translates to: - /// **'Catalyst roles selected'** - String get registrationCompletedRolesTitle; - - /// No description provided for @registrationCompletedRolesInfo. - /// - /// In en, this message translates to: - /// **'You linked your Cardano wallet and selected Catalyst roles via a signed transaction.'** - String get registrationCompletedRolesInfo; - - /// No description provided for @registrationCompletedRoleRegistration. - /// - /// In en, this message translates to: - /// **'role registration'** - String get registrationCompletedRoleRegistration; - - /// No description provided for @registrationCompletedDiscoveryButton. - /// - /// In en, this message translates to: - /// **'Open Discovery Dashboard'** - String get registrationCompletedDiscoveryButton; - - /// No description provided for @registrationCompletedAccountButton. - /// - /// In en, this message translates to: - /// **'Review my account'** - String get registrationCompletedAccountButton; - - /// No description provided for @createKeychainSeedPhraseSubtitle. - /// - /// In en, this message translates to: - /// **'Write down your 12 Catalyst 
security words'** - String get createKeychainSeedPhraseSubtitle; - - /// No description provided for @createKeychainSeedPhraseBody. - /// - /// In en, this message translates to: - /// **'Make sure you create an offline backup of your recovery phrase as well.'** - String get createKeychainSeedPhraseBody; - - /// No description provided for @createKeychainSeedPhraseDownload. - /// - /// In en, this message translates to: - /// **'Download Catalyst key'** - String get createKeychainSeedPhraseDownload; - - /// No description provided for @createKeychainSeedPhraseStoreConfirmation. - /// - /// In en, this message translates to: - /// **'I have written down/downloaded my 12 words'** - String get createKeychainSeedPhraseStoreConfirmation; - - /// No description provided for @createKeychainSeedPhraseCheckInstructionsTitle. - /// - /// In en, this message translates to: - /// **'Check your Catalyst security keys'** - String get createKeychainSeedPhraseCheckInstructionsTitle; - - /// No description provided for @createKeychainSeedPhraseCheckInstructionsSubtitle. - /// - /// In en, this message translates to: - /// **'Next, we\'re going to make sure that you\'ve written down your words correctly. 

We don\'t save your seed phrase, so it\'s important 
to make sure you have it right. That\'s why we do this confirmation before continuing. 

It\'s also good practice to get familiar with using a seed phrase if you\'re new to crypto.'** - String get createKeychainSeedPhraseCheckInstructionsSubtitle; - - /// No description provided for @createKeychainSeedPhraseCheckSubtitle. - /// - /// In en, this message translates to: - /// **'Input your Catalyst security keys'** - String get createKeychainSeedPhraseCheckSubtitle; - - /// No description provided for @createKeychainSeedPhraseCheckBody. - /// - /// In en, this message translates to: - /// **'Select your 12 written down words in 
the correct order.'** - String get createKeychainSeedPhraseCheckBody; - - /// When user checks correct seed phrase words order he can upload it too - /// - /// In en, this message translates to: - /// **'Upload Catalyst Key'** - String get uploadCatalystKey; - - /// No description provided for @reset. - /// - /// In en, this message translates to: - /// **'Reset'** - String get reset; - - /// No description provided for @createKeychainSeedPhraseCheckSuccessTitle. - /// - /// In en, this message translates to: - /// **'Nice job! You\'ve successfully verified the seed phrase for your keychain.'** - String get createKeychainSeedPhraseCheckSuccessTitle; - - /// No description provided for @createKeychainSeedPhraseCheckSuccessSubtitle. - /// - /// In en, this message translates to: - /// **'Enter your seed phrase to recover your Catalyst Keychain on any device.

It\'s kinda like your email and password all rolled into one, so keep it somewhere safe!

In the next step we\'ll add a password to your Catalyst Keychain, so you can lock/unlock access to Voices.'** - String get createKeychainSeedPhraseCheckSuccessSubtitle; - - /// No description provided for @yourNextStep. - /// - /// In en, this message translates to: - /// **'Your next step'** - String get yourNextStep; - - /// No description provided for @createKeychainSeedPhraseCheckSuccessNextStep. - /// - /// In en, this message translates to: - /// **'Now let’s set your Unlock password for this device!'** - String get createKeychainSeedPhraseCheckSuccessNextStep; - - /// No description provided for @createKeychainUnlockPasswordInstructionsTitle. - /// - /// In en, this message translates to: - /// **'Set your Catalyst unlock password 
for this device'** - String get createKeychainUnlockPasswordInstructionsTitle; - - /// No description provided for @createKeychainUnlockPasswordInstructionsSubtitle. - /// - /// In en, this message translates to: - /// **'With over 300 trillion possible combinations, your 12 word seed phrase is great for keeping your account safe. 

But it can be a bit tedious to enter every single time you want to use the app. 

In this next step, you\'ll set your Unlock Password for your current device. It\'s like a shortcut for proving ownership of your Keychain. 

Whenever you recover your account for the first time on a new device, you\'ll need to use your Catalyst Keychain to get started. Every time after that, you can use your Unlock Password to quickly regain access.'** - String get createKeychainUnlockPasswordInstructionsSubtitle; - - /// No description provided for @createKeychainCreatedTitle. - /// - /// In en, this message translates to: - /// **'Congratulations your Catalyst 
Keychain is created!'** - String get createKeychainCreatedTitle; - - /// No description provided for @createKeychainCreatedNextStep. - /// - /// In en, this message translates to: - /// **'In the next step you write your Catalyst roles and 
account to the Cardano Mainnet.'** - String get createKeychainCreatedNextStep; - - /// No description provided for @createKeychainLinkWalletAndRoles. - /// - /// In en, this message translates to: - /// **'Link your Cardano Wallet & Roles'** - String get createKeychainLinkWalletAndRoles; - - /// No description provided for @registrationCreateKeychainStepGroup. - /// - /// In en, this message translates to: - /// **'Catalyst Keychain created'** - String get registrationCreateKeychainStepGroup; - - /// No description provided for @registrationLinkWalletStepGroup. - /// - /// In en, this message translates to: - /// **'Link Cardano Wallet & Roles'** - String get registrationLinkWalletStepGroup; - - /// No description provided for @registrationCompletedStepGroup. - /// - /// In en, this message translates to: - /// **'Catalyst account creation completed!'** - String get registrationCompletedStepGroup; - - /// No description provided for @createKeychainUnlockPasswordIntoSubtitle. - /// - /// In en, this message translates to: - /// **'Catalyst unlock password'** - String get createKeychainUnlockPasswordIntoSubtitle; - - /// No description provided for @createKeychainUnlockPasswordIntoBody. - /// - /// In en, this message translates to: - /// **'Please provide a password for your Catalyst Keychain.'** - String get createKeychainUnlockPasswordIntoBody; - - /// No description provided for @enterPassword. - /// - /// In en, this message translates to: - /// **'Enter password'** - String get enterPassword; - - /// No description provided for @confirmPassword. - /// - /// In en, this message translates to: - /// **'Confirm password'** - String get confirmPassword; - - /// No description provided for @xCharactersMinimum. - /// - /// In en, this message translates to: - /// **'{number} characters minimum length'** - String xCharactersMinimum(int number); - - /// When user confirms password but it does not match original one. - /// - /// In en, this message translates to: - /// **'Passwords do not match, please correct'** - String get passwordDoNotMatch; - - /// No description provided for @warning. - /// - /// In en, this message translates to: - /// **'Warning'** - String get warning; - - /// No description provided for @alert. - /// - /// In en, this message translates to: - /// **'Alert'** - String get alert; - - /// No description provided for @registrationExitConfirmDialogSubtitle. - /// - /// In en, this message translates to: - /// **'Account creation incomplete!'** - String get registrationExitConfirmDialogSubtitle; - - /// No description provided for @registrationExitConfirmDialogContent. - /// - /// In en, this message translates to: - /// **'If attempt to leave without creating your keychain - account creation will be incomplete. 

You are not able to login without 
completing your keychain.'** - String get registrationExitConfirmDialogContent; - - /// No description provided for @registrationExitConfirmDialogContinue. - /// - /// In en, this message translates to: - /// **'Continue keychain creation'** - String get registrationExitConfirmDialogContinue; - - /// No description provided for @cancelAnyways. - /// - /// In en, this message translates to: - /// **'Cancel anyway'** - String get cancelAnyways; - - /// No description provided for @recoverCatalystKeychain. - /// - /// In en, this message translates to: - /// **'Restore Catalyst keychain'** - String get recoverCatalystKeychain; - - /// No description provided for @recoverKeychainMethodsTitle. - /// - /// In en, this message translates to: - /// **'Restore your Catalyst Keychain'** - String get recoverKeychainMethodsTitle; - - /// No description provided for @recoverKeychainMethodsNoKeychainFound. - /// - /// In en, this message translates to: - /// **'No Catalyst Keychain found on this device.'** - String get recoverKeychainMethodsNoKeychainFound; - - /// No description provided for @recoverKeychainMethodsSubtitle. - /// - /// In en, this message translates to: - /// **'Not to worry, in the next step you can choose the recovery option that applies to you for this device!'** - String get recoverKeychainMethodsSubtitle; - - /// No description provided for @recoverKeychainMethodsListTitle. - /// - /// In en, this message translates to: - /// **'How do you want Restore your Catalyst Keychain?'** - String get recoverKeychainMethodsListTitle; - - /// No description provided for @recoverKeychainNonFound. - /// - /// In en, this message translates to: - /// **'No Catalyst Keychain found
on this device.'** - String get recoverKeychainNonFound; - - /// No description provided for @recoverKeychainFound. - /// - /// In en, this message translates to: - /// **'Keychain found! 
Please unlock your device.'** - String get recoverKeychainFound; - - /// No description provided for @seedPhrase12Words. - /// - /// In en, this message translates to: - /// **'12 security words'** - String get seedPhrase12Words; - - /// No description provided for @recoverySeedPhraseInstructionsTitle. - /// - /// In en, this message translates to: - /// **'Restore your Catalyst Keychain with 
your 12 security words.'** - String get recoverySeedPhraseInstructionsTitle; - - /// No description provided for @recoverySeedPhraseInstructionsSubtitle. - /// - /// In en, this message translates to: - /// **'Enter your security words in the correct order, and sign into your Catalyst account on a new device.'** - String get recoverySeedPhraseInstructionsSubtitle; - - /// No description provided for @recoverySeedPhraseInputTitle. - /// - /// In en, this message translates to: - /// **'Restore your Catalyst Keychain with 
your 12 security words'** - String get recoverySeedPhraseInputTitle; - - /// No description provided for @recoverySeedPhraseInputSubtitle. - /// - /// In en, this message translates to: - /// **'Enter each word of your Catalyst Key in the right order 
to bring your Catalyst account to this device.'** - String get recoverySeedPhraseInputSubtitle; - - /// No description provided for @recoveryAccountTitle. - /// - /// In en, this message translates to: - /// **'Catalyst account recovery'** - String get recoveryAccountTitle; - - /// No description provided for @recoveryAccountSuccessTitle. - /// - /// In en, this message translates to: - /// **'Keychain recovered successfully!'** - String get recoveryAccountSuccessTitle; - - /// No description provided for @recoveryAccountDetailsAction. - /// - /// In en, this message translates to: - /// **'Set unlock password for this device'** - String get recoveryAccountDetailsAction; - - /// No description provided for @recoveryUnlockPasswordInstructionsTitle. - /// - /// In en, this message translates to: - /// **'Set your Catalyst unlock password f
or this device'** - String get recoveryUnlockPasswordInstructionsTitle; - - /// No description provided for @recoveryUnlockPasswordInstructionsSubtitle. - /// - /// In en, this message translates to: - /// **'With over 300 trillion possible combinations, your 12 word seed phrase is great for keeping your account safe. 

But it can be a bit tedious to enter every single time you want to use the app. 

In this next step, you\'ll set your Unlock Password for your current device. It\'s like a shortcut for proving ownership of your Keychain. 

Whenever you recover your account for the first time on a new device, you\'ll need to use your Catalyst Keychain to get started. Every time after that, you can use your Unlock Password to quickly regain access.'** - String get recoveryUnlockPasswordInstructionsSubtitle; - - /// No description provided for @recoverDifferentKeychain. - /// - /// In en, this message translates to: - /// **'Restore a different keychain'** - String get recoverDifferentKeychain; - - /// The header label in unlock dialog. - /// - /// In en, this message translates to: - /// **'Unlock Catalyst'** - String get unlockDialogHeader; - - /// The title label in unlock dialog. - /// - /// In en, this message translates to: - /// **'Welcome back!'** - String get unlockDialogTitle; - - /// The content (body) in unlock dialog. - /// - /// In en, this message translates to: - /// **'Please enter your device specific unlock password\nto unlock Catalyst Voices.'** - String get unlockDialogContent; - - /// The hint for the unlock password field. - /// - /// In en, this message translates to: - /// **'Enter your Unlock password'** - String get unlockDialogHint; - - /// An error message shown below the password field when the password is incorrect. - /// - /// In en, this message translates to: - /// **'Password is incorrect, try again.'** - String get unlockDialogIncorrectPassword; - - /// The message shown when asking the user to login/unlock and the user wants to cancel the process. - /// - /// In en, this message translates to: - /// **'Continue as guest'** - String get continueAsGuest; - - /// The title shown in confirmation snackbar after unlocking the keychain. - /// - /// In en, this message translates to: - /// **'Catalyst unlocked!'** - String get unlockSnackbarTitle; - - /// The message shown below the title in confirmation snackbar after unlocking the keychain. - /// - /// In en, this message translates to: - /// **'You can now fully use the application.'** - String get unlockSnackbarMessage; - - /// The title shown in confirmation snackbar after locking the keychain. - /// - /// In en, this message translates to: - /// **'Catalyst locked'** - String get lockSnackbarTitle; - - /// The message shown below the title in confirmation snackbar after locking the keychain. - /// - /// In en, this message translates to: - /// **'Catalyst is now in guest/locked mode.'** - String get lockSnackbarMessage; - - /// No description provided for @recoverySuccessTitle. - /// - /// In en, this message translates to: - /// **'Congratulations your Catalyst 
Keychain is restored!'** - String get recoverySuccessTitle; - - /// No description provided for @recoverySuccessSubtitle. - /// - /// In en, this message translates to: - /// **'You have successfully restored your Catalyst Keychain, and unlocked Catalyst Voices on this device.'** - String get recoverySuccessSubtitle; - - /// No description provided for @recoverySuccessGoToDashboard. - /// - /// In en, this message translates to: - /// **'Jump into the Discovery space / Dashboard'** - String get recoverySuccessGoToDashboard; - - /// No description provided for @recoverySuccessGoAccount. - /// - /// In en, this message translates to: - /// **'Check my account'** - String get recoverySuccessGoAccount; - - /// No description provided for @recoveryExitConfirmDialogSubtitle. - /// - /// In en, this message translates to: - /// **'12 word keychain restoration incomplete'** - String get recoveryExitConfirmDialogSubtitle; - - /// No description provided for @recoveryExitConfirmDialogContent. - /// - /// In en, this message translates to: - /// **'Please continue your Catalyst Keychain restoration, if you cancel all input will be lost.'** - String get recoveryExitConfirmDialogContent; - - /// No description provided for @recoveryExitConfirmDialogContinue. - /// - /// In en, this message translates to: - /// **'Continue recovery process'** - String get recoveryExitConfirmDialogContinue; - - /// Refers to the action label for recovering the user account. - /// - /// In en, this message translates to: - /// **'Recover account'** - String get recoverAccount; - - /// No description provided for @uploadConfirmDialogSubtitle. - /// - /// In en, this message translates to: - /// **'SWITCH TO FILE UPLOAD'** - String get uploadConfirmDialogSubtitle; - - /// No description provided for @uploadConfirmDialogContent. - /// - /// In en, this message translates to: - /// **'Do you want to cancel manual input, and switch to Catalyst key upload?'** - String get uploadConfirmDialogContent; - - /// No description provided for @uploadConfirmDialogYesButton. - /// - /// In en, this message translates to: - /// **'Yes, switch to Catalyst key upload'** - String get uploadConfirmDialogYesButton; - - /// No description provided for @uploadConfirmDialogResumeButton. - /// - /// In en, this message translates to: - /// **'Resume manual inputs'** - String get uploadConfirmDialogResumeButton; - - /// No description provided for @incorrectUploadDialogSubtitle. - /// - /// In en, this message translates to: - /// **'CATALYST KEY INCORRECT'** - String get incorrectUploadDialogSubtitle; - - /// No description provided for @incorrectUploadDialogContent. - /// - /// In en, this message translates to: - /// **'The Catalyst keychain that you entered or uploaded is incorrect, please try again.'** - String get incorrectUploadDialogContent; - - /// No description provided for @incorrectUploadDialogTryAgainButton. - /// - /// In en, this message translates to: - /// **'Try again'** - String get incorrectUploadDialogTryAgainButton; - - /// No description provided for @finishAccountCreation. - /// - /// In en, this message translates to: - /// **'Finish account creation'** - String get finishAccountCreation; - - /// A button label to connect a different wallet in wallet detail panel. - /// - /// In en, this message translates to: - /// **'Connect a different wallet'** - String get connectDifferentWallet; - - /// A button label to review the registration transaction in wallet detail panel. - /// - /// In en, this message translates to: - /// **'Review registration transaction'** - String get reviewRegistrationTransaction; -} - -class _VoicesLocalizationsDelegate extends LocalizationsDelegate { - const _VoicesLocalizationsDelegate(); - - @override - Future load(Locale locale) { - return lookupVoicesLocalizations(locale); - } - - @override - bool isSupported(Locale locale) => ['en', 'es'].contains(locale.languageCode); - - @override - bool shouldReload(_VoicesLocalizationsDelegate old) => false; -} - -Future lookupVoicesLocalizations(Locale locale) { - - - // Lookup logic when only language code is specified. - switch (locale.languageCode) { - case 'en': return catalyst_voices_localizations_en.loadLibrary().then((dynamic _) => catalyst_voices_localizations_en.VoicesLocalizationsEn()); - case 'es': return catalyst_voices_localizations_es.loadLibrary().then((dynamic _) => catalyst_voices_localizations_es.VoicesLocalizationsEs()); - } - - throw FlutterError( - 'VoicesLocalizations.delegate failed to load unsupported locale "$locale". This is likely ' - 'an issue with the localizations generation tool. Please file an issue ' - 'on GitHub with a reproducible sample app and the gen-l10n configuration ' - 'that was used.' - ); -} diff --git a/catalyst_voices/packages/internal/catalyst_voices_localization/lib/generated/catalyst_voices_localizations_en.dart b/catalyst_voices/packages/internal/catalyst_voices_localization/lib/generated/catalyst_voices_localizations_en.dart deleted file mode 100644 index 5cd6739f26a..00000000000 --- a/catalyst_voices/packages/internal/catalyst_voices_localization/lib/generated/catalyst_voices_localizations_en.dart +++ /dev/null @@ -1,1003 +0,0 @@ -import 'package:intl/intl.dart' as intl; - -import 'catalyst_voices_localizations.dart'; - -// ignore_for_file: type=lint - -/// The translations for English (`en`). -class VoicesLocalizationsEn extends VoicesLocalizations { - VoicesLocalizationsEn([String locale = 'en']) : super(locale); - - @override - String get emailLabelText => 'Email'; - - @override - String get emailHintText => 'mail@example.com'; - - @override - String get emailErrorText => 'mail@example.com'; - - @override - String get cancelButtonText => 'Cancel'; - - @override - String get editButtonText => 'Edit'; - - @override - String get headerTooltipText => 'Header'; - - @override - String get placeholderRichText => 'Start writing your text...'; - - @override - String get supportingTextLabelText => 'Supporting text'; - - @override - String get saveButtonText => 'Save'; - - @override - String get passwordLabelText => 'Password'; - - @override - String get passwordHintText => 'My1SecretPassword'; - - @override - String get passwordErrorText => 'Password must be at least 8 characters long'; - - @override - String get loginTitleText => 'Login'; - - @override - String get loginButtonText => 'Login'; - - @override - String get loginScreenErrorMessage => 'Wrong credentials'; - - @override - String get homeScreenText => 'Catalyst Voices'; - - @override - String get comingSoonSubtitle => 'Voices'; - - @override - String get comingSoonTitle1 => 'Coming'; - - @override - String get comingSoonTitle2 => 'soon'; - - @override - String get comingSoonDescription => 'Project Catalyst is the world\'s largest decentralized innovation engine for solving real-world challenges.'; - - @override - String get connectingStatusLabelText => 're-connecting'; - - @override - String get finishAccountButtonLabelText => 'Finish account'; - - @override - String get getStartedButtonLabelText => 'Get Started'; - - @override - String get unlockButtonLabelText => 'Unlock'; - - @override - String get userProfileGuestLabelText => 'Guest'; - - @override - String get searchButtonLabelText => '[cmd=K]'; - - @override - String get snackbarInfoLabelText => 'Info'; - - @override - String get snackbarInfoMessageText => 'This is an info message!'; - - @override - String get snackbarSuccessLabelText => 'Success'; - - @override - String get snackbarSuccessMessageText => 'This is a success message!'; - - @override - String get snackbarWarningLabelText => 'Warning'; - - @override - String get snackbarWarningMessageText => 'This is a warning message!'; - - @override - String get snackbarErrorLabelText => 'Error'; - - @override - String get snackbarErrorMessageText => 'This is an error message!'; - - @override - String get snackbarRefreshButtonText => 'Refresh'; - - @override - String get snackbarMoreButtonText => 'Learn more'; - - @override - String get snackbarOkButtonText => 'Ok'; - - @override - String seedPhraseSlotNr(int nr) { - return 'Slot $nr'; - } - - @override - String get proposalStatusReady => 'Ready'; - - @override - String get proposalStatusDraft => 'Draft'; - - @override - String get proposalStatusInProgress => 'In progress'; - - @override - String get proposalStatusPrivate => 'Private'; - - @override - String get proposalStatusLive => 'LIVE'; - - @override - String get proposalStatusCompleted => 'Completed'; - - @override - String get proposalStatusOpen => 'Open'; - - @override - String get fundedProposal => 'Funded proposal'; - - @override - String get publishedProposal => 'Published proposal'; - - @override - String fundedProposalDate(DateTime date) { - final intl.DateFormat dateDateFormat = intl.DateFormat.yMMMMd(localeName); - final String dateString = dateDateFormat.format(date); - - return 'Funded $dateString'; - } - - @override - String lastUpdateDate(String date) { - return 'Last update: $date.'; - } - - @override - String get fundsRequested => 'Funds requested'; - - @override - String noOfComments(num count) { - final intl.NumberFormat countNumberFormat = intl.NumberFormat.compact( - locale: localeName, - - ); - final String countString = countNumberFormat.format(count); - - String _temp0 = intl.Intl.pluralLogic( - count, - locale: localeName, - other: 'comments', - one: 'comment', - zero: 'comments', - ); - return '$countString $_temp0'; - } - - @override - String noOfSegmentsCompleted(num completed, num total, num percentage) { - final intl.NumberFormat completedNumberFormat = intl.NumberFormat.compact( - locale: localeName, - - ); - final String completedString = completedNumberFormat.format(completed); - final intl.NumberFormat totalNumberFormat = intl.NumberFormat.compact( - locale: localeName, - - ); - final String totalString = totalNumberFormat.format(total); - final intl.NumberFormat percentageNumberFormat = intl.NumberFormat.compact( - locale: localeName, - - ); - final String percentageString = percentageNumberFormat.format(percentage); - - String _temp0 = intl.Intl.pluralLogic( - total, - locale: localeName, - other: 'segments', - one: 'segment', - zero: 'segments', - ); - return '$completedString of $totalString ($percentageString%) $_temp0 completed'; - } - - @override - String get today => 'Today'; - - @override - String get yesterday => 'Yesterday'; - - @override - String get twoDaysAgo => '2 days ago'; - - @override - String get tomorrow => 'Tomorrow'; - - @override - String get activeVotingRound => 'Active voting round 14'; - - @override - String noOfAllProposals(int count) { - return 'All proposals ($count)'; - } - - @override - String get favorites => 'Favorites'; - - @override - String get treasuryCampaignBuilder => 'Campaign builder'; - - @override - String get treasuryCampaignBuilderSegments => 'Segments'; - - @override - String get treasuryCampaignSetup => 'Setup Campaign'; - - @override - String get treasuryCampaignTitle => 'Campaign title'; - - @override - String get stepEdit => 'Edit'; - - @override - String get workspaceProposalNavigation => 'Proposal navigation'; - - @override - String get workspaceProposalNavigationSegments => 'Segments'; - - @override - String get workspaceProposalSetup => 'Proposal setup'; - - @override - String get drawerSpaceTreasury => 'Treasury'; - - @override - String get drawerSpaceDiscovery => 'Discovery'; - - @override - String get drawerSpaceWorkspace => 'Workspace'; - - @override - String get drawerSpaceVoting => 'Voting'; - - @override - String get drawerSpaceFundedProjects => 'Funded projects'; - - @override - String get fundedProjectSpace => 'Funded project space'; - - @override - String noOfFundedProposals(int count) { - return 'Funded proposals ($count)'; - } - - @override - String get followed => 'Followed'; - - @override - String get overallSpacesSearchBrands => 'Search Brands'; - - @override - String get overallSpacesTasks => 'Tasks'; - - @override - String get voicesUpdateReady => 'Voices update ready'; - - @override - String get clickToRestart => 'Click to restart'; - - @override - String get spaceTreasuryName => 'Treasury space'; - - @override - String get spaceDiscoveryName => 'Discovery space'; - - @override - String get spaceWorkspaceName => 'Workspace'; - - @override - String get spaceVotingName => 'Voting space'; - - @override - String get spaceFundedProjects => 'Funded project space'; - - @override - String get lock => 'Lock'; - - @override - String get unlock => 'Unlock'; - - @override - String get getStarted => 'Get Started'; - - @override - String get guest => 'Guest'; - - @override - String get visitor => 'Visitor'; - - @override - String get noConnectionBannerRefreshButtonText => 'Refresh'; - - @override - String get noConnectionBannerTitle => 'No internet connection'; - - @override - String get noConnectionBannerDescription => 'Your internet is playing hide and seek. Check your internet connection, or try again in a moment.'; - - @override - String get weakPasswordStrength => 'Weak password strength'; - - @override - String get normalPasswordStrength => 'Normal password strength'; - - @override - String get goodPasswordStrength => 'Good password strength'; - - @override - String get chooseCardanoWallet => 'Choose Cardano Wallet'; - - @override - String get chooseOtherWallet => 'Choose other wallet'; - - @override - String get learnMore => 'Learn More'; - - @override - String get walletLinkHeader => 'Link keys to your Catalyst Keychain'; - - @override - String get walletLinkWalletSubheader => 'Link your Cardano wallet'; - - @override - String get walletLinkRolesSubheader => 'Select your Catalyst roles'; - - @override - String get walletLinkTransactionSubheader => 'Sign your Catalyst roles to the\nCardano mainnet'; - - @override - String get walletLinkIntroTitle => 'Link Cardano Wallet & Catalyst Roles to you Catalyst Keychain.'; - - @override - String get walletLinkIntroContent => 'You\'re almost there! This is the final and most important step in your account setup.\n\nWe\'re going to link a Cardano Wallet to your Catalyst Keychain, so you can start collecting Role Keys.\n\nRole Keys allow you to enter new spaces, discover new ways to participate, and unlock new ways to earn rewards.\n\nWe\'ll start with your Voter Key by default. You can decide to add a Proposer Key and Drep key if you want, or you can always add them later.'; - - @override - String get walletLinkSelectWalletTitle => 'Select the Cardano wallet to link\nto your Catalyst Keychain.'; - - @override - String get walletLinkSelectWalletContent => 'To complete this action, you\'ll submit a signed transaction to Cardano. There will be an ADA transaction fee.'; - - @override - String get walletLinkWalletDetailsTitle => 'Cardano wallet detection'; - - @override - String walletLinkWalletDetailsContent(String wallet) { - return '$wallet connected successfully!'; - } - - @override - String get walletLinkWalletDetailsNotice => 'Wallet and role registrations require a minimal transaction fee. You can setup your default dApp connector wallet in your browser extension settings.'; - - @override - String get walletLinkWalletDetailsNoticeTopUp => 'Top up ADA'; - - @override - String get walletLinkWalletDetailsNoticeTopUpLink => 'Link to top-up provider'; - - @override - String get walletLinkTransactionTitle => 'Let\'s make sure everything looks right.'; - - @override - String get walletLinkTransactionAccountCompletion => 'Account completion for Catalyst'; - - @override - String walletLinkTransactionLinkItem(String wallet) { - return '1 Link $wallet to Catalyst Keychain'; - } - - @override - String get walletLinkTransactionPositiveSmallPrint => 'Positive small print'; - - @override - String get walletLinkTransactionPositiveSmallPrintItem1 => 'Your registration is a one time event, cost will not renew periodically.'; - - @override - String get walletLinkTransactionPositiveSmallPrintItem2 => 'Your registrations can be found under your account profile after completion.'; - - @override - String get walletLinkTransactionPositiveSmallPrintItem3 => 'All registration fees go into the Cardano Treasury.'; - - @override - String get walletLinkTransactionSign => 'Sign transaction with wallet'; - - @override - String get walletLinkTransactionChangeRoles => 'Change role setup'; - - @override - String walletLinkTransactionRoleItem(String role) { - return '1 $role registration to Catalyst Keychain'; - } - - @override - String get registrationTransactionFailed => 'Transaction failed'; - - @override - String get registrationInsufficientBalance => 'Insufficient balance, please top up your wallet.'; - - @override - String get registrationSeedPhraseNotFound => 'Seed phrase was not found. Make sure correct words are correct.'; - - @override - String get registrationUnlockPasswordNotFound => 'Password was not found. Make sure valid password was created.'; - - @override - String get registrationWalletNotFound => 'Wallet not found'; - - @override - String get walletLinkRoleChooserTitle => 'How do you want to participate in Catalyst?'; - - @override - String get walletLinkRoleChooserContent => 'In Catalyst you can take on different roles, learn more below and choose your additional roles now.'; - - @override - String get walletLinkRoleSummaryTitle => 'Is this your correct Catalyst role setup?'; - - @override - String get walletLinkRoleSummaryContent1 => 'You would like to register '; - - @override - String walletLinkRoleSummaryContent2(num count) { - final intl.NumberFormat countNumberFormat = intl.NumberFormat.compact( - locale: localeName, - - ); - final String countString = countNumberFormat.format(count); - - String _temp0 = intl.Intl.pluralLogic( - count, - locale: localeName, - other: 'roles', - one: 'role', - zero: 'roles', - ); - return '$countString active $_temp0'; - } - - @override - String get walletLinkRoleSummaryContent3 => ' in Catalyst.'; - - @override - String get seeAllSupportedWallets => 'See all supported wallets'; - - @override - String get walletDetectionSummary => 'Wallet detection summary'; - - @override - String get walletBalance => 'Wallet balance'; - - @override - String get walletAddress => 'Wallet address'; - - @override - String get accountCreationCreate => 'Create a new 
Catalyst Keychain'; - - @override - String get accountCreationRecover => 'Recover your
Catalyst Keychain'; - - @override - String get accountCreationOnThisDevice => 'On this device'; - - @override - String get accountCreationGetStartedTitle => 'Welcome to Catalyst'; - - @override - String get accountCreationGetStatedDesc => 'If you already have a Catalyst keychain you can restore it on this device, or you can create a new Catalyst Keychain.'; - - @override - String get accountCreationGetStatedWhatNext => 'What do you want to do?'; - - @override - String get myAccountProfileKeychain => 'My Account / Profile & Keychain'; - - @override - String get yourCatalystKeychainAndRoleRegistration => 'Your Catalyst keychain & role registration'; - - @override - String get profileAndKeychain => 'Profile & Keychain'; - - @override - String get removeKeychain => 'Remove Keychain'; - - @override - String get walletConnected => 'Wallet connected'; - - @override - String get currentRoleRegistrations => 'Current Role registrations'; - - @override - String get voter => 'Voter'; - - @override - String get proposer => 'Proposer'; - - @override - String get drep => 'Drep'; - - @override - String get defaultRole => 'Default'; - - @override - String get catalystKeychain => 'Catalyst Keychain'; - - @override - String get accountCreationSplashTitle => 'Create your Catalyst Keychain'; - - @override - String get accountCreationSplashMessage => 'Your keychain is your ticket to participate in 
distributed innovation on the global stage. 

Once you have it, you\'ll be able to enter different spaces, discover awesome ideas, and share your feedback to hep improve ideas. 

As you add new keys to your keychain, you\'ll be able to enter new spaces, unlock new rewards opportunities, and have your voice heard in community decisions.'; - - @override - String get accountCreationSplashNextButton => 'Create your Keychain now'; - - @override - String get accountInstructionsTitle => 'Great! Your Catalyst Keychain 
has been created.'; - - @override - String get accountInstructionsMessage => 'On the next screen, you\'re going to see 12 words. 
This is called your \"seed phrase\". 

It\'s like a super secure password that only you know, 
that allows you to prove ownership of your keychain. 

You\'ll use it to login and recover your account on 
different devices, so be sure to put it somewhere safe!\n\nYou need to write this seed phrase down with pen and paper, so get this ready.'; - - @override - String get next => 'Next'; - - @override - String get back => 'Back'; - - @override - String get retry => 'Retry'; - - @override - String get somethingWentWrong => 'Something went wrong.'; - - @override - String get noWalletFound => 'No wallet found.'; - - @override - String get deleteKeychainDialogTitle => 'Delete Keychain?'; - - @override - String get deleteKeychainDialogSubtitle => 'Are you sure you wants to delete your\nCatalyst Keychain from this device?'; - - @override - String get deleteKeychainDialogWarning => 'Make sure you have a working Catalyst 12-word seedphrase!'; - - @override - String get deleteKeychainDialogWarningInfo => 'Your Catalyst account will be removed,\nthis action cannot be undone!'; - - @override - String get deleteKeychainDialogTypingInfo => 'To avoid mistakes, please type ‘Remove Keychain’ below.'; - - @override - String get deleteKeychainDialogInputLabel => 'Confirm removal'; - - @override - String get deleteKeychainDialogErrorText => 'Error. Please type \'Remove Keychain\' to remove your account from this device.'; - - @override - String get deleteKeychainDialogRemovingPhrase => 'Remove Keychain'; - - @override - String get accountRoleDialogTitle => 'Learn about Catalyst Roles'; - - @override - String get accountRoleDialogButton => 'Continue Role setup'; - - @override - String accountRoleDialogRoleSummaryTitle(String role) { - return '$role role summary'; - } - - @override - String get voterVerboseName => 'Treasury guardian'; - - @override - String get proposerVerboseName => 'Main proposer'; - - @override - String get drepVerboseName => 'Community expert'; - - @override - String get voterDescription => 'The Voters are the guardians of Cardano treasury. They vote in projects for the growth of the Cardano Ecosystem.'; - - @override - String get proposerDescription => 'The Main Proposers are the Innovators in Project Catalyst, they are the shapers of the future.'; - - @override - String get drepDescription => 'The dRep has an Expert Role in the Cardano/Catalyst as people can delegate their vote to Cardano Experts.'; - - @override - String get voterSummarySelectFavorites => 'Select favorites'; - - @override - String get voterSummaryComment => 'Comment/Vote on Proposals'; - - @override - String get voterSummaryCastVotes => 'Cast your votes'; - - @override - String get voterSummaryVoterRewards => 'Voter rewards'; - - @override - String get proposerSummaryWriteEdit => 'Write/edit functionality'; - - @override - String get proposerSummarySubmitToFund => 'Rights to Submit to Fund'; - - @override - String get proposerSummaryInviteTeamMembers => 'Invite Team Members'; - - @override - String get proposerSummaryComment => 'Comment functionality'; - - @override - String get drepSummaryDelegatedVotes => 'Delegated Votes'; - - @override - String get drepSummaryRewards => 'dRep rewards'; - - @override - String get drepSummaryCastVotes => 'Cast delegated votes'; - - @override - String get drepSummaryComment => 'Comment Functionality'; - - @override - String get delete => 'Delete'; - - @override - String get close => 'Close'; - - @override - String get notice => 'Notice'; - - @override - String get yes => 'Yes'; - - @override - String get no => 'No'; - - @override - String get total => 'Total'; - - @override - String get file => 'file'; - - @override - String get key => 'key'; - - @override - String get upload => 'Upload'; - - @override - String get browse => 'browse'; - - @override - String uploadDropInfo(String itemNameToUpload) { - return 'Drop your $itemNameToUpload here or '; - } - - @override - String get uploadProgressInfo => 'Upload in progress'; - - @override - String get uploadKeychainTitle => 'Upload Catalyst Keychain'; - - @override - String get uploadKeychainInfo => 'Make sure it\'s a correct Catalyst keychain file.'; - - @override - String get themeLight => 'Light'; - - @override - String get themeDark => 'Dark'; - - @override - String get keychainDeletedDialogTitle => 'Catalyst keychain removed'; - - @override - String get keychainDeletedDialogSubtitle => 'Your Catalyst Keychain is removed successfully from this device.'; - - @override - String get keychainDeletedDialogInfo => 'We reverted this device to Catalyst first use.'; - - @override - String get registrationCompletedTitle => 'Catalyst account setup'; - - @override - String get registrationCompletedSubtitle => 'Completed!'; - - @override - String get registrationCompletedSummaryHeader => 'Summary'; - - @override - String get registrationCompletedKeychainTitle => 'Catalyst Keychain created'; - - @override - String get registrationCompletedKeychainInfo => 'You created a Catalyst Keychain, backed up its seed phrase and set an unlock password.'; - - @override - String registrationCompletedWalletTitle(String walletName) { - return 'Cardano $walletName wallet selected'; - } - - @override - String registrationCompletedWalletInfo(String walletName) { - return 'You selected your $walletName wallet as primary wallet for your voting power.'; - } - - @override - String get registrationCompletedRolesTitle => 'Catalyst roles selected'; - - @override - String get registrationCompletedRolesInfo => 'You linked your Cardano wallet and selected Catalyst roles via a signed transaction.'; - - @override - String get registrationCompletedRoleRegistration => 'role registration'; - - @override - String get registrationCompletedDiscoveryButton => 'Open Discovery Dashboard'; - - @override - String get registrationCompletedAccountButton => 'Review my account'; - - @override - String get createKeychainSeedPhraseSubtitle => 'Write down your 12 Catalyst 
security words'; - - @override - String get createKeychainSeedPhraseBody => 'Make sure you create an offline backup of your recovery phrase as well.'; - - @override - String get createKeychainSeedPhraseDownload => 'Download Catalyst key'; - - @override - String get createKeychainSeedPhraseStoreConfirmation => 'I have written down/downloaded my 12 words'; - - @override - String get createKeychainSeedPhraseCheckInstructionsTitle => 'Check your Catalyst security keys'; - - @override - String get createKeychainSeedPhraseCheckInstructionsSubtitle => 'Next, we\'re going to make sure that you\'ve written down your words correctly. 

We don\'t save your seed phrase, so it\'s important 
to make sure you have it right. That\'s why we do this confirmation before continuing. 

It\'s also good practice to get familiar with using a seed phrase if you\'re new to crypto.'; - - @override - String get createKeychainSeedPhraseCheckSubtitle => 'Input your Catalyst security keys'; - - @override - String get createKeychainSeedPhraseCheckBody => 'Select your 12 written down words in 
the correct order.'; - - @override - String get uploadCatalystKey => 'Upload Catalyst Key'; - - @override - String get reset => 'Reset'; - - @override - String get createKeychainSeedPhraseCheckSuccessTitle => 'Nice job! You\'ve successfully verified the seed phrase for your keychain.'; - - @override - String get createKeychainSeedPhraseCheckSuccessSubtitle => 'Enter your seed phrase to recover your Catalyst Keychain on any device.

It\'s kinda like your email and password all rolled into one, so keep it somewhere safe!

In the next step we\'ll add a password to your Catalyst Keychain, so you can lock/unlock access to Voices.'; - - @override - String get yourNextStep => 'Your next step'; - - @override - String get createKeychainSeedPhraseCheckSuccessNextStep => 'Now let’s set your Unlock password for this device!'; - - @override - String get createKeychainUnlockPasswordInstructionsTitle => 'Set your Catalyst unlock password 
for this device'; - - @override - String get createKeychainUnlockPasswordInstructionsSubtitle => 'With over 300 trillion possible combinations, your 12 word seed phrase is great for keeping your account safe. 

But it can be a bit tedious to enter every single time you want to use the app. 

In this next step, you\'ll set your Unlock Password for your current device. It\'s like a shortcut for proving ownership of your Keychain. 

Whenever you recover your account for the first time on a new device, you\'ll need to use your Catalyst Keychain to get started. Every time after that, you can use your Unlock Password to quickly regain access.'; - - @override - String get createKeychainCreatedTitle => 'Congratulations your Catalyst 
Keychain is created!'; - - @override - String get createKeychainCreatedNextStep => 'In the next step you write your Catalyst roles and 
account to the Cardano Mainnet.'; - - @override - String get createKeychainLinkWalletAndRoles => 'Link your Cardano Wallet & Roles'; - - @override - String get registrationCreateKeychainStepGroup => 'Catalyst Keychain created'; - - @override - String get registrationLinkWalletStepGroup => 'Link Cardano Wallet & Roles'; - - @override - String get registrationCompletedStepGroup => 'Catalyst account creation completed!'; - - @override - String get createKeychainUnlockPasswordIntoSubtitle => 'Catalyst unlock password'; - - @override - String get createKeychainUnlockPasswordIntoBody => 'Please provide a password for your Catalyst Keychain.'; - - @override - String get enterPassword => 'Enter password'; - - @override - String get confirmPassword => 'Confirm password'; - - @override - String xCharactersMinimum(int number) { - return '$number characters minimum length'; - } - - @override - String get passwordDoNotMatch => 'Passwords do not match, please correct'; - - @override - String get warning => 'Warning'; - - @override - String get alert => 'Alert'; - - @override - String get registrationExitConfirmDialogSubtitle => 'Account creation incomplete!'; - - @override - String get registrationExitConfirmDialogContent => 'If attempt to leave without creating your keychain - account creation will be incomplete. 

You are not able to login without 
completing your keychain.'; - - @override - String get registrationExitConfirmDialogContinue => 'Continue keychain creation'; - - @override - String get cancelAnyways => 'Cancel anyway'; - - @override - String get recoverCatalystKeychain => 'Restore Catalyst keychain'; - - @override - String get recoverKeychainMethodsTitle => 'Restore your Catalyst Keychain'; - - @override - String get recoverKeychainMethodsNoKeychainFound => 'No Catalyst Keychain found on this device.'; - - @override - String get recoverKeychainMethodsSubtitle => 'Not to worry, in the next step you can choose the recovery option that applies to you for this device!'; - - @override - String get recoverKeychainMethodsListTitle => 'How do you want Restore your Catalyst Keychain?'; - - @override - String get recoverKeychainNonFound => 'No Catalyst Keychain found
on this device.'; - - @override - String get recoverKeychainFound => 'Keychain found! 
Please unlock your device.'; - - @override - String get seedPhrase12Words => '12 security words'; - - @override - String get recoverySeedPhraseInstructionsTitle => 'Restore your Catalyst Keychain with 
your 12 security words.'; - - @override - String get recoverySeedPhraseInstructionsSubtitle => 'Enter your security words in the correct order, and sign into your Catalyst account on a new device.'; - - @override - String get recoverySeedPhraseInputTitle => 'Restore your Catalyst Keychain with 
your 12 security words'; - - @override - String get recoverySeedPhraseInputSubtitle => 'Enter each word of your Catalyst Key in the right order 
to bring your Catalyst account to this device.'; - - @override - String get recoveryAccountTitle => 'Catalyst account recovery'; - - @override - String get recoveryAccountSuccessTitle => 'Keychain recovered successfully!'; - - @override - String get recoveryAccountDetailsAction => 'Set unlock password for this device'; - - @override - String get recoveryUnlockPasswordInstructionsTitle => 'Set your Catalyst unlock password f
or this device'; - - @override - String get recoveryUnlockPasswordInstructionsSubtitle => 'With over 300 trillion possible combinations, your 12 word seed phrase is great for keeping your account safe. 

But it can be a bit tedious to enter every single time you want to use the app. 

In this next step, you\'ll set your Unlock Password for your current device. It\'s like a shortcut for proving ownership of your Keychain. 

Whenever you recover your account for the first time on a new device, you\'ll need to use your Catalyst Keychain to get started. Every time after that, you can use your Unlock Password to quickly regain access.'; - - @override - String get recoverDifferentKeychain => 'Restore a different keychain'; - - @override - String get unlockDialogHeader => 'Unlock Catalyst'; - - @override - String get unlockDialogTitle => 'Welcome back!'; - - @override - String get unlockDialogContent => 'Please enter your device specific unlock password\nto unlock Catalyst Voices.'; - - @override - String get unlockDialogHint => 'Enter your Unlock password'; - - @override - String get unlockDialogIncorrectPassword => 'Password is incorrect, try again.'; - - @override - String get continueAsGuest => 'Continue as guest'; - - @override - String get unlockSnackbarTitle => 'Catalyst unlocked!'; - - @override - String get unlockSnackbarMessage => 'You can now fully use the application.'; - - @override - String get lockSnackbarTitle => 'Catalyst locked'; - - @override - String get lockSnackbarMessage => 'Catalyst is now in guest/locked mode.'; - - @override - String get recoverySuccessTitle => 'Congratulations your Catalyst 
Keychain is restored!'; - - @override - String get recoverySuccessSubtitle => 'You have successfully restored your Catalyst Keychain, and unlocked Catalyst Voices on this device.'; - - @override - String get recoverySuccessGoToDashboard => 'Jump into the Discovery space / Dashboard'; - - @override - String get recoverySuccessGoAccount => 'Check my account'; - - @override - String get recoveryExitConfirmDialogSubtitle => '12 word keychain restoration incomplete'; - - @override - String get recoveryExitConfirmDialogContent => 'Please continue your Catalyst Keychain restoration, if you cancel all input will be lost.'; - - @override - String get recoveryExitConfirmDialogContinue => 'Continue recovery process'; - - @override - String get recoverAccount => 'Recover account'; - - @override - String get uploadConfirmDialogSubtitle => 'SWITCH TO FILE UPLOAD'; - - @override - String get uploadConfirmDialogContent => 'Do you want to cancel manual input, and switch to Catalyst key upload?'; - - @override - String get uploadConfirmDialogYesButton => 'Yes, switch to Catalyst key upload'; - - @override - String get uploadConfirmDialogResumeButton => 'Resume manual inputs'; - - @override - String get incorrectUploadDialogSubtitle => 'CATALYST KEY INCORRECT'; - - @override - String get incorrectUploadDialogContent => 'The Catalyst keychain that you entered or uploaded is incorrect, please try again.'; - - @override - String get incorrectUploadDialogTryAgainButton => 'Try again'; - - @override - String get finishAccountCreation => 'Finish account creation'; - - @override - String get connectDifferentWallet => 'Connect a different wallet'; - - @override - String get reviewRegistrationTransaction => 'Review registration transaction'; -} diff --git a/catalyst_voices/packages/internal/catalyst_voices_localization/lib/generated/catalyst_voices_localizations_es.dart b/catalyst_voices/packages/internal/catalyst_voices_localization/lib/generated/catalyst_voices_localizations_es.dart deleted file mode 100644 index 4384ef7847c..00000000000 --- a/catalyst_voices/packages/internal/catalyst_voices_localization/lib/generated/catalyst_voices_localizations_es.dart +++ /dev/null @@ -1,1003 +0,0 @@ -import 'package:intl/intl.dart' as intl; - -import 'catalyst_voices_localizations.dart'; - -// ignore_for_file: type=lint - -/// The translations for Spanish Castilian (`es`). -class VoicesLocalizationsEs extends VoicesLocalizations { - VoicesLocalizationsEs([String locale = 'es']) : super(locale); - - @override - String get emailLabelText => 'Email'; - - @override - String get emailHintText => 'mail@example.com'; - - @override - String get emailErrorText => 'mail@example.com'; - - @override - String get cancelButtonText => 'Cancel'; - - @override - String get editButtonText => 'Edit'; - - @override - String get headerTooltipText => 'Header'; - - @override - String get placeholderRichText => 'Start writing your text...'; - - @override - String get supportingTextLabelText => 'Supporting text'; - - @override - String get saveButtonText => 'Save'; - - @override - String get passwordLabelText => 'Contraseña'; - - @override - String get passwordHintText => 'Mi1ContraseñaSecreta'; - - @override - String get passwordErrorText => 'La contraseña debe tener al menos 8 caracteres'; - - @override - String get loginTitleText => 'Acceso'; - - @override - String get loginButtonText => 'Acceso'; - - @override - String get loginScreenErrorMessage => 'Credenciales incorrectas'; - - @override - String get homeScreenText => 'Catalyst Voices'; - - @override - String get comingSoonSubtitle => 'Voices'; - - @override - String get comingSoonTitle1 => 'Coming'; - - @override - String get comingSoonTitle2 => 'soon'; - - @override - String get comingSoonDescription => 'Project Catalyst is the world\'s largest decentralized innovation engine for solving real-world challenges.'; - - @override - String get connectingStatusLabelText => 're-connecting'; - - @override - String get finishAccountButtonLabelText => 'Finish account'; - - @override - String get getStartedButtonLabelText => 'Get Started'; - - @override - String get unlockButtonLabelText => 'Unlock'; - - @override - String get userProfileGuestLabelText => 'Guest'; - - @override - String get searchButtonLabelText => '[cmd=K]'; - - @override - String get snackbarInfoLabelText => 'Info'; - - @override - String get snackbarInfoMessageText => 'This is an info message!'; - - @override - String get snackbarSuccessLabelText => 'Success'; - - @override - String get snackbarSuccessMessageText => 'This is a success message!'; - - @override - String get snackbarWarningLabelText => 'Warning'; - - @override - String get snackbarWarningMessageText => 'This is a warning message!'; - - @override - String get snackbarErrorLabelText => 'Error'; - - @override - String get snackbarErrorMessageText => 'This is an error message!'; - - @override - String get snackbarRefreshButtonText => 'Refresh'; - - @override - String get snackbarMoreButtonText => 'Learn more'; - - @override - String get snackbarOkButtonText => 'Ok'; - - @override - String seedPhraseSlotNr(int nr) { - return 'Slot $nr'; - } - - @override - String get proposalStatusReady => 'Ready'; - - @override - String get proposalStatusDraft => 'Draft'; - - @override - String get proposalStatusInProgress => 'In progress'; - - @override - String get proposalStatusPrivate => 'Private'; - - @override - String get proposalStatusLive => 'LIVE'; - - @override - String get proposalStatusCompleted => 'Completed'; - - @override - String get proposalStatusOpen => 'Open'; - - @override - String get fundedProposal => 'Funded proposal'; - - @override - String get publishedProposal => 'Published proposal'; - - @override - String fundedProposalDate(DateTime date) { - final intl.DateFormat dateDateFormat = intl.DateFormat.yMMMMd(localeName); - final String dateString = dateDateFormat.format(date); - - return 'Funded $dateString'; - } - - @override - String lastUpdateDate(String date) { - return 'Last update: $date.'; - } - - @override - String get fundsRequested => 'Funds requested'; - - @override - String noOfComments(num count) { - final intl.NumberFormat countNumberFormat = intl.NumberFormat.compact( - locale: localeName, - - ); - final String countString = countNumberFormat.format(count); - - String _temp0 = intl.Intl.pluralLogic( - count, - locale: localeName, - other: 'comments', - one: 'comment', - zero: 'comments', - ); - return '$countString $_temp0'; - } - - @override - String noOfSegmentsCompleted(num completed, num total, num percentage) { - final intl.NumberFormat completedNumberFormat = intl.NumberFormat.compact( - locale: localeName, - - ); - final String completedString = completedNumberFormat.format(completed); - final intl.NumberFormat totalNumberFormat = intl.NumberFormat.compact( - locale: localeName, - - ); - final String totalString = totalNumberFormat.format(total); - final intl.NumberFormat percentageNumberFormat = intl.NumberFormat.compact( - locale: localeName, - - ); - final String percentageString = percentageNumberFormat.format(percentage); - - String _temp0 = intl.Intl.pluralLogic( - total, - locale: localeName, - other: 'segments', - one: 'segment', - zero: 'segments', - ); - return '$completedString of $totalString ($percentageString%) $_temp0 completed'; - } - - @override - String get today => 'Today'; - - @override - String get yesterday => 'Yesterday'; - - @override - String get twoDaysAgo => '2 days ago'; - - @override - String get tomorrow => 'Tomorrow'; - - @override - String get activeVotingRound => 'Active voting round 14'; - - @override - String noOfAllProposals(int count) { - return 'All proposals ($count)'; - } - - @override - String get favorites => 'Favorites'; - - @override - String get treasuryCampaignBuilder => 'Campaign builder'; - - @override - String get treasuryCampaignBuilderSegments => 'Segments'; - - @override - String get treasuryCampaignSetup => 'Setup Campaign'; - - @override - String get treasuryCampaignTitle => 'Campaign title'; - - @override - String get stepEdit => 'Edit'; - - @override - String get workspaceProposalNavigation => 'Proposal navigation'; - - @override - String get workspaceProposalNavigationSegments => 'Segments'; - - @override - String get workspaceProposalSetup => 'Proposal setup'; - - @override - String get drawerSpaceTreasury => 'Treasury'; - - @override - String get drawerSpaceDiscovery => 'Discovery'; - - @override - String get drawerSpaceWorkspace => 'Workspace'; - - @override - String get drawerSpaceVoting => 'Voting'; - - @override - String get drawerSpaceFundedProjects => 'Funded projects'; - - @override - String get fundedProjectSpace => 'Funded project space'; - - @override - String noOfFundedProposals(int count) { - return 'Funded proposals ($count)'; - } - - @override - String get followed => 'Followed'; - - @override - String get overallSpacesSearchBrands => 'Search Brands'; - - @override - String get overallSpacesTasks => 'Tasks'; - - @override - String get voicesUpdateReady => 'Voices update ready'; - - @override - String get clickToRestart => 'Click to restart'; - - @override - String get spaceTreasuryName => 'Treasury space'; - - @override - String get spaceDiscoveryName => 'Discovery space'; - - @override - String get spaceWorkspaceName => 'Workspace'; - - @override - String get spaceVotingName => 'Voting space'; - - @override - String get spaceFundedProjects => 'Funded project space'; - - @override - String get lock => 'Lock'; - - @override - String get unlock => 'Unlock'; - - @override - String get getStarted => 'Get Started'; - - @override - String get guest => 'Guest'; - - @override - String get visitor => 'Visitor'; - - @override - String get noConnectionBannerRefreshButtonText => 'Refresh'; - - @override - String get noConnectionBannerTitle => 'No internet connection'; - - @override - String get noConnectionBannerDescription => 'Your internet is playing hide and seek. Check your internet connection, or try again in a moment.'; - - @override - String get weakPasswordStrength => 'Weak password strength'; - - @override - String get normalPasswordStrength => 'Normal password strength'; - - @override - String get goodPasswordStrength => 'Good password strength'; - - @override - String get chooseCardanoWallet => 'Choose Cardano Wallet'; - - @override - String get chooseOtherWallet => 'Choose other wallet'; - - @override - String get learnMore => 'Learn More'; - - @override - String get walletLinkHeader => 'Link keys to your Catalyst Keychain'; - - @override - String get walletLinkWalletSubheader => 'Link your Cardano wallet'; - - @override - String get walletLinkRolesSubheader => 'Select your Catalyst roles'; - - @override - String get walletLinkTransactionSubheader => 'Sign your Catalyst roles to the\nCardano mainnet'; - - @override - String get walletLinkIntroTitle => 'Link Cardano Wallet & Catalyst Roles to you Catalyst Keychain.'; - - @override - String get walletLinkIntroContent => 'You\'re almost there! This is the final and most important step in your account setup.\n\nWe\'re going to link a Cardano Wallet to your Catalyst Keychain, so you can start collecting Role Keys.\n\nRole Keys allow you to enter new spaces, discover new ways to participate, and unlock new ways to earn rewards.\n\nWe\'ll start with your Voter Key by default. You can decide to add a Proposer Key and Drep key if you want, or you can always add them later.'; - - @override - String get walletLinkSelectWalletTitle => 'Select the Cardano wallet to link\nto your Catalyst Keychain.'; - - @override - String get walletLinkSelectWalletContent => 'To complete this action, you\'ll submit a signed transaction to Cardano. There will be an ADA transaction fee.'; - - @override - String get walletLinkWalletDetailsTitle => 'Cardano wallet detection'; - - @override - String walletLinkWalletDetailsContent(String wallet) { - return '$wallet connected successfully!'; - } - - @override - String get walletLinkWalletDetailsNotice => 'Wallet and role registrations require a minimal transaction fee. You can setup your default dApp connector wallet in your browser extension settings.'; - - @override - String get walletLinkWalletDetailsNoticeTopUp => 'Top up ADA'; - - @override - String get walletLinkWalletDetailsNoticeTopUpLink => 'Link to top-up provider'; - - @override - String get walletLinkTransactionTitle => 'Let\'s make sure everything looks right.'; - - @override - String get walletLinkTransactionAccountCompletion => 'Account completion for Catalyst'; - - @override - String walletLinkTransactionLinkItem(String wallet) { - return '1 Link $wallet to Catalyst Keychain'; - } - - @override - String get walletLinkTransactionPositiveSmallPrint => 'Positive small print'; - - @override - String get walletLinkTransactionPositiveSmallPrintItem1 => 'Your registration is a one time event, cost will not renew periodically.'; - - @override - String get walletLinkTransactionPositiveSmallPrintItem2 => 'Your registrations can be found under your account profile after completion.'; - - @override - String get walletLinkTransactionPositiveSmallPrintItem3 => 'All registration fees go into the Cardano Treasury.'; - - @override - String get walletLinkTransactionSign => 'Sign transaction with wallet'; - - @override - String get walletLinkTransactionChangeRoles => 'Change role setup'; - - @override - String walletLinkTransactionRoleItem(String role) { - return '1 $role registration to Catalyst Keychain'; - } - - @override - String get registrationTransactionFailed => 'Transaction failed'; - - @override - String get registrationInsufficientBalance => 'Insufficient balance, please top up your wallet.'; - - @override - String get registrationSeedPhraseNotFound => 'Seed phrase was not found. Make sure correct words are correct.'; - - @override - String get registrationUnlockPasswordNotFound => 'Password was not found. Make sure valid password was created.'; - - @override - String get registrationWalletNotFound => 'Wallet not found'; - - @override - String get walletLinkRoleChooserTitle => 'How do you want to participate in Catalyst?'; - - @override - String get walletLinkRoleChooserContent => 'In Catalyst you can take on different roles, learn more below and choose your additional roles now.'; - - @override - String get walletLinkRoleSummaryTitle => 'Is this your correct Catalyst role setup?'; - - @override - String get walletLinkRoleSummaryContent1 => 'You would like to register '; - - @override - String walletLinkRoleSummaryContent2(num count) { - final intl.NumberFormat countNumberFormat = intl.NumberFormat.compact( - locale: localeName, - - ); - final String countString = countNumberFormat.format(count); - - String _temp0 = intl.Intl.pluralLogic( - count, - locale: localeName, - other: 'roles', - one: 'role', - zero: 'roles', - ); - return '$countString active $_temp0'; - } - - @override - String get walletLinkRoleSummaryContent3 => ' in Catalyst.'; - - @override - String get seeAllSupportedWallets => 'See all supported wallets'; - - @override - String get walletDetectionSummary => 'Wallet detection summary'; - - @override - String get walletBalance => 'Wallet balance'; - - @override - String get walletAddress => 'Wallet address'; - - @override - String get accountCreationCreate => 'Create a new 
Catalyst Keychain'; - - @override - String get accountCreationRecover => 'Recover your
Catalyst Keychain'; - - @override - String get accountCreationOnThisDevice => 'On this device'; - - @override - String get accountCreationGetStartedTitle => 'Welcome to Catalyst'; - - @override - String get accountCreationGetStatedDesc => 'If you already have a Catalyst keychain you can restore it on this device, or you can create a new Catalyst Keychain.'; - - @override - String get accountCreationGetStatedWhatNext => 'What do you want to do?'; - - @override - String get myAccountProfileKeychain => 'My Account / Profile & Keychain'; - - @override - String get yourCatalystKeychainAndRoleRegistration => 'Your Catalyst keychain & role registration'; - - @override - String get profileAndKeychain => 'Profile & Keychain'; - - @override - String get removeKeychain => 'Remove Keychain'; - - @override - String get walletConnected => 'Wallet connected'; - - @override - String get currentRoleRegistrations => 'Current Role registrations'; - - @override - String get voter => 'Voter'; - - @override - String get proposer => 'Proposer'; - - @override - String get drep => 'Drep'; - - @override - String get defaultRole => 'Default'; - - @override - String get catalystKeychain => 'Catalyst Keychain'; - - @override - String get accountCreationSplashTitle => 'Create your Catalyst Keychain'; - - @override - String get accountCreationSplashMessage => 'Your keychain is your ticket to participate in 
distributed innovation on the global stage. 

Once you have it, you\'ll be able to enter different spaces, discover awesome ideas, and share your feedback to hep improve ideas. 

As you add new keys to your keychain, you\'ll be able to enter new spaces, unlock new rewards opportunities, and have your voice heard in community decisions.'; - - @override - String get accountCreationSplashNextButton => 'Create your Keychain now'; - - @override - String get accountInstructionsTitle => 'Great! Your Catalyst Keychain 
has been created.'; - - @override - String get accountInstructionsMessage => 'On the next screen, you\'re going to see 12 words. 
This is called your \"seed phrase\". 

It\'s like a super secure password that only you know, 
that allows you to prove ownership of your keychain. 

You\'ll use it to login and recover your account on 
different devices, so be sure to put it somewhere safe!\n\nYou need to write this seed phrase down with pen and paper, so get this ready.'; - - @override - String get next => 'Next'; - - @override - String get back => 'Back'; - - @override - String get retry => 'Retry'; - - @override - String get somethingWentWrong => 'Something went wrong.'; - - @override - String get noWalletFound => 'No wallet found.'; - - @override - String get deleteKeychainDialogTitle => 'Delete Keychain?'; - - @override - String get deleteKeychainDialogSubtitle => 'Are you sure you wants to delete your\nCatalyst Keychain from this device?'; - - @override - String get deleteKeychainDialogWarning => 'Make sure you have a working Catalyst 12-word seedphrase!'; - - @override - String get deleteKeychainDialogWarningInfo => 'Your Catalyst account will be removed,\nthis action cannot be undone!'; - - @override - String get deleteKeychainDialogTypingInfo => 'To avoid mistakes, please type ‘Remove Keychain’ below.'; - - @override - String get deleteKeychainDialogInputLabel => 'Confirm removal'; - - @override - String get deleteKeychainDialogErrorText => 'Error. Please type \'Remove Keychain\' to remove your account from this device.'; - - @override - String get deleteKeychainDialogRemovingPhrase => 'Remove Keychain'; - - @override - String get accountRoleDialogTitle => 'Learn about Catalyst Roles'; - - @override - String get accountRoleDialogButton => 'Continue Role setup'; - - @override - String accountRoleDialogRoleSummaryTitle(String role) { - return '$role role summary'; - } - - @override - String get voterVerboseName => 'Treasury guardian'; - - @override - String get proposerVerboseName => 'Main proposer'; - - @override - String get drepVerboseName => 'Community expert'; - - @override - String get voterDescription => 'The Voters are the guardians of Cardano treasury. They vote in projects for the growth of the Cardano Ecosystem.'; - - @override - String get proposerDescription => 'The Main Proposers are the Innovators in Project Catalyst, they are the shapers of the future.'; - - @override - String get drepDescription => 'The dRep has an Expert Role in the Cardano/Catalyst as people can delegate their vote to Cardano Experts.'; - - @override - String get voterSummarySelectFavorites => 'Select favorites'; - - @override - String get voterSummaryComment => 'Comment/Vote on Proposals'; - - @override - String get voterSummaryCastVotes => 'Cast your votes'; - - @override - String get voterSummaryVoterRewards => 'Voter rewards'; - - @override - String get proposerSummaryWriteEdit => 'Write/edit functionality'; - - @override - String get proposerSummarySubmitToFund => 'Rights to Submit to Fund'; - - @override - String get proposerSummaryInviteTeamMembers => 'Invite Team Members'; - - @override - String get proposerSummaryComment => 'Comment functionality'; - - @override - String get drepSummaryDelegatedVotes => 'Delegated Votes'; - - @override - String get drepSummaryRewards => 'dRep rewards'; - - @override - String get drepSummaryCastVotes => 'Cast delegated votes'; - - @override - String get drepSummaryComment => 'Comment Functionality'; - - @override - String get delete => 'Delete'; - - @override - String get close => 'Close'; - - @override - String get notice => 'Notice'; - - @override - String get yes => 'Yes'; - - @override - String get no => 'No'; - - @override - String get total => 'Total'; - - @override - String get file => 'file'; - - @override - String get key => 'key'; - - @override - String get upload => 'Upload'; - - @override - String get browse => 'browse'; - - @override - String uploadDropInfo(String itemNameToUpload) { - return 'Drop your $itemNameToUpload here or '; - } - - @override - String get uploadProgressInfo => 'Upload in progress'; - - @override - String get uploadKeychainTitle => 'Upload Catalyst Keychain'; - - @override - String get uploadKeychainInfo => 'Make sure it\'s a correct Catalyst keychain file.'; - - @override - String get themeLight => 'Light'; - - @override - String get themeDark => 'Dark'; - - @override - String get keychainDeletedDialogTitle => 'Catalyst keychain removed'; - - @override - String get keychainDeletedDialogSubtitle => 'Your Catalyst Keychain is removed successfully from this device.'; - - @override - String get keychainDeletedDialogInfo => 'We reverted this device to Catalyst first use.'; - - @override - String get registrationCompletedTitle => 'Catalyst account setup'; - - @override - String get registrationCompletedSubtitle => 'Completed!'; - - @override - String get registrationCompletedSummaryHeader => 'Summary'; - - @override - String get registrationCompletedKeychainTitle => 'Catalyst Keychain created'; - - @override - String get registrationCompletedKeychainInfo => 'You created a Catalyst Keychain, backed up its seed phrase and set an unlock password.'; - - @override - String registrationCompletedWalletTitle(String walletName) { - return 'Cardano $walletName wallet selected'; - } - - @override - String registrationCompletedWalletInfo(String walletName) { - return 'You selected your $walletName wallet as primary wallet for your voting power.'; - } - - @override - String get registrationCompletedRolesTitle => 'Catalyst roles selected'; - - @override - String get registrationCompletedRolesInfo => 'You linked your Cardano wallet and selected Catalyst roles via a signed transaction.'; - - @override - String get registrationCompletedRoleRegistration => 'role registration'; - - @override - String get registrationCompletedDiscoveryButton => 'Open Discovery Dashboard'; - - @override - String get registrationCompletedAccountButton => 'Review my account'; - - @override - String get createKeychainSeedPhraseSubtitle => 'Write down your 12 Catalyst 
security words'; - - @override - String get createKeychainSeedPhraseBody => 'Make sure you create an offline backup of your recovery phrase as well.'; - - @override - String get createKeychainSeedPhraseDownload => 'Download Catalyst key'; - - @override - String get createKeychainSeedPhraseStoreConfirmation => 'I have written down/downloaded my 12 words'; - - @override - String get createKeychainSeedPhraseCheckInstructionsTitle => 'Check your Catalyst security keys'; - - @override - String get createKeychainSeedPhraseCheckInstructionsSubtitle => 'Next, we\'re going to make sure that you\'ve written down your words correctly. 

We don\'t save your seed phrase, so it\'s important 
to make sure you have it right. That\'s why we do this confirmation before continuing. 

It\'s also good practice to get familiar with using a seed phrase if you\'re new to crypto.'; - - @override - String get createKeychainSeedPhraseCheckSubtitle => 'Input your Catalyst security keys'; - - @override - String get createKeychainSeedPhraseCheckBody => 'Select your 12 written down words in 
the correct order.'; - - @override - String get uploadCatalystKey => 'Upload Catalyst Key'; - - @override - String get reset => 'Reset'; - - @override - String get createKeychainSeedPhraseCheckSuccessTitle => 'Nice job! You\'ve successfully verified the seed phrase for your keychain.'; - - @override - String get createKeychainSeedPhraseCheckSuccessSubtitle => 'Enter your seed phrase to recover your Catalyst Keychain on any device.

It\'s kinda like your email and password all rolled into one, so keep it somewhere safe!

In the next step we\'ll add a password to your Catalyst Keychain, so you can lock/unlock access to Voices.'; - - @override - String get yourNextStep => 'Your next step'; - - @override - String get createKeychainSeedPhraseCheckSuccessNextStep => 'Now let’s set your Unlock password for this device!'; - - @override - String get createKeychainUnlockPasswordInstructionsTitle => 'Set your Catalyst unlock password 
for this device'; - - @override - String get createKeychainUnlockPasswordInstructionsSubtitle => 'With over 300 trillion possible combinations, your 12 word seed phrase is great for keeping your account safe. 

But it can be a bit tedious to enter every single time you want to use the app. 

In this next step, you\'ll set your Unlock Password for your current device. It\'s like a shortcut for proving ownership of your Keychain. 

Whenever you recover your account for the first time on a new device, you\'ll need to use your Catalyst Keychain to get started. Every time after that, you can use your Unlock Password to quickly regain access.'; - - @override - String get createKeychainCreatedTitle => 'Congratulations your Catalyst 
Keychain is created!'; - - @override - String get createKeychainCreatedNextStep => 'In the next step you write your Catalyst roles and 
account to the Cardano Mainnet.'; - - @override - String get createKeychainLinkWalletAndRoles => 'Link your Cardano Wallet & Roles'; - - @override - String get registrationCreateKeychainStepGroup => 'Catalyst Keychain created'; - - @override - String get registrationLinkWalletStepGroup => 'Link Cardano Wallet & Roles'; - - @override - String get registrationCompletedStepGroup => 'Catalyst account creation completed!'; - - @override - String get createKeychainUnlockPasswordIntoSubtitle => 'Catalyst unlock password'; - - @override - String get createKeychainUnlockPasswordIntoBody => 'Please provide a password for your Catalyst Keychain.'; - - @override - String get enterPassword => 'Enter password'; - - @override - String get confirmPassword => 'Confirm password'; - - @override - String xCharactersMinimum(int number) { - return '$number characters minimum length'; - } - - @override - String get passwordDoNotMatch => 'Passwords do not match, please correct'; - - @override - String get warning => 'Warning'; - - @override - String get alert => 'Alert'; - - @override - String get registrationExitConfirmDialogSubtitle => 'Account creation incomplete!'; - - @override - String get registrationExitConfirmDialogContent => 'If attempt to leave without creating your keychain - account creation will be incomplete. 

You are not able to login without 
completing your keychain.'; - - @override - String get registrationExitConfirmDialogContinue => 'Continue keychain creation'; - - @override - String get cancelAnyways => 'Cancel anyway'; - - @override - String get recoverCatalystKeychain => 'Restore Catalyst keychain'; - - @override - String get recoverKeychainMethodsTitle => 'Restore your Catalyst Keychain'; - - @override - String get recoverKeychainMethodsNoKeychainFound => 'No Catalyst Keychain found on this device.'; - - @override - String get recoverKeychainMethodsSubtitle => 'Not to worry, in the next step you can choose the recovery option that applies to you for this device!'; - - @override - String get recoverKeychainMethodsListTitle => 'How do you want Restore your Catalyst Keychain?'; - - @override - String get recoverKeychainNonFound => 'No Catalyst Keychain found
on this device.'; - - @override - String get recoverKeychainFound => 'Keychain found! 
Please unlock your device.'; - - @override - String get seedPhrase12Words => '12 security words'; - - @override - String get recoverySeedPhraseInstructionsTitle => 'Restore your Catalyst Keychain with 
your 12 security words.'; - - @override - String get recoverySeedPhraseInstructionsSubtitle => 'Enter your security words in the correct order, and sign into your Catalyst account on a new device.'; - - @override - String get recoverySeedPhraseInputTitle => 'Restore your Catalyst Keychain with 
your 12 security words'; - - @override - String get recoverySeedPhraseInputSubtitle => 'Enter each word of your Catalyst Key in the right order 
to bring your Catalyst account to this device.'; - - @override - String get recoveryAccountTitle => 'Catalyst account recovery'; - - @override - String get recoveryAccountSuccessTitle => 'Keychain recovered successfully!'; - - @override - String get recoveryAccountDetailsAction => 'Set unlock password for this device'; - - @override - String get recoveryUnlockPasswordInstructionsTitle => 'Set your Catalyst unlock password f
or this device'; - - @override - String get recoveryUnlockPasswordInstructionsSubtitle => 'With over 300 trillion possible combinations, your 12 word seed phrase is great for keeping your account safe. 

But it can be a bit tedious to enter every single time you want to use the app. 

In this next step, you\'ll set your Unlock Password for your current device. It\'s like a shortcut for proving ownership of your Keychain. 

Whenever you recover your account for the first time on a new device, you\'ll need to use your Catalyst Keychain to get started. Every time after that, you can use your Unlock Password to quickly regain access.'; - - @override - String get recoverDifferentKeychain => 'Restore a different keychain'; - - @override - String get unlockDialogHeader => 'Unlock Catalyst'; - - @override - String get unlockDialogTitle => 'Welcome back!'; - - @override - String get unlockDialogContent => 'Please enter your device specific unlock password\nto unlock Catalyst Voices.'; - - @override - String get unlockDialogHint => 'Enter your Unlock password'; - - @override - String get unlockDialogIncorrectPassword => 'Password is incorrect, try again.'; - - @override - String get continueAsGuest => 'Continue as guest'; - - @override - String get unlockSnackbarTitle => 'Catalyst unlocked!'; - - @override - String get unlockSnackbarMessage => 'You can now fully use the application.'; - - @override - String get lockSnackbarTitle => 'Catalyst locked'; - - @override - String get lockSnackbarMessage => 'Catalyst is now in guest/locked mode.'; - - @override - String get recoverySuccessTitle => 'Congratulations your Catalyst 
Keychain is restored!'; - - @override - String get recoverySuccessSubtitle => 'You have successfully restored your Catalyst Keychain, and unlocked Catalyst Voices on this device.'; - - @override - String get recoverySuccessGoToDashboard => 'Jump into the Discovery space / Dashboard'; - - @override - String get recoverySuccessGoAccount => 'Check my account'; - - @override - String get recoveryExitConfirmDialogSubtitle => '12 word keychain restoration incomplete'; - - @override - String get recoveryExitConfirmDialogContent => 'Please continue your Catalyst Keychain restoration, if you cancel all input will be lost.'; - - @override - String get recoveryExitConfirmDialogContinue => 'Continue recovery process'; - - @override - String get recoverAccount => 'Recover account'; - - @override - String get uploadConfirmDialogSubtitle => 'SWITCH TO FILE UPLOAD'; - - @override - String get uploadConfirmDialogContent => 'Do you want to cancel manual input, and switch to Catalyst key upload?'; - - @override - String get uploadConfirmDialogYesButton => 'Yes, switch to Catalyst key upload'; - - @override - String get uploadConfirmDialogResumeButton => 'Resume manual inputs'; - - @override - String get incorrectUploadDialogSubtitle => 'CATALYST KEY INCORRECT'; - - @override - String get incorrectUploadDialogContent => 'The Catalyst keychain that you entered or uploaded is incorrect, please try again.'; - - @override - String get incorrectUploadDialogTryAgainButton => 'Try again'; - - @override - String get finishAccountCreation => 'Finish account creation'; - - @override - String get connectDifferentWallet => 'Connect a different wallet'; - - @override - String get reviewRegistrationTransaction => 'Review registration transaction'; -} diff --git a/catalyst_voices/packages/internal/catalyst_voices_localization/lib/l10n/intl_en.arb b/catalyst_voices/packages/internal/catalyst_voices_localization/lib/l10n/intl_en.arb index cee75b5d567..1b6dd0ca5bd 100644 --- a/catalyst_voices/packages/internal/catalyst_voices_localization/lib/l10n/intl_en.arb +++ b/catalyst_voices/packages/internal/catalyst_voices_localization/lib/l10n/intl_en.arb @@ -136,18 +136,8 @@ "@snackbarErrorMessageText": { "description": "Text shown in the Snackbar widget when the message is an error message." }, - "snackbarRefreshButtonText": "Refresh", - "@snackbarRefreshButtonText": { - "description": "Text shown in the Snackbar widget for the refresh button." - }, - "snackbarMoreButtonText": "Learn more", - "@snackbarMoreButtonText": { - "description": "Text shown in the Snackbar widget for the more button." - }, - "snackbarOkButtonText": "Ok", - "@snackbarOkButtonText": { - "description": "Text shown in the Snackbar widget for the ok button." - }, + "refresh": "Refresh", + "ok": "Ok", "seedPhraseSlotNr": "Slot {nr}", "@seedPhraseSlotNr": { "description": "When user arranges seed phrases this text is shown when phrase was not selected", @@ -967,5 +957,6 @@ "reviewRegistrationTransaction": "Review registration transaction", "@reviewRegistrationTransaction": { "description": "A button label to review the registration transaction in wallet detail panel." - } + }, + "saveBeforeEditingErrorText": "Please save before editing something else" } \ No newline at end of file diff --git a/catalyst_voices/packages/internal/catalyst_voices_models/lib/src/catalyst_voices_models.dart b/catalyst_voices/packages/internal/catalyst_voices_models/lib/src/catalyst_voices_models.dart index 33d7f7ff683..1453a38cf44 100644 --- a/catalyst_voices/packages/internal/catalyst_voices_models/lib/src/catalyst_voices_models.dart +++ b/catalyst_voices/packages/internal/catalyst_voices_models/lib/src/catalyst_voices_models.dart @@ -15,15 +15,9 @@ export 'registration/registration.dart'; export 'seed_phrase.dart'; export 'session_data.dart'; export 'space.dart'; -export 'treasury/treasury_campaign_builder.dart'; -export 'treasury/treasury_campaign_segment.dart'; -export 'treasury/treasury_campaign_segment_step.dart'; export 'user/account.dart'; export 'user/account_role.dart'; export 'user/user.dart'; export 'wallet/cardano_wallet_details.dart'; export 'wallet/wallet_info.dart'; export 'wallet/wallet_metadata.dart'; -export 'workspace/workspace_proposal_navigation.dart'; -export 'workspace/workspace_proposal_segment.dart'; -export 'workspace/workspace_proposal_segment_step.dart'; diff --git a/catalyst_voices/packages/internal/catalyst_voices_models/lib/src/treasury/treasury_campaign_builder.dart b/catalyst_voices/packages/internal/catalyst_voices_models/lib/src/treasury/treasury_campaign_builder.dart deleted file mode 100644 index 1abfa7e7878..00000000000 --- a/catalyst_voices/packages/internal/catalyst_voices_models/lib/src/treasury/treasury_campaign_builder.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'package:catalyst_voices_models/src/treasury/treasury_campaign_segment.dart'; -import 'package:equatable/equatable.dart'; - -final class TreasuryCampaignBuilder extends Equatable { - final List segments; - - const TreasuryCampaignBuilder({ - required this.segments, - }); - - @override - List get props => [ - segments, - ]; -} diff --git a/catalyst_voices/packages/internal/catalyst_voices_models/lib/src/treasury/treasury_campaign_segment.dart b/catalyst_voices/packages/internal/catalyst_voices_models/lib/src/treasury/treasury_campaign_segment.dart deleted file mode 100644 index 4afc1da2608..00000000000 --- a/catalyst_voices/packages/internal/catalyst_voices_models/lib/src/treasury/treasury_campaign_segment.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:catalyst_voices_models/src/treasury/treasury_campaign_segment_step.dart'; -import 'package:equatable/equatable.dart'; - -sealed class TreasuryCampaignSegment extends Equatable { - final Object id; - final List steps; - - const TreasuryCampaignSegment({ - required this.id, - required this.steps, - }); - - @override - List get props => [ - id, - steps, - ]; -} - -final class TreasuryCampaignSetup extends TreasuryCampaignSegment { - const TreasuryCampaignSetup({ - required super.id, - required super.steps, - }); -} diff --git a/catalyst_voices/packages/internal/catalyst_voices_models/lib/src/treasury/treasury_campaign_segment_step.dart b/catalyst_voices/packages/internal/catalyst_voices_models/lib/src/treasury/treasury_campaign_segment_step.dart deleted file mode 100644 index 8e0bbc06a79..00000000000 --- a/catalyst_voices/packages/internal/catalyst_voices_models/lib/src/treasury/treasury_campaign_segment_step.dart +++ /dev/null @@ -1,37 +0,0 @@ -import 'package:equatable/equatable.dart'; - -sealed class TreasuryCampaignSegmentStep extends Equatable { - final int id; - final bool isEditable; - - const TreasuryCampaignSegmentStep({ - required this.id, - this.isEditable = false, - }); - - @override - List get props => [ - id, - isEditable, - ]; -} - -final class TreasuryCampaignTitle extends TreasuryCampaignSegmentStep { - const TreasuryCampaignTitle({ - required super.id, - super.isEditable, - }); -} - -// Note. Temporary class representing dummy topic -final class TreasuryCampaignTopicX extends TreasuryCampaignSegmentStep { - final int nr; - - const TreasuryCampaignTopicX({ - required super.id, - required this.nr, - }); - - @override - List get props => super.props + [nr]; -} diff --git a/catalyst_voices/packages/internal/catalyst_voices_models/lib/src/workspace/workspace_proposal_navigation.dart b/catalyst_voices/packages/internal/catalyst_voices_models/lib/src/workspace/workspace_proposal_navigation.dart deleted file mode 100644 index 85cb7dd2387..00000000000 --- a/catalyst_voices/packages/internal/catalyst_voices_models/lib/src/workspace/workspace_proposal_navigation.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'package:catalyst_voices_models/src/workspace/workspace_proposal_segment.dart'; -import 'package:equatable/equatable.dart'; - -final class WorkspaceProposalNavigation extends Equatable { - final List segments; - - const WorkspaceProposalNavigation({ - required this.segments, - }); - - @override - List get props => [ - segments, - ]; -} diff --git a/catalyst_voices/packages/internal/catalyst_voices_models/lib/src/workspace/workspace_proposal_segment.dart b/catalyst_voices/packages/internal/catalyst_voices_models/lib/src/workspace/workspace_proposal_segment.dart deleted file mode 100644 index 3b96c084afd..00000000000 --- a/catalyst_voices/packages/internal/catalyst_voices_models/lib/src/workspace/workspace_proposal_segment.dart +++ /dev/null @@ -1,54 +0,0 @@ -import 'package:catalyst_voices_models/src/catalyst_voices_models.dart'; -import 'package:equatable/equatable.dart'; - -sealed class WorkspaceProposalSegment extends Equatable { - final Object id; - final List steps; - - const WorkspaceProposalSegment({ - required this.id, - required this.steps, - }); - - @override - List get props => [ - id, - steps, - ]; -} - -final class WorkspaceProposalSetup extends WorkspaceProposalSegment { - const WorkspaceProposalSetup({ - required super.id, - required super.steps, - }); -} - -final class WorkspaceProposalSummary extends WorkspaceProposalSegment { - const WorkspaceProposalSummary({ - required super.id, - required super.steps, - }); -} - -final class WorkspaceProposalSolution extends WorkspaceProposalSegment { - const WorkspaceProposalSolution({ - required super.id, - required super.steps, - }); -} - -final class WorkspaceProposalImpact extends WorkspaceProposalSegment { - const WorkspaceProposalImpact({ - required super.id, - required super.steps, - }); -} - -final class WorkspaceProposalCapabilityAndFeasibility - extends WorkspaceProposalSegment { - const WorkspaceProposalCapabilityAndFeasibility({ - required super.id, - required super.steps, - }); -} diff --git a/catalyst_voices/packages/internal/catalyst_voices_models/lib/src/workspace/workspace_proposal_segment_step.dart b/catalyst_voices/packages/internal/catalyst_voices_models/lib/src/workspace/workspace_proposal_segment_step.dart deleted file mode 100644 index 32f5e99db7d..00000000000 --- a/catalyst_voices/packages/internal/catalyst_voices_models/lib/src/workspace/workspace_proposal_segment_step.dart +++ /dev/null @@ -1,46 +0,0 @@ -import 'package:catalyst_voices_models/src/document/document_json.dart'; -import 'package:equatable/equatable.dart'; - -class WorkspaceProposalSegmentStep extends Equatable { - final int id; - final String title; - final String? titleInDetails; - final String? description; - final DocumentJson? documentJson; - final RichTextParams? richTextParams; - final bool isEditable; - - const WorkspaceProposalSegmentStep({ - required this.id, - required this.title, - this.titleInDetails, - this.description, - this.documentJson, - this.richTextParams, - this.isEditable = false, - }) : assert( - description != null || richTextParams != null, - 'Make sure description or richTextParams are provided', - ); - - @override - List get props => [ - id, - title, - titleInDetails, - description, - documentJson, - richTextParams, - isEditable, - ]; -} - -class RichTextParams { - final DocumentJson documentJson; - final int? charsLimit; - - RichTextParams({ - required this.documentJson, - this.charsLimit, - }); -} diff --git a/catalyst_voices/packages/internal/catalyst_voices_services/lib/generated/catalyst_gateway/cat_gateway_api.enums.swagger.dart b/catalyst_voices/packages/internal/catalyst_voices_services/lib/generated/catalyst_gateway/cat_gateway_api.enums.swagger.dart deleted file mode 100644 index a88cc123f58..00000000000 --- a/catalyst_voices/packages/internal/catalyst_voices_services/lib/generated/catalyst_gateway/cat_gateway_api.enums.swagger.dart +++ /dev/null @@ -1,106 +0,0 @@ -import 'package:json_annotation/json_annotation.dart'; -import 'package:collection/collection.dart'; - -enum DeepQueryInspectionFlag { - @JsonValue(null) - swaggerGeneratedUnknown(null), - - @JsonValue('enabled') - enabled('enabled'), - @JsonValue('disabled') - disabled('disabled'); - - final String? value; - - const DeepQueryInspectionFlag(this.value); -} - -enum LogLevel { - @JsonValue(null) - swaggerGeneratedUnknown(null), - - @JsonValue('debug') - debug('debug'), - @JsonValue('info') - info('info'), - @JsonValue('warn') - warn('warn'), - @JsonValue('error') - error('error'); - - final String? value; - - const LogLevel(this.value); -} - -enum Network { - @JsonValue(null) - swaggerGeneratedUnknown(null), - - @JsonValue('mainnet') - mainnet('mainnet'), - @JsonValue('preprod') - preprod('preprod'), - @JsonValue('preview') - preview('preview'); - - final String? value; - - const Network(this.value); -} - -enum ReasonRejected { - @JsonValue(null) - swaggerGeneratedUnknown(null), - - @JsonValue('FragmentAlreadyInLog') - fragmentalreadyinlog('FragmentAlreadyInLog'), - @JsonValue('FragmentInvalid') - fragmentinvalid('FragmentInvalid'), - @JsonValue('PreviousFragmentInvalid') - previousfragmentinvalid('PreviousFragmentInvalid'), - @JsonValue('PoolOverflow') - pooloverflow('PoolOverflow'); - - final String? value; - - const ReasonRejected(this.value); -} - -enum VoterGroupId { - @JsonValue(null) - swaggerGeneratedUnknown(null), - - @JsonValue('rep') - rep('rep'), - @JsonValue('direct') - direct('direct'); - - final String? value; - - const VoterGroupId(this.value); -} - -enum VotingInfoDelegationsType { - @JsonValue(null) - swaggerGeneratedUnknown(null), - - @JsonValue('Delegated') - delegated('Delegated'); - - final String? value; - - const VotingInfoDelegationsType(this.value); -} - -enum VotingInfoDirectVoterType { - @JsonValue(null) - swaggerGeneratedUnknown(null), - - @JsonValue('Direct') - direct('Direct'); - - final String? value; - - const VotingInfoDirectVoterType(this.value); -} diff --git a/catalyst_voices/packages/internal/catalyst_voices_services/lib/generated/catalyst_gateway/cat_gateway_api.models.swagger.dart b/catalyst_voices/packages/internal/catalyst_voices_services/lib/generated/catalyst_gateway/cat_gateway_api.models.swagger.dart deleted file mode 100644 index a2f5526c247..00000000000 --- a/catalyst_voices/packages/internal/catalyst_voices_services/lib/generated/catalyst_gateway/cat_gateway_api.models.swagger.dart +++ /dev/null @@ -1,3073 +0,0 @@ -// ignore_for_file: type=lint - -import 'package:json_annotation/json_annotation.dart'; -import 'package:collection/collection.dart'; -import 'dart:convert'; - -import 'cat_gateway_api.enums.swagger.dart' as enums; - -part 'cat_gateway_api.models.swagger.g.dart'; - -@JsonSerializable(explicitToJson: true) -class AccountVote { - const AccountVote({ - required this.votePlanId, - required this.votes, - }); - - factory AccountVote.fromJson(Map json) => - _$AccountVoteFromJson(json); - - static const toJsonFactory = _$AccountVoteToJson; - Map toJson() => _$AccountVoteToJson(this); - - @JsonKey(name: 'vote_plan_id') - final String votePlanId; - @JsonKey(name: 'votes', defaultValue: []) - final List votes; - static const fromJsonFactory = _$AccountVoteFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is AccountVote && - (identical(other.votePlanId, votePlanId) || - const DeepCollectionEquality() - .equals(other.votePlanId, votePlanId)) && - (identical(other.votes, votes) || - const DeepCollectionEquality().equals(other.votes, votes))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(votePlanId) ^ - const DeepCollectionEquality().hash(votes) ^ - runtimeType.hashCode; -} - -extension $AccountVoteExtension on AccountVote { - AccountVote copyWith({String? votePlanId, List? votes}) { - return AccountVote( - votePlanId: votePlanId ?? this.votePlanId, votes: votes ?? this.votes); - } - - AccountVote copyWithWrapped( - {Wrapped? votePlanId, Wrapped>? votes}) { - return AccountVote( - votePlanId: (votePlanId != null ? votePlanId.value : this.votePlanId), - votes: (votes != null ? votes.value : this.votes)); - } -} - -@JsonSerializable(explicitToJson: true) -class BlockDate { - const BlockDate({ - required this.epoch, - required this.slotId, - }); - - factory BlockDate.fromJson(Map json) => - _$BlockDateFromJson(json); - - static const toJsonFactory = _$BlockDateToJson; - Map toJson() => _$BlockDateToJson(this); - - @JsonKey(name: 'epoch') - final int epoch; - @JsonKey(name: 'slot_id') - final int slotId; - static const fromJsonFactory = _$BlockDateFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is BlockDate && - (identical(other.epoch, epoch) || - const DeepCollectionEquality().equals(other.epoch, epoch)) && - (identical(other.slotId, slotId) || - const DeepCollectionEquality().equals(other.slotId, slotId))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(epoch) ^ - const DeepCollectionEquality().hash(slotId) ^ - runtimeType.hashCode; -} - -extension $BlockDateExtension on BlockDate { - BlockDate copyWith({int? epoch, int? slotId}) { - return BlockDate(epoch: epoch ?? this.epoch, slotId: slotId ?? this.slotId); - } - - BlockDate copyWithWrapped({Wrapped? epoch, Wrapped? slotId}) { - return BlockDate( - epoch: (epoch != null ? epoch.value : this.epoch), - slotId: (slotId != null ? slotId.value : this.slotId)); - } -} - -@JsonSerializable(explicitToJson: true) -class Cip36Info { - const Cip36Info({ - required this.stakePubKey, - required this.nonce, - required this.slotNo, - required this.txn, - required this.voteKey, - required this.paymentAddress, - required this.isPayable, - required this.cip36, - }); - - factory Cip36Info.fromJson(Map json) => - _$Cip36InfoFromJson(json); - - static const toJsonFactory = _$Cip36InfoToJson; - Map toJson() => _$Cip36InfoToJson(this); - - @JsonKey(name: 'stake_pub_key') - final String stakePubKey; - @JsonKey(name: 'nonce') - final int nonce; - @JsonKey(name: 'slot_no') - final int slotNo; - @JsonKey(name: 'txn') - final int txn; - @JsonKey(name: 'vote_key') - final String voteKey; - @JsonKey(name: 'payment_address') - final String paymentAddress; - @JsonKey(name: 'is_payable') - final bool isPayable; - @JsonKey(name: 'cip36') - final bool cip36; - static const fromJsonFactory = _$Cip36InfoFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is Cip36Info && - (identical(other.stakePubKey, stakePubKey) || - const DeepCollectionEquality() - .equals(other.stakePubKey, stakePubKey)) && - (identical(other.nonce, nonce) || - const DeepCollectionEquality().equals(other.nonce, nonce)) && - (identical(other.slotNo, slotNo) || - const DeepCollectionEquality().equals(other.slotNo, slotNo)) && - (identical(other.txn, txn) || - const DeepCollectionEquality().equals(other.txn, txn)) && - (identical(other.voteKey, voteKey) || - const DeepCollectionEquality() - .equals(other.voteKey, voteKey)) && - (identical(other.paymentAddress, paymentAddress) || - const DeepCollectionEquality() - .equals(other.paymentAddress, paymentAddress)) && - (identical(other.isPayable, isPayable) || - const DeepCollectionEquality() - .equals(other.isPayable, isPayable)) && - (identical(other.cip36, cip36) || - const DeepCollectionEquality().equals(other.cip36, cip36))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(stakePubKey) ^ - const DeepCollectionEquality().hash(nonce) ^ - const DeepCollectionEquality().hash(slotNo) ^ - const DeepCollectionEquality().hash(txn) ^ - const DeepCollectionEquality().hash(voteKey) ^ - const DeepCollectionEquality().hash(paymentAddress) ^ - const DeepCollectionEquality().hash(isPayable) ^ - const DeepCollectionEquality().hash(cip36) ^ - runtimeType.hashCode; -} - -extension $Cip36InfoExtension on Cip36Info { - Cip36Info copyWith( - {String? stakePubKey, - int? nonce, - int? slotNo, - int? txn, - String? voteKey, - String? paymentAddress, - bool? isPayable, - bool? cip36}) { - return Cip36Info( - stakePubKey: stakePubKey ?? this.stakePubKey, - nonce: nonce ?? this.nonce, - slotNo: slotNo ?? this.slotNo, - txn: txn ?? this.txn, - voteKey: voteKey ?? this.voteKey, - paymentAddress: paymentAddress ?? this.paymentAddress, - isPayable: isPayable ?? this.isPayable, - cip36: cip36 ?? this.cip36); - } - - Cip36Info copyWithWrapped( - {Wrapped? stakePubKey, - Wrapped? nonce, - Wrapped? slotNo, - Wrapped? txn, - Wrapped? voteKey, - Wrapped? paymentAddress, - Wrapped? isPayable, - Wrapped? cip36}) { - return Cip36Info( - stakePubKey: - (stakePubKey != null ? stakePubKey.value : this.stakePubKey), - nonce: (nonce != null ? nonce.value : this.nonce), - slotNo: (slotNo != null ? slotNo.value : this.slotNo), - txn: (txn != null ? txn.value : this.txn), - voteKey: (voteKey != null ? voteKey.value : this.voteKey), - paymentAddress: (paymentAddress != null - ? paymentAddress.value - : this.paymentAddress), - isPayable: (isPayable != null ? isPayable.value : this.isPayable), - cip36: (cip36 != null ? cip36.value : this.cip36)); - } -} - -@JsonSerializable(explicitToJson: true) -class Cip36Reporting { - const Cip36Reporting({ - required this.cip36, - required this.invalids, - }); - - factory Cip36Reporting.fromJson(Map json) => - _$Cip36ReportingFromJson(json); - - static const toJsonFactory = _$Cip36ReportingToJson; - Map toJson() => _$Cip36ReportingToJson(this); - - @JsonKey(name: 'cip36', defaultValue: []) - final List cip36; - @JsonKey(name: 'invalids', defaultValue: []) - final List invalids; - static const fromJsonFactory = _$Cip36ReportingFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is Cip36Reporting && - (identical(other.cip36, cip36) || - const DeepCollectionEquality().equals(other.cip36, cip36)) && - (identical(other.invalids, invalids) || - const DeepCollectionEquality() - .equals(other.invalids, invalids))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(cip36) ^ - const DeepCollectionEquality().hash(invalids) ^ - runtimeType.hashCode; -} - -extension $Cip36ReportingExtension on Cip36Reporting { - Cip36Reporting copyWith( - {List? cip36, List? invalids}) { - return Cip36Reporting( - cip36: cip36 ?? this.cip36, invalids: invalids ?? this.invalids); - } - - Cip36Reporting copyWithWrapped( - {Wrapped>? cip36, - Wrapped>? invalids}) { - return Cip36Reporting( - cip36: (cip36 != null ? cip36.value : this.cip36), - invalids: (invalids != null ? invalids.value : this.invalids)); - } -} - -@JsonSerializable(explicitToJson: true) -class Cip36ReportingList { - const Cip36ReportingList({ - required this.cip36, - }); - - factory Cip36ReportingList.fromJson(Map json) => - _$Cip36ReportingListFromJson(json); - - static const toJsonFactory = _$Cip36ReportingListToJson; - Map toJson() => _$Cip36ReportingListToJson(this); - - @JsonKey(name: 'cip36', defaultValue: []) - final List cip36; - static const fromJsonFactory = _$Cip36ReportingListFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is Cip36ReportingList && - (identical(other.cip36, cip36) || - const DeepCollectionEquality().equals(other.cip36, cip36))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(cip36) ^ runtimeType.hashCode; -} - -extension $Cip36ReportingListExtension on Cip36ReportingList { - Cip36ReportingList copyWith({List? cip36}) { - return Cip36ReportingList(cip36: cip36 ?? this.cip36); - } - - Cip36ReportingList copyWithWrapped({Wrapped>? cip36}) { - return Cip36ReportingList( - cip36: (cip36 != null ? cip36.value : this.cip36)); - } -} - -@JsonSerializable(explicitToJson: true) -class ConfigBadRequest { - const ConfigBadRequest({ - required this.error, - this.schemaValidationErrors, - }); - - factory ConfigBadRequest.fromJson(Map json) => - _$ConfigBadRequestFromJson(json); - - static const toJsonFactory = _$ConfigBadRequestToJson; - Map toJson() => _$ConfigBadRequestToJson(this); - - @JsonKey(name: 'error') - final String error; - @JsonKey(name: 'schema_validation_errors', defaultValue: []) - final List? schemaValidationErrors; - static const fromJsonFactory = _$ConfigBadRequestFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is ConfigBadRequest && - (identical(other.error, error) || - const DeepCollectionEquality().equals(other.error, error)) && - (identical(other.schemaValidationErrors, schemaValidationErrors) || - const DeepCollectionEquality().equals( - other.schemaValidationErrors, schemaValidationErrors))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(error) ^ - const DeepCollectionEquality().hash(schemaValidationErrors) ^ - runtimeType.hashCode; -} - -extension $ConfigBadRequestExtension on ConfigBadRequest { - ConfigBadRequest copyWith( - {String? error, List? schemaValidationErrors}) { - return ConfigBadRequest( - error: error ?? this.error, - schemaValidationErrors: - schemaValidationErrors ?? this.schemaValidationErrors); - } - - ConfigBadRequest copyWithWrapped( - {Wrapped? error, - Wrapped?>? schemaValidationErrors}) { - return ConfigBadRequest( - error: (error != null ? error.value : this.error), - schemaValidationErrors: (schemaValidationErrors != null - ? schemaValidationErrors.value - : this.schemaValidationErrors)); - } -} - -@JsonSerializable(explicitToJson: true) -class ContentErrorDetail { - const ContentErrorDetail({ - this.loc, - this.msg, - this.type, - }); - - factory ContentErrorDetail.fromJson(Map json) => - _$ContentErrorDetailFromJson(json); - - static const toJsonFactory = _$ContentErrorDetailToJson; - Map toJson() => _$ContentErrorDetailToJson(this); - - @JsonKey(name: 'loc', defaultValue: []) - final List? loc; - @JsonKey(name: 'msg') - final String? msg; - @JsonKey(name: 'type') - final String? type; - static const fromJsonFactory = _$ContentErrorDetailFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is ContentErrorDetail && - (identical(other.loc, loc) || - const DeepCollectionEquality().equals(other.loc, loc)) && - (identical(other.msg, msg) || - const DeepCollectionEquality().equals(other.msg, msg)) && - (identical(other.type, type) || - const DeepCollectionEquality().equals(other.type, type))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(loc) ^ - const DeepCollectionEquality().hash(msg) ^ - const DeepCollectionEquality().hash(type) ^ - runtimeType.hashCode; -} - -extension $ContentErrorDetailExtension on ContentErrorDetail { - ContentErrorDetail copyWith({List? loc, String? msg, String? type}) { - return ContentErrorDetail( - loc: loc ?? this.loc, msg: msg ?? this.msg, type: type ?? this.type); - } - - ContentErrorDetail copyWithWrapped( - {Wrapped?>? loc, - Wrapped? msg, - Wrapped? type}) { - return ContentErrorDetail( - loc: (loc != null ? loc.value : this.loc), - msg: (msg != null ? msg.value : this.msg), - type: (type != null ? type.value : this.type)); - } -} - -@JsonSerializable(explicitToJson: true) -class DelegatePublicKey { - const DelegatePublicKey({ - required this.address, - }); - - factory DelegatePublicKey.fromJson(Map json) => - _$DelegatePublicKeyFromJson(json); - - static const toJsonFactory = _$DelegatePublicKeyToJson; - Map toJson() => _$DelegatePublicKeyToJson(this); - - @JsonKey(name: 'address') - final String address; - static const fromJsonFactory = _$DelegatePublicKeyFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is DelegatePublicKey && - (identical(other.address, address) || - const DeepCollectionEquality().equals(other.address, address))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(address) ^ runtimeType.hashCode; -} - -extension $DelegatePublicKeyExtension on DelegatePublicKey { - DelegatePublicKey copyWith({String? address}) { - return DelegatePublicKey(address: address ?? this.address); - } - - DelegatePublicKey copyWithWrapped({Wrapped? address}) { - return DelegatePublicKey( - address: (address != null ? address.value : this.address)); - } -} - -@JsonSerializable(explicitToJson: true) -class Delegation { - const Delegation({ - required this.votingKey, - required this.power, - }); - - factory Delegation.fromJson(Map json) => - _$DelegationFromJson(json); - - static const toJsonFactory = _$DelegationToJson; - Map toJson() => _$DelegationToJson(this); - - @JsonKey(name: 'voting_key') - final String votingKey; - @JsonKey(name: 'power') - final int power; - static const fromJsonFactory = _$DelegationFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is Delegation && - (identical(other.votingKey, votingKey) || - const DeepCollectionEquality() - .equals(other.votingKey, votingKey)) && - (identical(other.power, power) || - const DeepCollectionEquality().equals(other.power, power))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(votingKey) ^ - const DeepCollectionEquality().hash(power) ^ - runtimeType.hashCode; -} - -extension $DelegationExtension on Delegation { - Delegation copyWith({String? votingKey, int? power}) { - return Delegation( - votingKey: votingKey ?? this.votingKey, power: power ?? this.power); - } - - Delegation copyWithWrapped( - {Wrapped? votingKey, Wrapped? power}) { - return Delegation( - votingKey: (votingKey != null ? votingKey.value : this.votingKey), - power: (power != null ? power.value : this.power)); - } -} - -@JsonSerializable(explicitToJson: true) -class Delegations { - const Delegations({ - required this.delegations, - }); - - factory Delegations.fromJson(Map json) => - _$DelegationsFromJson(json); - - static const toJsonFactory = _$DelegationsToJson; - Map toJson() => _$DelegationsToJson(this); - - @JsonKey(name: 'delegations', defaultValue: []) - final List delegations; - static const fromJsonFactory = _$DelegationsFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is Delegations && - (identical(other.delegations, delegations) || - const DeepCollectionEquality() - .equals(other.delegations, delegations))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(delegations) ^ runtimeType.hashCode; -} - -extension $DelegationsExtension on Delegations { - Delegations copyWith({List? delegations}) { - return Delegations(delegations: delegations ?? this.delegations); - } - - Delegations copyWithWrapped({Wrapped>? delegations}) { - return Delegations( - delegations: - (delegations != null ? delegations.value : this.delegations)); - } -} - -@JsonSerializable(explicitToJson: true) -class DirectVoter { - const DirectVoter({ - required this.votingKey, - }); - - factory DirectVoter.fromJson(Map json) => - _$DirectVoterFromJson(json); - - static const toJsonFactory = _$DirectVoterToJson; - Map toJson() => _$DirectVoterToJson(this); - - @JsonKey(name: 'voting_key') - final String votingKey; - static const fromJsonFactory = _$DirectVoterFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is DirectVoter && - (identical(other.votingKey, votingKey) || - const DeepCollectionEquality() - .equals(other.votingKey, votingKey))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(votingKey) ^ runtimeType.hashCode; -} - -extension $DirectVoterExtension on DirectVoter { - DirectVoter copyWith({String? votingKey}) { - return DirectVoter(votingKey: votingKey ?? this.votingKey); - } - - DirectVoter copyWithWrapped({Wrapped? votingKey}) { - return DirectVoter( - votingKey: (votingKey != null ? votingKey.value : this.votingKey)); - } -} - -@JsonSerializable(explicitToJson: true) -class Forbidden { - const Forbidden({ - required this.id, - required this.msg, - this.required, - }); - - factory Forbidden.fromJson(Map json) => - _$ForbiddenFromJson(json); - - static const toJsonFactory = _$ForbiddenToJson; - Map toJson() => _$ForbiddenToJson(this); - - @JsonKey(name: 'id') - final String id; - @JsonKey(name: 'msg') - final String msg; - @JsonKey(name: 'required', defaultValue: []) - final List? required; - static const fromJsonFactory = _$ForbiddenFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is Forbidden && - (identical(other.id, id) || - const DeepCollectionEquality().equals(other.id, id)) && - (identical(other.msg, msg) || - const DeepCollectionEquality().equals(other.msg, msg)) && - (identical(other.required, required) || - const DeepCollectionEquality() - .equals(other.required, required))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(id) ^ - const DeepCollectionEquality().hash(msg) ^ - const DeepCollectionEquality().hash(required) ^ - runtimeType.hashCode; -} - -extension $ForbiddenExtension on Forbidden { - Forbidden copyWith({String? id, String? msg, List? required}) { - return Forbidden( - id: id ?? this.id, - msg: msg ?? this.msg, - required: required ?? this.required); - } - - Forbidden copyWithWrapped( - {Wrapped? id, - Wrapped? msg, - Wrapped?>? required}) { - return Forbidden( - id: (id != null ? id.value : this.id), - msg: (msg != null ? msg.value : this.msg), - required: (required != null ? required.value : this.required)); - } -} - -@JsonSerializable(explicitToJson: true) -class FragmentStatus { - const FragmentStatus(); - - factory FragmentStatus.fromJson(Map json) => - _$FragmentStatusFromJson(json); - - static const toJsonFactory = _$FragmentStatusToJson; - Map toJson() => _$FragmentStatusToJson(this); - - static const fromJsonFactory = _$FragmentStatusFromJson; - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => runtimeType.hashCode; -} - -@JsonSerializable(explicitToJson: true) -class FragmentsBatch { - const FragmentsBatch({ - required this.failFast, - required this.fragments, - }); - - factory FragmentsBatch.fromJson(Map json) => - _$FragmentsBatchFromJson(json); - - static const toJsonFactory = _$FragmentsBatchToJson; - Map toJson() => _$FragmentsBatchToJson(this); - - @JsonKey(name: 'fail_fast') - final bool failFast; - @JsonKey(name: 'fragments', defaultValue: []) - final List fragments; - static const fromJsonFactory = _$FragmentsBatchFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is FragmentsBatch && - (identical(other.failFast, failFast) || - const DeepCollectionEquality() - .equals(other.failFast, failFast)) && - (identical(other.fragments, fragments) || - const DeepCollectionEquality() - .equals(other.fragments, fragments))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(failFast) ^ - const DeepCollectionEquality().hash(fragments) ^ - runtimeType.hashCode; -} - -extension $FragmentsBatchExtension on FragmentsBatch { - FragmentsBatch copyWith({bool? failFast, List? fragments}) { - return FragmentsBatch( - failFast: failFast ?? this.failFast, - fragments: fragments ?? this.fragments); - } - - FragmentsBatch copyWithWrapped( - {Wrapped? failFast, Wrapped>? fragments}) { - return FragmentsBatch( - failFast: (failFast != null ? failFast.value : this.failFast), - fragments: (fragments != null ? fragments.value : this.fragments)); - } -} - -@JsonSerializable(explicitToJson: true) -class FragmentsProcessingSummary { - const FragmentsProcessingSummary({ - required this.accepted, - required this.rejected, - }); - - factory FragmentsProcessingSummary.fromJson(Map json) => - _$FragmentsProcessingSummaryFromJson(json); - - static const toJsonFactory = _$FragmentsProcessingSummaryToJson; - Map toJson() => _$FragmentsProcessingSummaryToJson(this); - - @JsonKey(name: 'accepted', defaultValue: []) - final List accepted; - @JsonKey(name: 'rejected', defaultValue: []) - final List rejected; - static const fromJsonFactory = _$FragmentsProcessingSummaryFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is FragmentsProcessingSummary && - (identical(other.accepted, accepted) || - const DeepCollectionEquality() - .equals(other.accepted, accepted)) && - (identical(other.rejected, rejected) || - const DeepCollectionEquality() - .equals(other.rejected, rejected))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(accepted) ^ - const DeepCollectionEquality().hash(rejected) ^ - runtimeType.hashCode; -} - -extension $FragmentsProcessingSummaryExtension on FragmentsProcessingSummary { - FragmentsProcessingSummary copyWith( - {List? accepted, List? rejected}) { - return FragmentsProcessingSummary( - accepted: accepted ?? this.accepted, - rejected: rejected ?? this.rejected); - } - - FragmentsProcessingSummary copyWithWrapped( - {Wrapped>? accepted, - Wrapped>? rejected}) { - return FragmentsProcessingSummary( - accepted: (accepted != null ? accepted.value : this.accepted), - rejected: (rejected != null ? rejected.value : this.rejected)); - } -} - -@JsonSerializable(explicitToJson: true) -class FrontendConfig { - const FrontendConfig({ - this.sentry, - }); - - factory FrontendConfig.fromJson(Map json) => - _$FrontendConfigFromJson(json); - - static const toJsonFactory = _$FrontendConfigToJson; - Map toJson() => _$FrontendConfigToJson(this); - - @JsonKey(name: 'sentry') - final Sentry? sentry; - static const fromJsonFactory = _$FrontendConfigFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is FrontendConfig && - (identical(other.sentry, sentry) || - const DeepCollectionEquality().equals(other.sentry, sentry))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(sentry) ^ runtimeType.hashCode; -} - -extension $FrontendConfigExtension on FrontendConfig { - FrontendConfig copyWith({Sentry? sentry}) { - return FrontendConfig(sentry: sentry ?? this.sentry); - } - - FrontendConfig copyWithWrapped({Wrapped? sentry}) { - return FrontendConfig( - sentry: (sentry != null ? sentry.value : this.sentry)); - } -} - -@JsonSerializable(explicitToJson: true) -class FullStakeInfo { - const FullStakeInfo({ - required this.volatile, - required this.persistent, - }); - - factory FullStakeInfo.fromJson(Map json) => - _$FullStakeInfoFromJson(json); - - static const toJsonFactory = _$FullStakeInfoToJson; - Map toJson() => _$FullStakeInfoToJson(this); - - @JsonKey(name: 'volatile') - final StakeInfo volatile; - @JsonKey(name: 'persistent') - final StakeInfo persistent; - static const fromJsonFactory = _$FullStakeInfoFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is FullStakeInfo && - (identical(other.volatile, volatile) || - const DeepCollectionEquality() - .equals(other.volatile, volatile)) && - (identical(other.persistent, persistent) || - const DeepCollectionEquality() - .equals(other.persistent, persistent))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(volatile) ^ - const DeepCollectionEquality().hash(persistent) ^ - runtimeType.hashCode; -} - -extension $FullStakeInfoExtension on FullStakeInfo { - FullStakeInfo copyWith({StakeInfo? volatile, StakeInfo? persistent}) { - return FullStakeInfo( - volatile: volatile ?? this.volatile, - persistent: persistent ?? this.persistent); - } - - FullStakeInfo copyWithWrapped( - {Wrapped? volatile, Wrapped? persistent}) { - return FullStakeInfo( - volatile: (volatile != null ? volatile.value : this.volatile), - persistent: (persistent != null ? persistent.value : this.persistent)); - } -} - -@JsonSerializable(explicitToJson: true) -class Hash { - const Hash({ - required this.hash, - }); - - factory Hash.fromJson(Map json) => _$HashFromJson(json); - - static const toJsonFactory = _$HashToJson; - Map toJson() => _$HashToJson(this); - - @JsonKey(name: 'hash') - final String hash; - static const fromJsonFactory = _$HashFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is Hash && - (identical(other.hash, hash) || - const DeepCollectionEquality().equals(other.hash, hash))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(hash) ^ runtimeType.hashCode; -} - -extension $HashExtension on Hash { - Hash copyWith({String? hash}) { - return Hash(hash: hash ?? this.hash); - } - - Hash copyWithWrapped({Wrapped? hash}) { - return Hash(hash: (hash != null ? hash.value : this.hash)); - } -} - -@JsonSerializable(explicitToJson: true) -class InternalServerError { - const InternalServerError({ - required this.id, - required this.msg, - this.issue, - }); - - factory InternalServerError.fromJson(Map json) => - _$InternalServerErrorFromJson(json); - - static const toJsonFactory = _$InternalServerErrorToJson; - Map toJson() => _$InternalServerErrorToJson(this); - - @JsonKey(name: 'id') - final String id; - @JsonKey(name: 'msg') - final String msg; - @JsonKey(name: 'issue') - final String? issue; - static const fromJsonFactory = _$InternalServerErrorFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is InternalServerError && - (identical(other.id, id) || - const DeepCollectionEquality().equals(other.id, id)) && - (identical(other.msg, msg) || - const DeepCollectionEquality().equals(other.msg, msg)) && - (identical(other.issue, issue) || - const DeepCollectionEquality().equals(other.issue, issue))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(id) ^ - const DeepCollectionEquality().hash(msg) ^ - const DeepCollectionEquality().hash(issue) ^ - runtimeType.hashCode; -} - -extension $InternalServerErrorExtension on InternalServerError { - InternalServerError copyWith({String? id, String? msg, String? issue}) { - return InternalServerError( - id: id ?? this.id, msg: msg ?? this.msg, issue: issue ?? this.issue); - } - - InternalServerError copyWithWrapped( - {Wrapped? id, Wrapped? msg, Wrapped? issue}) { - return InternalServerError( - id: (id != null ? id.value : this.id), - msg: (msg != null ? msg.value : this.msg), - issue: (issue != null ? issue.value : this.issue)); - } -} - -@JsonSerializable(explicitToJson: true) -class InvalidRegistrationsReport { - const InvalidRegistrationsReport({ - required this.errorReport, - required this.stakeAddress, - required this.voteKey, - required this.paymentAddress, - required this.isPayable, - required this.cip36, - }); - - factory InvalidRegistrationsReport.fromJson(Map json) => - _$InvalidRegistrationsReportFromJson(json); - - static const toJsonFactory = _$InvalidRegistrationsReportToJson; - Map toJson() => _$InvalidRegistrationsReportToJson(this); - - @JsonKey(name: 'error_report', defaultValue: []) - final List errorReport; - @JsonKey(name: 'stake_address') - final String stakeAddress; - @JsonKey(name: 'vote_key') - final String voteKey; - @JsonKey(name: 'payment_address') - final String paymentAddress; - @JsonKey(name: 'is_payable') - final bool isPayable; - @JsonKey(name: 'cip36') - final bool cip36; - static const fromJsonFactory = _$InvalidRegistrationsReportFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is InvalidRegistrationsReport && - (identical(other.errorReport, errorReport) || - const DeepCollectionEquality() - .equals(other.errorReport, errorReport)) && - (identical(other.stakeAddress, stakeAddress) || - const DeepCollectionEquality() - .equals(other.stakeAddress, stakeAddress)) && - (identical(other.voteKey, voteKey) || - const DeepCollectionEquality() - .equals(other.voteKey, voteKey)) && - (identical(other.paymentAddress, paymentAddress) || - const DeepCollectionEquality() - .equals(other.paymentAddress, paymentAddress)) && - (identical(other.isPayable, isPayable) || - const DeepCollectionEquality() - .equals(other.isPayable, isPayable)) && - (identical(other.cip36, cip36) || - const DeepCollectionEquality().equals(other.cip36, cip36))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(errorReport) ^ - const DeepCollectionEquality().hash(stakeAddress) ^ - const DeepCollectionEquality().hash(voteKey) ^ - const DeepCollectionEquality().hash(paymentAddress) ^ - const DeepCollectionEquality().hash(isPayable) ^ - const DeepCollectionEquality().hash(cip36) ^ - runtimeType.hashCode; -} - -extension $InvalidRegistrationsReportExtension on InvalidRegistrationsReport { - InvalidRegistrationsReport copyWith( - {List? errorReport, - String? stakeAddress, - String? voteKey, - String? paymentAddress, - bool? isPayable, - bool? cip36}) { - return InvalidRegistrationsReport( - errorReport: errorReport ?? this.errorReport, - stakeAddress: stakeAddress ?? this.stakeAddress, - voteKey: voteKey ?? this.voteKey, - paymentAddress: paymentAddress ?? this.paymentAddress, - isPayable: isPayable ?? this.isPayable, - cip36: cip36 ?? this.cip36); - } - - InvalidRegistrationsReport copyWithWrapped( - {Wrapped>? errorReport, - Wrapped? stakeAddress, - Wrapped? voteKey, - Wrapped? paymentAddress, - Wrapped? isPayable, - Wrapped? cip36}) { - return InvalidRegistrationsReport( - errorReport: - (errorReport != null ? errorReport.value : this.errorReport), - stakeAddress: - (stakeAddress != null ? stakeAddress.value : this.stakeAddress), - voteKey: (voteKey != null ? voteKey.value : this.voteKey), - paymentAddress: (paymentAddress != null - ? paymentAddress.value - : this.paymentAddress), - isPayable: (isPayable != null ? isPayable.value : this.isPayable), - cip36: (cip36 != null ? cip36.value : this.cip36)); - } -} - -@JsonSerializable(explicitToJson: true) -class RbacRegistration { - const RbacRegistration({ - required this.txHash, - }); - - factory RbacRegistration.fromJson(Map json) => - _$RbacRegistrationFromJson(json); - - static const toJsonFactory = _$RbacRegistrationToJson; - Map toJson() => _$RbacRegistrationToJson(this); - - @JsonKey(name: 'tx_hash') - final String txHash; - static const fromJsonFactory = _$RbacRegistrationFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is RbacRegistration && - (identical(other.txHash, txHash) || - const DeepCollectionEquality().equals(other.txHash, txHash))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(txHash) ^ runtimeType.hashCode; -} - -extension $RbacRegistrationExtension on RbacRegistration { - RbacRegistration copyWith({String? txHash}) { - return RbacRegistration(txHash: txHash ?? this.txHash); - } - - RbacRegistration copyWithWrapped({Wrapped? txHash}) { - return RbacRegistration( - txHash: (txHash != null ? txHash.value : this.txHash)); - } -} - -@JsonSerializable(explicitToJson: true) -class RbacRegistrationsResponse { - const RbacRegistrationsResponse({ - required this.registrations, - }); - - factory RbacRegistrationsResponse.fromJson(Map json) => - _$RbacRegistrationsResponseFromJson(json); - - static const toJsonFactory = _$RbacRegistrationsResponseToJson; - Map toJson() => _$RbacRegistrationsResponseToJson(this); - - @JsonKey(name: 'registrations', defaultValue: []) - final List registrations; - static const fromJsonFactory = _$RbacRegistrationsResponseFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is RbacRegistrationsResponse && - (identical(other.registrations, registrations) || - const DeepCollectionEquality() - .equals(other.registrations, registrations))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(registrations) ^ runtimeType.hashCode; -} - -extension $RbacRegistrationsResponseExtension on RbacRegistrationsResponse { - RbacRegistrationsResponse copyWith({List? registrations}) { - return RbacRegistrationsResponse( - registrations: registrations ?? this.registrations); - } - - RbacRegistrationsResponse copyWithWrapped( - {Wrapped>? registrations}) { - return RbacRegistrationsResponse( - registrations: - (registrations != null ? registrations.value : this.registrations)); - } -} - -@JsonSerializable(explicitToJson: true) -class RbacRole0ChainRootResponse { - const RbacRole0ChainRootResponse({ - required this.chainRoot, - }); - - factory RbacRole0ChainRootResponse.fromJson(Map json) => - _$RbacRole0ChainRootResponseFromJson(json); - - static const toJsonFactory = _$RbacRole0ChainRootResponseToJson; - Map toJson() => _$RbacRole0ChainRootResponseToJson(this); - - @JsonKey(name: 'chain_root') - final String chainRoot; - static const fromJsonFactory = _$RbacRole0ChainRootResponseFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is RbacRole0ChainRootResponse && - (identical(other.chainRoot, chainRoot) || - const DeepCollectionEquality() - .equals(other.chainRoot, chainRoot))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(chainRoot) ^ runtimeType.hashCode; -} - -extension $RbacRole0ChainRootResponseExtension on RbacRole0ChainRootResponse { - RbacRole0ChainRootResponse copyWith({String? chainRoot}) { - return RbacRole0ChainRootResponse(chainRoot: chainRoot ?? this.chainRoot); - } - - RbacRole0ChainRootResponse copyWithWrapped({Wrapped? chainRoot}) { - return RbacRole0ChainRootResponse( - chainRoot: (chainRoot != null ? chainRoot.value : this.chainRoot)); - } -} - -@JsonSerializable(explicitToJson: true) -class RegistrationInfo { - const RegistrationInfo({ - required this.rewardsAddress, - required this.txHash, - required this.nonce, - required this.votingInfo, - }); - - factory RegistrationInfo.fromJson(Map json) => - _$RegistrationInfoFromJson(json); - - static const toJsonFactory = _$RegistrationInfoToJson; - Map toJson() => _$RegistrationInfoToJson(this); - - @JsonKey(name: 'rewards_address') - final String rewardsAddress; - @JsonKey(name: 'tx_hash') - final String txHash; - @JsonKey(name: 'nonce') - final int nonce; - @JsonKey(name: 'voting_info') - final VotingInfo votingInfo; - static const fromJsonFactory = _$RegistrationInfoFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is RegistrationInfo && - (identical(other.rewardsAddress, rewardsAddress) || - const DeepCollectionEquality() - .equals(other.rewardsAddress, rewardsAddress)) && - (identical(other.txHash, txHash) || - const DeepCollectionEquality().equals(other.txHash, txHash)) && - (identical(other.nonce, nonce) || - const DeepCollectionEquality().equals(other.nonce, nonce)) && - (identical(other.votingInfo, votingInfo) || - const DeepCollectionEquality() - .equals(other.votingInfo, votingInfo))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(rewardsAddress) ^ - const DeepCollectionEquality().hash(txHash) ^ - const DeepCollectionEquality().hash(nonce) ^ - const DeepCollectionEquality().hash(votingInfo) ^ - runtimeType.hashCode; -} - -extension $RegistrationInfoExtension on RegistrationInfo { - RegistrationInfo copyWith( - {String? rewardsAddress, - String? txHash, - int? nonce, - VotingInfo? votingInfo}) { - return RegistrationInfo( - rewardsAddress: rewardsAddress ?? this.rewardsAddress, - txHash: txHash ?? this.txHash, - nonce: nonce ?? this.nonce, - votingInfo: votingInfo ?? this.votingInfo); - } - - RegistrationInfo copyWithWrapped( - {Wrapped? rewardsAddress, - Wrapped? txHash, - Wrapped? nonce, - Wrapped? votingInfo}) { - return RegistrationInfo( - rewardsAddress: (rewardsAddress != null - ? rewardsAddress.value - : this.rewardsAddress), - txHash: (txHash != null ? txHash.value : this.txHash), - nonce: (nonce != null ? nonce.value : this.nonce), - votingInfo: (votingInfo != null ? votingInfo.value : this.votingInfo)); - } -} - -@JsonSerializable(explicitToJson: true) -class RejectedFragment { - const RejectedFragment({ - required this.id, - required this.poolNumber, - required this.reason, - }); - - factory RejectedFragment.fromJson(Map json) => - _$RejectedFragmentFromJson(json); - - static const toJsonFactory = _$RejectedFragmentToJson; - Map toJson() => _$RejectedFragmentToJson(this); - - @JsonKey(name: 'id') - final String id; - @JsonKey(name: 'pool_number') - final int poolNumber; - @JsonKey( - name: 'reason', - toJson: reasonRejectedToJson, - fromJson: reasonRejectedFromJson, - ) - final enums.ReasonRejected reason; - static const fromJsonFactory = _$RejectedFragmentFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is RejectedFragment && - (identical(other.id, id) || - const DeepCollectionEquality().equals(other.id, id)) && - (identical(other.poolNumber, poolNumber) || - const DeepCollectionEquality() - .equals(other.poolNumber, poolNumber)) && - (identical(other.reason, reason) || - const DeepCollectionEquality().equals(other.reason, reason))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(id) ^ - const DeepCollectionEquality().hash(poolNumber) ^ - const DeepCollectionEquality().hash(reason) ^ - runtimeType.hashCode; -} - -extension $RejectedFragmentExtension on RejectedFragment { - RejectedFragment copyWith( - {String? id, int? poolNumber, enums.ReasonRejected? reason}) { - return RejectedFragment( - id: id ?? this.id, - poolNumber: poolNumber ?? this.poolNumber, - reason: reason ?? this.reason); - } - - RejectedFragment copyWithWrapped( - {Wrapped? id, - Wrapped? poolNumber, - Wrapped? reason}) { - return RejectedFragment( - id: (id != null ? id.value : this.id), - poolNumber: (poolNumber != null ? poolNumber.value : this.poolNumber), - reason: (reason != null ? reason.value : this.reason)); - } -} - -@JsonSerializable(explicitToJson: true) -class Response$ { - const Response$({ - required this.chainRoot, - }); - - factory Response$.fromJson(Map json) => - _$Response$FromJson(json); - - static const toJsonFactory = _$Response$ToJson; - Map toJson() => _$Response$ToJson(this); - - @JsonKey(name: 'chain_root') - final String chainRoot; - static const fromJsonFactory = _$Response$FromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is Response$ && - (identical(other.chainRoot, chainRoot) || - const DeepCollectionEquality() - .equals(other.chainRoot, chainRoot))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(chainRoot) ^ runtimeType.hashCode; -} - -extension $Response$Extension on Response$ { - Response$ copyWith({String? chainRoot}) { - return Response$(chainRoot: chainRoot ?? this.chainRoot); - } - - Response$ copyWithWrapped({Wrapped? chainRoot}) { - return Response$( - chainRoot: (chainRoot != null ? chainRoot.value : this.chainRoot)); - } -} - -@JsonSerializable(explicitToJson: true) -class Sentry { - const Sentry({ - required this.dsn, - this.release, - this.environment, - }); - - factory Sentry.fromJson(Map json) => _$SentryFromJson(json); - - static const toJsonFactory = _$SentryToJson; - Map toJson() => _$SentryToJson(this); - - @JsonKey(name: 'dsn') - final String dsn; - @JsonKey(name: 'release') - final String? release; - @JsonKey(name: 'environment') - final String? environment; - static const fromJsonFactory = _$SentryFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is Sentry && - (identical(other.dsn, dsn) || - const DeepCollectionEquality().equals(other.dsn, dsn)) && - (identical(other.release, release) || - const DeepCollectionEquality() - .equals(other.release, release)) && - (identical(other.environment, environment) || - const DeepCollectionEquality() - .equals(other.environment, environment))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(dsn) ^ - const DeepCollectionEquality().hash(release) ^ - const DeepCollectionEquality().hash(environment) ^ - runtimeType.hashCode; -} - -extension $SentryExtension on Sentry { - Sentry copyWith({String? dsn, String? release, String? environment}) { - return Sentry( - dsn: dsn ?? this.dsn, - release: release ?? this.release, - environment: environment ?? this.environment); - } - - Sentry copyWithWrapped( - {Wrapped? dsn, - Wrapped? release, - Wrapped? environment}) { - return Sentry( - dsn: (dsn != null ? dsn.value : this.dsn), - release: (release != null ? release.value : this.release), - environment: - (environment != null ? environment.value : this.environment)); - } -} - -@JsonSerializable(explicitToJson: true) -class ServiceUnavailable { - const ServiceUnavailable({ - required this.id, - required this.msg, - }); - - factory ServiceUnavailable.fromJson(Map json) => - _$ServiceUnavailableFromJson(json); - - static const toJsonFactory = _$ServiceUnavailableToJson; - Map toJson() => _$ServiceUnavailableToJson(this); - - @JsonKey(name: 'id') - final String id; - @JsonKey(name: 'msg') - final String msg; - static const fromJsonFactory = _$ServiceUnavailableFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is ServiceUnavailable && - (identical(other.id, id) || - const DeepCollectionEquality().equals(other.id, id)) && - (identical(other.msg, msg) || - const DeepCollectionEquality().equals(other.msg, msg))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(id) ^ - const DeepCollectionEquality().hash(msg) ^ - runtimeType.hashCode; -} - -extension $ServiceUnavailableExtension on ServiceUnavailable { - ServiceUnavailable copyWith({String? id, String? msg}) { - return ServiceUnavailable(id: id ?? this.id, msg: msg ?? this.msg); - } - - ServiceUnavailable copyWithWrapped( - {Wrapped? id, Wrapped? msg}) { - return ServiceUnavailable( - id: (id != null ? id.value : this.id), - msg: (msg != null ? msg.value : this.msg)); - } -} - -@JsonSerializable(explicitToJson: true) -class Slot { - const Slot({ - required this.slotNumber, - required this.blockHash, - required this.blockTime, - }); - - factory Slot.fromJson(Map json) => _$SlotFromJson(json); - - static const toJsonFactory = _$SlotToJson; - Map toJson() => _$SlotToJson(this); - - @JsonKey(name: 'slot_number') - final int slotNumber; - @JsonKey(name: 'block_hash') - final String blockHash; - @JsonKey(name: 'block_time') - final DateTime blockTime; - static const fromJsonFactory = _$SlotFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is Slot && - (identical(other.slotNumber, slotNumber) || - const DeepCollectionEquality() - .equals(other.slotNumber, slotNumber)) && - (identical(other.blockHash, blockHash) || - const DeepCollectionEquality() - .equals(other.blockHash, blockHash)) && - (identical(other.blockTime, blockTime) || - const DeepCollectionEquality() - .equals(other.blockTime, blockTime))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(slotNumber) ^ - const DeepCollectionEquality().hash(blockHash) ^ - const DeepCollectionEquality().hash(blockTime) ^ - runtimeType.hashCode; -} - -extension $SlotExtension on Slot { - Slot copyWith({int? slotNumber, String? blockHash, DateTime? blockTime}) { - return Slot( - slotNumber: slotNumber ?? this.slotNumber, - blockHash: blockHash ?? this.blockHash, - blockTime: blockTime ?? this.blockTime); - } - - Slot copyWithWrapped( - {Wrapped? slotNumber, - Wrapped? blockHash, - Wrapped? blockTime}) { - return Slot( - slotNumber: (slotNumber != null ? slotNumber.value : this.slotNumber), - blockHash: (blockHash != null ? blockHash.value : this.blockHash), - blockTime: (blockTime != null ? blockTime.value : this.blockTime)); - } -} - -@JsonSerializable(explicitToJson: true) -class SlotInfo { - const SlotInfo({ - this.previous, - this.current, - this.next, - }); - - factory SlotInfo.fromJson(Map json) => - _$SlotInfoFromJson(json); - - static const toJsonFactory = _$SlotInfoToJson; - Map toJson() => _$SlotInfoToJson(this); - - @JsonKey(name: 'previous') - final Slot? previous; - @JsonKey(name: 'current') - final Slot? current; - @JsonKey(name: 'next') - final Slot? next; - static const fromJsonFactory = _$SlotInfoFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is SlotInfo && - (identical(other.previous, previous) || - const DeepCollectionEquality() - .equals(other.previous, previous)) && - (identical(other.current, current) || - const DeepCollectionEquality() - .equals(other.current, current)) && - (identical(other.next, next) || - const DeepCollectionEquality().equals(other.next, next))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(previous) ^ - const DeepCollectionEquality().hash(current) ^ - const DeepCollectionEquality().hash(next) ^ - runtimeType.hashCode; -} - -extension $SlotInfoExtension on SlotInfo { - SlotInfo copyWith({Slot? previous, Slot? current, Slot? next}) { - return SlotInfo( - previous: previous ?? this.previous, - current: current ?? this.current, - next: next ?? this.next); - } - - SlotInfo copyWithWrapped( - {Wrapped? previous, - Wrapped? current, - Wrapped? next}) { - return SlotInfo( - previous: (previous != null ? previous.value : this.previous), - current: (current != null ? current.value : this.current), - next: (next != null ? next.value : this.next)); - } -} - -@JsonSerializable(explicitToJson: true) -class StakeInfo { - const StakeInfo({ - required this.adaAmount, - required this.slotNumber, - required this.nativeTokens, - }); - - factory StakeInfo.fromJson(Map json) => - _$StakeInfoFromJson(json); - - static const toJsonFactory = _$StakeInfoToJson; - Map toJson() => _$StakeInfoToJson(this); - - @JsonKey(name: 'ada_amount') - final int adaAmount; - @JsonKey(name: 'slot_number') - final int slotNumber; - @JsonKey(name: 'native_tokens', defaultValue: []) - final List nativeTokens; - static const fromJsonFactory = _$StakeInfoFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is StakeInfo && - (identical(other.adaAmount, adaAmount) || - const DeepCollectionEquality() - .equals(other.adaAmount, adaAmount)) && - (identical(other.slotNumber, slotNumber) || - const DeepCollectionEquality() - .equals(other.slotNumber, slotNumber)) && - (identical(other.nativeTokens, nativeTokens) || - const DeepCollectionEquality() - .equals(other.nativeTokens, nativeTokens))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(adaAmount) ^ - const DeepCollectionEquality().hash(slotNumber) ^ - const DeepCollectionEquality().hash(nativeTokens) ^ - runtimeType.hashCode; -} - -extension $StakeInfoExtension on StakeInfo { - StakeInfo copyWith( - {int? adaAmount, - int? slotNumber, - List? nativeTokens}) { - return StakeInfo( - adaAmount: adaAmount ?? this.adaAmount, - slotNumber: slotNumber ?? this.slotNumber, - nativeTokens: nativeTokens ?? this.nativeTokens); - } - - StakeInfo copyWithWrapped( - {Wrapped? adaAmount, - Wrapped? slotNumber, - Wrapped>? nativeTokens}) { - return StakeInfo( - adaAmount: (adaAmount != null ? adaAmount.value : this.adaAmount), - slotNumber: (slotNumber != null ? slotNumber.value : this.slotNumber), - nativeTokens: - (nativeTokens != null ? nativeTokens.value : this.nativeTokens)); - } -} - -@JsonSerializable(explicitToJson: true) -class StakedNativeTokenInfo { - const StakedNativeTokenInfo({ - required this.policyHash, - required this.assetName, - required this.amount, - }); - - factory StakedNativeTokenInfo.fromJson(Map json) => - _$StakedNativeTokenInfoFromJson(json); - - static const toJsonFactory = _$StakedNativeTokenInfoToJson; - Map toJson() => _$StakedNativeTokenInfoToJson(this); - - @JsonKey(name: 'policy_hash') - final String policyHash; - @JsonKey(name: 'asset_name') - final String assetName; - @JsonKey(name: 'amount') - final int amount; - static const fromJsonFactory = _$StakedNativeTokenInfoFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is StakedNativeTokenInfo && - (identical(other.policyHash, policyHash) || - const DeepCollectionEquality() - .equals(other.policyHash, policyHash)) && - (identical(other.assetName, assetName) || - const DeepCollectionEquality() - .equals(other.assetName, assetName)) && - (identical(other.amount, amount) || - const DeepCollectionEquality().equals(other.amount, amount))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(policyHash) ^ - const DeepCollectionEquality().hash(assetName) ^ - const DeepCollectionEquality().hash(amount) ^ - runtimeType.hashCode; -} - -extension $StakedNativeTokenInfoExtension on StakedNativeTokenInfo { - StakedNativeTokenInfo copyWith( - {String? policyHash, String? assetName, int? amount}) { - return StakedNativeTokenInfo( - policyHash: policyHash ?? this.policyHash, - assetName: assetName ?? this.assetName, - amount: amount ?? this.amount); - } - - StakedNativeTokenInfo copyWithWrapped( - {Wrapped? policyHash, - Wrapped? assetName, - Wrapped? amount}) { - return StakedNativeTokenInfo( - policyHash: (policyHash != null ? policyHash.value : this.policyHash), - assetName: (assetName != null ? assetName.value : this.assetName), - amount: (amount != null ? amount.value : this.amount)); - } -} - -@JsonSerializable(explicitToJson: true) -class StatusInABlock { - const StatusInABlock({ - required this.date, - required this.block, - }); - - factory StatusInABlock.fromJson(Map json) => - _$StatusInABlockFromJson(json); - - static const toJsonFactory = _$StatusInABlockToJson; - Map toJson() => _$StatusInABlockToJson(this); - - @JsonKey(name: 'date') - final BlockDate date; - @JsonKey(name: 'block') - final Hash block; - static const fromJsonFactory = _$StatusInABlockFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is StatusInABlock && - (identical(other.date, date) || - const DeepCollectionEquality().equals(other.date, date)) && - (identical(other.block, block) || - const DeepCollectionEquality().equals(other.block, block))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(date) ^ - const DeepCollectionEquality().hash(block) ^ - runtimeType.hashCode; -} - -extension $StatusInABlockExtension on StatusInABlock { - StatusInABlock copyWith({BlockDate? date, Hash? block}) { - return StatusInABlock(date: date ?? this.date, block: block ?? this.block); - } - - StatusInABlock copyWithWrapped( - {Wrapped? date, Wrapped? block}) { - return StatusInABlock( - date: (date != null ? date.value : this.date), - block: (block != null ? block.value : this.block)); - } -} - -@JsonSerializable(explicitToJson: true) -class StatusPending { - const StatusPending(); - - factory StatusPending.fromJson(Map json) => - _$StatusPendingFromJson(json); - - static const toJsonFactory = _$StatusPendingToJson; - Map toJson() => _$StatusPendingToJson(this); - - static const fromJsonFactory = _$StatusPendingFromJson; - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => runtimeType.hashCode; -} - -@JsonSerializable(explicitToJson: true) -class StatusRejected { - const StatusRejected({ - required this.reason, - }); - - factory StatusRejected.fromJson(Map json) => - _$StatusRejectedFromJson(json); - - static const toJsonFactory = _$StatusRejectedToJson; - Map toJson() => _$StatusRejectedToJson(this); - - @JsonKey(name: 'reason') - final String reason; - static const fromJsonFactory = _$StatusRejectedFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is StatusRejected && - (identical(other.reason, reason) || - const DeepCollectionEquality().equals(other.reason, reason))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(reason) ^ runtimeType.hashCode; -} - -extension $StatusRejectedExtension on StatusRejected { - StatusRejected copyWith({String? reason}) { - return StatusRejected(reason: reason ?? this.reason); - } - - StatusRejected copyWithWrapped({Wrapped? reason}) { - return StatusRejected( - reason: (reason != null ? reason.value : this.reason)); - } -} - -@JsonSerializable(explicitToJson: true) -class SyncState { - const SyncState({ - required this.slotNumber, - required this.blockHash, - required this.lastUpdated, - }); - - factory SyncState.fromJson(Map json) => - _$SyncStateFromJson(json); - - static const toJsonFactory = _$SyncStateToJson; - Map toJson() => _$SyncStateToJson(this); - - @JsonKey(name: 'slot_number') - final int slotNumber; - @JsonKey(name: 'block_hash') - final String blockHash; - @JsonKey(name: 'last_updated') - final DateTime lastUpdated; - static const fromJsonFactory = _$SyncStateFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is SyncState && - (identical(other.slotNumber, slotNumber) || - const DeepCollectionEquality() - .equals(other.slotNumber, slotNumber)) && - (identical(other.blockHash, blockHash) || - const DeepCollectionEquality() - .equals(other.blockHash, blockHash)) && - (identical(other.lastUpdated, lastUpdated) || - const DeepCollectionEquality() - .equals(other.lastUpdated, lastUpdated))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(slotNumber) ^ - const DeepCollectionEquality().hash(blockHash) ^ - const DeepCollectionEquality().hash(lastUpdated) ^ - runtimeType.hashCode; -} - -extension $SyncStateExtension on SyncState { - SyncState copyWith( - {int? slotNumber, String? blockHash, DateTime? lastUpdated}) { - return SyncState( - slotNumber: slotNumber ?? this.slotNumber, - blockHash: blockHash ?? this.blockHash, - lastUpdated: lastUpdated ?? this.lastUpdated); - } - - SyncState copyWithWrapped( - {Wrapped? slotNumber, - Wrapped? blockHash, - Wrapped? lastUpdated}) { - return SyncState( - slotNumber: (slotNumber != null ? slotNumber.value : this.slotNumber), - blockHash: (blockHash != null ? blockHash.value : this.blockHash), - lastUpdated: - (lastUpdated != null ? lastUpdated.value : this.lastUpdated)); - } -} - -@JsonSerializable(explicitToJson: true) -class TooManyRequests { - const TooManyRequests({ - required this.id, - required this.msg, - }); - - factory TooManyRequests.fromJson(Map json) => - _$TooManyRequestsFromJson(json); - - static const toJsonFactory = _$TooManyRequestsToJson; - Map toJson() => _$TooManyRequestsToJson(this); - - @JsonKey(name: 'id') - final String id; - @JsonKey(name: 'msg') - final String msg; - static const fromJsonFactory = _$TooManyRequestsFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is TooManyRequests && - (identical(other.id, id) || - const DeepCollectionEquality().equals(other.id, id)) && - (identical(other.msg, msg) || - const DeepCollectionEquality().equals(other.msg, msg))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(id) ^ - const DeepCollectionEquality().hash(msg) ^ - runtimeType.hashCode; -} - -extension $TooManyRequestsExtension on TooManyRequests { - TooManyRequests copyWith({String? id, String? msg}) { - return TooManyRequests(id: id ?? this.id, msg: msg ?? this.msg); - } - - TooManyRequests copyWithWrapped({Wrapped? id, Wrapped? msg}) { - return TooManyRequests( - id: (id != null ? id.value : this.id), - msg: (msg != null ? msg.value : this.msg)); - } -} - -@JsonSerializable(explicitToJson: true) -class Unauthorized { - const Unauthorized({ - required this.id, - required this.msg, - }); - - factory Unauthorized.fromJson(Map json) => - _$UnauthorizedFromJson(json); - - static const toJsonFactory = _$UnauthorizedToJson; - Map toJson() => _$UnauthorizedToJson(this); - - @JsonKey(name: 'id') - final String id; - @JsonKey(name: 'msg') - final String msg; - static const fromJsonFactory = _$UnauthorizedFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is Unauthorized && - (identical(other.id, id) || - const DeepCollectionEquality().equals(other.id, id)) && - (identical(other.msg, msg) || - const DeepCollectionEquality().equals(other.msg, msg))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(id) ^ - const DeepCollectionEquality().hash(msg) ^ - runtimeType.hashCode; -} - -extension $UnauthorizedExtension on Unauthorized { - Unauthorized copyWith({String? id, String? msg}) { - return Unauthorized(id: id ?? this.id, msg: msg ?? this.msg); - } - - Unauthorized copyWithWrapped({Wrapped? id, Wrapped? msg}) { - return Unauthorized( - id: (id != null ? id.value : this.id), - msg: (msg != null ? msg.value : this.msg)); - } -} - -@JsonSerializable(explicitToJson: true) -class UnprocessableContent { - const UnprocessableContent({ - required this.detail, - }); - - factory UnprocessableContent.fromJson(Map json) => - _$UnprocessableContentFromJson(json); - - static const toJsonFactory = _$UnprocessableContentToJson; - Map toJson() => _$UnprocessableContentToJson(this); - - @JsonKey(name: 'detail', defaultValue: []) - final List detail; - static const fromJsonFactory = _$UnprocessableContentFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is UnprocessableContent && - (identical(other.detail, detail) || - const DeepCollectionEquality().equals(other.detail, detail))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(detail) ^ runtimeType.hashCode; -} - -extension $UnprocessableContentExtension on UnprocessableContent { - UnprocessableContent copyWith({List? detail}) { - return UnprocessableContent(detail: detail ?? this.detail); - } - - UnprocessableContent copyWithWrapped( - {Wrapped>? detail}) { - return UnprocessableContent( - detail: (detail != null ? detail.value : this.detail)); - } -} - -@JsonSerializable(explicitToJson: true) -class VotePlan { - const VotePlan({ - required this.votingToken, - }); - - factory VotePlan.fromJson(Map json) => - _$VotePlanFromJson(json); - - static const toJsonFactory = _$VotePlanToJson; - Map toJson() => _$VotePlanToJson(this); - - @JsonKey(name: 'voting_token') - final String votingToken; - static const fromJsonFactory = _$VotePlanFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is VotePlan && - (identical(other.votingToken, votingToken) || - const DeepCollectionEquality() - .equals(other.votingToken, votingToken))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(votingToken) ^ runtimeType.hashCode; -} - -extension $VotePlanExtension on VotePlan { - VotePlan copyWith({String? votingToken}) { - return VotePlan(votingToken: votingToken ?? this.votingToken); - } - - VotePlan copyWithWrapped({Wrapped? votingToken}) { - return VotePlan( - votingToken: - (votingToken != null ? votingToken.value : this.votingToken)); - } -} - -@JsonSerializable(explicitToJson: true) -class VoterInfo { - const VoterInfo({ - required this.votingPower, - required this.votingGroup, - required this.delegationsPower, - required this.delegationsCount, - required this.votingPowerSaturation, - this.delegatorAddresses, - }); - - factory VoterInfo.fromJson(Map json) => - _$VoterInfoFromJson(json); - - static const toJsonFactory = _$VoterInfoToJson; - Map toJson() => _$VoterInfoToJson(this); - - @JsonKey(name: 'voting_power') - final int votingPower; - @JsonKey( - name: 'voting_group', - toJson: voterGroupIdToJson, - fromJson: voterGroupIdFromJson, - ) - final enums.VoterGroupId votingGroup; - @JsonKey(name: 'delegations_power') - final int delegationsPower; - @JsonKey(name: 'delegations_count') - final int delegationsCount; - @JsonKey(name: 'voting_power_saturation') - final double votingPowerSaturation; - @JsonKey(name: 'delegator_addresses', defaultValue: []) - final List? delegatorAddresses; - static const fromJsonFactory = _$VoterInfoFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is VoterInfo && - (identical(other.votingPower, votingPower) || - const DeepCollectionEquality() - .equals(other.votingPower, votingPower)) && - (identical(other.votingGroup, votingGroup) || - const DeepCollectionEquality() - .equals(other.votingGroup, votingGroup)) && - (identical(other.delegationsPower, delegationsPower) || - const DeepCollectionEquality() - .equals(other.delegationsPower, delegationsPower)) && - (identical(other.delegationsCount, delegationsCount) || - const DeepCollectionEquality() - .equals(other.delegationsCount, delegationsCount)) && - (identical(other.votingPowerSaturation, votingPowerSaturation) || - const DeepCollectionEquality().equals( - other.votingPowerSaturation, votingPowerSaturation)) && - (identical(other.delegatorAddresses, delegatorAddresses) || - const DeepCollectionEquality() - .equals(other.delegatorAddresses, delegatorAddresses))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(votingPower) ^ - const DeepCollectionEquality().hash(votingGroup) ^ - const DeepCollectionEquality().hash(delegationsPower) ^ - const DeepCollectionEquality().hash(delegationsCount) ^ - const DeepCollectionEquality().hash(votingPowerSaturation) ^ - const DeepCollectionEquality().hash(delegatorAddresses) ^ - runtimeType.hashCode; -} - -extension $VoterInfoExtension on VoterInfo { - VoterInfo copyWith( - {int? votingPower, - enums.VoterGroupId? votingGroup, - int? delegationsPower, - int? delegationsCount, - double? votingPowerSaturation, - List? delegatorAddresses}) { - return VoterInfo( - votingPower: votingPower ?? this.votingPower, - votingGroup: votingGroup ?? this.votingGroup, - delegationsPower: delegationsPower ?? this.delegationsPower, - delegationsCount: delegationsCount ?? this.delegationsCount, - votingPowerSaturation: - votingPowerSaturation ?? this.votingPowerSaturation, - delegatorAddresses: delegatorAddresses ?? this.delegatorAddresses); - } - - VoterInfo copyWithWrapped( - {Wrapped? votingPower, - Wrapped? votingGroup, - Wrapped? delegationsPower, - Wrapped? delegationsCount, - Wrapped? votingPowerSaturation, - Wrapped?>? delegatorAddresses}) { - return VoterInfo( - votingPower: - (votingPower != null ? votingPower.value : this.votingPower), - votingGroup: - (votingGroup != null ? votingGroup.value : this.votingGroup), - delegationsPower: (delegationsPower != null - ? delegationsPower.value - : this.delegationsPower), - delegationsCount: (delegationsCount != null - ? delegationsCount.value - : this.delegationsCount), - votingPowerSaturation: (votingPowerSaturation != null - ? votingPowerSaturation.value - : this.votingPowerSaturation), - delegatorAddresses: (delegatorAddresses != null - ? delegatorAddresses.value - : this.delegatorAddresses)); - } -} - -@JsonSerializable(explicitToJson: true) -class VoterRegistration { - const VoterRegistration({ - required this.voterInfo, - required this.asAt, - required this.lastUpdated, - required this.$final, - }); - - factory VoterRegistration.fromJson(Map json) => - _$VoterRegistrationFromJson(json); - - static const toJsonFactory = _$VoterRegistrationToJson; - Map toJson() => _$VoterRegistrationToJson(this); - - @JsonKey(name: 'voter_info') - final VoterInfo voterInfo; - @JsonKey(name: 'as_at') - final DateTime asAt; - @JsonKey(name: 'last_updated') - final DateTime lastUpdated; - @JsonKey(name: 'final') - final bool $final; - static const fromJsonFactory = _$VoterRegistrationFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is VoterRegistration && - (identical(other.voterInfo, voterInfo) || - const DeepCollectionEquality() - .equals(other.voterInfo, voterInfo)) && - (identical(other.asAt, asAt) || - const DeepCollectionEquality().equals(other.asAt, asAt)) && - (identical(other.lastUpdated, lastUpdated) || - const DeepCollectionEquality() - .equals(other.lastUpdated, lastUpdated)) && - (identical(other.$final, $final) || - const DeepCollectionEquality().equals(other.$final, $final))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(voterInfo) ^ - const DeepCollectionEquality().hash(asAt) ^ - const DeepCollectionEquality().hash(lastUpdated) ^ - const DeepCollectionEquality().hash($final) ^ - runtimeType.hashCode; -} - -extension $VoterRegistrationExtension on VoterRegistration { - VoterRegistration copyWith( - {VoterInfo? voterInfo, - DateTime? asAt, - DateTime? lastUpdated, - bool? $final}) { - return VoterRegistration( - voterInfo: voterInfo ?? this.voterInfo, - asAt: asAt ?? this.asAt, - lastUpdated: lastUpdated ?? this.lastUpdated, - $final: $final ?? this.$final); - } - - VoterRegistration copyWithWrapped( - {Wrapped? voterInfo, - Wrapped? asAt, - Wrapped? lastUpdated, - Wrapped? $final}) { - return VoterRegistration( - voterInfo: (voterInfo != null ? voterInfo.value : this.voterInfo), - asAt: (asAt != null ? asAt.value : this.asAt), - lastUpdated: - (lastUpdated != null ? lastUpdated.value : this.lastUpdated), - $final: ($final != null ? $final.value : this.$final)); - } -} - -@JsonSerializable(explicitToJson: true) -class VotingInfo { - const VotingInfo(); - - factory VotingInfo.fromJson(Map json) => - _$VotingInfoFromJson(json); - - static const toJsonFactory = _$VotingInfoToJson; - Map toJson() => _$VotingInfoToJson(this); - - static const fromJsonFactory = _$VotingInfoFromJson; - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => runtimeType.hashCode; -} - -@JsonSerializable(explicitToJson: true) -class VotingInfoDelegations { - const VotingInfoDelegations({ - required this.type, - required this.delegations, - }); - - factory VotingInfoDelegations.fromJson(Map json) => - _$VotingInfoDelegationsFromJson(json); - - static const toJsonFactory = _$VotingInfoDelegationsToJson; - Map toJson() => _$VotingInfoDelegationsToJson(this); - - @JsonKey( - name: 'type', - toJson: votingInfoDelegationsTypeToJson, - fromJson: votingInfoDelegationsTypeFromJson, - ) - final enums.VotingInfoDelegationsType type; - @JsonKey(name: 'delegations', defaultValue: []) - final List delegations; - static const fromJsonFactory = _$VotingInfoDelegationsFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is VotingInfoDelegations && - (identical(other.type, type) || - const DeepCollectionEquality().equals(other.type, type)) && - (identical(other.delegations, delegations) || - const DeepCollectionEquality() - .equals(other.delegations, delegations))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(type) ^ - const DeepCollectionEquality().hash(delegations) ^ - runtimeType.hashCode; -} - -extension $VotingInfoDelegationsExtension on VotingInfoDelegations { - VotingInfoDelegations copyWith( - {enums.VotingInfoDelegationsType? type, List? delegations}) { - return VotingInfoDelegations( - type: type ?? this.type, delegations: delegations ?? this.delegations); - } - - VotingInfoDelegations copyWithWrapped( - {Wrapped? type, - Wrapped>? delegations}) { - return VotingInfoDelegations( - type: (type != null ? type.value : this.type), - delegations: - (delegations != null ? delegations.value : this.delegations)); - } -} - -@JsonSerializable(explicitToJson: true) -class VotingInfoDirectVoter { - const VotingInfoDirectVoter({ - required this.type, - required this.votingKey, - }); - - factory VotingInfoDirectVoter.fromJson(Map json) => - _$VotingInfoDirectVoterFromJson(json); - - static const toJsonFactory = _$VotingInfoDirectVoterToJson; - Map toJson() => _$VotingInfoDirectVoterToJson(this); - - @JsonKey( - name: 'type', - toJson: votingInfoDirectVoterTypeToJson, - fromJson: votingInfoDirectVoterTypeFromJson, - ) - final enums.VotingInfoDirectVoterType type; - @JsonKey(name: 'voting_key') - final String votingKey; - static const fromJsonFactory = _$VotingInfoDirectVoterFromJson; - - @override - bool operator ==(Object other) { - return identical(this, other) || - (other is VotingInfoDirectVoter && - (identical(other.type, type) || - const DeepCollectionEquality().equals(other.type, type)) && - (identical(other.votingKey, votingKey) || - const DeepCollectionEquality() - .equals(other.votingKey, votingKey))); - } - - @override - String toString() => jsonEncode(this); - - @override - int get hashCode => - const DeepCollectionEquality().hash(type) ^ - const DeepCollectionEquality().hash(votingKey) ^ - runtimeType.hashCode; -} - -extension $VotingInfoDirectVoterExtension on VotingInfoDirectVoter { - VotingInfoDirectVoter copyWith( - {enums.VotingInfoDirectVoterType? type, String? votingKey}) { - return VotingInfoDirectVoter( - type: type ?? this.type, votingKey: votingKey ?? this.votingKey); - } - - VotingInfoDirectVoter copyWithWrapped( - {Wrapped? type, - Wrapped? votingKey}) { - return VotingInfoDirectVoter( - type: (type != null ? type.value : this.type), - votingKey: (votingKey != null ? votingKey.value : this.votingKey)); - } -} - -String? deepQueryInspectionFlagNullableToJson( - enums.DeepQueryInspectionFlag? deepQueryInspectionFlag) { - return deepQueryInspectionFlag?.value; -} - -String? deepQueryInspectionFlagToJson( - enums.DeepQueryInspectionFlag deepQueryInspectionFlag) { - return deepQueryInspectionFlag.value; -} - -enums.DeepQueryInspectionFlag deepQueryInspectionFlagFromJson( - Object? deepQueryInspectionFlag, [ - enums.DeepQueryInspectionFlag? defaultValue, -]) { - return enums.DeepQueryInspectionFlag.values - .firstWhereOrNull((e) => e.value == deepQueryInspectionFlag) ?? - defaultValue ?? - enums.DeepQueryInspectionFlag.swaggerGeneratedUnknown; -} - -enums.DeepQueryInspectionFlag? deepQueryInspectionFlagNullableFromJson( - Object? deepQueryInspectionFlag, [ - enums.DeepQueryInspectionFlag? defaultValue, -]) { - if (deepQueryInspectionFlag == null) { - return null; - } - return enums.DeepQueryInspectionFlag.values - .firstWhereOrNull((e) => e.value == deepQueryInspectionFlag) ?? - defaultValue; -} - -String deepQueryInspectionFlagExplodedListToJson( - List? deepQueryInspectionFlag) { - return deepQueryInspectionFlag?.map((e) => e.value!).join(',') ?? ''; -} - -List deepQueryInspectionFlagListToJson( - List? deepQueryInspectionFlag) { - if (deepQueryInspectionFlag == null) { - return []; - } - - return deepQueryInspectionFlag.map((e) => e.value!).toList(); -} - -List deepQueryInspectionFlagListFromJson( - List? deepQueryInspectionFlag, [ - List? defaultValue, -]) { - if (deepQueryInspectionFlag == null) { - return defaultValue ?? []; - } - - return deepQueryInspectionFlag - .map((e) => deepQueryInspectionFlagFromJson(e.toString())) - .toList(); -} - -List? - deepQueryInspectionFlagNullableListFromJson( - List? deepQueryInspectionFlag, [ - List? defaultValue, -]) { - if (deepQueryInspectionFlag == null) { - return defaultValue; - } - - return deepQueryInspectionFlag - .map((e) => deepQueryInspectionFlagFromJson(e.toString())) - .toList(); -} - -String? logLevelNullableToJson(enums.LogLevel? logLevel) { - return logLevel?.value; -} - -String? logLevelToJson(enums.LogLevel logLevel) { - return logLevel.value; -} - -enums.LogLevel logLevelFromJson( - Object? logLevel, [ - enums.LogLevel? defaultValue, -]) { - return enums.LogLevel.values.firstWhereOrNull((e) => e.value == logLevel) ?? - defaultValue ?? - enums.LogLevel.swaggerGeneratedUnknown; -} - -enums.LogLevel? logLevelNullableFromJson( - Object? logLevel, [ - enums.LogLevel? defaultValue, -]) { - if (logLevel == null) { - return null; - } - return enums.LogLevel.values.firstWhereOrNull((e) => e.value == logLevel) ?? - defaultValue; -} - -String logLevelExplodedListToJson(List? logLevel) { - return logLevel?.map((e) => e.value!).join(',') ?? ''; -} - -List logLevelListToJson(List? logLevel) { - if (logLevel == null) { - return []; - } - - return logLevel.map((e) => e.value!).toList(); -} - -List logLevelListFromJson( - List? logLevel, [ - List? defaultValue, -]) { - if (logLevel == null) { - return defaultValue ?? []; - } - - return logLevel.map((e) => logLevelFromJson(e.toString())).toList(); -} - -List? logLevelNullableListFromJson( - List? logLevel, [ - List? defaultValue, -]) { - if (logLevel == null) { - return defaultValue; - } - - return logLevel.map((e) => logLevelFromJson(e.toString())).toList(); -} - -String? networkNullableToJson(enums.Network? network) { - return network?.value; -} - -String? networkToJson(enums.Network network) { - return network.value; -} - -enums.Network networkFromJson( - Object? network, [ - enums.Network? defaultValue, -]) { - return enums.Network.values.firstWhereOrNull((e) => e.value == network) ?? - defaultValue ?? - enums.Network.swaggerGeneratedUnknown; -} - -enums.Network? networkNullableFromJson( - Object? network, [ - enums.Network? defaultValue, -]) { - if (network == null) { - return null; - } - return enums.Network.values.firstWhereOrNull((e) => e.value == network) ?? - defaultValue; -} - -String networkExplodedListToJson(List? network) { - return network?.map((e) => e.value!).join(',') ?? ''; -} - -List networkListToJson(List? network) { - if (network == null) { - return []; - } - - return network.map((e) => e.value!).toList(); -} - -List networkListFromJson( - List? network, [ - List? defaultValue, -]) { - if (network == null) { - return defaultValue ?? []; - } - - return network.map((e) => networkFromJson(e.toString())).toList(); -} - -List? networkNullableListFromJson( - List? network, [ - List? defaultValue, -]) { - if (network == null) { - return defaultValue; - } - - return network.map((e) => networkFromJson(e.toString())).toList(); -} - -String? reasonRejectedNullableToJson(enums.ReasonRejected? reasonRejected) { - return reasonRejected?.value; -} - -String? reasonRejectedToJson(enums.ReasonRejected reasonRejected) { - return reasonRejected.value; -} - -enums.ReasonRejected reasonRejectedFromJson( - Object? reasonRejected, [ - enums.ReasonRejected? defaultValue, -]) { - return enums.ReasonRejected.values - .firstWhereOrNull((e) => e.value == reasonRejected) ?? - defaultValue ?? - enums.ReasonRejected.swaggerGeneratedUnknown; -} - -enums.ReasonRejected? reasonRejectedNullableFromJson( - Object? reasonRejected, [ - enums.ReasonRejected? defaultValue, -]) { - if (reasonRejected == null) { - return null; - } - return enums.ReasonRejected.values - .firstWhereOrNull((e) => e.value == reasonRejected) ?? - defaultValue; -} - -String reasonRejectedExplodedListToJson( - List? reasonRejected) { - return reasonRejected?.map((e) => e.value!).join(',') ?? ''; -} - -List reasonRejectedListToJson( - List? reasonRejected) { - if (reasonRejected == null) { - return []; - } - - return reasonRejected.map((e) => e.value!).toList(); -} - -List reasonRejectedListFromJson( - List? reasonRejected, [ - List? defaultValue, -]) { - if (reasonRejected == null) { - return defaultValue ?? []; - } - - return reasonRejected - .map((e) => reasonRejectedFromJson(e.toString())) - .toList(); -} - -List? reasonRejectedNullableListFromJson( - List? reasonRejected, [ - List? defaultValue, -]) { - if (reasonRejected == null) { - return defaultValue; - } - - return reasonRejected - .map((e) => reasonRejectedFromJson(e.toString())) - .toList(); -} - -String? voterGroupIdNullableToJson(enums.VoterGroupId? voterGroupId) { - return voterGroupId?.value; -} - -String? voterGroupIdToJson(enums.VoterGroupId voterGroupId) { - return voterGroupId.value; -} - -enums.VoterGroupId voterGroupIdFromJson( - Object? voterGroupId, [ - enums.VoterGroupId? defaultValue, -]) { - return enums.VoterGroupId.values - .firstWhereOrNull((e) => e.value == voterGroupId) ?? - defaultValue ?? - enums.VoterGroupId.swaggerGeneratedUnknown; -} - -enums.VoterGroupId? voterGroupIdNullableFromJson( - Object? voterGroupId, [ - enums.VoterGroupId? defaultValue, -]) { - if (voterGroupId == null) { - return null; - } - return enums.VoterGroupId.values - .firstWhereOrNull((e) => e.value == voterGroupId) ?? - defaultValue; -} - -String voterGroupIdExplodedListToJson(List? voterGroupId) { - return voterGroupId?.map((e) => e.value!).join(',') ?? ''; -} - -List voterGroupIdListToJson(List? voterGroupId) { - if (voterGroupId == null) { - return []; - } - - return voterGroupId.map((e) => e.value!).toList(); -} - -List voterGroupIdListFromJson( - List? voterGroupId, [ - List? defaultValue, -]) { - if (voterGroupId == null) { - return defaultValue ?? []; - } - - return voterGroupId.map((e) => voterGroupIdFromJson(e.toString())).toList(); -} - -List? voterGroupIdNullableListFromJson( - List? voterGroupId, [ - List? defaultValue, -]) { - if (voterGroupId == null) { - return defaultValue; - } - - return voterGroupId.map((e) => voterGroupIdFromJson(e.toString())).toList(); -} - -String? votingInfoDelegationsTypeNullableToJson( - enums.VotingInfoDelegationsType? votingInfoDelegationsType) { - return votingInfoDelegationsType?.value; -} - -String? votingInfoDelegationsTypeToJson( - enums.VotingInfoDelegationsType votingInfoDelegationsType) { - return votingInfoDelegationsType.value; -} - -enums.VotingInfoDelegationsType votingInfoDelegationsTypeFromJson( - Object? votingInfoDelegationsType, [ - enums.VotingInfoDelegationsType? defaultValue, -]) { - return enums.VotingInfoDelegationsType.values - .firstWhereOrNull((e) => e.value == votingInfoDelegationsType) ?? - defaultValue ?? - enums.VotingInfoDelegationsType.swaggerGeneratedUnknown; -} - -enums.VotingInfoDelegationsType? votingInfoDelegationsTypeNullableFromJson( - Object? votingInfoDelegationsType, [ - enums.VotingInfoDelegationsType? defaultValue, -]) { - if (votingInfoDelegationsType == null) { - return null; - } - return enums.VotingInfoDelegationsType.values - .firstWhereOrNull((e) => e.value == votingInfoDelegationsType) ?? - defaultValue; -} - -String votingInfoDelegationsTypeExplodedListToJson( - List? votingInfoDelegationsType) { - return votingInfoDelegationsType?.map((e) => e.value!).join(',') ?? ''; -} - -List votingInfoDelegationsTypeListToJson( - List? votingInfoDelegationsType) { - if (votingInfoDelegationsType == null) { - return []; - } - - return votingInfoDelegationsType.map((e) => e.value!).toList(); -} - -List votingInfoDelegationsTypeListFromJson( - List? votingInfoDelegationsType, [ - List? defaultValue, -]) { - if (votingInfoDelegationsType == null) { - return defaultValue ?? []; - } - - return votingInfoDelegationsType - .map((e) => votingInfoDelegationsTypeFromJson(e.toString())) - .toList(); -} - -List? - votingInfoDelegationsTypeNullableListFromJson( - List? votingInfoDelegationsType, [ - List? defaultValue, -]) { - if (votingInfoDelegationsType == null) { - return defaultValue; - } - - return votingInfoDelegationsType - .map((e) => votingInfoDelegationsTypeFromJson(e.toString())) - .toList(); -} - -String? votingInfoDirectVoterTypeNullableToJson( - enums.VotingInfoDirectVoterType? votingInfoDirectVoterType) { - return votingInfoDirectVoterType?.value; -} - -String? votingInfoDirectVoterTypeToJson( - enums.VotingInfoDirectVoterType votingInfoDirectVoterType) { - return votingInfoDirectVoterType.value; -} - -enums.VotingInfoDirectVoterType votingInfoDirectVoterTypeFromJson( - Object? votingInfoDirectVoterType, [ - enums.VotingInfoDirectVoterType? defaultValue, -]) { - return enums.VotingInfoDirectVoterType.values - .firstWhereOrNull((e) => e.value == votingInfoDirectVoterType) ?? - defaultValue ?? - enums.VotingInfoDirectVoterType.swaggerGeneratedUnknown; -} - -enums.VotingInfoDirectVoterType? votingInfoDirectVoterTypeNullableFromJson( - Object? votingInfoDirectVoterType, [ - enums.VotingInfoDirectVoterType? defaultValue, -]) { - if (votingInfoDirectVoterType == null) { - return null; - } - return enums.VotingInfoDirectVoterType.values - .firstWhereOrNull((e) => e.value == votingInfoDirectVoterType) ?? - defaultValue; -} - -String votingInfoDirectVoterTypeExplodedListToJson( - List? votingInfoDirectVoterType) { - return votingInfoDirectVoterType?.map((e) => e.value!).join(',') ?? ''; -} - -List votingInfoDirectVoterTypeListToJson( - List? votingInfoDirectVoterType) { - if (votingInfoDirectVoterType == null) { - return []; - } - - return votingInfoDirectVoterType.map((e) => e.value!).toList(); -} - -List votingInfoDirectVoterTypeListFromJson( - List? votingInfoDirectVoterType, [ - List? defaultValue, -]) { - if (votingInfoDirectVoterType == null) { - return defaultValue ?? []; - } - - return votingInfoDirectVoterType - .map((e) => votingInfoDirectVoterTypeFromJson(e.toString())) - .toList(); -} - -List? - votingInfoDirectVoterTypeNullableListFromJson( - List? votingInfoDirectVoterType, [ - List? defaultValue, -]) { - if (votingInfoDirectVoterType == null) { - return defaultValue; - } - - return votingInfoDirectVoterType - .map((e) => votingInfoDirectVoterTypeFromJson(e.toString())) - .toList(); -} - -// ignore: unused_element -String? _dateToJson(DateTime? date) { - if (date == null) { - return null; - } - - final year = date.year.toString(); - final month = date.month < 10 ? '0${date.month}' : date.month.toString(); - final day = date.day < 10 ? '0${date.day}' : date.day.toString(); - - return '$year-$month-$day'; -} - -class Wrapped { - final T value; - const Wrapped.value(this.value); -} diff --git a/catalyst_voices/packages/internal/catalyst_voices_services/lib/generated/catalyst_gateway/cat_gateway_api.models.swagger.g.dart b/catalyst_voices/packages/internal/catalyst_voices_services/lib/generated/catalyst_gateway/cat_gateway_api.models.swagger.g.dart deleted file mode 100644 index dca02d68abf..00000000000 --- a/catalyst_voices/packages/internal/catalyst_voices_services/lib/generated/catalyst_gateway/cat_gateway_api.models.swagger.g.dart +++ /dev/null @@ -1,612 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'cat_gateway_api.models.swagger.dart'; - -// ************************************************************************** -// JsonSerializableGenerator -// ************************************************************************** - -AccountVote _$AccountVoteFromJson(Map json) => AccountVote( - votePlanId: json['vote_plan_id'] as String, - votes: (json['votes'] as List?) - ?.map((e) => (e as num).toInt()) - .toList() ?? - [], - ); - -Map _$AccountVoteToJson(AccountVote instance) => - { - 'vote_plan_id': instance.votePlanId, - 'votes': instance.votes, - }; - -BlockDate _$BlockDateFromJson(Map json) => BlockDate( - epoch: (json['epoch'] as num).toInt(), - slotId: (json['slot_id'] as num).toInt(), - ); - -Map _$BlockDateToJson(BlockDate instance) => { - 'epoch': instance.epoch, - 'slot_id': instance.slotId, - }; - -Cip36Info _$Cip36InfoFromJson(Map json) => Cip36Info( - stakePubKey: json['stake_pub_key'] as String, - nonce: (json['nonce'] as num).toInt(), - slotNo: (json['slot_no'] as num).toInt(), - txn: (json['txn'] as num).toInt(), - voteKey: json['vote_key'] as String, - paymentAddress: json['payment_address'] as String, - isPayable: json['is_payable'] as bool, - cip36: json['cip36'] as bool, - ); - -Map _$Cip36InfoToJson(Cip36Info instance) => { - 'stake_pub_key': instance.stakePubKey, - 'nonce': instance.nonce, - 'slot_no': instance.slotNo, - 'txn': instance.txn, - 'vote_key': instance.voteKey, - 'payment_address': instance.paymentAddress, - 'is_payable': instance.isPayable, - 'cip36': instance.cip36, - }; - -Cip36Reporting _$Cip36ReportingFromJson(Map json) => - Cip36Reporting( - cip36: (json['cip36'] as List?) - ?.map((e) => Cip36Info.fromJson(e as Map)) - .toList() ?? - [], - invalids: (json['invalids'] as List?) - ?.map((e) => InvalidRegistrationsReport.fromJson( - e as Map)) - .toList() ?? - [], - ); - -Map _$Cip36ReportingToJson(Cip36Reporting instance) => - { - 'cip36': instance.cip36.map((e) => e.toJson()).toList(), - 'invalids': instance.invalids.map((e) => e.toJson()).toList(), - }; - -Cip36ReportingList _$Cip36ReportingListFromJson(Map json) => - Cip36ReportingList( - cip36: (json['cip36'] as List?) - ?.map((e) => Cip36Reporting.fromJson(e as Map)) - .toList() ?? - [], - ); - -Map _$Cip36ReportingListToJson(Cip36ReportingList instance) => - { - 'cip36': instance.cip36.map((e) => e.toJson()).toList(), - }; - -ConfigBadRequest _$ConfigBadRequestFromJson(Map json) => - ConfigBadRequest( - error: json['error'] as String, - schemaValidationErrors: - (json['schema_validation_errors'] as List?) - ?.map((e) => e as String) - .toList() ?? - [], - ); - -Map _$ConfigBadRequestToJson(ConfigBadRequest instance) => - { - 'error': instance.error, - 'schema_validation_errors': instance.schemaValidationErrors, - }; - -ContentErrorDetail _$ContentErrorDetailFromJson(Map json) => - ContentErrorDetail( - loc: (json['loc'] as List?)?.map((e) => e as String).toList() ?? - [], - msg: json['msg'] as String?, - type: json['type'] as String?, - ); - -Map _$ContentErrorDetailToJson(ContentErrorDetail instance) => - { - 'loc': instance.loc, - 'msg': instance.msg, - 'type': instance.type, - }; - -DelegatePublicKey _$DelegatePublicKeyFromJson(Map json) => - DelegatePublicKey( - address: json['address'] as String, - ); - -Map _$DelegatePublicKeyToJson(DelegatePublicKey instance) => - { - 'address': instance.address, - }; - -Delegation _$DelegationFromJson(Map json) => Delegation( - votingKey: json['voting_key'] as String, - power: (json['power'] as num).toInt(), - ); - -Map _$DelegationToJson(Delegation instance) => - { - 'voting_key': instance.votingKey, - 'power': instance.power, - }; - -Delegations _$DelegationsFromJson(Map json) => Delegations( - delegations: (json['delegations'] as List?) - ?.map((e) => Delegation.fromJson(e as Map)) - .toList() ?? - [], - ); - -Map _$DelegationsToJson(Delegations instance) => - { - 'delegations': instance.delegations.map((e) => e.toJson()).toList(), - }; - -DirectVoter _$DirectVoterFromJson(Map json) => DirectVoter( - votingKey: json['voting_key'] as String, - ); - -Map _$DirectVoterToJson(DirectVoter instance) => - { - 'voting_key': instance.votingKey, - }; - -Forbidden _$ForbiddenFromJson(Map json) => Forbidden( - id: json['id'] as String, - msg: json['msg'] as String, - required: (json['required'] as List?) - ?.map((e) => e as String) - .toList() ?? - [], - ); - -Map _$ForbiddenToJson(Forbidden instance) => { - 'id': instance.id, - 'msg': instance.msg, - 'required': instance.required, - }; - -FragmentStatus _$FragmentStatusFromJson(Map json) => - FragmentStatus(); - -Map _$FragmentStatusToJson(FragmentStatus instance) => - {}; - -FragmentsBatch _$FragmentsBatchFromJson(Map json) => - FragmentsBatch( - failFast: json['fail_fast'] as bool, - fragments: (json['fragments'] as List?) - ?.map((e) => e as String) - .toList() ?? - [], - ); - -Map _$FragmentsBatchToJson(FragmentsBatch instance) => - { - 'fail_fast': instance.failFast, - 'fragments': instance.fragments, - }; - -FragmentsProcessingSummary _$FragmentsProcessingSummaryFromJson( - Map json) => - FragmentsProcessingSummary( - accepted: (json['accepted'] as List?) - ?.map((e) => e as String) - .toList() ?? - [], - rejected: (json['rejected'] as List?) - ?.map((e) => RejectedFragment.fromJson(e as Map)) - .toList() ?? - [], - ); - -Map _$FragmentsProcessingSummaryToJson( - FragmentsProcessingSummary instance) => - { - 'accepted': instance.accepted, - 'rejected': instance.rejected.map((e) => e.toJson()).toList(), - }; - -FrontendConfig _$FrontendConfigFromJson(Map json) => - FrontendConfig( - sentry: json['sentry'] == null - ? null - : Sentry.fromJson(json['sentry'] as Map), - ); - -Map _$FrontendConfigToJson(FrontendConfig instance) => - { - 'sentry': instance.sentry?.toJson(), - }; - -FullStakeInfo _$FullStakeInfoFromJson(Map json) => - FullStakeInfo( - volatile: StakeInfo.fromJson(json['volatile'] as Map), - persistent: - StakeInfo.fromJson(json['persistent'] as Map), - ); - -Map _$FullStakeInfoToJson(FullStakeInfo instance) => - { - 'volatile': instance.volatile.toJson(), - 'persistent': instance.persistent.toJson(), - }; - -Hash _$HashFromJson(Map json) => Hash( - hash: json['hash'] as String, - ); - -Map _$HashToJson(Hash instance) => { - 'hash': instance.hash, - }; - -InternalServerError _$InternalServerErrorFromJson(Map json) => - InternalServerError( - id: json['id'] as String, - msg: json['msg'] as String, - issue: json['issue'] as String?, - ); - -Map _$InternalServerErrorToJson( - InternalServerError instance) => - { - 'id': instance.id, - 'msg': instance.msg, - 'issue': instance.issue, - }; - -InvalidRegistrationsReport _$InvalidRegistrationsReportFromJson( - Map json) => - InvalidRegistrationsReport( - errorReport: (json['error_report'] as List?) - ?.map((e) => e as String) - .toList() ?? - [], - stakeAddress: json['stake_address'] as String, - voteKey: json['vote_key'] as String, - paymentAddress: json['payment_address'] as String, - isPayable: json['is_payable'] as bool, - cip36: json['cip36'] as bool, - ); - -Map _$InvalidRegistrationsReportToJson( - InvalidRegistrationsReport instance) => - { - 'error_report': instance.errorReport, - 'stake_address': instance.stakeAddress, - 'vote_key': instance.voteKey, - 'payment_address': instance.paymentAddress, - 'is_payable': instance.isPayable, - 'cip36': instance.cip36, - }; - -RbacRegistration _$RbacRegistrationFromJson(Map json) => - RbacRegistration( - txHash: json['tx_hash'] as String, - ); - -Map _$RbacRegistrationToJson(RbacRegistration instance) => - { - 'tx_hash': instance.txHash, - }; - -RbacRegistrationsResponse _$RbacRegistrationsResponseFromJson( - Map json) => - RbacRegistrationsResponse( - registrations: (json['registrations'] as List?) - ?.map((e) => RbacRegistration.fromJson(e as Map)) - .toList() ?? - [], - ); - -Map _$RbacRegistrationsResponseToJson( - RbacRegistrationsResponse instance) => - { - 'registrations': instance.registrations.map((e) => e.toJson()).toList(), - }; - -RbacRole0ChainRootResponse _$RbacRole0ChainRootResponseFromJson( - Map json) => - RbacRole0ChainRootResponse( - chainRoot: json['chain_root'] as String, - ); - -Map _$RbacRole0ChainRootResponseToJson( - RbacRole0ChainRootResponse instance) => - { - 'chain_root': instance.chainRoot, - }; - -RegistrationInfo _$RegistrationInfoFromJson(Map json) => - RegistrationInfo( - rewardsAddress: json['rewards_address'] as String, - txHash: json['tx_hash'] as String, - nonce: (json['nonce'] as num).toInt(), - votingInfo: - VotingInfo.fromJson(json['voting_info'] as Map), - ); - -Map _$RegistrationInfoToJson(RegistrationInfo instance) => - { - 'rewards_address': instance.rewardsAddress, - 'tx_hash': instance.txHash, - 'nonce': instance.nonce, - 'voting_info': instance.votingInfo.toJson(), - }; - -RejectedFragment _$RejectedFragmentFromJson(Map json) => - RejectedFragment( - id: json['id'] as String, - poolNumber: (json['pool_number'] as num).toInt(), - reason: reasonRejectedFromJson(json['reason']), - ); - -Map _$RejectedFragmentToJson(RejectedFragment instance) => - { - 'id': instance.id, - 'pool_number': instance.poolNumber, - 'reason': reasonRejectedToJson(instance.reason), - }; - -Response$ _$Response$FromJson(Map json) => Response$( - chainRoot: json['chain_root'] as String, - ); - -Map _$Response$ToJson(Response$ instance) => { - 'chain_root': instance.chainRoot, - }; - -Sentry _$SentryFromJson(Map json) => Sentry( - dsn: json['dsn'] as String, - release: json['release'] as String?, - environment: json['environment'] as String?, - ); - -Map _$SentryToJson(Sentry instance) => { - 'dsn': instance.dsn, - 'release': instance.release, - 'environment': instance.environment, - }; - -ServiceUnavailable _$ServiceUnavailableFromJson(Map json) => - ServiceUnavailable( - id: json['id'] as String, - msg: json['msg'] as String, - ); - -Map _$ServiceUnavailableToJson(ServiceUnavailable instance) => - { - 'id': instance.id, - 'msg': instance.msg, - }; - -Slot _$SlotFromJson(Map json) => Slot( - slotNumber: (json['slot_number'] as num).toInt(), - blockHash: json['block_hash'] as String, - blockTime: DateTime.parse(json['block_time'] as String), - ); - -Map _$SlotToJson(Slot instance) => { - 'slot_number': instance.slotNumber, - 'block_hash': instance.blockHash, - 'block_time': instance.blockTime.toIso8601String(), - }; - -SlotInfo _$SlotInfoFromJson(Map json) => SlotInfo( - previous: json['previous'] == null - ? null - : Slot.fromJson(json['previous'] as Map), - current: json['current'] == null - ? null - : Slot.fromJson(json['current'] as Map), - next: json['next'] == null - ? null - : Slot.fromJson(json['next'] as Map), - ); - -Map _$SlotInfoToJson(SlotInfo instance) => { - 'previous': instance.previous?.toJson(), - 'current': instance.current?.toJson(), - 'next': instance.next?.toJson(), - }; - -StakeInfo _$StakeInfoFromJson(Map json) => StakeInfo( - adaAmount: (json['ada_amount'] as num).toInt(), - slotNumber: (json['slot_number'] as num).toInt(), - nativeTokens: (json['native_tokens'] as List?) - ?.map((e) => - StakedNativeTokenInfo.fromJson(e as Map)) - .toList() ?? - [], - ); - -Map _$StakeInfoToJson(StakeInfo instance) => { - 'ada_amount': instance.adaAmount, - 'slot_number': instance.slotNumber, - 'native_tokens': instance.nativeTokens.map((e) => e.toJson()).toList(), - }; - -StakedNativeTokenInfo _$StakedNativeTokenInfoFromJson( - Map json) => - StakedNativeTokenInfo( - policyHash: json['policy_hash'] as String, - assetName: json['asset_name'] as String, - amount: (json['amount'] as num).toInt(), - ); - -Map _$StakedNativeTokenInfoToJson( - StakedNativeTokenInfo instance) => - { - 'policy_hash': instance.policyHash, - 'asset_name': instance.assetName, - 'amount': instance.amount, - }; - -StatusInABlock _$StatusInABlockFromJson(Map json) => - StatusInABlock( - date: BlockDate.fromJson(json['date'] as Map), - block: Hash.fromJson(json['block'] as Map), - ); - -Map _$StatusInABlockToJson(StatusInABlock instance) => - { - 'date': instance.date.toJson(), - 'block': instance.block.toJson(), - }; - -StatusPending _$StatusPendingFromJson(Map json) => - StatusPending(); - -Map _$StatusPendingToJson(StatusPending instance) => - {}; - -StatusRejected _$StatusRejectedFromJson(Map json) => - StatusRejected( - reason: json['reason'] as String, - ); - -Map _$StatusRejectedToJson(StatusRejected instance) => - { - 'reason': instance.reason, - }; - -SyncState _$SyncStateFromJson(Map json) => SyncState( - slotNumber: (json['slot_number'] as num).toInt(), - blockHash: json['block_hash'] as String, - lastUpdated: DateTime.parse(json['last_updated'] as String), - ); - -Map _$SyncStateToJson(SyncState instance) => { - 'slot_number': instance.slotNumber, - 'block_hash': instance.blockHash, - 'last_updated': instance.lastUpdated.toIso8601String(), - }; - -TooManyRequests _$TooManyRequestsFromJson(Map json) => - TooManyRequests( - id: json['id'] as String, - msg: json['msg'] as String, - ); - -Map _$TooManyRequestsToJson(TooManyRequests instance) => - { - 'id': instance.id, - 'msg': instance.msg, - }; - -Unauthorized _$UnauthorizedFromJson(Map json) => Unauthorized( - id: json['id'] as String, - msg: json['msg'] as String, - ); - -Map _$UnauthorizedToJson(Unauthorized instance) => - { - 'id': instance.id, - 'msg': instance.msg, - }; - -UnprocessableContent _$UnprocessableContentFromJson( - Map json) => - UnprocessableContent( - detail: (json['detail'] as List?) - ?.map( - (e) => ContentErrorDetail.fromJson(e as Map)) - .toList() ?? - [], - ); - -Map _$UnprocessableContentToJson( - UnprocessableContent instance) => - { - 'detail': instance.detail.map((e) => e.toJson()).toList(), - }; - -VotePlan _$VotePlanFromJson(Map json) => VotePlan( - votingToken: json['voting_token'] as String, - ); - -Map _$VotePlanToJson(VotePlan instance) => { - 'voting_token': instance.votingToken, - }; - -VoterInfo _$VoterInfoFromJson(Map json) => VoterInfo( - votingPower: (json['voting_power'] as num).toInt(), - votingGroup: voterGroupIdFromJson(json['voting_group']), - delegationsPower: (json['delegations_power'] as num).toInt(), - delegationsCount: (json['delegations_count'] as num).toInt(), - votingPowerSaturation: - (json['voting_power_saturation'] as num).toDouble(), - delegatorAddresses: (json['delegator_addresses'] as List?) - ?.map( - (e) => DelegatePublicKey.fromJson(e as Map)) - .toList() ?? - [], - ); - -Map _$VoterInfoToJson(VoterInfo instance) => { - 'voting_power': instance.votingPower, - 'voting_group': voterGroupIdToJson(instance.votingGroup), - 'delegations_power': instance.delegationsPower, - 'delegations_count': instance.delegationsCount, - 'voting_power_saturation': instance.votingPowerSaturation, - 'delegator_addresses': - instance.delegatorAddresses?.map((e) => e.toJson()).toList(), - }; - -VoterRegistration _$VoterRegistrationFromJson(Map json) => - VoterRegistration( - voterInfo: VoterInfo.fromJson(json['voter_info'] as Map), - asAt: DateTime.parse(json['as_at'] as String), - lastUpdated: DateTime.parse(json['last_updated'] as String), - $final: json['final'] as bool, - ); - -Map _$VoterRegistrationToJson(VoterRegistration instance) => - { - 'voter_info': instance.voterInfo.toJson(), - 'as_at': instance.asAt.toIso8601String(), - 'last_updated': instance.lastUpdated.toIso8601String(), - 'final': instance.$final, - }; - -VotingInfo _$VotingInfoFromJson(Map json) => VotingInfo(); - -Map _$VotingInfoToJson(VotingInfo instance) => - {}; - -VotingInfoDelegations _$VotingInfoDelegationsFromJson( - Map json) => - VotingInfoDelegations( - type: votingInfoDelegationsTypeFromJson(json['type']), - delegations: (json['delegations'] as List?) - ?.map((e) => Delegation.fromJson(e as Map)) - .toList() ?? - [], - ); - -Map _$VotingInfoDelegationsToJson( - VotingInfoDelegations instance) => - { - 'type': votingInfoDelegationsTypeToJson(instance.type), - 'delegations': instance.delegations.map((e) => e.toJson()).toList(), - }; - -VotingInfoDirectVoter _$VotingInfoDirectVoterFromJson( - Map json) => - VotingInfoDirectVoter( - type: votingInfoDirectVoterTypeFromJson(json['type']), - votingKey: json['voting_key'] as String, - ); - -Map _$VotingInfoDirectVoterToJson( - VotingInfoDirectVoter instance) => - { - 'type': votingInfoDirectVoterTypeToJson(instance.type), - 'voting_key': instance.votingKey, - }; diff --git a/catalyst_voices/packages/internal/catalyst_voices_services/lib/generated/catalyst_gateway/cat_gateway_api.swagger.chopper.dart b/catalyst_voices/packages/internal/catalyst_voices_services/lib/generated/catalyst_gateway/cat_gateway_api.swagger.chopper.dart deleted file mode 100644 index 57ab55da524..00000000000 --- a/catalyst_voices/packages/internal/catalyst_voices_services/lib/generated/catalyst_gateway/cat_gateway_api.swagger.chopper.dart +++ /dev/null @@ -1,364 +0,0 @@ -// Generated code - -part of 'cat_gateway_api.swagger.dart'; - -// ************************************************************************** -// ChopperGenerator -// ************************************************************************** - -// coverage:ignore-file -// ignore_for_file: type=lint -final class _$CatGatewayApi extends CatGatewayApi { - _$CatGatewayApi([ChopperClient? client]) { - if (client == null) return; - this.client = client; - } - - @override - final Type definitionType = CatGatewayApi; - - @override - Future> _apiV1HealthStartedGet() { - final Uri $url = Uri.parse('/api/v1/health/started'); - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - ); - return client.send($request); - } - - @override - Future> _apiV1HealthReadyGet() { - final Uri $url = Uri.parse('/api/v1/health/ready'); - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - ); - return client.send($request); - } - - @override - Future> _apiV1HealthLiveGet() { - final Uri $url = Uri.parse('/api/v1/health/live'); - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - ); - return client.send($request); - } - - @override - Future> _apiV1HealthInspectionPut({ - String? logLevel, - String? queryInspection, - }) { - final Uri $url = Uri.parse('/api/v1/health/inspection'); - final Map $params = { - 'log_level': logLevel, - 'query_inspection': queryInspection, - }; - final Request $request = Request( - 'PUT', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } - - @override - Future> - _apiDraftCardanoRegistrationStakeAddressGet({ - required String? stakeAddress, - String? network, - int? slotNumber, - }) { - final Uri $url = - Uri.parse('/api/draft/cardano/registration/${stakeAddress}'); - final Map $params = { - 'network': network, - 'slot_number': slotNumber, - }; - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } - - @override - Future> _apiDraftCardanoSyncStateGet({String? network}) { - final Uri $url = Uri.parse('/api/draft/cardano/sync_state'); - final Map $params = {'network': network}; - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } - - @override - Future> _apiDraftCardanoDateTimeToSlotNumberGet({ - DateTime? dateTime, - String? network, - }) { - final Uri $url = Uri.parse('/api/draft/cardano/date_time_to_slot_number'); - final Map $params = { - 'date_time': dateTime, - 'network': network, - }; - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } - - @override - Future> - _apiDraftCardanoCip36LatestRegistrationStakeAddrGet( - {required String? stakePubKey}) { - final Uri $url = - Uri.parse('/api/draft/cardano/cip36/latest_registration/stake_addr'); - final Map $params = { - 'stake_pub_key': stakePubKey - }; - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } - - @override - Future> - _apiDraftCardanoCip36LatestRegistrationStakeKeyHashGet( - {required String? stakeKeyHash}) { - final Uri $url = Uri.parse( - '/api/draft/cardano/cip36/latest_registration/stake_key_hash'); - final Map $params = { - 'stake_key_hash': stakeKeyHash - }; - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } - - @override - Future> - _apiDraftCardanoCip36LatestRegistrationVoteKeyGet( - {required String? voteKey}) { - final Uri $url = - Uri.parse('/api/draft/cardano/cip36/latest_registration/vote_key'); - final Map $params = {'vote_key': voteKey}; - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } - - @override - Future> _apiDraftRbacChainRootStakeAddressGet( - {required String? stakeAddress}) { - final Uri $url = Uri.parse('/api/draft/rbac/chain_root/${stakeAddress}'); - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - ); - return client.send($request); - } - - @override - Future> - _apiDraftRbacRegistrationsChainRootGet({required String? chainRoot}) { - final Uri $url = Uri.parse('/api/draft/rbac/registrations/${chainRoot}'); - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - ); - return client - .send($request); - } - - @override - Future> - _apiDraftRbacRole0ChainRootRole0KeyGet({required String? role0Key}) { - final Uri $url = Uri.parse('/api/draft/rbac/role0_chain_root/${role0Key}'); - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - ); - return client - .send($request); - } - - @override - Future> _apiDraftCardanoAssetsStakeAddressGet({ - required String? stakeAddress, - String? network, - int? slotNumber, - }) { - final Uri $url = Uri.parse('/api/draft/cardano/assets/${stakeAddress}'); - final Map $params = { - 'network': network, - 'slot_number': slotNumber, - }; - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } - - @override - Future> _apiDraftConfigFrontendGet() { - final Uri $url = Uri.parse('/api/draft/config/frontend'); - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - ); - return client.send($request); - } - - @override - Future> _apiDraftConfigFrontendPut({ - Object? ip, - required FrontendConfig? body, - }) { - final Uri $url = Uri.parse('/api/draft/config/frontend'); - final Map $params = {'IP': ip}; - final $body = body; - final Request $request = Request( - 'PUT', - $url, - client.baseUrl, - body: $body, - parameters: $params, - ); - return client.send($request); - } - - @override - Future> _apiDraftConfigFrontendSchemaGet() { - final Uri $url = Uri.parse('/api/draft/config/frontend/schema'); - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - ); - return client.send($request); - } - - @override - Future> _apiV1RegistrationVoterVotingKeyGet({ - required String? votingKey, - int? eventIndex, - bool? withDelegators, - }) { - final Uri $url = Uri.parse('/api/v1/registration/voter/${votingKey}'); - final Map $params = { - 'event_index': eventIndex, - 'with_delegators': withDelegators, - }; - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } - - @override - Future> _apiV0MessagePost( - {required Object? body}) { - final Uri $url = Uri.parse('/api/v0/message'); - final $body = body; - final Request $request = Request( - 'POST', - $url, - client.baseUrl, - body: $body, - ); - return client - .send($request); - } - - @override - Future>> _apiV0VoteActivePlansGet() { - final Uri $url = Uri.parse('/api/v0/vote/active/plans'); - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - ); - return client.send, VotePlan>($request); - } - - @override - Future>> _apiV1VotesPlanAccountVotesAccountIdGet( - {required String? accountId}) { - final Uri $url = Uri.parse('/api/v1/votes/plan/account-votes/${accountId}'); - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - ); - return client.send, AccountVote>($request); - } - - @override - Future> _apiV1FragmentsPost( - {required FragmentsBatch? body}) { - final Uri $url = Uri.parse('/api/v1/fragments'); - final $body = body; - final Request $request = Request( - 'POST', - $url, - client.baseUrl, - body: $body, - ); - return client - .send($request); - } - - @override - Future> _apiV1FragmentsStatusesGet( - {required List? fragmentIds}) { - final Uri $url = Uri.parse('/api/v1/fragments/statuses'); - final Map $params = { - 'fragment_ids': fragmentIds - }; - final Request $request = Request( - 'GET', - $url, - client.baseUrl, - parameters: $params, - ); - return client.send($request); - } -} diff --git a/catalyst_voices/packages/internal/catalyst_voices_services/lib/generated/catalyst_gateway/cat_gateway_api.swagger.dart b/catalyst_voices/packages/internal/catalyst_voices_services/lib/generated/catalyst_gateway/cat_gateway_api.swagger.dart deleted file mode 100644 index 18da5dd442b..00000000000 --- a/catalyst_voices/packages/internal/catalyst_voices_services/lib/generated/catalyst_gateway/cat_gateway_api.swagger.dart +++ /dev/null @@ -1,538 +0,0 @@ -// ignore_for_file: type=lint - -import 'package:json_annotation/json_annotation.dart'; -import 'package:collection/collection.dart'; -import 'dart:convert'; - -import 'cat_gateway_api.models.swagger.dart'; -import 'package:chopper/chopper.dart'; - -import 'client_mapping.dart'; -import 'dart:async'; -import 'package:http/http.dart' as http; -import 'package:http/http.dart' show MultipartFile; -import 'package:chopper/chopper.dart' as chopper; -import 'cat_gateway_api.enums.swagger.dart' as enums; -export 'cat_gateway_api.enums.swagger.dart'; -export 'cat_gateway_api.models.swagger.dart'; - -part 'cat_gateway_api.swagger.chopper.dart'; - -// ************************************************************************** -// SwaggerChopperGenerator -// ************************************************************************** - -@ChopperApi() -abstract class CatGatewayApi extends ChopperService { - static CatGatewayApi create({ - ChopperClient? client, - http.Client? httpClient, - Authenticator? authenticator, - ErrorConverter? errorConverter, - Converter? converter, - Uri? baseUrl, - Iterable? interceptors, - }) { - if (client != null) { - return _$CatGatewayApi(client); - } - - final newClient = ChopperClient( - services: [_$CatGatewayApi()], - converter: converter ?? $JsonSerializableConverter(), - interceptors: interceptors ?? [], - client: httpClient, - authenticator: authenticator, - errorConverter: errorConverter, - baseUrl: baseUrl ?? Uri.parse('http://')); - return _$CatGatewayApi(newClient); - } - - ///Service Started - Future apiV1HealthStartedGet() { - return _apiV1HealthStartedGet(); - } - - ///Service Started - @Get(path: '/api/v1/health/started') - Future _apiV1HealthStartedGet(); - - ///Service Ready - Future apiV1HealthReadyGet() { - return _apiV1HealthReadyGet(); - } - - ///Service Ready - @Get(path: '/api/v1/health/ready') - Future _apiV1HealthReadyGet(); - - ///Service Live - Future apiV1HealthLiveGet() { - return _apiV1HealthLiveGet(); - } - - ///Service Live - @Get(path: '/api/v1/health/live') - Future _apiV1HealthLiveGet(); - - ///Service Inspection Control. - ///@param log_level The log level to use for the service. Controls what detail gets logged. - ///@param query_inspection Enable or disable Verbose Query inspection in the logs. Used to find query performance issues. - Future apiV1HealthInspectionPut({ - enums.LogLevel? logLevel, - enums.DeepQueryInspectionFlag? queryInspection, - }) { - return _apiV1HealthInspectionPut( - logLevel: logLevel?.value?.toString(), - queryInspection: queryInspection?.value?.toString()); - } - - ///Service Inspection Control. - ///@param log_level The log level to use for the service. Controls what detail gets logged. - ///@param query_inspection Enable or disable Verbose Query inspection in the logs. Used to find query performance issues. - @Put( - path: '/api/v1/health/inspection', - optionalBody: true, - ) - Future _apiV1HealthInspectionPut({ - @Query('log_level') String? logLevel, - @Query('query_inspection') String? queryInspection, - }); - - ///Get registration info. - ///@param stake_address The stake address of the user. Should be a valid Bech32 encoded address followed by the https://cips.cardano.org/cip/CIP-19/#stake-addresses. - ///@param network Cardano network type. If omitted network type is identified from the stake address. If specified it must be correspondent to the network type encoded in the stake address. As `preprod` and `preview` network types in the stake address encoded as a `testnet`, to specify `preprod` or `preview` network type use this query parameter. - ///@param slot_number Slot number at which the staked ADA amount should be calculated. If omitted latest slot number is used. - Future> - apiDraftCardanoRegistrationStakeAddressGet({ - required String? stakeAddress, - enums.Network? network, - int? slotNumber, - }) { - generatedMapping.putIfAbsent( - RegistrationInfo, () => RegistrationInfo.fromJsonFactory); - - return _apiDraftCardanoRegistrationStakeAddressGet( - stakeAddress: stakeAddress, - network: network?.value?.toString(), - slotNumber: slotNumber); - } - - ///Get registration info. - ///@param stake_address The stake address of the user. Should be a valid Bech32 encoded address followed by the https://cips.cardano.org/cip/CIP-19/#stake-addresses. - ///@param network Cardano network type. If omitted network type is identified from the stake address. If specified it must be correspondent to the network type encoded in the stake address. As `preprod` and `preview` network types in the stake address encoded as a `testnet`, to specify `preprod` or `preview` network type use this query parameter. - ///@param slot_number Slot number at which the staked ADA amount should be calculated. If omitted latest slot number is used. - @Get(path: '/api/draft/cardano/registration/{stake_address}') - Future> - _apiDraftCardanoRegistrationStakeAddressGet({ - @Path('stake_address') required String? stakeAddress, - @Query('network') String? network, - @Query('slot_number') int? slotNumber, - }); - - ///Get Cardano follower's sync state. - ///@param network Cardano network type. If omitted `mainnet` network type is defined. As `preprod` and `preview` network types in the stake address encoded as a `testnet`, to specify `preprod` or `preview` network type use this query parameter. - Future> apiDraftCardanoSyncStateGet( - {enums.Network? network}) { - generatedMapping.putIfAbsent(SyncState, () => SyncState.fromJsonFactory); - - return _apiDraftCardanoSyncStateGet(network: network?.value?.toString()); - } - - ///Get Cardano follower's sync state. - ///@param network Cardano network type. If omitted `mainnet` network type is defined. As `preprod` and `preview` network types in the stake address encoded as a `testnet`, to specify `preprod` or `preview` network type use this query parameter. - @Get(path: '/api/draft/cardano/sync_state') - Future> _apiDraftCardanoSyncStateGet( - {@Query('network') String? network}); - - ///Get Cardano slot info to the provided date-time. - ///@param date_time The date-time for which the slot number should be calculated. If omitted current date time is used. - ///@param network Cardano network type. If omitted `mainnet` network type is defined. As `preprod` and `preview` network types in the stake address encoded as a `testnet`, to specify `preprod` or `preview` network type use this query parameter. - Future> apiDraftCardanoDateTimeToSlotNumberGet({ - DateTime? dateTime, - enums.Network? network, - }) { - generatedMapping.putIfAbsent(SlotInfo, () => SlotInfo.fromJsonFactory); - - return _apiDraftCardanoDateTimeToSlotNumberGet( - dateTime: dateTime, network: network?.value?.toString()); - } - - ///Get Cardano slot info to the provided date-time. - ///@param date_time The date-time for which the slot number should be calculated. If omitted current date time is used. - ///@param network Cardano network type. If omitted `mainnet` network type is defined. As `preprod` and `preview` network types in the stake address encoded as a `testnet`, to specify `preprod` or `preview` network type use this query parameter. - @Get(path: '/api/draft/cardano/date_time_to_slot_number') - Future> _apiDraftCardanoDateTimeToSlotNumberGet({ - @Query('date_time') DateTime? dateTime, - @Query('network') String? network, - }); - - ///Get latest CIP36 registrations from stake address. - ///@param stake_pub_key Stake Public Key to find the latest registration for. - Future> - apiDraftCardanoCip36LatestRegistrationStakeAddrGet( - {required String? stakePubKey}) { - generatedMapping.putIfAbsent( - Cip36Reporting, () => Cip36Reporting.fromJsonFactory); - - return _apiDraftCardanoCip36LatestRegistrationStakeAddrGet( - stakePubKey: stakePubKey); - } - - ///Get latest CIP36 registrations from stake address. - ///@param stake_pub_key Stake Public Key to find the latest registration for. - @Get(path: '/api/draft/cardano/cip36/latest_registration/stake_addr') - Future> - _apiDraftCardanoCip36LatestRegistrationStakeAddrGet( - {@Query('stake_pub_key') required String? stakePubKey}); - - ///Get latest CIP36 registrations from a stake key hash. - ///@param stake_key_hash Stake Key Hash to find the latest registration for. - Future> - apiDraftCardanoCip36LatestRegistrationStakeKeyHashGet( - {required String? stakeKeyHash}) { - generatedMapping.putIfAbsent( - Cip36Reporting, () => Cip36Reporting.fromJsonFactory); - - return _apiDraftCardanoCip36LatestRegistrationStakeKeyHashGet( - stakeKeyHash: stakeKeyHash); - } - - ///Get latest CIP36 registrations from a stake key hash. - ///@param stake_key_hash Stake Key Hash to find the latest registration for. - @Get(path: '/api/draft/cardano/cip36/latest_registration/stake_key_hash') - Future> - _apiDraftCardanoCip36LatestRegistrationStakeKeyHashGet( - {@Query('stake_key_hash') required String? stakeKeyHash}); - - ///Get latest CIP36 registrations from voting key. - ///@param vote_key Voting Key to find CIP36 registrations for. - Future> - apiDraftCardanoCip36LatestRegistrationVoteKeyGet( - {required String? voteKey}) { - generatedMapping.putIfAbsent( - Cip36ReportingList, () => Cip36ReportingList.fromJsonFactory); - - return _apiDraftCardanoCip36LatestRegistrationVoteKeyGet(voteKey: voteKey); - } - - ///Get latest CIP36 registrations from voting key. - ///@param vote_key Voting Key to find CIP36 registrations for. - @Get(path: '/api/draft/cardano/cip36/latest_registration/vote_key') - Future> - _apiDraftCardanoCip36LatestRegistrationVoteKeyGet( - {@Query('vote_key') required String? voteKey}); - - ///Get RBAC chain root - ///@param stake_address Stake address to get the chain root for. - Future> apiDraftRbacChainRootStakeAddressGet( - {required String? stakeAddress}) { - generatedMapping.putIfAbsent(Response$, () => Response$.fromJsonFactory); - - return _apiDraftRbacChainRootStakeAddressGet(stakeAddress: stakeAddress); - } - - ///Get RBAC chain root - ///@param stake_address Stake address to get the chain root for. - @Get(path: '/api/draft/rbac/chain_root/{stake_address}') - Future> _apiDraftRbacChainRootStakeAddressGet( - {@Path('stake_address') required String? stakeAddress}); - - ///Get registrations by RBAC chain root - ///@param chain_root Chain root to get the registrations for. - Future> - apiDraftRbacRegistrationsChainRootGet({required String? chainRoot}) { - generatedMapping.putIfAbsent(RbacRegistrationsResponse, - () => RbacRegistrationsResponse.fromJsonFactory); - - return _apiDraftRbacRegistrationsChainRootGet(chainRoot: chainRoot); - } - - ///Get registrations by RBAC chain root - ///@param chain_root Chain root to get the registrations for. - @Get(path: '/api/draft/rbac/registrations/{chain_root}') - Future> - _apiDraftRbacRegistrationsChainRootGet( - {@Path('chain_root') required String? chainRoot}); - - ///Get RBAC chain root for a given role0 key. - ///@param role0_key Role0 key to get the chain root for. - Future> - apiDraftRbacRole0ChainRootRole0KeyGet({required String? role0Key}) { - generatedMapping.putIfAbsent(RbacRole0ChainRootResponse, - () => RbacRole0ChainRootResponse.fromJsonFactory); - - return _apiDraftRbacRole0ChainRootRole0KeyGet(role0Key: role0Key); - } - - ///Get RBAC chain root for a given role0 key. - ///@param role0_key Role0 key to get the chain root for. - @Get(path: '/api/draft/rbac/role0_chain_root/{role0_key}') - Future> - _apiDraftRbacRole0ChainRootRole0KeyGet( - {@Path('role0_key') required String? role0Key}); - - ///Get staked ADA amount. - ///@param stake_address The stake address of the user. Should be a valid Bech32 encoded address followed by the https://cips.cardano.org/cip/CIP-19/#stake-addresses. - ///@param network Cardano network type. If omitted network type is identified from the stake address. If specified it must be correspondent to the network type encoded in the stake address. As `preprod` and `preview` network types in the stake address encoded as a `testnet`, to specify `preprod` or `preview` network type use this query parameter. - ///@param slot_number Slot number at which the staked ADA amount should be calculated. If omitted latest slot number is used. - Future> apiDraftCardanoAssetsStakeAddressGet({ - required String? stakeAddress, - enums.Network? network, - int? slotNumber, - }) { - generatedMapping.putIfAbsent( - FullStakeInfo, () => FullStakeInfo.fromJsonFactory); - - return _apiDraftCardanoAssetsStakeAddressGet( - stakeAddress: stakeAddress, - network: network?.value?.toString(), - slotNumber: slotNumber); - } - - ///Get staked ADA amount. - ///@param stake_address The stake address of the user. Should be a valid Bech32 encoded address followed by the https://cips.cardano.org/cip/CIP-19/#stake-addresses. - ///@param network Cardano network type. If omitted network type is identified from the stake address. If specified it must be correspondent to the network type encoded in the stake address. As `preprod` and `preview` network types in the stake address encoded as a `testnet`, to specify `preprod` or `preview` network type use this query parameter. - ///@param slot_number Slot number at which the staked ADA amount should be calculated. If omitted latest slot number is used. - @Get(path: '/api/draft/cardano/assets/{stake_address}') - Future> - _apiDraftCardanoAssetsStakeAddressGet({ - @Path('stake_address') required String? stakeAddress, - @Query('network') String? network, - @Query('slot_number') int? slotNumber, - }); - - ///Get the configuration for the frontend. - Future> apiDraftConfigFrontendGet() { - generatedMapping.putIfAbsent( - FrontendConfig, () => FrontendConfig.fromJsonFactory); - - return _apiDraftConfigFrontendGet(); - } - - ///Get the configuration for the frontend. - @Get(path: '/api/draft/config/frontend') - Future> _apiDraftConfigFrontendGet(); - - ///Set the frontend configuration. - ///@param IP *OPTIONAL* The IP Address to set the configuration for. - Future apiDraftConfigFrontendPut({ - Object? ip, - required FrontendConfig? body, - }) { - return _apiDraftConfigFrontendPut(ip: ip, body: body); - } - - ///Set the frontend configuration. - ///@param IP *OPTIONAL* The IP Address to set the configuration for. - @Put( - path: '/api/draft/config/frontend', - optionalBody: true, - ) - Future _apiDraftConfigFrontendPut({ - @Query('IP') Object? ip, - @Body() required FrontendConfig? body, - }); - - ///Get the frontend configuration JSON schema. - Future> apiDraftConfigFrontendSchemaGet() { - generatedMapping.putIfAbsent( - FrontendConfig, () => FrontendConfig.fromJsonFactory); - - return _apiDraftConfigFrontendSchemaGet(); - } - - ///Get the frontend configuration JSON schema. - @Get(path: '/api/draft/config/frontend/schema') - Future> _apiDraftConfigFrontendSchemaGet(); - - ///Voter's info - ///@param voting_key A Voters Public ED25519 Key (as registered in their most recent valid [CIP-15](https://cips.cardano.org/cips/cip15) or [CIP-36](https://cips.cardano.org/cips/cip36) registration). - ///@param event_index The Event Index to return results for. See [GET Events](Link to events endpoint) for details on retrieving all valid event IDs. - ///@param with_delegators If this optional flag is set, the response will include the delegator's list in the response. Otherwise, it will be omitted. - @deprecated - Future> - apiV1RegistrationVoterVotingKeyGet({ - required String? votingKey, - int? eventIndex, - bool? withDelegators, - }) { - generatedMapping.putIfAbsent( - VoterRegistration, () => VoterRegistration.fromJsonFactory); - - return _apiV1RegistrationVoterVotingKeyGet( - votingKey: votingKey, - eventIndex: eventIndex, - withDelegators: withDelegators); - } - - ///Voter's info - ///@param voting_key A Voters Public ED25519 Key (as registered in their most recent valid [CIP-15](https://cips.cardano.org/cips/cip15) or [CIP-36](https://cips.cardano.org/cips/cip36) registration). - ///@param event_index The Event Index to return results for. See [GET Events](Link to events endpoint) for details on retrieving all valid event IDs. - ///@param with_delegators If this optional flag is set, the response will include the delegator's list in the response. Otherwise, it will be omitted. - @deprecated - @Get(path: '/api/v1/registration/voter/{voting_key}') - Future> - _apiV1RegistrationVoterVotingKeyGet({ - @Path('voting_key') required String? votingKey, - @Query('event_index') int? eventIndex, - @Query('with_delegators') bool? withDelegators, - }); - - ///Posts a signed transaction. - @deprecated - Future> apiV0MessagePost( - {required Object? body}) { - generatedMapping.putIfAbsent(FragmentsProcessingSummary, - () => FragmentsProcessingSummary.fromJsonFactory); - - return _apiV0MessagePost(body: body); - } - - ///Posts a signed transaction. - @deprecated - @Post( - path: '/api/v0/message', - optionalBody: true, - ) - Future> _apiV0MessagePost( - {@Body() required Object? body}); - - ///Get all active vote plans endpoint. - @deprecated - Future>> apiV0VoteActivePlansGet() { - generatedMapping.putIfAbsent(VotePlan, () => VotePlan.fromJsonFactory); - - return _apiV0VoteActivePlansGet(); - } - - ///Get all active vote plans endpoint. - @deprecated - @Get(path: '/api/v0/vote/active/plans') - Future>> _apiV0VoteActivePlansGet(); - - ///Get Account Votes - ///@param account_id A account ID to get the votes for. - @deprecated - Future>> - apiV1VotesPlanAccountVotesAccountIdGet({required String? accountId}) { - generatedMapping.putIfAbsent( - AccountVote, () => AccountVote.fromJsonFactory); - - return _apiV1VotesPlanAccountVotesAccountIdGet(accountId: accountId); - } - - ///Get Account Votes - ///@param account_id A account ID to get the votes for. - @deprecated - @Get(path: '/api/v1/votes/plan/account-votes/{account_id}') - Future>> - _apiV1VotesPlanAccountVotesAccountIdGet( - {@Path('account_id') required String? accountId}); - - ///Process fragments - @deprecated - Future> apiV1FragmentsPost( - {required FragmentsBatch? body}) { - generatedMapping.putIfAbsent(FragmentsProcessingSummary, - () => FragmentsProcessingSummary.fromJsonFactory); - - return _apiV1FragmentsPost(body: body); - } - - ///Process fragments - @deprecated - @Post( - path: '/api/v1/fragments', - optionalBody: true, - ) - Future> _apiV1FragmentsPost( - {@Body() required FragmentsBatch? body}); - - ///Get Fragment Statuses - ///@param fragment_ids Comma-separated list of fragment ids for which the statuses will be retrieved. - @deprecated - Future> apiV1FragmentsStatusesGet( - {required List? fragmentIds}) { - return _apiV1FragmentsStatusesGet(fragmentIds: fragmentIds); - } - - ///Get Fragment Statuses - ///@param fragment_ids Comma-separated list of fragment ids for which the statuses will be retrieved. - @deprecated - @Get(path: '/api/v1/fragments/statuses') - Future> _apiV1FragmentsStatusesGet( - {@Query('fragment_ids') required List? fragmentIds}); -} - -typedef $JsonFactory = T Function(Map json); - -class $CustomJsonDecoder { - $CustomJsonDecoder(this.factories); - - final Map factories; - - dynamic decode(dynamic entity) { - if (entity is Iterable) { - return _decodeList(entity); - } - - if (entity is T) { - return entity; - } - - if (isTypeOf()) { - return entity; - } - - if (isTypeOf()) { - return entity; - } - - if (entity is Map) { - return _decodeMap(entity); - } - - return entity; - } - - T _decodeMap(Map values) { - final jsonFactory = factories[T]; - if (jsonFactory == null || jsonFactory is! $JsonFactory) { - return throw "Could not find factory for type $T. Is '$T: $T.fromJsonFactory' included in the CustomJsonDecoder instance creation in bootstrapper.dart?"; - } - - return jsonFactory(values); - } - - List _decodeList(Iterable values) => - values.where((v) => v != null).map((v) => decode(v) as T).toList(); -} - -class $JsonSerializableConverter extends chopper.JsonConverter { - @override - FutureOr> convertResponse( - chopper.Response response) async { - if (response.bodyString.isEmpty) { - // In rare cases, when let's say 204 (no content) is returned - - // we cannot decode the missing json with the result type specified - return chopper.Response(response.base, null, error: response.error); - } - - if (ResultType == String) { - return response.copyWith(); - } - - if (ResultType == DateTime) { - return response.copyWith( - body: DateTime.parse((response.body as String).replaceAll('"', '')) - as ResultType); - } - - final jsonRes = await super.convertResponse(response); - return jsonRes.copyWith( - body: $jsonDecoder.decode(jsonRes.body) as ResultType); - } -} - -final $jsonDecoder = $CustomJsonDecoder(generatedMapping); diff --git a/catalyst_voices/packages/internal/catalyst_voices_services/lib/src/crypto/key_derivation.dart b/catalyst_voices/packages/internal/catalyst_voices_services/lib/src/crypto/key_derivation.dart index d004e26fc43..8832c6f41e8 100644 --- a/catalyst_voices/packages/internal/catalyst_voices_services/lib/src/crypto/key_derivation.dart +++ b/catalyst_voices/packages/internal/catalyst_voices_services/lib/src/crypto/key_derivation.dart @@ -1,42 +1,43 @@ -import 'package:catalyst_cardano_serialization/catalyst_cardano_serialization.dart'; +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:catalyst_voices_models/catalyst_voices_models.dart'; -import 'package:ed25519_hd_key/ed25519_hd_key.dart'; /// Derives key pairs from a seed phrase. final class KeyDerivation { - const KeyDerivation(); + final CatalystKeyDerivation _keyDerivation; - /// Derives an [Ed25519KeyPair] from a [seedPhrase] and [path]. + const KeyDerivation(this._keyDerivation); + + Future deriveMasterKey({ + required SeedPhrase seedPhrase, + }) { + return _keyDerivation.deriveMasterKey( + mnemonic: seedPhrase.mnemonic, + ); + } + + /// Derives an [Ed25519KeyPair] from a [masterKey] and [path]. /// /// Example [path]: m/0'/2147483647' - /// - // TODO(dtscalac): this takes around 2.5s to execute, optimize it - // or move to a JS web worker. - Future deriveKeyPair({ - required SeedPhrase seedPhrase, + Future deriveKeyPair({ + required Bip32Ed25519XPrivateKey masterKey, required String path, }) async { - final masterKey = await ED25519_HD_KEY.derivePath( - path, - seedPhrase.uint8ListSeed, - ); + final privateKey = await masterKey.derivePrivateKey(path: path); + final publicKey = await privateKey.derivePublicKey(); - final privateKey = masterKey.key; - final publicKey = await ED25519_HD_KEY.getPublicKey(privateKey, false); - - return Ed25519KeyPair( - publicKey: Ed25519PublicKey.fromBytes(publicKey), - privateKey: Ed25519PrivateKey.fromBytes(privateKey), + return Bip32Ed25519XKeyPair( + publicKey: publicKey, + privateKey: privateKey, ); } - /// Derives the [Ed25519KeyPair] for the [role] from a [seedPhrase]. - Future deriveAccountRoleKeyPair({ - required SeedPhrase seedPhrase, + /// Derives the [Ed25519KeyPair] for the [role] from a [masterKey]. + Future deriveAccountRoleKeyPair({ + required Bip32Ed25519XPrivateKey masterKey, required AccountRole role, }) async { return deriveKeyPair( - seedPhrase: seedPhrase, + masterKey: masterKey, path: _roleKeyDerivationPath(role), ); } diff --git a/catalyst_voices/packages/internal/catalyst_voices_services/lib/src/keychain/keychain.dart b/catalyst_voices/packages/internal/catalyst_voices_services/lib/src/keychain/keychain.dart index c67433514c4..238706dd85c 100644 --- a/catalyst_voices/packages/internal/catalyst_voices_services/lib/src/keychain/keychain.dart +++ b/catalyst_voices/packages/internal/catalyst_voices_services/lib/src/keychain/keychain.dart @@ -1,4 +1,4 @@ -import 'package:catalyst_cardano_serialization/catalyst_cardano_serialization.dart'; +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:catalyst_voices_models/catalyst_voices_models.dart'; import 'package:catalyst_voices_services/src/lockable.dart'; @@ -9,9 +9,9 @@ abstract interface class Keychain implements Lockable { Future get metadata; - Future getMasterKey(); + Future getMasterKey(); - Future setMasterKey(Ed25519PrivateKey key); + Future setMasterKey(Bip32Ed25519XPrivateKey key); Future clear(); } diff --git a/catalyst_voices/packages/internal/catalyst_voices_services/lib/src/keychain/vault_keychain.dart b/catalyst_voices/packages/internal/catalyst_voices_services/lib/src/keychain/vault_keychain.dart index 0217da4b0b1..9a6ad8e7559 100644 --- a/catalyst_voices/packages/internal/catalyst_voices_services/lib/src/keychain/vault_keychain.dart +++ b/catalyst_voices/packages/internal/catalyst_voices_services/lib/src/keychain/vault_keychain.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'dart:convert'; -import 'package:catalyst_cardano_serialization/catalyst_cardano_serialization.dart'; +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:catalyst_voices_models/catalyst_voices_models.dart'; import 'package:catalyst_voices_services/catalyst_voices_services.dart'; @@ -68,15 +68,15 @@ final class VaultKeychain extends SecureStorageVault implements Keychain { } @override - Future getMasterKey() async { + Future getMasterKey() async { final encodedMasterKey = await readString(key: _rootKey); return encodedMasterKey != null - ? Ed25519PrivateKey.fromHex(encodedMasterKey) + ? Bip32Ed25519XPrivateKeyFactory.instance.fromHex(encodedMasterKey) : null; } @override - Future setMasterKey(Ed25519PrivateKey data) async { + Future setMasterKey(Bip32Ed25519XPrivateKey data) async { await writeString(data.toHex(), key: _rootKey); } diff --git a/catalyst_voices/packages/internal/catalyst_voices_services/lib/src/registration/registration_service.dart b/catalyst_voices/packages/internal/catalyst_voices_services/lib/src/registration/registration_service.dart index 0e1770c7539..e7f162a345a 100644 --- a/catalyst_voices/packages/internal/catalyst_voices_services/lib/src/registration/registration_service.dart +++ b/catalyst_voices/packages/internal/catalyst_voices_services/lib/src/registration/registration_service.dart @@ -2,6 +2,7 @@ import 'dart:math'; import 'package:catalyst_cardano/catalyst_cardano.dart'; import 'package:catalyst_cardano_serialization/catalyst_cardano_serialization.dart'; +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:catalyst_voices_models/catalyst_voices_models.dart'; import 'package:catalyst_voices_repositories/catalyst_voices_repositories.dart'; import 'package:catalyst_voices_services/catalyst_voices_services.dart'; @@ -42,10 +43,9 @@ abstract interface class RegistrationService { /// Afterwards the user must grant a permission inside the wallet extension. Future getCardanoWalletInfo(CardanoWallet wallet); - /// See [KeyDerivation.deriveAccountRoleKeyPair]. - Future deriveAccountRoleKeyPair({ + /// See [KeyDerivation.deriveMasterKey]. + Future deriveMasterKey({ required SeedPhrase seedPhrase, - required Set roles, }); /// Loads account related to this [seedPhrase]. Throws exception if non found. @@ -66,7 +66,7 @@ abstract interface class RegistrationService { Future prepareRegistration({ required CardanoWallet wallet, required NetworkId networkId, - required Ed25519KeyPair keyPair, + required Bip32Ed25519XPrivateKey masterKey, required Set roles, }); @@ -84,7 +84,7 @@ abstract interface class RegistrationService { required Transaction unsignedTx, required Set roles, required LockFactor lockFactor, - required Ed25519KeyPair keyPair, + required Bip32Ed25519XPrivateKey masterKey, }); Future registerTestAccount({ @@ -127,15 +127,10 @@ final class RegistrationServiceImpl implements RegistrationService { } @override - Future deriveAccountRoleKeyPair({ + Future deriveMasterKey({ required SeedPhrase seedPhrase, - required Set roles, }) { - return _keyDerivation.deriveAccountRoleKeyPair( - seedPhrase: seedPhrase, - // TODO(dtscalac): Only one roles is supported atm. - role: AccountRole.root, - ); + return _keyDerivation.deriveMasterKey(seedPhrase: seedPhrase); } // TODO(damian-molinski): to be implemented @@ -153,6 +148,7 @@ final class RegistrationServiceImpl implements RegistrationService { throw const RegistrationUnknownException(); } + // TODO(dtscalac): support more roles when backend is ready final roles = {AccountRole.root}; final keychainId = const Uuid().v4(); @@ -175,16 +171,12 @@ final class RegistrationServiceImpl implements RegistrationService { required LockFactor lockFactor, }) async { final keychainId = account.keychainId; - - final keyPair = await deriveAccountRoleKeyPair( - seedPhrase: seedPhrase, - roles: account.roles, - ); + final masterKey = await deriveMasterKey(seedPhrase: seedPhrase); final keychain = await _keychainProvider.create(keychainId); await keychain.setLock(lockFactor); await keychain.unlock(lockFactor); - await keychain.setMasterKey(keyPair.privateKey); + await keychain.setMasterKey(masterKey); return keychain; } @@ -193,7 +185,7 @@ final class RegistrationServiceImpl implements RegistrationService { Future prepareRegistration({ required CardanoWallet wallet, required NetworkId networkId, - required Ed25519KeyPair keyPair, + required Bip32Ed25519XPrivateKey masterKey, required Set roles, }) async { try { @@ -208,6 +200,12 @@ final class RegistrationServiceImpl implements RegistrationService { ), ); + final keyPair = await _keyDerivation.deriveAccountRoleKeyPair( + masterKey: masterKey, + // TODO(dtscalac): support more roles when backend is ready + role: AccountRole.root, + ); + final registrationBuilder = RegistrationTransactionBuilder( transactionConfig: config, keyPair: keyPair, @@ -232,7 +230,7 @@ final class RegistrationServiceImpl implements RegistrationService { required Transaction unsignedTx, required Set roles, required LockFactor lockFactor, - required Ed25519KeyPair keyPair, + required Bip32Ed25519XPrivateKey masterKey, }) async { try { final enabledWallet = await wallet.enable(); @@ -253,7 +251,7 @@ final class RegistrationServiceImpl implements RegistrationService { final keychain = await _keychainProvider.create(keychainId); await keychain.setLock(lockFactor); await keychain.unlock(lockFactor); - await keychain.setMasterKey(keyPair.privateKey); + await keychain.setMasterKey(masterKey); final balance = await enabledWallet.getBalance(); final address = await enabledWallet.getChangeAddress(); @@ -281,16 +279,12 @@ final class RegistrationServiceImpl implements RegistrationService { required LockFactor lockFactor, }) async { final roles = {AccountRole.root}; - // TODO(dtscalac): Update key value when derivation is final. - final keyPair = await deriveAccountRoleKeyPair( - seedPhrase: seedPhrase, - roles: roles, - ); + final masterKey = await deriveMasterKey(seedPhrase: seedPhrase); final keychain = await _keychainProvider.create(keychainId); await keychain.setLock(lockFactor); await keychain.unlock(lockFactor); - await keychain.setMasterKey(keyPair.privateKey); + await keychain.setMasterKey(masterKey); return Account( keychainId: keychainId, diff --git a/catalyst_voices/packages/internal/catalyst_voices_services/lib/src/registration/registration_transaction_builder.dart b/catalyst_voices/packages/internal/catalyst_voices_services/lib/src/registration/registration_transaction_builder.dart index e551c64204c..6d19bbbbf57 100644 --- a/catalyst_voices/packages/internal/catalyst_voices_services/lib/src/registration/registration_transaction_builder.dart +++ b/catalyst_voices/packages/internal/catalyst_voices_services/lib/src/registration/registration_transaction_builder.dart @@ -1,6 +1,7 @@ import 'dart:math'; import 'package:catalyst_cardano_serialization/catalyst_cardano_serialization.dart'; +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:catalyst_voices_models/catalyst_voices_models.dart'; /// The transaction metadata used for registration. @@ -17,7 +18,7 @@ final class RegistrationTransactionBuilder { final TransactionBuilderConfig transactionConfig; /// The key pair used to sign the user registration certificate. - final Ed25519KeyPair keyPair; + final Bip32Ed25519XKeyPair keyPair; /// The network ID where the transaction will be submitted. final NetworkId networkId; @@ -130,7 +131,7 @@ final class RegistrationTransactionBuilder { } Future _generateX509Certificate({ - required Ed25519KeyPair keyPair, + required Bip32Ed25519XKeyPair keyPair, }) async { // TODO(dtscalac): once serial number generation is defined come up with // a better solution than assigning a random number @@ -167,7 +168,7 @@ final class RegistrationTransactionBuilder { return X509Certificate.generateSelfSigned( tbsCertificate: tbs, - keyPair: keyPair, + privateKey: keyPair.privateKey, ); } diff --git a/catalyst_voices/packages/internal/catalyst_voices_services/pubspec.yaml b/catalyst_voices/packages/internal/catalyst_voices_services/pubspec.yaml index da798ffe299..cad7dc6701c 100644 --- a/catalyst_voices/packages/internal/catalyst_voices_services/pubspec.yaml +++ b/catalyst_voices/packages/internal/catalyst_voices_services/pubspec.yaml @@ -11,6 +11,7 @@ dependencies: catalyst_cardano: ^0.3.0 catalyst_cardano_serialization: ^0.4.0 catalyst_cardano_web: ^0.3.0 + catalyst_key_derivation: ^0.1.0 catalyst_voices_models: path: ../catalyst_voices_models catalyst_voices_repositories: @@ -35,5 +36,6 @@ dev_dependencies: catalyst_analysis: ^2.0.0 chopper_generator: ^7.2.0 json_serializable: ^6.7.1 + mocktail: ^1.0.1 swagger_dart_code_generator: ^2.15.2 test: ^1.24.9 diff --git a/catalyst_voices/packages/internal/catalyst_voices_services/test/src/crypto/key_derivation_test.dart b/catalyst_voices/packages/internal/catalyst_voices_services/test/src/crypto/key_derivation_test.dart index afd466a1168..7c9098c8bea 100644 --- a/catalyst_voices/packages/internal/catalyst_voices_services/test/src/crypto/key_derivation_test.dart +++ b/catalyst_voices/packages/internal/catalyst_voices_services/test/src/crypto/key_derivation_test.dart @@ -1,24 +1,36 @@ +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:catalyst_voices_models/catalyst_voices_models.dart'; import 'package:catalyst_voices_services/src/crypto/key_derivation.dart'; +import 'package:mocktail/mocktail.dart'; import 'package:test/test.dart'; void main() { group(KeyDerivation, () { + final seedPhrase = SeedPhrase.fromMnemonic( + 'few loyal swift champion rug peace dinosaur' + ' erase bacon tone install universe', + ); + + late _FakeCatalystKeyDerivation catalystKeyDerivation; late KeyDerivation keyDerivation; - late SeedPhrase seedPhrase; + late _FakeBip32Ed22519XPrivateKey masterKey; setUp(() { - keyDerivation = const KeyDerivation(); - seedPhrase = SeedPhrase.fromMnemonic( - 'few loyal swift champion rug peace dinosaur' - ' erase bacon tone install universe', - ); + catalystKeyDerivation = _FakeCatalystKeyDerivation(); + keyDerivation = KeyDerivation(catalystKeyDerivation); + masterKey = _FakeBip32Ed22519XPrivateKey(bytes: [1]); + }); + + test('should generate master key from a seed phrase', () async { + final privateKey = + await keyDerivation.deriveMasterKey(seedPhrase: seedPhrase); + expect(privateKey.bytes, isNotEmpty); }); test('should generate key pair with different valid paths', () async { for (final role in AccountRole.values) { final keyPair = await keyDerivation.deriveKeyPair( - seedPhrase: seedPhrase, + masterKey: masterKey, path: "m/${role.roleNumber}'/1234'", ); expect(keyPair, isNotNull); @@ -28,7 +40,7 @@ void main() { test('should generate key pair with different valid roles', () async { for (final role in AccountRole.values) { final keyPair = await keyDerivation.deriveAccountRoleKeyPair( - seedPhrase: seedPhrase, + masterKey: masterKey, role: role, ); expect(keyPair, isNotNull); @@ -36,3 +48,40 @@ void main() { }); }); } + +class _FakeCatalystKeyDerivation extends Fake implements CatalystKeyDerivation { + @override + Future deriveMasterKey({ + required String mnemonic, + }) async { + return _FakeBip32Ed22519XPrivateKey(bytes: mnemonic.codeUnits); + } +} + +class _FakeBip32Ed22519XPrivateKey extends Fake + implements Bip32Ed25519XPrivateKey { + @override + final List bytes; + + _FakeBip32Ed22519XPrivateKey({required this.bytes}); + + @override + Future derivePublicKey() async { + return _FakeBip32Ed25519XPublicKey(bytes: bytes); + } + + @override + Future derivePrivateKey({ + required String path, + }) async { + return _FakeBip32Ed22519XPrivateKey(bytes: path.codeUnits); + } +} + +class _FakeBip32Ed25519XPublicKey extends Fake + implements Bip32Ed25519XPublicKey { + @override + final List bytes; + + _FakeBip32Ed25519XPublicKey({required this.bytes}); +} diff --git a/catalyst_voices/packages/internal/catalyst_voices_services/test/src/keychain/vault_keychain_provider_test.dart b/catalyst_voices/packages/internal/catalyst_voices_services/test/src/keychain/vault_keychain_provider_test.dart index 50383a4fd44..8d66f091238 100644 --- a/catalyst_voices/packages/internal/catalyst_voices_services/test/src/keychain/vault_keychain_provider_test.dart +++ b/catalyst_voices/packages/internal/catalyst_voices_services/test/src/keychain/vault_keychain_provider_test.dart @@ -1,7 +1,9 @@ -import 'package:catalyst_cardano_serialization/catalyst_cardano_serialization.dart'; +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:catalyst_voices_models/catalyst_voices_models.dart'; import 'package:catalyst_voices_services/src/keychain/vault_keychain_provider.dart'; +import 'package:convert/convert.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:mocktail/mocktail.dart'; import 'package:test/test.dart'; import 'package:uuid/uuid.dart'; @@ -29,8 +31,10 @@ void main() { // Given final id = const Uuid().v4(); const lockFactor = PasswordLockFactor('Test1234'); - final key = Ed25519PrivateKey.fromHex( - '8a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c', + final key = _FakeBip32Ed22519XPrivateKey( + bytes: hex.decode( + '8a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c', + ), ); // When @@ -103,3 +107,14 @@ void main() { }); }); } + +class _FakeBip32Ed22519XPrivateKey extends Fake + implements Bip32Ed25519XPrivateKey { + @override + final List bytes; + + _FakeBip32Ed22519XPrivateKey({required this.bytes}); + + @override + String toHex() => hex.encode(bytes); +} diff --git a/catalyst_voices/packages/internal/catalyst_voices_services/test/src/keychain/vault_keychain_test.dart b/catalyst_voices/packages/internal/catalyst_voices_services/test/src/keychain/vault_keychain_test.dart index e76cfb13f74..ccfd397b5a9 100644 --- a/catalyst_voices/packages/internal/catalyst_voices_services/test/src/keychain/vault_keychain_test.dart +++ b/catalyst_voices/packages/internal/catalyst_voices_services/test/src/keychain/vault_keychain_test.dart @@ -1,16 +1,20 @@ -import 'package:catalyst_cardano_serialization/catalyst_cardano_serialization.dart'; +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:catalyst_voices_models/catalyst_voices_models.dart'; import 'package:catalyst_voices_services/catalyst_voices_services.dart'; +import 'package:convert/convert.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:mocktail/mocktail.dart'; import 'package:test/test.dart'; import 'package:uuid/uuid.dart'; void main() { - setUp(() { - FlutterSecureStorage.setMockInitialValues({}); - }); - group(VaultKeychain, () { + setUpAll(() { + FlutterSecureStorage.setMockInitialValues({}); + Bip32Ed25519XPrivateKeyFactory.instance = + _FakeBip32Ed25519XPrivateKeyFactory(); + }); + test('is considered empty even with metadata in it', () async { // Given final id = const Uuid().v4(); @@ -26,7 +30,7 @@ void main() { // Given final id = const Uuid().v4(); const lock = PasswordLockFactor('Test1234'); - final key = Ed25519PrivateKey.fromHex( + final key = Bip32Ed25519XPrivateKeyFactory.instance.fromHex( '8a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c', ); @@ -44,7 +48,7 @@ void main() { // Given final id = const Uuid().v4(); const lock = PasswordLockFactor('Test1234'); - final key = Ed25519PrivateKey.fromHex( + final key = Bip32Ed25519XPrivateKeyFactory.instance.fromHex( '8a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c', ); @@ -92,3 +96,22 @@ void main() { }); }); } + +class _FakeBip32Ed25519XPrivateKeyFactory + extends Bip32Ed25519XPrivateKeyFactory { + @override + Bip32Ed25519XPrivateKey fromBytes(List bytes) { + return _FakeBip32Ed22519XPrivateKey(bytes: bytes); + } +} + +class _FakeBip32Ed22519XPrivateKey extends Fake + implements Bip32Ed25519XPrivateKey { + @override + final List bytes; + + _FakeBip32Ed22519XPrivateKey({required this.bytes}); + + @override + String toHex() => hex.encode(bytes); +} diff --git a/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/catalyst_voices_view_models.dart b/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/catalyst_voices_view_models.dart index b7fe3c671fb..6932612b432 100644 --- a/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/catalyst_voices_view_models.dart +++ b/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/catalyst_voices_view_models.dart @@ -1,5 +1,9 @@ export 'authentication/authentication.dart'; export 'exception/localized_exception.dart'; export 'exception/localized_unknown_exception.dart'; +export 'navigation/sections_list_view_item.dart'; +export 'navigation/sections_navigation.dart'; export 'registration/exception/localized_registration_exception.dart'; export 'registration/registration.dart'; +export 'treasury/treasury_sections.dart'; +export 'workspace/workspace_sections.dart'; diff --git a/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/navigation/sections_list_view_item.dart b/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/navigation/sections_list_view_item.dart new file mode 100644 index 00000000000..ae8b6afa47b --- /dev/null +++ b/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/navigation/sections_list_view_item.dart @@ -0,0 +1,6 @@ +import 'package:flutter/foundation.dart'; + +//ignore: one_member_abstracts +abstract interface class SectionsListViewItem { + Key buildKey(); +} diff --git a/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/navigation/sections_navigation.dart b/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/navigation/sections_navigation.dart new file mode 100644 index 00000000000..3edb249e211 --- /dev/null +++ b/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/navigation/sections_navigation.dart @@ -0,0 +1,89 @@ +import 'package:catalyst_voices_assets/generated/assets.gen.dart'; +import 'package:catalyst_voices_view_models/catalyst_voices_view_models.dart'; +import 'package:equatable/equatable.dart'; +import 'package:flutter/widgets.dart'; + +typedef SectionStepId = ({int sectionId, int stepId}); + +abstract interface class Section implements SectionsListViewItem { + int get id; + + SvgGenImage get icon; + + List get steps; + + String localizedName(BuildContext context); +} + +abstract interface class SectionStep implements SectionsListViewItem { + int get id; + + int get sectionId; + + SectionStepId get sectionStepId; + + bool get isEnabled; + + bool get isEditable; + + String localizedName(BuildContext context); +} + +abstract base class BaseSection extends Equatable + implements Section { + @override + final int id; + @override + final List steps; + + const BaseSection({ + required this.id, + required this.steps, + }); + + @override + SvgGenImage get icon => VoicesAssets.icons.viewGrid; + + @override + Key buildKey() => ValueKey('Section[$id]Key'); + + @override + List get props => [ + id, + steps, + ]; +} + +abstract base class BaseSectionStep extends Equatable implements SectionStep { + @override + final int id; + @override + final int sectionId; + @override + final bool isEnabled; + @override + final bool isEditable; + + const BaseSectionStep({ + required this.id, + required this.sectionId, + this.isEnabled = true, + this.isEditable = true, + }); + + @override + SectionStepId get sectionStepId { + return (sectionId: sectionId, stepId: id); + } + + @override + Key buildKey() => ValueKey('SectionStep[$sectionStepId]Key'); + + @override + List get props => [ + id, + sectionId, + isEnabled, + isEditable, + ]; +} diff --git a/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/treasury/campaign_setup.dart b/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/treasury/campaign_setup.dart new file mode 100644 index 00000000000..c7f5eb56331 --- /dev/null +++ b/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/treasury/campaign_setup.dart @@ -0,0 +1,30 @@ +part of 'treasury_sections.dart'; + +final class CampaignSetup extends TreasurySection { + const CampaignSetup({ + required super.id, + required super.steps, + }); + + @override + String localizedName(BuildContext context) { + return 'Setup Campaign'; + } +} + +final class DummyTopicStep extends TreasurySectionStep { + const DummyTopicStep({ + required super.id, + required super.sectionId, + super.isEditable, + }); + + @override + String localizedName(BuildContext context) { + return 'Topic $id'; + } + + String localizedDesc(BuildContext context) { + return localizedName(context); + } +} diff --git a/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/treasury/treasury_sections.dart b/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/treasury/treasury_sections.dart new file mode 100644 index 00000000000..441471b193a --- /dev/null +++ b/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/treasury/treasury_sections.dart @@ -0,0 +1,21 @@ +import 'package:catalyst_voices_view_models/catalyst_voices_view_models.dart'; +import 'package:flutter/widgets.dart'; + +part 'campaign_setup.dart'; + +sealed class TreasurySection + extends BaseSection { + const TreasurySection({ + required super.id, + required super.steps, + }); +} + +sealed class TreasurySectionStep extends BaseSectionStep { + const TreasurySectionStep({ + required super.id, + required super.sectionId, + super.isEnabled, + super.isEditable, + }); +} diff --git a/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/workspace/capability_and_feasibility.dart b/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/workspace/capability_and_feasibility.dart new file mode 100644 index 00000000000..c24b42a864c --- /dev/null +++ b/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/workspace/capability_and_feasibility.dart @@ -0,0 +1,51 @@ +part of 'workspace_sections.dart'; + +final class CompatibilityAndFeasibility extends WorkspaceSection { + const CompatibilityAndFeasibility({ + required super.id, + required super.steps, + }); + + @override + String localizedName(BuildContext context) { + return 'Compatibility & Feasibility'; + } +} + +final class DeliveryAndAccountabilityStep extends RichTextStep { + const DeliveryAndAccountabilityStep({ + required super.id, + required super.sectionId, + required super.data, + super.charsLimit, + }); + + @override + String localizedName(BuildContext context) { + return 'Delivery & Accountability'; + } + + @override + String localizedDesc(BuildContext context) { + return 'How do you proof trust and accountability for your project?'; + } +} + +final class FeasibilityChecksStep extends RichTextStep { + const FeasibilityChecksStep({ + required super.id, + required super.sectionId, + required super.data, + super.charsLimit, + }); + + @override + String localizedName(BuildContext context) { + return 'Feasibility checks'; + } + + @override + String localizedDesc(BuildContext context) { + return 'How will you check if your approach will work?'; + } +} diff --git a/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/workspace/proposal_impact.dart b/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/workspace/proposal_impact.dart new file mode 100644 index 00000000000..92c55ac5280 --- /dev/null +++ b/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/workspace/proposal_impact.dart @@ -0,0 +1,41 @@ +part of 'workspace_sections.dart'; + +final class ProposalImpact extends WorkspaceSection { + const ProposalImpact({ + required super.id, + required super.steps, + }); + + @override + String localizedName(BuildContext context) { + return 'Proposal impact'; + } +} + +final class BonusMarkUpStep extends RichTextStep { + const BonusMarkUpStep({ + required super.id, + required super.sectionId, + required super.data, + super.charsLimit, + }); + + @override + String localizedName(BuildContext context) { + return 'Bonus mark-up'; + } +} + +final class ValueForMoneyStep extends RichTextStep { + const ValueForMoneyStep({ + required super.id, + required super.sectionId, + required super.data, + super.charsLimit, + }); + + @override + String localizedName(BuildContext context) { + return 'Value for Money'; + } +} diff --git a/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/workspace/proposal_setup.dart b/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/workspace/proposal_setup.dart new file mode 100644 index 00000000000..ea97c9c286c --- /dev/null +++ b/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/workspace/proposal_setup.dart @@ -0,0 +1,26 @@ +part of 'workspace_sections.dart'; + +final class ProposalSetup extends WorkspaceSection { + const ProposalSetup({ + required super.id, + required super.steps, + }); + + @override + String localizedName(BuildContext context) { + return 'Proposal setup'; + } +} + +final class TitleStep extends RichTextStep { + const TitleStep({ + required super.id, + required super.sectionId, + required super.data, + }); + + @override + String localizedName(BuildContext context) { + return 'Title'; + } +} diff --git a/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/workspace/proposal_solution.dart b/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/workspace/proposal_solution.dart new file mode 100644 index 00000000000..fecbfa6cf87 --- /dev/null +++ b/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/workspace/proposal_solution.dart @@ -0,0 +1,70 @@ +part of 'workspace_sections.dart'; + +final class ProposalSolution extends WorkspaceSection { + const ProposalSolution({ + required super.id, + required super.steps, + }); + + @override + String localizedName(BuildContext context) { + return 'Proposal solution'; + } +} + +final class ProblemPerspectiveStep extends RichTextStep { + const ProblemPerspectiveStep({ + required super.id, + required super.sectionId, + required super.data, + super.charsLimit, + }); + + @override + String localizedName(BuildContext context) { + return 'Problem perspective'; + } + + @override + String localizedDesc(BuildContext context) { + return "What is your perspective on the problem you're solving?"; + } +} + +final class PerspectiveRationaleStep extends RichTextStep { + const PerspectiveRationaleStep({ + required super.id, + required super.sectionId, + required super.data, + super.charsLimit, + }); + + @override + String localizedName(BuildContext context) { + return 'Perspective rationale'; + } + + @override + String localizedDesc(BuildContext context) { + return 'Why did you choose this perspective?'; + } +} + +final class ProjectEngagementStep extends RichTextStep { + const ProjectEngagementStep({ + required super.id, + required super.sectionId, + required super.data, + super.charsLimit, + }); + + @override + String localizedName(BuildContext context) { + return 'Project engagement'; + } + + @override + String localizedDesc(BuildContext context) { + return 'Who will your project engage?'; + } +} diff --git a/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/workspace/proposal_summary.dart b/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/workspace/proposal_summary.dart new file mode 100644 index 00000000000..f32ba3c2af0 --- /dev/null +++ b/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/workspace/proposal_summary.dart @@ -0,0 +1,55 @@ +part of 'workspace_sections.dart'; + +final class ProposalSummary extends WorkspaceSection { + const ProposalSummary({ + required super.id, + required super.steps, + }); + + @override + String localizedName(BuildContext context) { + return 'Proposal summary'; + } +} + +final class ProblemStep extends RichTextStep { + const ProblemStep({ + required super.id, + required super.sectionId, + required super.data, + super.charsLimit, + }); + + @override + String localizedName(BuildContext context) { + return 'Problem segment'; + } +} + +final class SolutionStep extends RichTextStep { + const SolutionStep({ + required super.id, + required super.sectionId, + required super.data, + super.charsLimit, + }); + + @override + String localizedName(BuildContext context) { + return 'Solution segment'; + } +} + +final class PublicDescriptionStep extends RichTextStep { + const PublicDescriptionStep({ + required super.id, + required super.sectionId, + required super.data, + super.charsLimit, + }); + + @override + String localizedName(BuildContext context) { + return 'Public description'; + } +} diff --git a/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/workspace/workspace_sections.dart b/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/workspace/workspace_sections.dart new file mode 100644 index 00000000000..d595a6c809f --- /dev/null +++ b/catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/workspace/workspace_sections.dart @@ -0,0 +1,40 @@ +import 'package:catalyst_voices_models/catalyst_voices_models.dart'; +import 'package:catalyst_voices_view_models/catalyst_voices_view_models.dart'; +import 'package:flutter/widgets.dart'; + +part 'capability_and_feasibility.dart'; +part 'proposal_impact.dart'; +part 'proposal_setup.dart'; +part 'proposal_solution.dart'; +part 'proposal_summary.dart'; + +sealed class WorkspaceSection extends BaseSection { + const WorkspaceSection({ + required super.id, + required super.steps, + }); +} + +sealed class WorkspaceSectionStep extends BaseSectionStep { + const WorkspaceSectionStep({ + required super.id, + required super.sectionId, + super.isEnabled, + super.isEditable, + }); +} + +abstract base class RichTextStep extends WorkspaceSectionStep { + final DocumentJson data; + final int? charsLimit; + + const RichTextStep({ + required super.id, + required super.sectionId, + required this.data, + this.charsLimit, + super.isEditable, + }); + + String localizedDesc(BuildContext context) => localizedName(context); +} diff --git a/catalyst_voices/packages/internal/catalyst_voices_view_models/pubspec.yaml b/catalyst_voices/packages/internal/catalyst_voices_view_models/pubspec.yaml index c7008196b6d..84c2462ecc0 100644 --- a/catalyst_voices/packages/internal/catalyst_voices_view_models/pubspec.yaml +++ b/catalyst_voices/packages/internal/catalyst_voices_view_models/pubspec.yaml @@ -11,6 +11,8 @@ dependencies: catalyst_cardano: ^0.3.0 catalyst_cardano_serialization: ^0.4.0 catalyst_cardano_web: ^0.3.0 + catalyst_voices_assets: + path: ../catalyst_voices_assets catalyst_voices_localization: path: ../catalyst_voices_localization catalyst_voices_models: diff --git a/catalyst_voices/packages/libs/catalyst_cardano/catalyst_cardano/example/lib/main.dart b/catalyst_voices/packages/libs/catalyst_cardano/catalyst_cardano/example/lib/main.dart index 0e99f9d7d33..45475539225 100644 --- a/catalyst_voices/packages/libs/catalyst_cardano/catalyst_cardano/example/lib/main.dart +++ b/catalyst_voices/packages/libs/catalyst_cardano/catalyst_cardano/example/lib/main.dart @@ -3,6 +3,7 @@ import 'dart:math'; import 'package:catalyst_cardano/catalyst_cardano.dart'; import 'package:catalyst_cardano_serialization/catalyst_cardano_serialization.dart'; +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:cbor/cbor.dart'; import 'package:convert/convert.dart'; import 'package:equatable/equatable.dart'; @@ -13,8 +14,21 @@ part 'sign_and_submit_rbac_tx.dart'; part 'sign_and_submit_tx.dart'; part 'sign_data.dart'; -void main() { +/// Run only via `flutter run`: +/// +/// ```shell +/// flutter run \ +/// --web-header Cross-Origin-Opener-Policy=same-origin \ +/// --web-header Cross-Origin-Embedder-Policy=require-corp \ +/// --target lib/main.dart \ +/// -d chrome +/// ``` +/// +/// Explanation: +/// - flutter_rust_bridge: https://cjycode.com/flutter_rust_bridge/manual/miscellaneous/web-cross-origin#when-flutter-run +Future main() async { EquatableConfig.stringify = true; + await CatalystKeyDerivation.init(); runApp(const MyApp()); SemanticsBinding.instance.ensureSemantics(); } diff --git a/catalyst_voices/packages/libs/catalyst_cardano/catalyst_cardano/example/lib/sign_and_submit_rbac_tx.dart b/catalyst_voices/packages/libs/catalyst_cardano/catalyst_cardano/example/lib/sign_and_submit_rbac_tx.dart index 6a32f9453b6..a69ef66586f 100644 --- a/catalyst_voices/packages/libs/catalyst_cardano/catalyst_cardano/example/lib/sign_and_submit_rbac_tx.dart +++ b/catalyst_voices/packages/libs/catalyst_cardano/catalyst_cardano/example/lib/sign_and_submit_rbac_tx.dart @@ -78,12 +78,17 @@ Future> _buildMetadataEnvelope({ required Set utxos, required ShelleyAddress rewardAddress, }) async { - final seed = List.generate( - Ed25519PrivateKey.length, - (i) => Random().nextInt(256), - ); + const mnemonic = 'minute cause soda tilt taste cabin' + ' father body mixture box gym awkward'; + + const keyDerivation = CatalystKeyDerivation(); + final privateKey = await keyDerivation.deriveMasterKey(mnemonic: mnemonic); + final publicKey = await privateKey.derivePublicKey(); - final keyPair = await Ed25519KeyPair.fromSeed(seed); + final keyPair = Bip32Ed25519XKeyPair( + publicKey: publicKey, + privateKey: privateKey, + ); final cert = await generateX509Certificate( keyPair: keyPair, @@ -188,7 +193,7 @@ Transaction _buildUnsignedRbacTx({ } Future generateX509Certificate({ - required Ed25519KeyPair keyPair, + required Bip32Ed25519XKeyPair keyPair, required ShelleyAddress stakeAddress, }) async { const maxInt = 4294967296; @@ -224,6 +229,6 @@ Future generateX509Certificate({ return X509Certificate.generateSelfSigned( tbsCertificate: tbs, - keyPair: keyPair, + privateKey: keyPair.privateKey, ); } diff --git a/catalyst_voices/packages/libs/catalyst_cardano/catalyst_cardano/example/pubspec.yaml b/catalyst_voices/packages/libs/catalyst_cardano/catalyst_cardano/example/pubspec.yaml index 178816e5c69..eaa42e72f1e 100644 --- a/catalyst_voices/packages/libs/catalyst_cardano/catalyst_cardano/example/pubspec.yaml +++ b/catalyst_voices/packages/libs/catalyst_cardano/catalyst_cardano/example/pubspec.yaml @@ -14,6 +14,7 @@ dependencies: catalyst_cardano_web: ^0.3.0 catalyst_compression: ^0.3.0 catalyst_compression_web: ^0.3.0 + catalyst_key_derivation: ^0.1.0 cbor: ^6.2.0 convert: ^3.1.1 cupertino_icons: ^1.0.6 diff --git a/catalyst_voices/packages/libs/catalyst_cardano/catalyst_cardano/wallet-automation/Earthfile b/catalyst_voices/packages/libs/catalyst_cardano/catalyst_cardano/wallet-automation/Earthfile index bdc0c26543f..666e46261d6 100644 --- a/catalyst_voices/packages/libs/catalyst_cardano/catalyst_cardano/wallet-automation/Earthfile +++ b/catalyst_voices/packages/libs/catalyst_cardano/catalyst_cardano/wallet-automation/Earthfile @@ -1,6 +1,6 @@ VERSION 0.8 -IMPORT github.com/input-output-hk/catalyst-ci/earthly/flutter:v3.2.23 AS flutter-ci -IMPORT github.com/input-output-hk/catalyst-ci/earthly/playwright:v3.2.23 AS playwright-ci +IMPORT github.com/input-output-hk/catalyst-ci/earthly/flutter:v3.2.24 AS flutter-ci +IMPORT github.com/input-output-hk/catalyst-ci/earthly/playwright:v3.2.24 AS playwright-ci deps: DO playwright-ci+SETUP --workdir=/wallet-automation diff --git a/catalyst_voices/packages/libs/catalyst_cardano_serialization/README.md b/catalyst_voices/packages/libs/catalyst_cardano_serialization/README.md index e9c6c10e715..c237a6938f6 100644 --- a/catalyst_voices/packages/libs/catalyst_cardano_serialization/README.md +++ b/catalyst_voices/packages/libs/catalyst_cardano_serialization/README.md @@ -46,6 +46,7 @@ The caller must prove that they are eligible to spend the input UTXOs. ```dart import 'package:catalyst_cardano_serialization/catalyst_cardano_serialization.dart'; +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:cbor/cbor.dart'; import 'package:convert/convert.dart'; diff --git a/catalyst_voices/packages/libs/catalyst_cardano_serialization/analysis_options.yaml b/catalyst_voices/packages/libs/catalyst_cardano_serialization/analysis_options.yaml index a2316514a4b..e80581059b4 100644 --- a/catalyst_voices/packages/libs/catalyst_cardano_serialization/analysis_options.yaml +++ b/catalyst_voices/packages/libs/catalyst_cardano_serialization/analysis_options.yaml @@ -1,4 +1,4 @@ include: package:catalyst_analysis/analysis_options.yaml analyzer: - exclude: [build/**, lib/*.g.dart, lib/generated/**] + exclude: [build/**, lib/*.g.dart, lib/generated/**, test/**/*.mocks.dart] diff --git a/catalyst_voices/packages/libs/catalyst_cardano_serialization/example/main.dart b/catalyst_voices/packages/libs/catalyst_cardano_serialization/example/main.dart index 6183e5010f3..2b2afd182c8 100644 --- a/catalyst_voices/packages/libs/catalyst_cardano_serialization/example/main.dart +++ b/catalyst_voices/packages/libs/catalyst_cardano_serialization/example/main.dart @@ -1,6 +1,7 @@ // ignore_for_file: avoid_print import 'package:catalyst_cardano_serialization/catalyst_cardano_serialization.dart'; +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:cbor/cbor.dart'; import 'package:convert/convert.dart'; diff --git a/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/catalyst_cardano_serialization.dart b/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/catalyst_cardano_serialization.dart index d8012ad1c97..dbbd28b30e0 100644 --- a/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/catalyst_cardano_serialization.dart +++ b/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/catalyst_cardano_serialization.dart @@ -13,7 +13,6 @@ export 'src/rbac/x509_certificate.dart'; export 'src/rbac/x509_metadata_envelope.dart'; export 'src/redeemer.dart'; export 'src/scripts.dart'; -export 'src/signature.dart'; export 'src/transaction.dart'; export 'src/transaction_output.dart'; export 'src/types.dart'; diff --git a/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/builders/witness_builder.dart b/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/builders/witness_builder.dart index 9917cfeecf0..0704aabb2b9 100644 --- a/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/builders/witness_builder.dart +++ b/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/builders/witness_builder.dart @@ -1,6 +1,6 @@ import 'package:catalyst_cardano_serialization/src/exceptions.dart'; -import 'package:catalyst_cardano_serialization/src/signature.dart'; import 'package:catalyst_cardano_serialization/src/witness.dart'; +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:equatable/equatable.dart'; /// A builder that builds [TransactionWitnessSet]. diff --git a/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/hashes.dart b/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/hashes.dart index 6fa16006d06..bdd83edea44 100644 --- a/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/hashes.dart +++ b/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/hashes.dart @@ -5,9 +5,9 @@ import 'dart:typed_data'; import 'package:catalyst_cardano_serialization/src/certificate.dart'; import 'package:catalyst_cardano_serialization/src/exceptions.dart'; import 'package:catalyst_cardano_serialization/src/redeemer.dart'; -import 'package:catalyst_cardano_serialization/src/signature.dart'; import 'package:catalyst_cardano_serialization/src/transaction.dart'; import 'package:catalyst_cardano_serialization/src/types.dart'; +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:cbor/cbor.dart'; import 'package:convert/convert.dart'; import 'package:equatable/equatable.dart'; diff --git a/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/rbac/auth_token.dart b/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/rbac/auth_token.dart index 2b57b8ff0c6..74d552552da 100644 --- a/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/rbac/auth_token.dart +++ b/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/rbac/auth_token.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'package:catalyst_cardano_serialization/catalyst_cardano_serialization.dart'; +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:cbor/cbor.dart'; import 'package:ulid/ulid.dart'; diff --git a/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/rbac/registration_data.dart b/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/rbac/registration_data.dart index c71001aba76..17af8f6ac8e 100644 --- a/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/rbac/registration_data.dart +++ b/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/rbac/registration_data.dart @@ -1,5 +1,6 @@ import 'package:catalyst_cardano_serialization/catalyst_cardano_serialization.dart'; import 'package:catalyst_cardano_serialization/src/utils/cbor.dart'; +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:cbor/cbor.dart'; import 'package:equatable/equatable.dart'; @@ -15,7 +16,7 @@ final class RegistrationData extends Equatable implements CborEncodable { final List? cborCerts; /// Ordered list of simple public keys that are registered. - final List? publicKeys; + final List? publicKeys; /// Revocation list of certs being revoked by an issuer. final List? revocationSet; @@ -44,7 +45,9 @@ final class RegistrationData extends Equatable implements CborEncodable { return RegistrationData( derCerts: derCerts?.map(X509DerCertificate.fromCbor).toList(), cborCerts: cborCerts?.map(C509Certificate.fromCbor).toList(), - publicKeys: publicKeys?.map(Ed25519PublicKey.fromCbor).toList(), + publicKeys: publicKeys + ?.map(Bip32Ed25519XPublicKeyFactory.instance.fromCbor) + .toList(), revocationSet: revocationSet?.map(CertificateHash.fromCbor).toList(), roleDataSet: roleDataSet?.map(RoleData.fromCbor).toSet(), ); @@ -65,7 +68,7 @@ final class RegistrationData extends Equatable implements CborEncodable { cborCerts, (item) => item.toCbor(), ), - const CborSmallInt(30): _createCborList( + const CborSmallInt(30): _createCborList( publicKeys, (item) => item.toCbor(tags: [CborCustomTags.ed25519Bip32PublicKey]), ), diff --git a/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/rbac/x509_certificate.dart b/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/rbac/x509_certificate.dart index c80e37fdeb7..dbf6f7c7eb1 100644 --- a/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/rbac/x509_certificate.dart +++ b/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/rbac/x509_certificate.dart @@ -3,6 +3,7 @@ import 'dart:typed_data'; import 'package:asn1lib/asn1lib.dart'; import 'package:catalyst_cardano_serialization/catalyst_cardano_serialization.dart'; +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:equatable/equatable.dart'; bool _registeredASN1Names = false; @@ -37,14 +38,13 @@ class X509Certificate with EquatableMixin { }); /// Generates a self-signed [X509Certificate] from [tbsCertificate] - /// that is signed using the private key of [keyPair]. + /// that is signed using the [privateKey]. static Future generateSelfSigned({ required X509TBSCertificate tbsCertificate, - required Ed25519KeyPair keyPair, + required Bip32Ed25519XPrivateKey privateKey, }) async { final encodedTbsCertificate = tbsCertificate.toASN1(); - final signature = - await keyPair.privateKey.sign(encodedTbsCertificate.encodedBytes); + final signature = await privateKey.sign(encodedTbsCertificate.encodedBytes); return X509Certificate( tbsCertificate: tbsCertificate, @@ -118,7 +118,7 @@ class X509TBSCertificate with EquatableMixin { final X509DistinguishedName subject; /// The public key of the [subject]. - final Ed25519PublicKey subjectPublicKey; + final Bip32Ed25519XPublicKey subjectPublicKey; /// Extra extensions of the certificate. final X509CertificateExtensions? extensions; @@ -182,7 +182,7 @@ class X509TBSCertificate with EquatableMixin { ..add(ASN1UtcTime(validityNotAfter.toUtc())); } - ASN1Object _createSubjectPublicKeyInfo(Ed25519PublicKey publicKey) { + ASN1Object _createSubjectPublicKeyInfo(Bip32Ed25519XPublicKey publicKey) { return ASN1Sequence() ..add( ASN1Sequence() diff --git a/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/rbac/x509_metadata_envelope.dart b/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/rbac/x509_metadata_envelope.dart index 22c7ca0ed4a..5d69388927b 100644 --- a/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/rbac/x509_metadata_envelope.dart +++ b/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/rbac/x509_metadata_envelope.dart @@ -1,5 +1,6 @@ import 'package:catalyst_cardano_serialization/catalyst_cardano_serialization.dart'; import 'package:catalyst_compression/catalyst_compression.dart'; +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:cbor/cbor.dart'; import 'package:equatable/equatable.dart'; @@ -104,7 +105,7 @@ final class X509MetadataEnvelope extends Equatable { /// /// The signature is calculated over this unsigned data, and the /// pre-allocated signature storage is replaced with the signature itself. - final Ed25519Signature validationSignature; + final Bip32Ed25519XSignature validationSignature; /// The default constructor for [X509MetadataEnvelope]. const X509MetadataEnvelope({ @@ -117,13 +118,14 @@ final class X509MetadataEnvelope extends Equatable { /// Constructs a [X509MetadataEnvelope] that is not signed yet. /// - /// A [Ed25519PrivateKey] can be used to sign the envelope with [sign] method. + /// A [Bip32Ed25519XSignature] can be used to sign + /// the envelope with [sign] method. X509MetadataEnvelope.unsigned({ required this.purpose, required this.txInputsHash, this.previousTransactionId, this.chunkedData, - }) : validationSignature = Ed25519Signature.seeded(0); + }) : validationSignature = Bip32Ed25519XSignatureFactory.instance.seeded(0); /// Deserializes the type from cbor. /// @@ -148,7 +150,8 @@ final class X509MetadataEnvelope extends Equatable { ? TransactionHash.fromCbor(previousTransactionId) : null, chunkedData: chunkedData != null ? deserializer(chunkedData) : null, - validationSignature: Ed25519Signature.fromCbor(validationSignature), + validationSignature: + Bip32Ed25519XSignatureFactory.instance.fromCbor(validationSignature), ); } @@ -181,7 +184,7 @@ final class X509MetadataEnvelope extends Equatable { /// /// The [serializer] in most cases is going to be [RegistrationData.toCbor]. Future> sign({ - required Ed25519PrivateKey privateKey, + required Bip32Ed25519XPrivateKey privateKey, required ChunkedDataSerializer serializer, }) async { final bytes = cbor.encode(await toCbor(serializer: serializer)); @@ -194,19 +197,21 @@ final class X509MetadataEnvelope extends Equatable { /// /// The [serializer] in most cases is going to be [RegistrationData.toCbor]. Future verifySignature({ - required Ed25519Signature signature, - required Ed25519PublicKey publicKey, + required Bip32Ed25519XSignature signature, + required Bip32Ed25519XPublicKey publicKey, required ChunkedDataSerializer serializer, }) async { - final envelope = withValidationSignature(Ed25519Signature.seeded(0)); + final envelope = withValidationSignature( + Bip32Ed25519XSignatureFactory.instance.seeded(0), + ); final bytes = cbor.encode(await envelope.toCbor(serializer: serializer)); - return signature.verify(bytes, publicKey: publicKey); + return publicKey.verify(bytes, signature: signature); } /// Returns a copy of this [X509MetadataEnvelope] /// with given [validationSignature]. X509MetadataEnvelope withValidationSignature( - Ed25519Signature validationSignature, + Bip32Ed25519XSignature validationSignature, ) { return X509MetadataEnvelope( purpose: purpose, diff --git a/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/signature.dart b/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/signature.dart index a29064f0a73..bee9f452d85 100644 --- a/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/signature.dart +++ b/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/signature.dart @@ -116,9 +116,6 @@ extension type Ed25519PrivateKey._(List bytes) { String toHex() => hex.encode(bytes); /// Signs the [message] with the private key and returns the signature. - // - // TODO(dtscalac): it takes 200-300ms to execute, optimize it - // or move to a JS web worker Future sign(List message) async { final algorithm = Ed25519(); final keyPair = await algorithm.newKeyPairFromSeed(bytes); diff --git a/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/witness.dart b/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/witness.dart index 6fe6aaf4e43..e9f03bde6c7 100644 --- a/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/witness.dart +++ b/catalyst_voices/packages/libs/catalyst_cardano_serialization/lib/src/witness.dart @@ -1,4 +1,5 @@ import 'package:catalyst_cardano_serialization/catalyst_cardano_serialization.dart'; +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:cbor/cbor.dart'; import 'package:equatable/equatable.dart'; diff --git a/catalyst_voices/packages/libs/catalyst_cardano_serialization/pubspec.yaml b/catalyst_voices/packages/libs/catalyst_cardano_serialization/pubspec.yaml index f4675e9c06f..68cfd6fcc5e 100644 --- a/catalyst_voices/packages/libs/catalyst_cardano_serialization/pubspec.yaml +++ b/catalyst_voices/packages/libs/catalyst_cardano_serialization/pubspec.yaml @@ -15,6 +15,7 @@ dependencies: bip32_ed25519: ^0.6.0 catalyst_compression: ^0.3.0 catalyst_compression_web: ^0.3.0 + catalyst_key_derivation: ^0.1.0 cbor: ^6.2.0 convert: ^3.1.1 cryptography: ^2.7.0 @@ -23,5 +24,8 @@ dependencies: ulid: ^2.0.0 dev_dependencies: + build_runner: ^2.4.12 catalyst_analysis: ^2.0.0 + mockito: ^5.4.4 + mocktail: ^1.0.1 test: ^1.24.9 diff --git a/catalyst_voices/packages/libs/catalyst_cardano_serialization/test/rbac/auth_token_test.dart b/catalyst_voices/packages/libs/catalyst_cardano_serialization/test/rbac/auth_token_test.dart index 6e327179b7a..15d49b0d21a 100644 --- a/catalyst_voices/packages/libs/catalyst_cardano_serialization/test/rbac/auth_token_test.dart +++ b/catalyst_voices/packages/libs/catalyst_cardano_serialization/test/rbac/auth_token_test.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'package:catalyst_cardano_serialization/catalyst_cardano_serialization.dart'; +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:cbor/cbor.dart'; import 'package:cryptography/cryptography.dart'; import 'package:test/test.dart'; diff --git a/catalyst_voices/packages/libs/catalyst_cardano_serialization/test/rbac/registration_data_test.dart b/catalyst_voices/packages/libs/catalyst_cardano_serialization/test/rbac/registration_data_test.dart index af2c4b911f0..0e61184ce03 100644 --- a/catalyst_voices/packages/libs/catalyst_cardano_serialization/test/rbac/registration_data_test.dart +++ b/catalyst_voices/packages/libs/catalyst_cardano_serialization/test/rbac/registration_data_test.dart @@ -1,11 +1,22 @@ import 'package:catalyst_cardano_serialization/catalyst_cardano_serialization.dart'; +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:cbor/cbor.dart'; +import 'package:equatable/equatable.dart'; +import 'package:mocktail/mocktail.dart'; import 'package:test/test.dart'; import '../test_utils/test_data.dart'; void main() { group(RegistrationData, () { + setUpAll(() { + Bip32Ed25519XPrivateKeyFactory.instance = + _FakeBip32Ed25519XPrivateKeyFactory(); + + Bip32Ed25519XPublicKeyFactory.instance = + _FakeBip32Ed25519XPublicKeyFactory(); + }); + test('from and to cbor', () { final derCert = X509DerCertificate.fromHex(derCertHex); final c509Cert = C509Certificate.fromHex(c509CertHex); @@ -13,7 +24,7 @@ void main() { final original = RegistrationData( derCerts: [derCert], cborCerts: [c509Cert], - publicKeys: [Ed25519PublicKey.seeded(0)], + publicKeys: [Bip32Ed25519XPublicKeyFactory.instance.seeded(0)], revocationSet: [ CertificateHash.fromX509DerCertificate(derCert), CertificateHash.fromC509Certificate(c509Cert), @@ -44,3 +55,48 @@ void main() { }); }); } + +class _FakeBip32Ed25519XPrivateKeyFactory + extends Bip32Ed25519XPrivateKeyFactory { + @override + Bip32Ed25519XPrivateKey fromBytes(List bytes) { + return _FakeBip32Ed22519XPrivateKey(bytes: bytes); + } +} + +class _FakeBip32Ed25519XPublicKeyFactory extends Bip32Ed25519XPublicKeyFactory { + @override + _FakeBip32Ed25519XPublicKey fromBytes(List bytes) { + return _FakeBip32Ed25519XPublicKey(bytes: bytes); + } +} + +class _FakeBip32Ed22519XPrivateKey extends Fake + implements Bip32Ed25519XPrivateKey { + @override + final List bytes; + + _FakeBip32Ed22519XPrivateKey({required this.bytes}); + + @override + CborValue toCbor() { + return CborBytes(bytes); + } +} + +class _FakeBip32Ed25519XPublicKey extends Fake + with EquatableMixin + implements Bip32Ed25519XPublicKey { + @override + final List bytes; + + _FakeBip32Ed25519XPublicKey({required this.bytes}); + + @override + CborValue toCbor({List tags = const []}) { + return CborBytes(bytes, tags: tags); + } + + @override + List get props => bytes; +} diff --git a/catalyst_voices/packages/libs/catalyst_cardano_serialization/test/rbac/x509_certificate_test.dart b/catalyst_voices/packages/libs/catalyst_cardano_serialization/test/rbac/x509_certificate_test.dart index 7bc9408dc32..eb31671c01d 100644 --- a/catalyst_voices/packages/libs/catalyst_cardano_serialization/test/rbac/x509_certificate_test.dart +++ b/catalyst_voices/packages/libs/catalyst_cardano_serialization/test/rbac/x509_certificate_test.dart @@ -1,13 +1,29 @@ import 'package:catalyst_cardano_serialization/src/rbac/x509_certificate.dart'; -import 'package:catalyst_cardano_serialization/src/signature.dart'; +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; import 'package:test/test.dart'; +import 'x509_certificate_test.mocks.dart'; + +@GenerateNiceMocks([ + MockSpec(), + MockSpec(), + MockSpec(), +]) void main() { group(X509Certificate, () { - test('generateSelfSigned X509 certificate', () async { - final seed = List.filled(Ed25519PrivateKey.length, 0); - final keyPair = await Ed25519KeyPair.fromSeed(seed); + final privateKey = MockBip32Ed25519XPrivateKey(); + final publicKey = MockBip32Ed25519XPublicKey(); + final signature = MockBip32Ed25519XSignature(); + setUp(() { + // ignore: discarded_futures + when(privateKey.sign(any)).thenAnswer((_) async => signature); + when(signature.bytes).thenReturn([1, 2, 3]); + }); + + test('generateSelfSigned X509 certificate', () async { /* cSpell:disable */ const issuer = X509DistinguishedName( countryName: 'US', @@ -20,7 +36,7 @@ void main() { final tbs = X509TBSCertificate( serialNumber: 1, - subjectPublicKey: keyPair.publicKey, + subjectPublicKey: publicKey, issuer: issuer, validityNotBefore: DateTime.now().toUtc(), validityNotAfter: X509TBSCertificate.foreverValid, @@ -38,11 +54,11 @@ void main() { final certificate = await X509Certificate.generateSelfSigned( tbsCertificate: tbs, - keyPair: keyPair, + privateKey: privateKey, ); expect(certificate.tbsCertificate, equals(tbs)); - expect(certificate.signature, isNotEmpty); + expect(certificate.signature, equals(signature.bytes)); expect(certificate.toPem(), isNotEmpty); expect(certificate.toDer().bytes, isNotEmpty); diff --git a/catalyst_voices/packages/libs/catalyst_cardano_serialization/test/rbac/x509_certificate_test.mocks.dart b/catalyst_voices/packages/libs/catalyst_cardano_serialization/test/rbac/x509_certificate_test.mocks.dart new file mode 100644 index 00000000000..cbd52bec42e --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_cardano_serialization/test/rbac/x509_certificate_test.mocks.dart @@ -0,0 +1,386 @@ +// Mocks generated by Mockito 5.4.4 from annotations +// in catalyst_cardano_serialization/test/rbac/x509_certificate_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i7; + +import 'package:catalyst_key_derivation/src/bip32_ed25519/bip32_ed25519_private_key.dart' + as _i5; +import 'package:catalyst_key_derivation/src/bip32_ed25519/bip32_ed25519_public_key.dart' + as _i4; +import 'package:catalyst_key_derivation/src/bip32_ed25519/bip32_ed25519_signature.dart' + as _i3; +import 'package:cbor/cbor.dart' as _i2; +import 'package:mockito/mockito.dart' as _i1; +import 'package:mockito/src/dummies.dart' as _i6; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakeCborValue_0 extends _i1.SmartFake implements _i2.CborValue { + _FakeCborValue_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeBip32Ed25519XSignature_1 extends _i1.SmartFake + implements _i3.Bip32Ed25519XSignature { + _FakeBip32Ed25519XSignature_1( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeBip32Ed25519XPublicKey_2 extends _i1.SmartFake + implements _i4.Bip32Ed25519XPublicKey { + _FakeBip32Ed25519XPublicKey_2( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeBip32Ed25519XPrivateKey_3 extends _i1.SmartFake + implements _i5.Bip32Ed25519XPrivateKey { + _FakeBip32Ed25519XPrivateKey_3( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +/// A class which mocks [Bip32Ed25519XPrivateKey]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockBip32Ed25519XPrivateKey extends _i1.Mock + implements _i5.Bip32Ed25519XPrivateKey { + @override + List get bytes => (super.noSuchMethod( + Invocation.getter(#bytes), + returnValue: [], + returnValueForMissingStub: [], + ) as List); + + @override + List get props => (super.noSuchMethod( + Invocation.getter(#props), + returnValue: [], + returnValueForMissingStub: [], + ) as List); + + @override + _i2.CborValue toCbor() => (super.noSuchMethod( + Invocation.method( + #toCbor, + [], + ), + returnValue: _FakeCborValue_0( + this, + Invocation.method( + #toCbor, + [], + ), + ), + returnValueForMissingStub: _FakeCborValue_0( + this, + Invocation.method( + #toCbor, + [], + ), + ), + ) as _i2.CborValue); + + @override + String toHex() => (super.noSuchMethod( + Invocation.method( + #toHex, + [], + ), + returnValue: _i6.dummyValue( + this, + Invocation.method( + #toHex, + [], + ), + ), + returnValueForMissingStub: _i6.dummyValue( + this, + Invocation.method( + #toHex, + [], + ), + ), + ) as String); + + @override + _i7.Future<_i3.Bip32Ed25519XSignature> sign(List? message) => + (super.noSuchMethod( + Invocation.method( + #sign, + [message], + ), + returnValue: _i7.Future<_i3.Bip32Ed25519XSignature>.value( + _FakeBip32Ed25519XSignature_1( + this, + Invocation.method( + #sign, + [message], + ), + )), + returnValueForMissingStub: _i7.Future<_i3.Bip32Ed25519XSignature>.value( + _FakeBip32Ed25519XSignature_1( + this, + Invocation.method( + #sign, + [message], + ), + )), + ) as _i7.Future<_i3.Bip32Ed25519XSignature>); + + @override + _i7.Future verify( + List? message, { + required _i3.Bip32Ed25519XSignature? signature, + }) => + (super.noSuchMethod( + Invocation.method( + #verify, + [message], + {#signature: signature}, + ), + returnValue: _i7.Future.value(false), + returnValueForMissingStub: _i7.Future.value(false), + ) as _i7.Future); + + @override + _i7.Future<_i4.Bip32Ed25519XPublicKey> derivePublicKey() => + (super.noSuchMethod( + Invocation.method( + #derivePublicKey, + [], + ), + returnValue: _i7.Future<_i4.Bip32Ed25519XPublicKey>.value( + _FakeBip32Ed25519XPublicKey_2( + this, + Invocation.method( + #derivePublicKey, + [], + ), + )), + returnValueForMissingStub: _i7.Future<_i4.Bip32Ed25519XPublicKey>.value( + _FakeBip32Ed25519XPublicKey_2( + this, + Invocation.method( + #derivePublicKey, + [], + ), + )), + ) as _i7.Future<_i4.Bip32Ed25519XPublicKey>); + + @override + _i7.Future<_i5.Bip32Ed25519XPrivateKey> derivePrivateKey( + {required String? path}) => + (super.noSuchMethod( + Invocation.method( + #derivePrivateKey, + [], + {#path: path}, + ), + returnValue: _i7.Future<_i5.Bip32Ed25519XPrivateKey>.value( + _FakeBip32Ed25519XPrivateKey_3( + this, + Invocation.method( + #derivePrivateKey, + [], + {#path: path}, + ), + )), + returnValueForMissingStub: + _i7.Future<_i5.Bip32Ed25519XPrivateKey>.value( + _FakeBip32Ed25519XPrivateKey_3( + this, + Invocation.method( + #derivePrivateKey, + [], + {#path: path}, + ), + )), + ) as _i7.Future<_i5.Bip32Ed25519XPrivateKey>); + + @override + void drop() => super.noSuchMethod( + Invocation.method( + #drop, + [], + ), + returnValueForMissingStub: null, + ); +} + +/// A class which mocks [Bip32Ed25519XPublicKey]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockBip32Ed25519XPublicKey extends _i1.Mock + implements _i4.Bip32Ed25519XPublicKey { + @override + List get bytes => (super.noSuchMethod( + Invocation.getter(#bytes), + returnValue: [], + returnValueForMissingStub: [], + ) as List); + + @override + List get props => (super.noSuchMethod( + Invocation.getter(#props), + returnValue: [], + returnValueForMissingStub: [], + ) as List); + + @override + _i2.CborValue toCbor({List? tags = const []}) => (super.noSuchMethod( + Invocation.method( + #toCbor, + [], + {#tags: tags}, + ), + returnValue: _FakeCborValue_0( + this, + Invocation.method( + #toCbor, + [], + {#tags: tags}, + ), + ), + returnValueForMissingStub: _FakeCborValue_0( + this, + Invocation.method( + #toCbor, + [], + {#tags: tags}, + ), + ), + ) as _i2.CborValue); + + @override + String toHex() => (super.noSuchMethod( + Invocation.method( + #toHex, + [], + ), + returnValue: _i6.dummyValue( + this, + Invocation.method( + #toHex, + [], + ), + ), + returnValueForMissingStub: _i6.dummyValue( + this, + Invocation.method( + #toHex, + [], + ), + ), + ) as String); + + @override + _i7.Future verify( + List? message, { + required _i3.Bip32Ed25519XSignature? signature, + }) => + (super.noSuchMethod( + Invocation.method( + #verify, + [message], + {#signature: signature}, + ), + returnValue: _i7.Future.value(false), + returnValueForMissingStub: _i7.Future.value(false), + ) as _i7.Future); +} + +/// A class which mocks [Bip32Ed25519XSignature]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockBip32Ed25519XSignature extends _i1.Mock + implements _i3.Bip32Ed25519XSignature { + @override + List get bytes => (super.noSuchMethod( + Invocation.getter(#bytes), + returnValue: [], + returnValueForMissingStub: [], + ) as List); + + @override + List get props => (super.noSuchMethod( + Invocation.getter(#props), + returnValue: [], + returnValueForMissingStub: [], + ) as List); + + @override + _i2.CborValue toCbor() => (super.noSuchMethod( + Invocation.method( + #toCbor, + [], + ), + returnValue: _FakeCborValue_0( + this, + Invocation.method( + #toCbor, + [], + ), + ), + returnValueForMissingStub: _FakeCborValue_0( + this, + Invocation.method( + #toCbor, + [], + ), + ), + ) as _i2.CborValue); + + @override + String toHex() => (super.noSuchMethod( + Invocation.method( + #toHex, + [], + ), + returnValue: _i6.dummyValue( + this, + Invocation.method( + #toHex, + [], + ), + ), + returnValueForMissingStub: _i6.dummyValue( + this, + Invocation.method( + #toHex, + [], + ), + ), + ) as String); +} diff --git a/catalyst_voices/packages/libs/catalyst_cardano_serialization/test/test_utils/test_data.dart b/catalyst_voices/packages/libs/catalyst_cardano_serialization/test/test_utils/test_data.dart index 45c7d330e7d..4fbf9707aa3 100644 --- a/catalyst_voices/packages/libs/catalyst_cardano_serialization/test/test_utils/test_data.dart +++ b/catalyst_voices/packages/libs/catalyst_cardano_serialization/test/test_utils/test_data.dart @@ -1,11 +1,11 @@ import 'package:catalyst_cardano_serialization/src/address.dart'; import 'package:catalyst_cardano_serialization/src/hashes.dart'; import 'package:catalyst_cardano_serialization/src/scripts.dart'; -import 'package:catalyst_cardano_serialization/src/signature.dart'; import 'package:catalyst_cardano_serialization/src/transaction.dart'; import 'package:catalyst_cardano_serialization/src/transaction_output.dart'; import 'package:catalyst_cardano_serialization/src/types.dart'; import 'package:catalyst_cardano_serialization/src/witness.dart'; +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:cbor/cbor.dart'; import 'package:convert/convert.dart'; diff --git a/catalyst_voices/packages/libs/catalyst_compression/catalyst_compression_web/assets/js/brotli/brotli_wasm.js b/catalyst_voices/packages/libs/catalyst_compression/catalyst_compression_web/assets/js/brotli/brotli_wasm.js new file mode 100644 index 00000000000..0364da43424 --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_compression/catalyst_compression_web/assets/js/brotli/brotli_wasm.js @@ -0,0 +1,498 @@ + +let wasm; + +const heap = new Array(32).fill(undefined); + +heap.push(undefined, null, true, false); + +function getObject(idx) {return heap[idx];} + +const cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); + +cachedTextDecoder.decode(); + +let cachegetUint8Memory0 = null; +function getUint8Memory0() { + if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) { + cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer); + } + return cachegetUint8Memory0; +} + +function getStringFromWasm0(ptr, len) { + return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); +} + +let heap_next = heap.length; + +function addHeapObject(obj) { + if (heap_next === heap.length) heap.push(heap.length + 1); + const idx = heap_next; + heap_next = heap[idx]; + + heap[idx] = obj; + return idx; +} + +let WASM_VECTOR_LEN = 0; + +const cachedTextEncoder = new TextEncoder('utf-8'); + +const encodeString = typeof cachedTextEncoder.encodeInto === 'function' ? +function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +} : +function (arg, view) { + const buf = cachedTextEncoder.encode(arg); + view.set(buf); + return { + read: arg.length, + written: buf.length }; + +}; + +function passStringToWasm0(arg, malloc, realloc) { + + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length); + getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len); + + const mem = getUint8Memory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3); + const view = getUint8Memory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +let cachegetInt32Memory0 = null; +function getInt32Memory0() { + if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) { + cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer); + } + return cachegetInt32Memory0; +} + +function dropObject(idx) { + if (idx < 36) return; + heap[idx] = heap_next; + heap_next = idx; +} + +function takeObject(idx) { + const ret = getObject(idx); + dropObject(idx); + return ret; +} + +function passArray8ToWasm0(arg, malloc) { + const ptr = malloc(arg.length * 1); + getUint8Memory0().set(arg, ptr / 1); + WASM_VECTOR_LEN = arg.length; + return ptr; +} + +let stack_pointer = 32; + +function addBorrowedObject(obj) { + if (stack_pointer == 1) throw new Error('out of js stack'); + heap[--stack_pointer] = obj; + return stack_pointer; +} + +function getArrayU8FromWasm0(ptr, len) { + return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len); +} +/** + * @param {Uint8Array} buf + * @param {any} raw_options + * @returns {Uint8Array} + */ +export function compress(buf, raw_options) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passArray8ToWasm0(buf, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + wasm.compress(retptr, ptr0, len0, addBorrowedObject(raw_options)); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + var r3 = getInt32Memory0()[retptr / 4 + 3]; + if (r3) { + throw takeObject(r2); + } + var v1 = getArrayU8FromWasm0(r0, r1).slice(); + wasm.__wbindgen_free(r0, r1 * 1); + return v1; + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + heap[stack_pointer++] = undefined; + } +} + +/** + * @param {Uint8Array} buf + * @returns {Uint8Array} + */ +export function decompress(buf) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passArray8ToWasm0(buf, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + wasm.decompress(retptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + var r3 = getInt32Memory0()[retptr / 4 + 3]; + if (r3) { + throw takeObject(r2); + } + var v1 = getArrayU8FromWasm0(r0, r1).slice(); + wasm.__wbindgen_free(r0, r1 * 1); + return v1; + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } +} + +function isLikeNone(x) { + return x === undefined || x === null; +} +/** + * Same as [`brotli::BrotliResult`] except [`brotli::BrotliResult::ResultFailure`]. + * + * Always `> 0`. + * + * `ResultFailure` is removed + * because we will convert the failure to an actual negative error code (if available) and pass it elsewhere. + */ +export const BrotliStreamResultCode = Object.freeze({ ResultSuccess: 1, "1": "ResultSuccess", NeedsMoreInput: 2, "2": "NeedsMoreInput", NeedsMoreOutput: 3, "3": "NeedsMoreOutput" }); +/** + * Returned by every successful (de)compression. + */ +export class BrotliStreamResult { + + static __wrap(ptr) { + const obj = Object.create(BrotliStreamResult.prototype); + obj.ptr = ptr; + + return obj; + } + + __destroy_into_raw() { + const ptr = this.ptr; + this.ptr = 0; + + return ptr; + } + + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_brotlistreamresult_free(ptr); + } + /** + * Result code. + * + * See [`BrotliStreamResultCode`] for available values. + * + * When error, the error code is not passed here but rather goes to `Err`. + */ + get code() { + const ret = wasm.__wbg_get_brotlistreamresult_code(this.ptr); + return ret >>> 0; + } + /** + * Result code. + * + * See [`BrotliStreamResultCode`] for available values. + * + * When error, the error code is not passed here but rather goes to `Err`. + * @param {number} arg0 + */ + set code(arg0) { + wasm.__wbg_set_brotlistreamresult_code(this.ptr, arg0); + } + /** + * Output buffer + */ + get buf() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.__wbg_get_brotlistreamresult_buf(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var v0 = getArrayU8FromWasm0(r0, r1).slice(); + wasm.__wbindgen_free(r0, r1 * 1); + return v0; + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * Output buffer + * @param {Uint8Array} arg0 + */ + set buf(arg0) { + const ptr0 = passArray8ToWasm0(arg0, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + wasm.__wbg_set_brotlistreamresult_buf(this.ptr, ptr0, len0); + } + /** + * Consumed bytes of the input buffer + */ + get input_offset() { + const ret = wasm.__wbg_get_brotlistreamresult_input_offset(this.ptr); + return ret >>> 0; + } + /** + * Consumed bytes of the input buffer + * @param {number} arg0 + */ + set input_offset(arg0) { + wasm.__wbg_set_brotlistreamresult_input_offset(this.ptr, arg0); + }} + +/** + */ +export class CompressStream { + + static __wrap(ptr) { + const obj = Object.create(CompressStream.prototype); + obj.ptr = ptr; + + return obj; + } + + __destroy_into_raw() { + const ptr = this.ptr; + this.ptr = 0; + + return ptr; + } + + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_compressstream_free(ptr); + } + /** + * @param {number | undefined} quality + */ + constructor(quality) { + const ret = wasm.compressstream_new(!isLikeNone(quality), isLikeNone(quality) ? 0 : quality); + return CompressStream.__wrap(ret); + } + /** + * @param {Uint8Array | undefined} input_opt + * @param {number} output_size + * @returns {BrotliStreamResult} + */ + compress(input_opt, output_size) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + var ptr0 = isLikeNone(input_opt) ? 0 : passArray8ToWasm0(input_opt, wasm.__wbindgen_malloc); + var len0 = WASM_VECTOR_LEN; + wasm.compressstream_compress(retptr, this.ptr, ptr0, len0, output_size); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return BrotliStreamResult.__wrap(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {number} + */ + total_out() { + const ret = wasm.compressstream_total_out(this.ptr); + return ret >>> 0; + }} + +/** + */ +export class DecompressStream { + + static __wrap(ptr) { + const obj = Object.create(DecompressStream.prototype); + obj.ptr = ptr; + + return obj; + } + + __destroy_into_raw() { + const ptr = this.ptr; + this.ptr = 0; + + return ptr; + } + + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_decompressstream_free(ptr); + } + /** + */ + constructor() { + const ret = wasm.decompressstream_new(); + return DecompressStream.__wrap(ret); + } + /** + * @param {Uint8Array} input + * @param {number} output_size + * @returns {BrotliStreamResult} + */ + decompress(input, output_size) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passArray8ToWasm0(input, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + wasm.decompressstream_decompress(retptr, this.ptr, ptr0, len0, output_size); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return BrotliStreamResult.__wrap(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {number} + */ + total_out() { + const ret = wasm.decompressstream_total_out(this.ptr); + return ret >>> 0; + }} + + +async function load(module, imports) { + if (typeof Response === 'function' && module instanceof Response) { + if (typeof WebAssembly.instantiateStreaming === 'function') { + try { + return await WebAssembly.instantiateStreaming(module, imports); + + } catch (e) { + if (module.headers.get('Content-Type') != 'application/wasm') { + console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); + + } else { + throw e; + } + } + } + + const bytes = await module.arrayBuffer(); + return await WebAssembly.instantiate(bytes, imports); + + } else { + const instance = await WebAssembly.instantiate(module, imports); + + if (instance instanceof WebAssembly.Instance) { + return { instance, module }; + + } else { + return instance; + } + } +} + +async function init(input) { + if (typeof input === 'undefined') { + input = new URL('brotli_wasm_bg.wasm', import.meta.url); + } + const imports = {}; + imports.wbg = {}; + imports.wbg.__wbindgen_is_undefined = function (arg0) { + const ret = getObject(arg0) === undefined; + return ret; + }; + imports.wbg.__wbindgen_is_object = function (arg0) { + const val = getObject(arg0); + const ret = typeof val === 'object' && val !== null; + return ret; + }; + imports.wbg.__wbindgen_string_new = function (arg0, arg1) { + const ret = getStringFromWasm0(arg0, arg1); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_error_new = function (arg0, arg1) { + const ret = new Error(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_json_serialize = function (arg0, arg1) { + const obj = getObject(arg1); + const ret = JSON.stringify(obj === undefined ? null : obj); + const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len0; + getInt32Memory0()[arg0 / 4 + 0] = ptr0; + }; + imports.wbg.__wbg_new_693216e109162396 = function () { + const ret = new Error(); + return addHeapObject(ret); + }; + imports.wbg.__wbg_stack_0ddaca5d1abfb52f = function (arg0, arg1) { + const ret = getObject(arg1).stack; + const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len0; + getInt32Memory0()[arg0 / 4 + 0] = ptr0; + }; + imports.wbg.__wbg_error_09919627ac0992f5 = function (arg0, arg1) { + try { + console.error(getStringFromWasm0(arg0, arg1)); + } finally { + wasm.__wbindgen_free(arg0, arg1); + } + }; + imports.wbg.__wbindgen_object_drop_ref = function (arg0) { + takeObject(arg0); + }; + imports.wbg.__wbindgen_throw = function (arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); + }; + + if (typeof input === 'string' || typeof Request === 'function' && input instanceof Request || typeof URL === 'function' && input instanceof URL) { + input = fetch(input); + } + + + + const { instance, module } = await load((await input), imports); + + wasm = instance.exports; + init.__wbindgen_wasm_module = module; + + return wasm; +} + +export default init; \ No newline at end of file diff --git a/catalyst_voices/packages/libs/catalyst_compression/catalyst_compression_web/assets/js/brotli/brotli_wasm_bg.wasm b/catalyst_voices/packages/libs/catalyst_compression/catalyst_compression_web/assets/js/brotli/brotli_wasm_bg.wasm new file mode 100644 index 00000000000..c4ba12b52ef Binary files /dev/null and b/catalyst_voices/packages/libs/catalyst_compression/catalyst_compression_web/assets/js/brotli/brotli_wasm_bg.wasm differ diff --git a/catalyst_voices/packages/libs/catalyst_compression/catalyst_compression_web/assets/js/brotli/index.js b/catalyst_voices/packages/libs/catalyst_compression/catalyst_compression_web/assets/js/brotli/index.js new file mode 100644 index 00000000000..ce4a24c786a --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_compression/catalyst_compression_web/assets/js/brotli/index.js @@ -0,0 +1,5 @@ +// In pure ESM web bundles, you must call init() and wait for the promised result before you can +// call any module methods. To make that as easy as possible, this module directly exposes the +// init() promise result, and returns the methods at the end of the promise. +import init, * as brotliWasm from "./brotli_wasm.js"; +export default init().then(() => brotliWasm); \ No newline at end of file diff --git a/catalyst_voices/packages/libs/catalyst_compression/catalyst_compression_web/assets/js/catalyst_compression_worker.js b/catalyst_voices/packages/libs/catalyst_compression/catalyst_compression_web/assets/js/catalyst_compression_worker.js index 7de73de5f9d..1684d079cff 100644 --- a/catalyst_voices/packages/libs/catalyst_compression/catalyst_compression_web/assets/js/catalyst_compression_worker.js +++ b/catalyst_voices/packages/libs/catalyst_compression/catalyst_compression_web/assets/js/catalyst_compression_worker.js @@ -5,8 +5,8 @@ self.onmessage = (event) => { }; Promise.all([ - import('https://unpkg.com/brotli-wasm@3.0.0/index.web.js?module').then(m => m.default), - import('https://unpkg.com/@oneidentity/zstd-js@1.0.3/wasm/index.js?module') + import('./brotli/index.js').then(m => m.default), + import('./zstd/index.js') ]).then(async ([brotli, zstd]) => { // Initializes the zstd module, must be called before it can be used. await zstd.ZstdInit(); diff --git a/catalyst_voices/packages/libs/catalyst_compression/catalyst_compression_web/assets/js/zstd/index.js b/catalyst_voices/packages/libs/catalyst_compression/catalyst_compression_web/assets/js/zstd/index.js new file mode 100644 index 00000000000..12cba8be235 --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_compression/catalyst_compression_web/assets/js/zstd/index.js @@ -0,0 +1,15 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +var A=function(I,g){return(A=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(A,I){A.__proto__=I;}||function(A,I){for(var g in I)Object.prototype.hasOwnProperty.call(I,g)&&(A[g]=I[g]);})(I,g);};function I(I,g){if("function"!=typeof g&&null!==g)throw new TypeError("Class extends value "+String(g)+" is not a constructor or null");function B(){this.constructor=I;}A(I,g),I.prototype=null===g?Object.create(g):(B.prototype=g.prototype,new B());}function g(A,I,g,B){return new(g||(g=Promise))(function(C,Q){function E(A){try{o(B.next(A));}catch(A){Q(A);}}function i(A){try{o(B.throw(A));}catch(A){Q(A);}}function o(A){var I;A.done?C(A.value):(I=A.value,I instanceof g?I:new g(function(A){A(I);})).then(E,i);}o((B=B.apply(A,I||[])).next());});}function B(A,I){var g,B,C,Q,E={label:0,sent:function(){if(1&C[0])throw C[1];return C[1];},trys:[],ops:[]};return Q={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(Q[Symbol.iterator]=function(){return this;}),Q;function i(Q){return function(i){return function(Q){if(g)throw new TypeError("Generator is already executing.");for(;E;)try{if(g=1,B&&(C=2&Q[0]?B.return:Q[0]?B.throw||((C=B.return)&&C.call(B),0):B.next)&&!(C=C.call(B,Q[1])).done)return C;switch(B=0,C&&(Q=[2&Q[0],C.value]),Q[0]){case 0:case 1:C=Q;break;case 4:return E.label++,{value:Q[1],done:!1};case 5:E.label++,B=Q[1],Q=[0];continue;case 7:Q=E.ops.pop(),E.trys.pop();continue;default:if(!(C=E.trys,(C=C.length>0&&C[C.length-1])||6!==Q[0]&&2!==Q[0])){E=0;continue;}if(3===Q[0]&&(!C||Q[1]>C[0]&&Q[1]1&&process.argv[1].replace(/\\/g,"/"),process.argv.slice(2),process.on("uncaughtException",function(A){if(!(A instanceof tA))throw A;}),process.on("unhandledRejection",z),I.inspect=function(){return"[Emscripten Module object]";};else if(D)"undefined"!=typeof read&&(G=function(A){var I=yA(A);return I?GA(I):read(A);}),y=function(A){var I;return(I=yA(A))?I:"function"==typeof readbuffer?new Uint8Array(readbuffer(A)):(k("object"==typeof(I=read(A,"binary"))),I);},"undefined"!=typeof scriptArgs&&scriptArgs,"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print);else{if(!E&&!i)throw new Error("environment detection error");i?R=self.location.href:"undefined"!=typeof document&&document.currentScript&&(R=document.currentScript.src),g&&(R=g),R=0!==R.indexOf("blob:")?R.substr(0,R.lastIndexOf("/")+1):"",G=function(A){try{var I=new XMLHttpRequest();return I.open("GET",A,!1),I.send(null),I.responseText;}catch(I){var g=yA(A);if(g)return GA(g);throw I;}},i&&(y=function(A){try{var I=new XMLHttpRequest();return I.open("GET",A,!1),I.responseType="arraybuffer",I.send(null),new Uint8Array(I.response);}catch(I){var g=yA(A);if(g)return g;throw I;}}),F=function(A,I,g){var B=new XMLHttpRequest();B.open("GET",A,!0),B.responseType="arraybuffer",B.onload=function(){if(200==B.status||0==B.status&&B.response)I(B.response);else{var C=yA(A);C?I(C.buffer):g();}},B.onerror=g,B.send(null);};}I.print||console.log.bind(console);var S,N,h=I.printErr||console.warn.bind(console);for(Q in a)a.hasOwnProperty(Q)&&(I[Q]=a[Q]);function U(A){U.shown||(U.shown={}),U.shown[A]||(U.shown[A]=1,h(A));}a=null,I.arguments&&I.arguments,Object.getOwnPropertyDescriptor(I,"arguments")||Object.defineProperty(I,"arguments",{configurable:!0,get:function(){z("Module.arguments has been replaced with plain arguments_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)");}}),I.thisProgram&&I.thisProgram,Object.getOwnPropertyDescriptor(I,"thisProgram")||Object.defineProperty(I,"thisProgram",{configurable:!0,get:function(){z("Module.thisProgram has been replaced with plain thisProgram (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)");}}),I.quit&&I.quit,Object.getOwnPropertyDescriptor(I,"quit")||Object.defineProperty(I,"quit",{configurable:!0,get:function(){z("Module.quit has been replaced with plain quit_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)");}}),k(void 0===I.memoryInitializerPrefixURL,"Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead"),k(void 0===I.pthreadMainPrefixURL,"Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead"),k(void 0===I.cdInitializerPrefixURL,"Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead"),k(void 0===I.filePackagePrefixURL,"Module.filePackagePrefixURL option was removed, use Module.locateFile instead"),k(void 0===I.read,"Module.read option was removed (modify read_ in JS)"),k(void 0===I.readAsync,"Module.readAsync option was removed (modify readAsync in JS)"),k(void 0===I.readBinary,"Module.readBinary option was removed (modify readBinary in JS)"),k(void 0===I.setWindowTitle,"Module.setWindowTitle option was removed (modify setWindowTitle in JS)"),k(void 0===I.TOTAL_MEMORY,"Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY"),Object.getOwnPropertyDescriptor(I,"read")||Object.defineProperty(I,"read",{configurable:!0,get:function(){z("Module.read has been replaced with plain read_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)");}}),Object.getOwnPropertyDescriptor(I,"readAsync")||Object.defineProperty(I,"readAsync",{configurable:!0,get:function(){z("Module.readAsync has been replaced with plain readAsync (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)");}}),Object.getOwnPropertyDescriptor(I,"readBinary")||Object.defineProperty(I,"readBinary",{configurable:!0,get:function(){z("Module.readBinary has been replaced with plain readBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)");}}),Object.getOwnPropertyDescriptor(I,"setWindowTitle")||Object.defineProperty(I,"setWindowTitle",{configurable:!0,get:function(){z("Module.setWindowTitle has been replaced with plain setWindowTitle (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)");}}),I.wasmBinary&&(S=I.wasmBinary),Object.getOwnPropertyDescriptor(I,"wasmBinary")||Object.defineProperty(I,"wasmBinary",{configurable:!0,get:function(){z("Module.wasmBinary has been replaced with plain wasmBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)");}}),I.noExitRuntime,Object.getOwnPropertyDescriptor(I,"noExitRuntime")||Object.defineProperty(I,"noExitRuntime",{configurable:!0,get:function(){z("Module.noExitRuntime has been replaced with plain noExitRuntime (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)");}}),"object"!=typeof WebAssembly&&z("no native wasm support detected");var L=!1;function k(A,I){A||z("Assertion failed: "+I);}function t(A,g,B,C,Q){var E={string:function(A){var I=0;if(null!=A&&0!==A){var g=1+(A.length<<2);n(A,I=hA(g),g);}return I;},array:function(A){var I=hA(A.length);return function(A,I){k(A.length>=0,"writeArrayToMemory array must have a length (should be an array or typed array)"),c.set(A,I);}(A,I),I;}},i=function(A){var g=I["_"+A];return k(g,"Cannot call unknown function "+A+", make sure it is exported"),g;}(A),o=[],D=0;if(k("array"!==g,'Return type should not be "array".'),C)for(var a=0;a=B);)++C;if(C-I>16&&A.subarray&&e)return e.decode(A.subarray(I,C));for(var Q="";I>10,56320|1023&D);}}else Q+=String.fromCharCode((31&E)<<6|i);}else Q+=String.fromCharCode(E);}return Q;}(Y,A,I):"";}function n(A,I,g){return k("number"==typeof g,"stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!"),function(A,I,g,B){if(!(B>0))return 0;for(var C=g,Q=g+B-1,E=0;E=55296&&i<=57343&&(i=65536+((1023&i)<<10)|1023&A.charCodeAt(++E)),i<=127){if(g>=Q)break;I[g++]=i;}else if(i<=2047){if(g+1>=Q)break;I[g++]=192|i>>6,I[g++]=128|63&i;}else if(i<=65535){if(g+2>=Q)break;I[g++]=224|i>>12,I[g++]=128|i>>6&63,I[g++]=128|63&i;}else{if(g+3>=Q)break;i>=2097152&&U("Invalid Unicode code point 0x"+i.toString(16)+" encountered when serializing a JS string to an UTF-8 string on the asm.js/wasm heap! (Valid unicode code points should be in range 0-0x1FFFFF)."),I[g++]=240|i>>18,I[g++]=128|i>>12&63,I[g++]=128|i>>6&63,I[g++]=128|63&i;}}return I[g]=0,g-C;}(A,Y,I,g);}function T(A){J=A,I.HEAP8=c=new Int8Array(A),I.HEAP16=M=new Int16Array(A),I.HEAP32=K=new Int32Array(A),I.HEAPU8=Y=new Uint8Array(A),I.HEAPU16=new Uint16Array(A),I.HEAPU32=H=new Uint32Array(A),I.HEAPF32=q=new Float32Array(A),I.HEAPF64=r=new Float64Array(A);}"undefined"!=typeof TextDecoder&&new TextDecoder("utf-16le");var W=5242880;I.TOTAL_STACK&&k(W===I.TOTAL_STACK,"the stack size can no longer be determined at runtime");var p,m=I.INITIAL_MEMORY||16777216;function f(){var A=kA();k(0==(3&A)),H[1+(A>>2)]=34821223,H[2+(A>>2)]=2310721022,K[0]=1668509029;}function Z(){if(!L){var A=kA(),I=H[1+(A>>2)],g=H[2+(A>>2)];34821223==I&&2310721022==g||z("Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x2135467, but received 0x"+g.toString(16)+" "+I.toString(16)),1668509029!==K[0]&&z("Runtime error: The application has corrupted its heap memory area (address zero)!");}}Object.getOwnPropertyDescriptor(I,"INITIAL_MEMORY")||Object.defineProperty(I,"INITIAL_MEMORY",{configurable:!0,get:function(){z("Module.INITIAL_MEMORY has been replaced with plain INITIAL_MEMORY (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)");}}),k(m>=W,"INITIAL_MEMORY should be larger than TOTAL_STACK, was "+m+"! (TOTAL_STACK=5242880)"),k("undefined"!=typeof Int32Array&&"undefined"!=typeof Float64Array&&void 0!==Int32Array.prototype.subarray&&void 0!==Int32Array.prototype.set,"JS engine does not provide full typed array support"),k(!I.wasmMemory,"Use of `wasmMemory` detected. Use -s IMPORTED_MEMORY to define wasmMemory externally"),k(16777216==m,"Detected runtime INITIAL_MEMORY setting. Use -s IMPORTED_MEMORY to define wasmMemory dynamically"),function(){var A=new Int16Array(1),I=new Int8Array(A.buffer);if(A[0]=25459,115!==I[0]||99!==I[1])throw"Runtime error: expected the system to be little-endian!";}();var P=[],b=[],l=[],O=[],x=!1;b.push({func:function(){wA();}}),k(Math.imul,"This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"),k(Math.fround,"This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"),k(Math.clz32,"This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"),k(Math.trunc,"This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");var V=0,j=null,X=null,u={};function z(A){var g,B;I.onAbort&&I.onAbort(A),h(A+=""),L=!0,A="abort("+A+") at "+(B=function(){var A=new Error();if(!A.stack){try{throw new Error();}catch(I){A=I;}if(!A.stack)return"(no stack trace available)";}return A.stack.toString();}(),I.extraStackTrace&&(B+="\n"+I.extraStackTrace()),g=/\b_Z[\w\d_]+/g,B.replace(g,function(A){var I=DA(A);return A===I?A:I+" ["+A+"]";}));var Q=new WebAssembly.RuntimeError(A);throw C(Q),Q;}I.preloadedImages={},I.preloadedAudios={};var v={error:function(){z("Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -s FORCE_FILESYSTEM=1");},init:function(){v.error();},createDataFile:function(){v.error();},createPreloadedFile:function(){v.error();},createLazyFile:function(){v.error();},open:function(){v.error();},mkdev:function(){v.error();},registerDevice:function(){v.error();},analyzePath:function(){v.error();},loadFilesFromDB:function(){v.error();},ErrnoError:function(){v.error();}};function _(A,I){return String.prototype.startsWith?A.startsWith(I):0===A.indexOf(I);}I.FS_createDataFile=v.createDataFile,I.FS_createPreloadedFile=v.createPreloadedFile;var $="data:application/octet-stream;base64,";function AA(A){return _(A,$);}function IA(A){return _(A,"file://");}function gA(A,g){return function(){var B=A,C=g;return g||(C=I.asm),k(x,"native function `"+B+"` called before runtime initialization"),k(!0,"native function `"+B+"` called after runtime exit (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),C[A]||k(C[A],"exported native function `"+B+"` not found"),C[A].apply(null,arguments);};}var BA,CA,QA,EA="data:application/octet-stream;base64,AGFzbQEAAAABqwIkYAJ/fwBgAn9/AX9gA39/fwF/YAF/AX9gBX9/f39/AX9gBH9/f38Bf2AGf39/f39/AX9gA39/fwBgAX8AYAABf2AFf39/f38AYAAAYAR/f39/AGAHf39/f39/fwF/YAZ/f39/f38AYAl/f39/f39/f38Bf2AHf39/f39/fwBgBH9+fn8AYAh/f39/f39/fwF/YAt/f39/f39/f39/fwF/YA9/f39/f39/f39/f39/f38Bf2AGf3x/f39/AX9gAn5/AX9gBX9/fn9/AGACf34AYAp/f39/f39/f39/AX9gB39/f39/f34Bf2AFf39/fn8Bf2AFf39+f38Bf2ADfn9/AX9gAX8BfmACf38BfmADf35/AX5gB39+f39/f38BfmACfn4BfGACfH8BfAJMAwNlbnYWZW1zY3JpcHRlbl9yZXNpemVfaGVhcAADA2VudhVlbXNjcmlwdGVuX21lbWNweV9iaWcAAgNlbnYLc2V0VGVtcFJldDAACAOXBJUECwMEDQUGAwMGBgYGBAQEBgQEDw8TFBMGCAMIAwICAxccBAQEBAQEBgQHCgQECgQGBAYEBAQEBAQEBAQEBAQEBAQEBAUGGwoEBwIBBRoZEAQeBgYEBAQGCQMJCQECEg8HBwAAIQQGAAcFBAQEBAQNAgMFHwcGAgQEBQQCBRIQCQMJAwINFAcIAwMJAgEBIwIEBwMHHRYWChUACBERIgMIAQEAAwICAgMHCQkDCwUCBQMBCAICAwcMDAwKCg4OBQMCAAgHAQEDAQcCAwAICAMDCAEDAQEDAwAHDQICAQABAwMBAwMDAwMBAgIDAwICAwEBAQEDAwABDA0BAgEIAQEAAAAACAIAAwECAQEBAgEBAAABAQIFAQMBAQACAAADAQECAQEBAAAHAwMBAQMFAwUDAgMBAQUBAQMDAwEFAgIDAwIDAQUFAgIGAQECAQECAQEDCAECAgIABwEAAQAAAAABAAEAAAEBBQABAgECABgAAAACAAACAAAAAAUAAAACAAEABAQACAEAAQUFAAECAgAFAAIAAgIABQADAQIBAQABAQAAAQAABQACAAUABQACAAIGBgAFAAUAAAAAAQABAAAFAAICAAEAAgEAAAEBAQEBAQEBAQEAAAACAAEAAQANAQAAAgACAQIBAQYAAAYAAAICAgACAAIBAQEAAAABAAIAAgAAAgAAAgIAAQADAAIABwACAAkIAwEEBwFwAfUB9QEFBwEBgAKAgAIGDgJ/AUGAq8ECC38BQQALB50FIQZtZW1vcnkCABFfX3dhc21fY2FsbF9jdG9ycwADBm1hbGxvYwCgAQRmcmVlAKEBDFpTVERfaXNFcnJvcgAJEVpTVERfZ2V0RXJyb3JOYW1lAAoSWlNURF9jb21wcmVzc0JvdW5kABwWWlNURF9DQ3R4X3NldFBhcmFtZXRlcgAfDVpTVERfY29tcHJlc3MAVhJaU1REX2NyZWF0ZUNTdHJlYW0AWhBaU1REX2ZyZWVDU3RyZWFtAFsSWlNURF9DU3RyZWFtSW5TaXplAFwTWlNURF9DU3RyZWFtT3V0U2l6ZQBdEFpTVERfaW5pdENTdHJlYW0AXh9aU1REX2NvbXByZXNzU3RyZWFtMl9zaW1wbGVBcmdzAGAYWlNURF9nZXRGcmFtZUNvbnRlbnRTaXplAJcED1pTVERfZGVjb21wcmVzcwB7ElpTVERfY3JlYXRlRFN0cmVhbQCBARBaU1REX2ZyZWVEU3RyZWFtAIIBElpTVERfRFN0cmVhbUluU2l6ZQCDARNaU1REX0RTdHJlYW1PdXRTaXplAFwQWlNURF9pbml0RFN0cmVhbQCEASBaU1REX2RlY29tcHJlc3NTdHJlYW1fc2ltcGxlQXJncwCGAQZmZmx1c2gAigEZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAEF9fZXJybm9fbG9jYXRpb24AjAEJc3RhY2tTYXZlAJQEDHN0YWNrUmVzdG9yZQCVBApzdGFja0FsbG9jAJYEFWVtc2NyaXB0ZW5fc3RhY2tfaW5pdAADGWVtc2NyaXB0ZW5fc3RhY2tfZ2V0X2ZyZWUAqwEYZW1zY3JpcHRlbl9zdGFja19nZXRfZW5kAKwBDl9fY3hhX2RlbWFuZ2xlAMABCdMDAQBBAQv0ASQlJicoKSsuLzEzNTY3ODk6Ozw9Pj9AQUJDREWaAZsBrgGwAbIBtAGcAZwBtgG/Ab0BuQG0Ab4BvAG6Af8B/wH/AYACgQKDAoQCsgG0Aa4BhQKHArQBmwKSArQBnQKeArQBoQKjAqQCpQKmAqcCtAHYArQB2wK0Ad0CtAHiArQB5AK0AeUCtAHpArQB7gK0AfEC8gK0AfQC9QK0AfcC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QcMAIAJnawUgAkGQMWotAAALOgAAIAFBAWoiASAJRw0ACwsgACgCJCIBQQFGBH8gBCAAKAIoakEjOgAAIAAoAiQFIAELQQJGBEAgAyAAKAIoakE0OgAACwsfACAAQQh2IABqQYCACCAAa0ELdkEAIABBgIAISRtqC58CAQV/An9BRCAAKAKwBg0AGgJAIAAoAsgGIgFFDQAgACgAzAMiAgRAIAAoANADIAEgAhEAAAwBCyABEKEBCwJAIAAoAtgGIgFFDQAgASABKAIQIgNPBEAgASgCFCABTyEECyABQcglaigCACEFIAFBxCVqKAIAIQIgAUIANwIQIAFCADcCMCABQgA3AiggAUIANwIgIAFCADcCGAJAAkAgAwRAIAJFDQEgBSADIAIRAAALIAQNAiACRQ0BIAUgASACEQAADAILIAMQoQEgBA0BCyABEKEBCyAAQgA3A8gGIABBADYC6AYgAEIANwPgBiAAQgA3A9gGIABCADcD0AYgAEEMakEAQYwBEKcBGiAAQQE2AiwgAEEDNgI4QQALGguzAwEJfyAARQRAQQAPC0FAIQMCQCAAKALYAw0AIAAgACgCqAJPBEAgACgCrAIgAE8hBwsCQCAAKALIBiIBRQ0AIAAoAMwDIgQEQCAAKADQAyABIAQRAAAMAQsgARChAQsgAEGoAmohBCAAQcgGaiECAkAgACgC2AYiAUUNACABIAEoAhAiCE8EQCABKAIUIAFPIQYLIAFByCVqKAIAIQkgAUHEJWooAgAhAyABQRBqIgVCADcCACAFQgA3AiAgBUIANwIYIAVCADcCECAFQgA3AggCQAJAIAgEQCADRQ0BIAkgCCADEQAACyAGDQIgA0UNASAJIAEgAxEAAAwCCyAIEKEBIAYNAQsgARChAQsgAkIANwMAQQAhAyACQQA2AiAgAkIANwMYIAJCADcDECACQgA3AwggACgC0AMhBSAAKALMAyECIAAoAqgCIQEgBEIANwIgIARCADcCGCAEQgA3AhAgBEIANwIIIARCADcCAAJAIAFFDQAgAgRAIAUgASACEQAADAELIAEQoQELIAcNACAAKADMAyIBBEAgACgA0AMgACABEQAAQQAPCyAAEKEBCyADC/4BAQF/AkAgACgCsAYEQCABQeYAa0EGTwRAQUQhAyABQeQARw0CCyAAQQE2AgQLQVghAwJA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ByAKIQkMAgsCQCAAIBJPDQAgBC8AACAALwAARw0AIARBAmohBCAAQQJqIQALIAAgDkkEfyAAQQFqIAAgBC0AACAALQAARhsFIAALIAprCyIKQQFqIREgBiADayENIAEoAgwhAAJAAkAgBiAITQRAIAAgAykAADcAACAAIAMpAAg3AAggASgCDCEAIA1BEE0EQCABIAAgDWo2AgwMAwsgACADKQAQNwAQIAAgAykAGDcAGCANQSFIDQEgACANaiEEIANBEGohAyAAQSBqIQUDQCAFIAMpABA3AAAgBSADKQAYNwAIIAUgAykAIDcAECAFIAMpACg3ABggA0EgaiEDIAVBIGoiBSAESQ0ACwwBCyADIAhNBEAgACADKQAANwAAIAAgAykACDcACCAAIAggA2siGWohBCAZQRFOBEAgAEEQaiEAA0AgACADKQAQNwAAIAAgAykAGDcACCAAIAMpACA3ABAgACADKQAoNwAYIANBIGohAyAAQSBqIgAgBEkNAAsLIAghAyAEIQALIAMgBk8NAANAIAAgAy0AADoAACAAQQFqIQAgAyAFRyEEIANBAWohAyAEDQALCyABIAEoAgwgDWo2AgwgDUGAgARJDQAgAUEBNgIkIAEgASgCBCABKAIAa0EDdTYCKAsgCkEEaiEAIAEoAgQiA0EBNgIAIAMgDTsBBCARQYCABEkNACABQQI2AiQgASADIAEoAgBrQQN1NgIoCyADIBE7AQYgASADQQhqIgQ2AgQgFiAAIAZqIgNJBEAgAyEFDAELIAsgDCAXQQJqIgBqIgUpAABC48iVvcub741PfiAbiKdBAnRqIAA2AgAgCyADQQJrIgYpAABC48iVvcub741PfiAbiKdBAnRqIAYgDGs2AgAgEyAFKAAAQbHz3fF5bCAUdkECdGogADYCACATIANBAWsiACgAAEGx893xeWwgFHZBAnRqIAAgDGs2AgAgCSEAIAchBgNAAkAgBiEJIAAhBiAJRQ0AIAMoAAAiCiADIAlrKAAARw0AIANBBGoiByAJayEAAn8CQCAHIA9PBEAgByEFDAELIAciBSgAACAAKAAAcyINBEAgDWhBA3YMAgsDQCAAQQRqIQAgBUEEaiIFIA9PDQEgBSgAACAAKAAAcyINRQ0ACyAFIA1oQQN2aiAHawwBCwJAIAUgEk8NACAALwAAIAUvAABH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NwAAIAUgAykACDcACCABKAIMIQQgB0EQTQRAIAEgBCAHajYCDAwDCyAEIAMpABA3ABAgBCADKQAYNwAYIAdBIUgNASAEIAdqIQsgA0EQaiEDIARBIGohBQNAIAUgAykAEDcAACAFIAMpABg3AAggBSADKQAgNwAQIAUgAykAKDcAGCADQSBqIQMgBUEgaiIFIAtJDQALDAELIAMgCk0EQCAFIAMpAAA3AAAgBSADKQAINwAIIAUgCiADayILaiEEIAtBEU4EQCAFQRBqIQUDQCAFIAMpABA3AAAgBSADKQAYNwAIIAUgAykAIDcAECAFIAMpACg3ABggA0EgaiEDIAVBIGoiBSAESQ0ACwsgBCEFIAohAwsgAyAGTw0AA0AgBSADLQAAOgAAIAVBAWohBSADQQFqIgMgBkcNAAsLIAEgASgCDCAHajYCDCAHQYCABEkNACABQQE2AiQgASABKAIEIAEoAgBrQQN1NgIoCyABKAIEIgMgCEEDajYCACADIAc7AQQgDEGAgARPBEAgAUECNgIkIAEgAyABKAIAa0EDdTYCKAsgCSEHIAghCQwCCwJAIAAgE08NACAELwAAIAAvAABHDQAgBEECaiEEIABBAmohAAsgACAOSQR/IABBAWogACAELQAAIAAtAABGGwUgAAsgCGsLIghBAWohDCAGIANrIQsgASgCDCEAAkACQCAGIApNBEAgACADKQAANwAAIAAgAykACDcACCABKAIMIQAgC0EQTQRAIAEgACALajYCDAwDCyAAIAMpABA3ABAgACADKQAYNwAYIAtBIUgNASAAIAtqIQQgA0EQaiEDIABBIGohBQNAIAUgAykAEDcAACAFIAMpABg3AAggBSADKQAgNwAQIAUgAykAKDcAGCADQSBqIQMgBUEgaiIFIARJDQALDAELIAMgCk0EQCAAIAMpAAA3AAAgACADKQAINwAIIAAgCiADayIYaiEEIBhBEU4EQCAAQRBqIQADQCAAIAMpABA3AAAgACADKQAYNwAIIAAgAykAIDcAECAAIAMpACg3ABggA0EgaiEDIABBIGoiACAESQ0ACwsgCiEDIAQhAAsgAyAGTw0AA0AgACADLQAAOgAAIABBAWohACADIAVHIQQgA0EBaiEDIAQNAAsLIAEgASgCDCALajYCDCALQYCABEkNACABQQE2AiQgASAB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IAovAAAgBi8AAEcNACAKQQJqIQogBkECaiEGCyAGIAxJBH8gBkEBaiAGIAotAAAgBi0AAEYbBSAGCyAFawshCiAAIARrIQYgCkEIaiEFIAAgA00EQCAAIQoMAQsgCSARTARAIAAhCgwBCwNAIABBAWsiCi0AACAEQQFrIgQtAABHBEAgACEKDAILIAVBAWohBSADIApPDQEgCiEAIAQgGksNAAsLIAVBA2shEyAKIANrIQcgASgCDCEAAkACQCAKIA5NBEAgACADKQAANwAAIAAgAykACDcACCABKAIMIQAgB0EQTQRAIAEgACAHajYCDAwDCyAAIAMpABA3ABAgACADKQAYNwAYIAdBIUgNASAAIAdqIQQgA0EQaiEDIABBIGohAANAIAAgAykAEDcAACAAIAMpABg3AAggACADKQAgNwAQIAAgAykAKDcAGCADQSBqIQMgAEEgaiIAIARJDQALDAELIAMgDk0EQCAAIAMpAAA3AAAgACADKQAINwAIIAAgDiADayIJaiEEIAlBEU4EQCAAQRBqIQADQCAAIAMpABA3AAAgACADKQAYNwAIIAAgAykAIDcAECAAIAMpACg3ABggA0EgaiEDIABBIGoiACAESQ0ACwsgDiEDIAQhAAsgAyAKTw0AA0AgACADLQAAOgAAIABBAWohACADQQFqIgMgCkcNAAsLIAEgASgCDCAHajYCDCAHQYCABEkNACABQQE2AiQgASABKAIEIAEoAgBrQQN1NgIoCyABKAIEIgMgBkEDajYCACADIAc7AQQgE0GAgARPBEAgAUECNgIkIAEgAyABKAIAa0EDdTYCKAsgCAwCCwJAIAYgFE8NACAELwAAIAYvAABHDQAgBEECaiEEIAZBAmohBgsgBiAMSQR/IAZBAWogBiAELQAAIAYtAABGGwUgBgsgBWsLIgVBAWohEyAKIANrIQkgASgCDCEGAkACQCAKIA5NBEAgBiADKQAANwAAIAYgAykACDcACCABKAIMIQAgCUEQTQRAIAEgACAJajYCDAwDCyAAIAMpABA3ABAgACADKQAYNwAYIAlBIUgNASAAIAlqIQQgA0EQaiEDIABBIGohAANAIAAgAykAEDcAACAAIAMpABg3AAggACADKQAgNwAQIAAgAykAKDcAGCADQSBqIQMgAEEgaiIAIARJDQALDAELIAMgDk0E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IAyIp0ECdGogATYCACAEIAtC48iVvcub741PfiAKiKdBAnRqIAE2AgAgAkUNAiAEIAApAAFC48iVvcub741PfiAKiKdBAnRqIgMoAgBFBEAgAyABQQFqNgIACyAEIAApAAJC48iVvcub741PfiAKiKdBAnRqIgMoAgANAiADIAFBAmo2AgAMAgsgBSAAKQAAQuPIlb3Lm++NT34iCyAMiKdBAnRqIAE2AgAgBCALIAqIp0ECdGogATYCACACRQ0BIAQgACkAAULjyJW9y5vvjU9+IAqIp0ECdGoiAygCAEUEQCADIAFBAWo2AgALIAQgACkAAkLjyJW9y5vvjU9+IAqIp0ECdGoiAygCAA0BIAMgAUECajYCAAwBCyAEIAApAAFC48iVvcub741PfiAKiKdBAnRqIgMoAgBFBEAgAyABQQFqNgIACyAEIAApAAJC48iVvcub741PfiAKiKdBAnRqIgMoAgANACADIAFBAmo2AgALIABBA2ohASAAQQVqIAZNDQALCwuhBQIIfwF+IAAoAgQiCSAAKAIYaiIFQQNqIgMgAUEGayIKSQRAIAAoAiAhBEEgIAAoAoABIgFrIQZBwAAgAWutIQsgACgCiAEiAEEFayEHIABBBmshCANAIAUhACADIQUgACAJayEDIAQCfwJAAkACQAJAAkAgBw4EAQIDBAALIAAoAABBsfPd8XlsIAZ2DAQLIAApAABCgICA2Mub741PfiALiKcMAwsgACkAAEKAgOz8y5vvjU9+IAuIpwwCCyAAKQAAQoDGlf3Lm++NT34gC4inDAELIAApAABC48iVvcub741PfiALiKcLQQJ0aiADNgIAAkAgAkUNACAEAn8CQAJAAkACQCAEAn8CQAJAAkACQAJAAkAgBw4EAgAAAQALIAgOAgMEAgsgBCAAKQABQuPIlb3Lm++NT34gC4inQQJ0aiIBKAIARQRAIAEgA0EBajYCAAsgBCAAKQACQuPIlb3Lm++NT34gC4inQQJ0aiIAKAIADQogACADQQJqNgIADAoLIAQgACkAAUKAgIDYy5vvjU9+IAuIp0ECdGoiASgCAEUEQCABIANBAWo2AgALIAQgACkAAkKAgIDYy5vvjU9+IAuIp0ECdGoiACgCAEUNBAwJCyAAKAABQbHz3fF5bCAGdgwCCyAAKQABQoCA7PzLm++NT34gC4inDAELIAApAAFCgMaV/cub741PfiALiKcLQQJ0aiIBKAIARQRAIAEgA0EBajYCAAsgCA4CAgEDCyAAIANBAmo2AgAMBAsgACkAAkKAxpX9y5vvjU9+IAuIpwwCCyAAKQACQoCA7PzLm++NT34gC4inDAELIAAoAAJBsfPd8XlsIAZ2C0ECdGoiACgCAA0AIAAgA0ECajYCAAsgBUEDaiIDIApJDQALCwv2CgILfwF+IAAoAoABIQkgACgCiAEhDCAAKAIgIQYCQCAAKAIYIgIgASAAKAIEIgRrIgpPDQBBfyAAKAJ8dEF/cyEHIAAoAighCEHAACAJa60hDQJAAkACQAJAAkAgDEEFaw4EAgEAAwQLIAJBf3MgAWohAyABIAJrIARrQQFxBEAgCCACIAdxQQJ0aiAGIAIgBGopAABCgMaV/cub741PfiANiKdBAnRqIgUoAgA2AgAgBSACNgIAIAJBAWohAgsgAyAERg0EA0AgCCACIAdxQQJ0aiAGIAIgBGopAABCgMaV/cub741PfiANiKdBAnRqIgMoAgA2AgAgAyACNgIAIAggAkEBaiIDIAdxQQJ0aiAGIAMgBGopAABCgMaV/cub741PfiANiKdBAnRqIgUoAgA2AgAgBSADNgIAIAJBAmoiAiAKSQ0ACwwECyACQX9zIAFqIQMgASACayAEa0EBcQRAIAggAiAHcUECdGogBiACIARqKQAAQoCA7PzLm++NT34gDYinQQJ0aiIFKAIANgIAIAUgAjYCACACQQFqIQILIAMgBEYNAwNAIAggAiAHcUECdGogBiACIARqKQAAQoCA7PzLm++NT34gDYinQQJ0aiIDKAIANgIAIAMgAjYCACAIIAJBAWoiAyAHcUECdGogBiADIARqKQAAQoCA7PzLm++NT34gDYinQQJ0aiIFKAIANgIAIAUgAzYCACACQQJqIgIgCkkNAAsMAwsgAkF/cyABaiEDIAEgAmsgBGtBAXEEQCAIIAIgB3FBAnRqIAYgAiAEaikAAEKAgIDYy5vvjU9+IA2Ip0ECdGoiBSgCADYCACAFIAI2AgAgAkEBaiECCyADIARGDQIDQCAIIAIgB3FBAnRqIAYgAiAEaikAAEKAgIDYy5vvjU9+IA2Ip0ECdGoiAygCADYCACADIAI2AgAgCCACQQFqIgMgB3FBAnRqIAYgAyAEaikAAEKAgIDYy5vvjU9+IA2Ip0ECdGoiBSgCADYCACAFIAM2AgAgAkECaiICIApJDQALDAILIAJBf3MgAWohAyABIAJrIARrQQFxBEAgCCACIAdxQQJ0aiAGIAIgBGopAABC48iVvcub741PfiANiKdBAnRqIgUoAgA2AgAgBSACNgIAIAJBAWohAgsgAyAERg0BA0AgCCACIAdxQQJ0aiAGIAIgBGopAABC48iVvcub741PfiANiKdBAnRqIgMoAgA2AgAgAyACNgIAIAggAkEBaiIDIAdxQQJ0aiAGIAMgBGopAABC48iVvcub741PfiANiKdBAnRqIgUoAgA2AgAgBSADNgIAIAJBAmoiAiAKSQ0ACwwBC0EgIAlrIQMgAkF/cyABaiEFIAEgAmsgBGtBAXEEQCAIIAIgB3FBAnRqIAYgAiAEaigAAEGx893xeWwgA3ZBAnRqIgsoAgA2AgAgCyACNgIAIAJBAWohAgsgBCAFRg0AA0AgCCACIAdxQQJ0aiAGIAIgBGooAABBsfPd8XlsIAN2QQJ0aiIFKAIANgIAIAUgAjYCACAIIAJBAWoiBSAHcUECdGogBiAEIAVqKAAAQbHz3fF5bCADdkECdGoiCygCADYCACALIAU2AgAgAkECaiICIApJDQALCyAAIAo2AhggBgJ/AkACQAJAAkACQCAMQQVrDgQBAgMEAAsgASgAAEGx893xeWxBICAJa3YMBAsgASkAAEKAgIDYy5vvjU9+QcAAIAlrrYinDAMLIAEpAABCgIDs/Mub741PfkHAACAJa62IpwwCCyABKQAAQoDGlf3Lm++NT35BwAAgCWutiKcMAQsgASkAAELjyJW9y5vvjU9+QcAAIAlrrYinC0ECdGooAgAaC68JAhF/AX4gACgCfCEGIAEgACgCBCISayIJQQMgACgCgAEiD0ECayIRdCIBayAAKAIYIgUgASAJSRshB0EBIAAoAoQBdEEDayIBQf8BIAFB/wFJGyEDIAAoAiAiBEEBIBF0IghBAnRqIQwgACgCKCENIAUgCUkEQEEiIA9rIQpBwgAgD2utIRMgBSEBA0AgASASaiECAn8CQAJAAkACQAJAIAAoAogBQQVrDgQBAgMEAAsgAigAAEGx893xeWwgCnYMBAsgAikAAEKAgIDYy5vvjU9+IBOIpwwDCyACKQAAQoCA7PzLm++NT34gE4inDAILIAIpAABCgMaV/cub741PfiATiKcMAQsgAikAAELjyJW9y5vvjU9+IBOIpwshAiABIAdPBEAgDCABIAdrQQJ0aiAEIAJBAnRqKAIANgIACyAEIAJBAnRqIAE2AgAgAUEBaiIBIAlJDQALCyAIQQEgCEEBSxshCgJAIANFBEADQCAEIAtBAnRqQQA2AgAgC0EBaiILIApHDQAMAgsACyAJQQEgBnQiAWsgBSABIAlJGyEQA0ACfwJAIAQgC0ECdGoiBSgCACIBIAdJDQAgASAQSSEGQQAhAgJ/QQAgByAMIAEgB2tBAnRqKAIAIgFLDQAaIAYgASAQSWohBkEAIAcgDCABIAdrQQJ0aigCACIBSw0AGiAGIAEgEElqIQYgDCABIAdrQQJ0aigCACEBQQELRQ0AAkACQANAIAEgEEkEQCAGQQNLDQIgAUUNAiAGQQFqIQYLIA0gDkECdGogATYCACACQQFqIQIgDkEBaiEOIAEgB0kNAiAMIAEgB2tBAnRqKAIAIQEgAiADRw0ACyADIQILIAJFDQEgDiACa0EIdCACagwCCyAOIAJrQQh0IAJqDAELQQALIQEgBSABNgIAIAtBAWoiCyAKRw0ACwsgCEECdEEEayENIBEEfyAIQX5xIQpBACEBA0AgBCAIQQFrIgJBAnRqKAIAIQUgBCANIAFBAnRrQQJ0aiIDQgA3AgAgA0EANgIIIAQgAkEEdEEMcmogBTYCACAEIAhBAmsiCEECdGooAgAhBSAEIA0gAUF/c0ECdGpBAnRqIgNBADYCCCADQgA3AgAgBCAIQQR0QQxyaiAFNgIAIAFBAmohASAKQQJrIgoNAAtBACABQQJ0awVBAAshASARRQRAIAQgCEEBayIFQQJ0aigCACEDIAQgASANakECdGoiAUEANgIIIAFCADcCACAEIAVBBHRBDHJqIAM2AgALIAkgACgCGCIBSwRAQSIgD2shBUHCACAPa60hEwNAIAEgEmohAyAEAn8CQAJAAkACQAJAIAAoAogBQQVrDgQBAgMEAAsgAygAAEGx893xeWwgBXYMBAsgAykAAEKAgIDYy5vvjU9+IBOIpwwDCyADKQAAQoCA7PzLm++NT34gE4inDAILIAMpAABCgMaV/cub741PfiATiKcMAQsgAykAAELjyJW9y5vvjU9+IBOIpwtBBHQiAkEIcmoiAyADQQRrKAIANgIAIAQgAkEEcmogAiAEaiIDKAIANgIAIAMgATYCACABQQFqIgEgCUkNAAsLIAAgCTYCGAuIBAIGfwN+AkAgAkEBaiIHIANPDQBBfyAGKAIIIgp0QX9zIQlBfyAGKAIQIgt0QX9zIQhBICAFayIMrSENQcAAIAVrrSEOIAYoAgwhBiALIAxLBEADQCAIIAIgBmoxAAAgASAAKQMgIAIxAABCCnx+fULjyJW9y5vvjU9+fEIKfCIBpyAIcUYEQCAAKAIUIAEgDoinQQAgBRsiAiAKdEEDdGogACgCHCACaiICLQAAQQN0aiAHIARrrSABIA2IQiCGhDcCACACIAItAABBAWogCXE6AAALIAciAkEBaiIHIANJDQAMAgsACyAMIAtrrSEPIAVFBEADQCAIIAIgBmoxAAAgASAAKQMgIAIxAABCCnx+fULjyJW9y5vvjU9+fEIKfCIBIA+IpyAIcUYEQCAAKAIUIAAoAhwiAi0AAEEDdGogByAEa60gASANiEIghoQ3AgAgAiACLQAAQQFqIAlxOgAACyAHIgJBAWoiByADSQ0ADAILAAsDQCAIIAIgBmoxAAAgASAAKQMgIAIxAABCCnx+fULjyJW9y5vvjU9+fEIKfCIBIA+IpyAIcUYEQCAAKAIUIAEgDoinIgIgCnRBA3RqIAAoAhwgAmoiAi0AAEEDdGogByAEa60gASANiEIghoQ3AgAgAiACLQAAQQFqIAlxOgAACyAHIgJBAWoiByADSQ0ACwsgAQvzFAI0fwZ+IwBBIGsiFSQAAkAgBEEUdiAEQf//P3FBAEdqIi9FDQAgAyAEaiEmQQEgAigCFHQiJ0F/cyEoIAEoAgwhFwNAIBcgASgCEE8NAQJ/ICYgAyAbQRR0aiINQYCAQGsgJiANa0GAgMAASRsiDiAAKAAEIhNrIgVBgICAgHpNBEAgACgCGAwBCyACKAIEIQkgACANIChqNgIEIAAgDSATayAoaiILIAAoAghqNgIIIAAgACgCECIEIAtrQQEgBCALSxs2AhAgACAAKAIMIgQgC2tBASAEIAtLGzYCDEEBIAl0IQUgACgCFCEPQQAhBCAJQQJPBEAgBUF8cSEIA0AgDyAEQQN0IgpqIgdBACAHKAIAIgYgC2siByAGIAdJGzYCACAPIApBCHJqIgdBACAHKAIAIgYgC2siByAGIAdJGzYCACAPIApBEHJqIgdBACAHKAIAIgYgC2siByAGIAdJGzYCACAPIApBGHJqIgdBACAHKAIAIgYgC2siByAGIAdJGzYCACAEQQRqIQQgCEEEayIIDQALCyAJQQFNBEAgBUEDcSEGA0AgDyAEQQN0aiIHQQAgBygCACIFIAtrIgcgBSAHSRs2AgAgBEEBaiEEIAZBAWsiBg0ACwsgAEEANgIYIA4gACgCBCITayEFQQALIQQCQCAEICdqIAVPBEAgACgAECEEIAAoAAwhEQwBCyAAKAIQIgQgBSAnayIHSQRAIAAgBzYCECAHIQQLIAQgACgCDCIRSwRAIAAgBDYCDCAEIRELIABBADYCGAsgAigCCCEdIAIoAgQhByACKAIQIQYgACkDICE7IAIoAgwhEkEAIRggESIPIARNIjBFBEAgACgCCCEYIAQhDwsgDiASQQggEkEISxtrIikgDSIKTwRAQQEgHXQhMUF/IAZ0QX9zISogESAYakEAIAQgEUkiBBshHiAPIBhqQQAgBBshGSARIBNqIQtBACEEQQBBICAHIB1rIh9rIhQgBmsiByAHIBRLG60hPCASQXxxITIgEkEDcSEzIBJBAWshNCAOQQFrISsgDkEDayEaIBStIT1BwAAgH2utIT5CACE5IA0hBwNAAkAgByANRwRAIAQgEmoxAAAgOSAEMQAAQgp8IDt+fULjyJW9y5vvjU9+fEIKfCE5DAELIBJFBEBCACE5DAELQgAhOUEAIQQgMiEFIDRBA08EQANAIA0gBEEDcmoxAAAgDSAEQQJyajEAACANIARBAXJqMQAAIAQgDWoxAAAgOULjyJW9y5vvjU9+fELjyJW9y5vvjU9+fELjyJW9y5vvjU9+fELjyJW9y5vvjU9+fEKQwqmFj9zjlBh8ITkgBEEEaiEEIAVBBGsiBQ0ACwsgMyIFRQ0AA0AgBCANajEAACA5QuPIlb3Lm++NT358Qgp8ITkgBEEBaiEEIAVBAWsiBQ0ACwsgKQJ/ICogOSA8iKcgKnFHBEAgByIEQQFqDAELIAcgE2shICAAKAIUIjUgOSA+iKdBACAfGyIhIAIoAAgiNnRBA3RqISIgOSA9iCE6AkAgHUEfRwRAICIgMUEDdGohNyA6pyE4QQAhI0EAISRBACElQQAhLCAiIQQDQAJAIAQoAgQgOEcNACAEKAIAIgwgD00NACAsAn8CQCAwRQRAIBggEyAMIBFJIi0bIAxqIgwhBiAMAn8CQCAHIgUgBSAeIA4gLRsiECAMa2oiCCAOIAggDkkbIi5BA2siCU8NACAHKAAAIAwiBigAAHMiCARAIAhoQQN2DAILA0AgBkEEaiEGIAVBBGoiBSAJTw0BIAUoAAAgBigAAHMiCEUNAAsgBSAIaEEDdmogB2sMAQsCQCAFIC5BAWtPDQAgBi8AACAFLwAARw0AIAZBAmohBiAFQQJqIQULIAUgLkkEfyAFQQFqIAUgBi0AACAFLQAARhsFIAULIAdrCyIJaiAQRgRAIAshBiAHIAlqIgghBQJ/AkAgCCAaTw0AIAgiBSgAACALKAAAcyIQBEAgEGhBA3YMAgsDQCAGQQRqIQYgBUEEaiIFIBpPDQEgBSgAACAGKAAAcyIQRQ0ACyAFIBBoQQN2aiAIawwBCwJAIAUgK08NACAGLwAAIAUvAABHDQAgBkECaiEGIAVBAmohBQsgBSAOSQR/IAVBAWogBSAGLQAAIAUtAABGGwUgBQsgCGsLIAlqIQkLIAkgEkkNAyAZIAsgLRshEEEAIQUCQCAHIApNDQAgByEGIBAgDCIITw0AA0AgBkEBayIGLQAAIAhBAWsiCC0AAEcNASAFQQFqIQUgBiAKTQ0BIAggEEsNAAsLIBAgGUYNASAMIAVrIBBHDQFBACEMAkAgGSAeTw0AIB4hCCAHIAVrIgYgCk0NAANAIAZBAWsiBi0AACAIQQFrIggtAABHDQEgDEEBaiEMIAYgCk0NASAIIBlLDQALCyAFIAxqIQUMAQsgDCATaiIGIQggEgJ/AkAgGiAHIgVNDQAgBiEIIAcoAAAgBigAAHMiCQRAIAloQQN2DAILA0AgCEEEaiEIIAVBBGoiBSAaTw0BIAUoAAAgCCgAAHMiCUUNAAsgBSAJaEEDdmogB2sMAQsCQCAFICtPDQAgCC8AACAFLwAARw0AIAhBAmohCCAFQQJqIQULIAUgDkkEfyAFQQFqIAUgCC0AACAFLQAARhsFIAULIAdrCyIJSw0CQQAhBSAJIAcgCk0NARogByEIIAkgDCARTA0BGgNAIAhBAWsiCC0AACAGQQFrIgYtAABHDQEgBUEBaiEFIAggCk0NASAGIAtLDQALCyAFIAlqCyIGTw0AIAYhLCAEISUgBSEkIAkhIwsgBEEIaiIEIDdJDQALICUNAQsCfyACKAAQIgQgFEsEQCA5pyEFQX8gBHRBf3MiBgwBCyA5IBQgBGutiKchBkF/IAR0QX9zIgULIQQgBCAFIAZxRgRAICIgACgCHCAhaiIELQAAQQN0aiAgrSA6QiCGhDcCACAEIAQtAABBAWpBfyA2dEF/c3E6AAALIAciBEEBagwBCyABKAIMIgUgASgCEEYEQEG6fyEWDAULICUoAgAhBCABKAIAIAVBDGxqIgYgIyAkajYCCCAGIAcgJGsgCms2AgQgBiAgIARrNgIAIAEgBUEBajYCDAJ/IAIoABAiBCAUSwRAIDmnIQVBfyAEdEF/cyIGDAELIDkgFCAEa62IpyEGQX8gBHRBf3MiBQshBCAEIAUgBnFGBEAgNSAhIAIoAAgiBHRBA3RqIAAoAhwgIWoiBi0AAEEDdGogIK0gOkIghoQ3AgAgBiAGLQAAQQFqQX8gBHRBf3NxOgAACwJ/IAcgKSAHICNqIgpJDQAaIBUgAikCEDcDGCAVIAIpAgg3AxAgFSACKQIANwMIIAAgOSAHIAogEyAfIBVBCGoQZiE5IApBAWsLIQQgCgsiB08NAAsLIA4gCmsiBEGIf0sEQCAEIRYMAgsCfyABKAIMIgcgF0sEQCABKAIAIBdBDGxqIgYgBigCBCAcajYCBCAEDAELIBwgDWsgDmoLIRwgByEXIBtBAWoiGyAvRw0ACwsgFUEgaiQAIBYL+gkCD38BfiABKAKQASEJAn9BASABKAAQIAEoAAxJDQAaQQAgASgCdCIGRQ0AGkEDQQIgBigCLBsLQShsIAlBAnRqQaAXaigCACEPAkAgCUEGTQRAIAQgBWohDQJAIAVBAUgNACAAKAIEIgUgACgCDCIHTw0AIAEoAogBIREgDUEgayEJA0AgACgCACIOIAVBDGxqIggoAgAhCwJAIA0gBGsiBiAIKAIIIhAgCCgCBCIIak8EQCAAIAVBAWo2AgQMAQsCQCAGIAhLBEBBACALIAYgCGsiECARSRshCwwBC0EAIQsgBkUNAwsgBSAHIAUgB0sbIRMDQCAFIBNGDQEgDiAFQQxsIhRqIgohDCAKKAIEIhIgBk8EQCAMIBIgBms2AgQMAgsgDEEANgIEIAYgEmsiBiAKKAIIIgxJBEAgCiAMIAZrIgY2AgggBiARTw0CIAcgBUEBaiIFSwRAIA5BDGogFGoiByAHKAIEIAZqNgIECyAAIAU2AgQMAgsgCkEANgIIIAAgBUEBaiIFNgIEIAYgDGsiBg0ACwsgC0UNASAEIAEoAgRrIgUgASgCGCIGQYAIaksEQCABIAUgBSAGa0GACGsiBUGABCAFQYAESRtrNgIYCyABIAQQaSABIAIgAyAEIAggDxEEACEHIAMpAgAhFSADIAs2AgAgAyAVNwIEIAQgCGoiCCAHayEFIBBBA2shCiACKAIMIQQCQAJAIAggCU0EQCAEIAUpAAA3AAAgBCAFKQAINwAIIAIoAgwhBCAHQRBNBEAgAiAEIAdqNgIMDAMLIAQgBSkAEDcAECAEIAUpABg3ABggB0EhSA0BIAQgB2ohBiAFQRBqIQUgBEEgaiEEA0AgBCAFKQAQNwAAIAQgBSkAGDcACCAEIAUpACA3ABAgBCAFKQAoNwAYIAVBIGohBSAEQSBqIgQgBkkNAAsMAQsgBSAJTQRAIAQgBSkAADcAACAEIAUpAAg3AAggBCAJIAVrIg5qIQYgDkERTgRAIARBEGohBANAIAQgBSkAEDcAACAEIAUpABg3AAggBCAFKQAgNwAQIAQgBSkAKDcAGCAFQSBqIQUgBEEgaiIEIAZJDQALCyAJIQUgBiEECyAFIAhPDQADQCAEIAUtAAA6AAAgBEEBaiEEIAVBAWoiBSAIRw0ACwsgAiACKAIMIAdqNgIMIAdBgIAESQ0AIAJBATYCJCACIAIoAgQgAigCAGtBA3U2AigLIAIoAgQiBCALQQNqNgIAIAQgBzsBBCAKQYCABE8EQCACQQI2AiQgAiAEIAIoAgBrQQN1NgIoCyAEIAo7AQYgAiAEQQhqNgIEIAggEGoiBCANTw0BIAAoAgQiBSAAKAIMIgdJDQALCyAEIAEoAgRrIgAgASgCGCIFQYAIaksEQCABIAAgACAFa0GACGsiAEGABCAAQYAESRtrNgIYCyABIAQQaSABIAIgAyAEIA0gBGsgDxEEACECDAELIAEgADYClAEgASACIAMgBCAFIA8RBAAhAgJAIAAoAgggBWoiBEUNACAAKAIEIgUgACgCDCIDIAMgBUkbIQEDQAJAAkAgASAFRgRAIAEhBQwBCyAEIAAoAgAgBUEMbGoiCSgCCCAJKAIEaiIJTw0BIAAgBDYCCAsgAyAFRg0CDAMLIAAgBUEBaiIFNgIEIAQgCWsiBA0ACwsgAEEANgIIIAIPCyACC9sCAgZ/AX4CQAJAAkAgACgCkAFBAWsOAgABAgsgACgCBCIEIAAoAhhqIgJBA2oiAyABQQZrIgVPDQEgACgCICEGQSAgACgCgAEiAWshB0HAACABa60hCAJAAkACQCAAKAKIASIBQQVrDgQBAgIAAgsDQCAGIAIpAABC48iVvcub741PfiAIiKdBAnRqIAIgBGs2AgAgAyICQQNqIgMgBUkNAAsMAwsDQCAGIAIpAABCgICA2Mub741PfiAIiKdBAnRqIAIgBGs2AgAgAyICQQNqIgMgBUkNAAsMAgsDQCACIARrIQAgBgJ/AkACQAJAIAFBBmsOAgECAAsgAigAAEGx893xeWwgB3YMAgsgAikAAEKAgOz8y5vvjU9+IAiIpwwBCyACKQAAQoDGlf3Lm++NT34gCIinC0ECdGogADYCACAFIAMiAkEDaiIDSw0ACwwBCyAAIAFBABBiCwvMBgEafyMAQRBrIRAgACgCGCIGIAEgACgCBCIRayISSQRAIAJBAWshGSACQQNrIRMgACgCKCEUIAAoAiAhGiAAKAKIAUEFayEbA0AgBiARaiEHIAAoAoABIQEgGgJ/AkACQAJAAkACQCAbDgQBAgMEAAsgBygAAEGx893xeWxBICABa3YMBAsgBykAAEKAgIDYy5vvjU9+QcAAIAFrrYinDAMLIAcpAABCgIDs/Mub741PfkHAACABa62IpwwCCyAHKQAAQoDGlf3Lm++NT35BwAAgAWutiKcMAQsgBykAAELjyJW9y5vvjU9+QcAAIAFrrYinC0ECdGoiASgCACEFIAAoAnwhBCAAKAKEASEDIAAoAhAhFSABIAY2AgAgBkEJaiEJIBQgBkF/IARBAWt0QX9zIhZxQQN0aiEIAn8gBSAVSQRAIAhCADcCAEEADAELQQAgBiAWayIBIAEgBksbIRcgCEEEaiELQX8gA3RBf3MhDEEAIQ1BCCEKQQAhDgNAIAUgEWoiHCANIA4gDSAOSRsiGGohAwJ/AkAgByAYaiIEIBNPBEAgBCEBDAELIAQiASgAACADKAAAcyIPBEAgD2hBA3YMAgsDQCADQQRqIQMgAUEEaiIBIBNPDQEgASgAACADKAAAcyIPRQ0ACyABIA9oQQN2aiAEawwBCwJAIAEgGU8NACADLwAAIAEvAABHDQAgA0ECaiEDIAFBAmohAQsgASACSQR/IAFBAWogASADLQAAIAEtAABGGwUgAQsgBGsLIBhqIgEgCiABIApLIgQbIQogASAFaiAJIAEgCSAFa0sbIAkgBBshCQJAIAEgB2oiBCACRg0AIBQgBSAWcUEDdGohAwJAAkAgASAcai0AACAELQAASQRAIAggBTYCACAFIBdLDQEgEEEMaiEIDAMLIAsgBTYCACAFIBdLBEAgASEOIAMhCwwCCyAQQQxqIQsMAgsgASENIANBBGoiCCEDCyAMRQ0AIAxBAWshDCADKAIAIgUgFU8NAQsLIAtBADYCACAIQQA2AgAgCkGAA2siAUHAASABQcABSRtBACAKQYADSxsLIgEgCSAGa0EIayIEIAEgBEsbIAZqIgYgEkkNAAsLIAAgEjYCGAvJDgIOfwJ+IwBBEGsiDSQAIA1BADYCDCANQQA2AghBVCEEAkACQCADQeQFaiIIIAMgDUEIaiANQQxqIAEgAiADQYABahAGIhBBiH9LDQAgDSgCDCIOIAAoAgAiAUH/AXFBAWpLDQEgACABQf+BgHhxIA5BEHRBgID8B3FyNgIAIA0oAgghAkEAIQQCQCAOQQBIDQAgA0FAayEGIA5BAWoiCUEDcSEFQQAhASAOQQNPBEAgCUF8cSEHA0AgAyAEQQJ0IglqKAIAIQogBiAJaiABNgIAIAMgCUEEciILaigCACEPIAYgC2ogASAKaiIBNgIAIAMgCUEIciIKaigCACELIAYgCmogASAPaiIBNgIAIAMgCUEMciIJaigCACEKIAYgCWogASALaiIBNgIAIAEgCmohASAEQQRqIQQgB0EEayIHDQALCyAFRQ0AA0AgAyAEQQJ0IglqKAIAIQcgBiAJaiABNgIAIARBAWohBCABIAdqIQEgBUEBayIFDQALC0EAIQQgAkEETgRAIAJBA2shCSADQUBrIQEgA0HkA2ohBgNAIAEgBCAIai0AAEECdGoiBSAFKAIAIgVBAWo2AgAgBSAGaiAEOgAAIAEgCCAEQQFyIgVqLQAAQQJ0aiIHIAcoAgAiB0EBajYCACAGIAdqIAU6AAAgASAIIARBAnIiBWotAABBAnRqIgcgBygCACIHQQFqNgIAIAYgB2ogBToAACABIAggBEEDciIFai0AAEECdGoiByAHKAIAIgdBAWo2AgAgBiAHaiAFOgAAIARBBGoiBCAJSA0ACwsCQCACIARMDQAgBEEBaiEBIANBQGshBiADQeQDaiEJIAIgBGtBAXEEQCAGIAQgCGotAABBAnRqIgUgBSgCACIFQQFqNgIAIAUgCWogBDoAACABIQQLIAEgAkYNAANAIAYgBCAIai0AAEECdGoiASABKAIAIgFBAWo2AgAgASAJaiAEOgAAIAYgCCAEQQFqIgFqLQAAQQJ0aiIFIAUoAgAiBUEBajYCACAFIAlqIAE6AAAgBEECaiIEIAJHDQALCyAOQQFqIhFBAkkNACAAQQRqIQsgA0HkA2ohCiADKAIAIQdBACEBQQEhBANAIBEgBCIJayEGIAMgBEECdGooAgAhBQJAAkACQAJAAkACQEEBIAR0IgBBAXUiD0EBaw4IAwIEAQQEBAAECyAFQQFIDQQgBkEIdEGA/gNxrSESQQAhBCABIQIgBUEBRwRAIAVBfnEhCANAIAsgAkEBdGoiACAKIAQgB2pqMQAAIBKEQoGAhICQgMAAfiITNwAIIAAgEzcAACAAIAogBEEBciAHamoxAAAgEoRCgYCEgJCAwAB+IhM3ABggACATNwAQIARBAmohBCACQRBqIQIgCEECayIIDQALCyAFQQFxRQ0EIAsgAkEBdGoiACAKIAQgB2pqMQAAIBKEQoGAhICQgMAAfiISNwAIIAAgEjcAAAwECyAFQQFIDQMgBkEIdEGA/gNxrSESQQAhBCABIQYgBUEBRwRAIAVBfnEhAgNAIAsgBkEBdGoiACAKIAQgB2pqMQAAIBKEQoGAhICQgMAAfjcAACAAIAogBEEBciAHamoxAAAgEoRCgYCEgJCAwAB+NwAIIARBAmohBCAGQQhqIQYgAkECayICDQALCyAFQQFxRQ0DIAsgBkEBdGogCiAEIAdqajEAACAShEKBgISAkIDAAH43AAAMAwsgBUEBSA0CQQAhAiABIQggBUEBRwRAIAVBfnEhAANAIAsgCEEBdGoiBCAKIAIgB2pqLQAAIgw6AAIgBCAGOgADIAQgBjoAASAEIAw6AAAgCiACQQFyIAdqai0AACEMIAQgBjoABSAEIAw6AAQgBCAMOgAGIAQgBjoAByACQQJqIQIgCEEEaiEIIABBAmsiAA0ACwsgBUEBcUUNAiAKIAIgB2pqLQAAIQIgCyAIQQF0aiIAIAY6AAMgACAGOgABIAAgAjoAACAAIAI6AAIMAgsgBUEBSA0BQQAhBCABIQggBUEBRwRAIAVBfnEhAANAIAogBCAHamotAAAhDCALIAhBAXRqIgIgBjoAASACIAw6AAAgCiAEQQFyIAdqai0AACEMIAIgBjoAAyACIAw6AAIgBEECaiEEIAhBAmohCCAAQQJrIgANAAsLIAVBAXFFDQEgCiAEIAdqai0AACEAIAsgCEEBdGoiAiAGOgABIAIgADoAAAwBCyAFQQFIDQAgAEECSA0AIAZBCHRBgP4Dca0hE0EAIQggASEAA0AgCyAAQQF0aiEEIAogByAIamoxAAAgE4RCgYCEgJCAwAB+IRJBACEGA0AgBCAGQQF0aiICIBI3ABggAiASNwAQIAIgEjcACCACIBI3AAAgBkEQaiIGIA9IDQALIAAgD2ohACAIQQFqIgggBUcNAAsLIAlBAWohBCAFIAdqIQcgBSAPbCABaiEBIAkgDkcNAAsLIBAhBAsgDUEQaiQAIAQLyQUBCH8gA0UEQEG4fw8LIAQvAQIhBwJ/AkACQCADQQRPBEBBfyACIANqQQFrLQAAIgZFDQMaIANBiH9NDQEgAw8LIAItAAAhBgJAAkACQCADQQJrDgIBAAILIAItAAJBEHQgBnIhBgsgAi0AAUEIdCAGaiEGCyACIANqQQFrLQAAIgVFBEBBbA8LIAVnIANBA3RrQQlqIQVBACEDDAELIAZnQRdrIQUgAiADQQRrIgNqKAAAIQYLIARBBGohCiAAIAFqIQsCQAJAAkAgBUEhTwRAQQAgB2tBH3EhCSACIANqIQcMAQsgC0EDayEMQQAgB2tBH3EhCQJAAkACQANAAn8gA0EETgRAIAVBA3YhBkEAIQggBUEHcQwBCyADRQRAQQAhAyACIQcgBSEEDAQLIAUgAyAFQQN2IgQgAiADaiAEayACSSIIGyIGQQN0awshBCACIAMgBmsiA2oiBygAACEGIAAgDE8NASAIDQEgCiAGIAR0IAl2QQF0aiIFLQABIQcgACAFLQAAOgAAIAogBiAEIAdqIgR0IAl2QQF0aiIFLQABIQcgACAFLQAAOgABIABBAmohACAEIAdqIgVBIUkNAAsgAiADaiEHDAMLIARBIEsNAQsDQAJ/IANBBE4EQCAEQQN2IQZBACEIIARBB3EMAQsgA0UNAiAEIAMgBEEDdiIEIAcgBGsgAkkiCBsiBkEDdGsLIQUgAiADIAZrIgNqIgcoAAAhBkEAIAAgC08iBEUgCBtFBEAgBA0FDAQLIAogBiAFdCAJdkEBdGoiBC0AASEIIAAgBC0AADoAACAAQQFqIQAgBSAIaiIEQSBNDQALCyAEIQULIAAgC08NAQsDQCAKIAYgBXQgCXZBAXRqIgMtAAEhBCAAIAMtAAA6AAAgBCAFaiEFIABBAWoiACALRw0ACwtBbEFsIAEgBUEgRxsgAiAHRxsLC+UaASF/AkAgA0EKSQ0AIAIvAAQiBSACLwAAIgZBBmoiDSACLwACIghqaiIHIANLDQAgBkUEQEG4fw8LIAJBBmohCSAELwECIRoCfwJAIAZBBE8EQEF/IAYgCWpBAWstAAAiCUUNAhogCWdBF2shCSACIAZBAmoiBmooAAAhCgwBCyAJLQAAIQoCQAJAAkAgBkECaw4CAQACCyACLQAIQRB0IApyIQoLIAItAAdBCHQgCmohCgsgBiAJakEBay0AACIJRQ0CIAlnIAZBA3RrQQlqIQlBBiEGCyAIRQRAQbh/DwsgAiANaiETAn8gCEEETwRAQX8gCCATakEBay0AACINRQ0CGiATIAhBBGsiEWooAAAhFiANZ0EXawwBCyATLQAAIRYCQAJAAkAgCEECaw4CAQACCyATLQACQRB0IBZyIRYLIBMtAAFBCHQgFmohFgsgCCATakEBay0AACINRQ0CIA1nIAhBA3RrQQlqCyENIAVFBEBBuH8PCyAIIBNqIRQCfyAFQQRPBEBBfyAFIBRqQQFrLQAAIghFDQIaIBQgBUEEayIZaigAACEXIAhnQRdrDAELIBQtAAAhFwJAAkACQCAFQQJrDgIBAAILIBQtAAJBEHQgF3IhFwsgFC0AAUEIdCAXaiEXCyAFIBRqQQFrLQAAIghFDQIgCGcgBUEDdGtBCWoLIQhBuH8gAyAHayIHRQ0AGiAFIBRqIRUCfwJAIAdBBE8EQEF/IAcgFWpBAWstAAAiA0UNAxogB0GIf00NASAHDwsgFS0AACEYAkACQAJAIAdBAmsOAgEAAgsgFS0AAkEQdCAYciEYCyAVLQABQQh0IBhqIRgLIAcgFWpBAWstAAAiA0UNAyADZyAHQQN0a0EJagwBCyAVIAdBBGsiC2ooAAAhGCADZ0EXawshAyAEQQRqIQ8CQCAAIAFBA2pBAnYiBGoiHCAEaiIdIARqIh4gACABaiIgQQNrIiJPBEAgESEMIBkhEiALIRAgBiEHIB4hBCAdIQ4gHCEFDAELQQAgGmtBH3EhGyAcIQUgHSEOIB4hBEEBISMDQCAPIAogCXQgG3ZBAXRqIgctAAEhDCAAIActAAA6AAAgDyAWIA10IBt2QQF0aiIHLQABIRIgBSAHLQAAOgAAIA8gFyAIdCAbdkEBdGoiBy0AASEQIA4gBy0AADoAACAPIBggA3QgG3ZBAXRqIgctAAEhHyAEIActAAA6AAAgDyAKIAkgDGoiCXQgG3ZBAXRqIgctAAEhDCAAIActAAA6AAEgDyAWIA0gEmoiDXQgG3ZBAXRqIgctAAEhEiAFIActAAA6AAEgDyAXIAggEGoiCHQgG3ZBAXRqIgctAAEhECAOIActAAA6AAEgDyAYIAMgH2oiH3QgG3ZBAXRqIgMtAAEhISAEIAMtAAA6AAEgCSAMaiEDAn8gBkEKSARAIAYhByADDAELIAIgBiADQQN2ayIHaigAACEKIANBB3ELIQkgDSASaiEDAn8gEUEESARAIBEhDCADDAELIBMgESADQQN2ayIMaigAACEWIANBB3ELIQ0gCCAQaiEDAn8gGUEESARAIBkhEiADDAELIBQgGSADQQN2ayISaigAACEXIANBB3ELIQggHyAhaiEQIARBAmohBAJAIAtBBEgEQCAQIQMgCyEQDAELIBBBB3EhAyAVIAsgEEEDdmsiEGooAAAhGAsgDkECaiEOIAVBAmohBSAAQQJqIQAgEUEDSiEfIBlBA0ohISALQQNKISQgBkEJSiElIAchBiAQIQsgEiEZIAwhESAjICUgJCAfICFxcXFxIiMgBCAiSXENAAsLIA4gHksNASAFIB1LDQFBbCAAIBxLDQAaAkACQAJAIAlBIU8EQEEAIBprQR9xIQsMAQsgHEEDayEZQQAgGmtBH3EhCwJAAkADQAJ/IAdBCk4EQCAJQQN2IQpBACERIAlBB3EMAQsgB0EGRgRAIAkhBkEGIQcMAwsgCSAHQQZrIAlBA3YiBiAHIAZrQQZIIhEbIgpBA3RrCyEGIAIgByAKayIHaigAACEKAkAgACAZTw0AIBENACAPIAogBnQgC3ZBAXRqIgktAAEhESAAIAktAAA6AAAgDyAKIAYgEWoiBnQgC3ZBAXRqIgktAAEhESAAIAktAAA6AAEgAEECaiEAIAYgEWoiCUEgTQ0BDAQLCyAGQSBLDQELA0ACfyAHQQpOBEAgBkEDdiEKQQAhESAGQQdxDAELIAdBBkYEQEEGIQcMAwsgBiAHQQZrIAZBA3YiBiAHIAZrQQZIIhEbIgpBA3RrCyEJIAIgByAKayIHaigAACEKQQAgACAcTyIGRSARG0UEQCAGDQUMBAsgDyAKIAl0IAt2QQF0aiIGLQABIREgACAGLQAAOgAAIABBAWohACAJIBFqIgZBIE0NAAsLIAYhCQsgACAcTw0BCwNAIA8gCiAJdCALdkEBdGoiAi0AASEGIAAgAi0AADoAACAGIAlqIQkgAEEBaiIAIBxHDQALCwJAAkACQCANQSFPBEBBACAaa0EfcSECIAwgE2ohBgwBCyAdQQNrIRFBACAaa0EfcSECAkACQAJAA0ACfyAMQQROBEAgDUEDdiELQQAhCiANQQdxDAELIAxFBEBBACEMIBMhBiANIQAMBAsgDSAMIA1BA3YiACAMIBNqIABrIBNJIgobIgtBA3RrCyEAIBMgDCALayIMaiIGKAAAIRYgBSARTw0BIAoNASAPIBYgAHQgAnZBAXRqIgYtAAEhDSAFIAYtAAA6AAAgDyAWIAAgDWoiAHQgAnZBAXRqIgYtAAEhDSAFIAYtAAA6AAEgBUECaiEFIAAgDWoiDUEhSQ0ACyAMIBNqIQYMAwsgAEEgSw0BCwNAAn8gDEEETgRAIABBA3YhC0EAIQogAEEHcQwBCyAMRQ0CIAAgDCAAQQN2IgAgBiAAayATSSIKGyILQQN0awshDSATIAwgC2siDGoiBigAACEWQQAgBSAdTyIARSAKG0UEQCAADQUMBAsgDyAWIA10IAJ2QQF0aiIALQABIQsgBSAALQAAOgAAIAVBAWohBSALIA1qIgBBIE0NAAsLIAAhDQsgBSAdTw0BCwNAIA8gFiANdCACdkEBdGoiAC0AASEMIAUgAC0AADoAACAMIA1qIQ0gBUEBaiIFIB1HDQALCwJAAkACQCAIQSFPBEBBACAaa0EfcSECIBIgFGohCgwBCyAeQQNrIQxBACAaa0EfcSECAkACQAJAA0ACfyASQQROBEAgCEEDdiELQQAhBSAIQQdxDAELIBJFBEBBACESIBQhCiAIIQAMBAsgCCASIAhBA3YiACASIBRqIABrIBRJIgUbIgtBA3RrCyEAIBQgEiALayISaiIKKAAAIRcgDCAOTQ0BIAUNASAPIBcgAHQgAnZBAXRqIgUtAAEhCCAOIAUtAAA6AAAgDyAXIAAgCGoiAHQgAnZBAXRqIgUtAAEhCCAOIAUtAAA6AAEgDkECaiEOIAAgCGoiCEEhSQ0ACyASIBRqIQoMAwsgAEEgSw0BCwNAAn8gEkEETgRAIABBA3YhC0EAIQUgAEEHcQwBCyASRQ0CIAAgEiAAQQN2IgAgCiAAayAUSSIFGyILQQN0awshCCAUIBIgC2siEmoiCigAACEXQQAgDiAeTyIARSAFG0UEQCAADQUMBAsgDyAXIAh0IAJ2QQF0aiIALQABIQUgDiAALQAAOgAAIA5BAWohDiAFIAhqIgBBIE0NAAsLIAAhCAsgDiAeTw0BCwNAIA8gFyAIdCACdkEBdGoiAC0AASEFIA4gAC0AADoAACAFIAhqIQggDkEBaiIOIB5HDQALC0EAIBprQR9xIQICQAJAAkACQAJAIANBIE0EQANAAn8gEEEETgRAIANBA3YhC0EAIQ4gA0EHcQwBCyAQRQRAQQAhECAVIQUgAyEADAULIAMgECADQQN2IgAgECAVaiAAayAVSSIOGyILQQN0awshACAVIBAgC2siEGoiBSgAACEYIAQgIk8NAiAODQIgDyAYIAB0IAJ2QQF0aiIDLQABIQUgBCADLQAAOgAAIA8gGCAAIAVqIgB0IAJ2QQF0aiIDLQABIQUgBCADLQAAOgABIARBAmohBCAAIAVqIgNBIUkNAAsLIBAgFWohBQwCCyAAQSBNDQAgACEDDAELIAAhAwNAAn8gEEEETgRAIANBA3YhC0EAIQ4gA0EHcQwBCyAQRQ0CIAMgECADQQN2IgAgBSAAayAVSSIOGyILQQN0awshACAVIBAgC2siEGoiBSgAACEYQQAgBCAgTyIMRSAOG0UEQCAAIQMgDA0EDAMLIA8gGCAAdCACdkEBdGoiAy0AASEMIAQgAy0AADoAACAEQQFqIQQgACAMaiIDQSBNDQALCyAEICBPDQELA0AgDyAYIAN0IAJ2QQF0aiIALQABIQwgBCAALQAAOgAAIAMgDGohAyAEQQFqIgQgIEcNAAsLIAFBbCAFIBVGG0FsIANBIEYbQWwgCiAURhtBbCAIQSBGG0FsIAYgE0YbQWwgDUEgRhtBbCAJQSBGG0FsIAdBBkYbCw8LQWwL5g8BGH8jAEHAA2siByQAQVQhBQJAIARB3AtJDQAgACgCACEEIANB8ARqQQBB7AAQpwEhCCAEQf8BcSIQQQxLDQAgA0HcCWoiCiAIIAdBCGogB0EMaiABIAIgB0HQAGoQBiIXQYh/TQRAIAcoAgwiDiAQSw0BIANB3AVqIREgA0GkBWohGCAAQQRqIRQgBEGAgIB4cSEZIANBqAVqIQIgDiEBA0AgASIEQQFrIQEgCCAEQQJ0aigCAEUNAAtBASEBAkAgBEEBaiIPQQJJDQAgBEEDcSEMAkAgBEEBa0EDSQRADAELIARBfHEhBQNAIAggAUECdCIGaigCACEJIAIgBmogDTYCACAIIAZBBGoiC2ooAgAhEiACIAtqIAkgDWoiDTYCACAIIAZBCGoiCWooAgAhCyACIAlqIA0gEmoiDTYCACAIIAZBDGoiBmooAgAhCSACIAZqIAsgDWoiBjYCACAGIAlqIQ0gAUEEaiEBIAVBBGsiBQ0ACwsgDEUNAANAIAggAUECdCIGaigCACEFIAIgBmogDTYCACABQQFqIQEgBSANaiENIAxBAWsiDA0ACwsgAiANNgIAAkAgBygCCCIFRQ0AQQAhASAFQQFHBEAgBUF+cSEGA0AgAiABIApqLQAAIgxBAnRqIgkgCSgCACIJQQFqNgIAIBEgCUEBdGoiCSAMOgABIAkgAToAACACIAogAUEBciIMai0AACIJQQJ0aiILIAsoAgAiC0EBajYCACARIAtBAXRqIgsgCToAASALIAw6AAAgAUECaiEBIAZBAmsiBg0ACwsgBUEBcUUNACACIAEgCmotAAAiBkECdGoiAiACKAIAIgJBAWo2AgAgESACQQF0aiICIAY6AAEgAiABOgAAC0EAIQIgA0EANgKoBQJAIA9BAk8EQEEBIQEgBEEBRwRAIBAgDkF/c2ohBiAEQX5xIQoDQCAIIAFBAnQiBWooAgAhDCADIAVqIAI2AgAgCCABQQFqIgVBAnQiCWooAgAhCyADIAlqIAwgASAGanQgAmoiAjYCACALIAUgBmp0IAJqIQIgAUECaiEBIApBAmsiCg0ACwsgBEEBcQRAIAMgAUECdGogAjYCAAsgDkEBaiIJIARrIQ4gD0ECSQ0BIA4gECAOa0EBaiIMTw0BIARBfHEhAiAEQQNxIQogBEEBa0EDSSEPIA4hBANAQQEhBSACIQYgD0UEQANAIAMgBEE0bGoiCCAFQQJ0IgFqIAEgA2ooAgAgBHY2AgAgCCABQQRqIgtqIAMgC2ooAgAgBHY2AgAgCCABQQhqIgtqIAMgC2ooAgAgBHY2AgAgCCABQQxqIgFqIAEgA2ooAgAgBHY2AgAgBUEEaiEFIAZBBGsiBg0ACwsgCiIBBEADQCAFQQJ0IgYgAyAEQTRsamogAyAGaigCACAEdjYCACAFQQFqIQUgAUEBayIBDQALCyAEQQFqIgQgDEkNAAsMAQsgDkEBaiIJIARrIQ4LIAdBQGsgAygCMDYCACAHIAMpAig3AzggByADKQIgNwMwIAcgAykCGDcDKCAHIAMpAhA3AyAgByADKQIANwMQIAcgAykCCDcDGCANBEAgCSAQayEaQQAhCwNAQQEgECAJIBEgC0EBdGoiAS0AASICayIIayIPdCESIAEtAAAhFSAHQRBqIAJBAnRqIhsoAgAhCgJAIA4gD00EQCAYIAggGmoiAkEBIAJBAUobQQJ0IgRqKAIAIRMgByADIAhBNGxqIgEoAjA2AoABIAcgASkCKDcDeCAHIAEpAiA3A3AgByABKQIYNwNoIAcgASkCEDcDYCAHIAEpAgg3A1ggByABKQIANwNQIA0gE2shFiAUIApBAnRqIQECQCACQQJIDQAgB0HQAGogBGooAgAiBUUNACAFQQdxIQYgCEEQdEGAgPwHcSAVckGAgIAIciEEQQAhAiAFQQFrQQdPBEAgBUF4cSEMA0AgASACQQJ0IgVqIAQ2AQAgASAFQQRyaiAENgEAIAEgBUEIcmogBDYBACABIAVBDHJqIAQ2AQAgASAFQRByaiAENgEAIAEgBUEUcmogBDYBACABIAVBGHJqIAQ2AQAgASAFQRxyaiAENgEAIAJBCGohAiAMQQhrIgwNAAsLIAZFDQADQCABIAJBAnRqIAQ2AQAgAkEBaiECIAZBAWsiBg0ACwsgFgRAIBEgE0EBdGohBUEAIQYDQEEBIA8gCSAFIAZBAXRqIgwtAAEiAmsiE2t0IAdB0ABqIAJBAnRqIhwoAgAiBGohAiAIIBNqQRB0QYCA/AdxIAwtAABBCHQgFXJyQYCAgBByIQwDQCABIARBAnRqIAw2AQAgBEEBaiIEIAJJDQALIBwgAjYCACAGQQFqIgYgFkcNAAsLIAogEmohAQwBCyAKIAogEmoiAU8NACAIQRB0QYCA/AdxIBVyQYCAgAhyIQIgD0ECTQRAIBJBB3EhBQNAIBQgCkECdGogAjYBACAKQQFqIQogBUEBayIFDQALCyAPQQNJDQADQCAUIApBAnRqIgQgAjYBACAEIAI2ARwgBCACNgEYIAQgAjYBFCAEIAI2ARAgBCACNgEMIAQgAjYBCCAEIAI2AQQgCkEIaiIKIAFHDQALCyAbIAE2AgAgC0EBaiILIA1HDQALCyAAIBBBEHQgGXIgEHJBgAJyNgIACyAXIQULIAdBwANqJAAgBQuyBgEIfyADRQRAQbh/DwsCfwJAAkAgA0EETwRAQX8gAiADakEBay0AACIGRQ0DGiADQYh/TQ0BIAMPCyACLQAAIQcCQAJAAkAgA0ECaw4CAQACCyACLQACQRB0IAdyIQcLIAItAAFBCHQgB2ohBwsgAiADakEBay0AACIGRQRAQWwPCyAGZyADQQN0a0EJaiEFQQAhAwwBCyAGZ0EXayEFIAIgA0EEayIDaigAACEHCyAEQQRqIQkgACABaiEKIAQvAQIhBAJAAkACQAJAIAVBIU8EQEEAIARrQR9xIQQMAQsgCkEDayEMQQAgBGtBH3EhBANAAn8gA0EETgRAIAVBA3YhB0EAIQggBUEHcQwBCyADRQRAIApBAmshCEEAIQMgAiELIAUhBgwFCyAFIAMgBUEDdiIGIAIgA2ogBmsgAkkiCBsiB0EDdGsLIQYgAiADIAdrIgNqIgsoAAAhByAAIAxPDQIgCA0CIAAgCSAHIAZ0IAR2QQJ0aiIFLwEAOwAAIAAgBS0AA2oiACAJIAcgBiAFLQACaiIGdCAEdkECdGoiBS8BADsAACAAIAUtAANqIQAgBiAFLQACaiIFQSFJDQALCyACIANqIQsgCkECayEIDAILIApBAmshCCAGQSBNDQAgBiEFDAELA0ACQCADQQROBEAgBkEHcSEFIAZBA3YhB0EAIQYMAQsgA0UEQCAGIQUMAwsgBiADIAZBA3YiBiALIAZrIAJJIgYbIgdBA3RrIQULIAIgAyAHayIDaiILKAAAIQcgACAISw0BIAYNASAAIAkgByAFdCAEdkECdGoiBi8BADsAACAAIAYtAANqIQAgBSAGLQACaiIGQSBNDQALIAYhBQsgACAITQRAA0AgACAJIAcgBXQgBHZBAnRqIgMvAQA7AAAgBSADLQACaiEFIAAgAy0AA2oiACAITQ0ACwsCQCAAIApPDQAgACAJIAcgBXQgBHYiAEECdGoiAy0AADoAACADLQADQQFGBEAgBSADLQACaiEFDAELIAVBH0sNACAFIAkgAEECdGotAAJqIgBBICAAQSBJGyEFC0FsQWwgASAFQSBHGyACIAtHGwsLjR4BIn8CQCADQQpJDQAgAi8ABCILIAIvAAAiCUEGaiIKIAIvAAIiBmpqIg0gA0sNACAJRQRAQbh/DwsgAkEGaiEHIAQvAQIhGgJ/An8gCUEETwRAQX8gByAJakEBay0AACIHRQ0CGiACIAlBAmoiD2ooAAAhCCAHZ0EXawwBCyAHLQAAIQgCQAJAAkAgCUECaw4CAQACCyACLQAIQRB0IAhyIQgLIAItAAdBCHQgCGohCAsgByAJakEBay0AACIFRQ0CQQYhDyAFZyAJQQN0a0EJagshByAGRQRAQbh/DwsgAiAKaiEUAn8gBkEETwRAQX8gBiAUakEBay0AACIJRQ0CGiAUIAZBBGsiEWooAAAhDiAJZ0EXawwBCyAULQAAIQ4CQAJAAkAgBkECaw4CAQACCyAULQACQRB0IA5yIQ4LIBQtAAFBCHQgDmohDgsgBiAUakEBay0AACIFRQ0CIAVnIAZBA3RrQQlqCyEJIAtFBEBBuH8PCyAGIBRqIRUCfyALQQRPBEBBfyALIBVqQQFrLQAAIgZFDQIaIBUgC0EEayISaigAACEWIAZnQRdrDAELIBUtAAAhFgJAAkACQCALQQJrDgIBAAILIBUtAAJBEHQgFnIhFgsgFS0AAUEIdCAWaiEWCyALIBVqQQFrLQAAIgVFDQIgBWcgC0EDdGtBCWoLIQZBuH8gAyANayIKRQ0AGiALIBVqIRcCfwJAIApBBE8EQEF/IAogF2pBAWstAAAiA0UNAxogCkGIf00NASAKDwsgFy0AACEYAkACQAJAIApBAmsOAgEAAgsgFy0AAkEQdCAYciEYCyAXLQABQQh0IBhqIRgLIAogF2pBAWstAAAiA0UNAyADZyAKQQN0a0EJagwBCyAXIApBBGsiE2ooAAAhGCADZ0EXawshAyAEQQRqIQwCQCAAIAFBA2pBAnYiBGoiGSAEaiIbIARqIhwgACABaiIfQQNrIiRPBEAgHCENIBshCiAZIQsMAQtBACAaa0EfcSEEIBkhCyAbIQogHCENA0AgACAMIAggB3QgBHZBAnRqIgUvAQA7AAAgBS0AAiEQIAUtAAMhHSALIAwgDiAJdCAEdkECdGoiBS8BADsAACAFLQACIR4gBS0AAyEgIAogDCAWIAZ0IAR2QQJ0aiIFLwEAOwAAIAUtAAIhISAFLQADISIgDSAMIBggA3QgBHZBAnRqIgUvAQA7AAAgBS0AAiEjIAUtAAMhBSAAIB1qIiUgDCAIIAcgEGoiB3QgBHZBAnRqIgAvAQA7AAAgAC0AAiEQIAAtAAMhJiALICBqIgsgDCAOIAkgHmoiCXQgBHZBAnRqIgAvAQA7AAAgAC0AAiEeIAAtAAMhICAKICJqIgogDCAWIAYgIWoiBnQgBHZBAnRqIgAvAQA7AAAgAC0AAiEhIAAtAAMhIiAFIA1qIg0gDCAYIAMgI2oiI3QgBHZBAnRqIgMvAQA7AAAgByAQaiEAAn8gD0EKSARAQQMhHSAADAELIAIgDyAAQQN2ayIPaigAACEIQQAhHSAAQQdxCyEHIAMtAAMhECADLQACIQMgCSAeaiEAQQMhBQJ/IBFBBEgEQEEDIR4gAAwBCyAUIBEgAEEDdmsiEWooAAAhDkEAIR4gAEEHcQshCSAGICFqIQAgEkEESAR/IAAFIBUgEiAAQQN2ayISaigAACEWQQAhBSAAQQdxCyEGIA0gEGohDSADICNqIQMgE0EESAR/QQMFIBcgEyADQQN2ayITaigAACEYIANBB3EhA0EACyEQICUgJmohACALICBqIQsgCiAiaiEKIA0gJE8NASAdIB5yIAVyIBByRQ0ACwsgCiAcSw0BIAsgG0sNAUFsIAAgGUsNABoCQAJAAkACQCAHQSFPBEBBACAaa0EfcSEEDAELIBlBA2shHUEAIBprQR9xIQQDQAJ/IA9BCk4EQCAHQQN2IQhBACEQIAdBB3EMAQsgD0EGRgRAIBlBAmshEEEGIQ8gByEFDAULIAcgD0EGayAHQQN2IgUgDyAFa0EGSCIQGyIIQQN0awshBSACIA8gCGsiD2ooAAAhCCAAIB1PDQIgEA0CIAAgDCAIIAV0IAR2QQJ0aiIHLwEAOwAAIAAgBy0AA2oiACAMIAggBSAHLQACaiIHdCAEdkECdGoiBS8BADsAACAAIAUtAANqIQAgByAFLQACaiIHQSFJDQALCyAZQQJrIRAMAgsgGUECayEQIAVBIE0NACAFIQcMAQsDQAJAIA9BCk4EQCAFQQdxIQcgBUEDdiEIQQAhBQwBCyAPQQZGBEBBBiEPIAUhBwwDCyAFIA9BBmsgBUEDdiIFIA8gBWtBBkgiBRsiCEEDdGshBwsgAiAPIAhrIg9qKAAAIQggACAQSw0BIAUNASAAIAwgCCAHdCAEdkECdGoiBS8BADsAACAAIAUtAANqIQAgByAFLQACaiIFQSBNDQALIAUhBwsgACAQTQRAA0AgACAMIAggB3QgBHZBAnRqIgIvAQA7AAAgByACLQACaiEHIAAgAi0AA2oiACAQTQ0ACwsCQCAAIBlPDQAgACAMIAggB3QgBHYiAkECdGoiAC0AADoAACAALQADQQFGBEAgByAALQACaiEHDAELIAdBH0sNACAHIAwgAkECdGotAAJqIgBBICAAQSBJGyEHCwJAAkACQAJAIAlBIU8EQEEAIBprQR9xIQAMAQsgG0EDayEZQQAgGmtBH3EhAANAAn8gEUEETgRAIAlBA3YhBEEAIQggCUEHcQwBCyARRQRAIBtBAmshBEEAIREgFCEFIAkhAgwFCyAJIBEgCUEDdiICIBEgFGogAmsgFEkiCBsiBEEDdGsLIQIgFCARIARrIhFqIgUoAAAhDiALIBlPDQIgCA0CIAsgDCAOIAJ0IAB2QQJ0aiIELwEAOwAAIAsgBC0AA2oiBSAMIA4gAiAELQACaiIEdCAAdkECdGoiAi8BADsAACAFIAItAANqIQsgBCACLQACaiIJQSFJDQALCyARIBRqIQUgG0ECayEEDAILIBtBAmshBCACQSBNDQAgAiEJDAELA0ACfyARQQROBEAgAkEDdiEIQQAhECACQQdxDAELIBFFBEAgAiEJDAMLIAIgESACQQN2IgIgBSACayAUSSIQGyIIQQN0awshCSAUIBEgCGsiEWoiBSgAACEOIAQgC0kNASAQDQEgCyAMIA4gCXQgAHZBAnRqIgIvAQA7AAAgCyACLQADaiELIAkgAi0AAmoiAkEgTQ0ACyACIQkLIAQgC08EQANAIAsgDCAOIAl0IAB2QQJ0aiICLwEAOwAAIAkgAi0AAmohCSALIAItAANqIgsgBE0NAAsLAkAgCyAbTw0AIAsgDCAOIAl0IAB2IgJBAnRqIgAtAAA6AAAgAC0AA0EBRgRAIAkgAC0AAmohCQwBCyAJQR9LDQAgCSAMIAJBAnRqLQACaiIAQSAgAEEgSRshCQsCQAJAAkACQCAGQSFPBEBBACAaa0EfcSEADAELIBxBA2shGUEAIBprQR9xIQADQAJ/IBJBBE4EQCAGQQN2IQRBACEIIAZBB3EMAQsgEkUEQCAcQQJrIQRBACESIBUhCyAGIQIMBQsgBiASIAZBA3YiAiASIBVqIAJrIBVJIggbIgRBA3RrCyECIBUgEiAEayISaiILKAAAIRYgCiAZTw0CIAgNAiAKIAwgFiACdCAAdkECdGoiBC8BADsAACAKIAQtAANqIgYgDCAWIAIgBC0AAmoiBHQgAHZBAnRqIgIvAQA7AAAgBiACLQADaiEKIAQgAi0AAmoiBkEhSQ0ACwsgEiAVaiELIBxBAmshBAwCCyAcQQJrIQQgAkEgTQ0AIAIhBgwBCwNAAn8gEkEETgRAIAJBA3YhCEEAIQ4gAkEHcQwBCyASRQRAIAIhBgwDCyACIBIgAkEDdiICIAsgAmsgFUkiDhsiCEEDdGsLIQYgFSASIAhrIhJqIgsoAAAhFiAEIApJDQEgDg0BIAogDCAWIAZ0IAB2QQJ0aiICLwEAOwAAIAogAi0AA2ohCiAGIAItAAJqIgJBIE0NAAsgAiEGCyAEIApPBEADQCAKIAwgFiAGdCAAdkECdGoiAi8BADsAACAGIAItAAJqIQYgCiACLQADaiIKIARNDQALCwJAIAogHE8NACAKIAwgFiAGdCAAdiICQQJ0aiIALQAAOgAAIAAtAANBAUYEQCAGIAAtAAJqIQYMAQsgBkEfSw0AIAYgDCACQQJ0ai0AAmoiAEEgIABBIEkbIQYLQQAgGmtBH3EhAAJAAkACQCADQSBNBEADQAJ/IBNBBE4EQCADQQN2IQRBACEKIANBB3EMAQsgE0UEQCAfQQJrIQRBACETIBchCCADIQIMBQsgAyATIANBA3YiAiATIBdqIAJrIBdJIgobIgRBA3RrCyECIBcgEyAEayITaiIIKAAAIRggDSAkTw0CIAoNAiANIAwgGCACdCAAdkECdGoiAy8BADsAACANIAMtAANqIgQgDCAYIAIgAy0AAmoiA3QgAHZBAnRqIgIvAQA7AAAgBCACLQADaiENIAMgAi0AAmoiA0EhSQ0ACwsgEyAXaiEIIB9BAmshBAwCCyAfQQJrIQQgAkEgTQ0AIAIhAwwBCwNAAn8gE0EETgRAIAJBA3YhCkEAIQ4gAkEHcQwBCyATRQRAIAIhAwwDCyACIBMgAkEDdiICIAggAmsgF0kiDhsiCkEDdGsLIQMgFyATIAprIhNqIggoAAAhGCAEIA1JDQEgDg0BIA0gDCAYIAN0IAB2QQJ0aiICLwEAOwAAIA0gAi0AA2ohDSADIAItAAJqIgJBIE0NAAsgAiEDCyAEIA1PBEADQCANIAwgGCADdCAAdkECdGoiAi8BADsAACADIAItAAJqIQMgDSACLQADaiINIARNDQALCwJAIA0gH08NACANIAwgGCADdCAAdiICQQJ0aiIALQAAOgAAIAAtAANBAUYEQCADIAAtAAJqIQMMAQsgA0EfSw0AIAMgDCACQQJ0ai0AAmoiAEEgIABBIEkbIQMLIAFBbCADQSBGG0FsIAggF0YbQWwgBkEgRhtBbCALIBVGG0FsIAlBIEYbQWwgBSAURhtBbCAHQSBGG0FsIA9BBkYbCw8LQWwL1wEBAn8gAkUEQEG6fw8LIARFBEBBbA8LAn8gAkEIdiIHIAIgBEsEfyAEQQR0IAJuBUEPC0EYbCIGQcwYaigCAGwgBkHIGGooAgBqIghBA3YgCGogBkHAGGooAgAgBkHEGGooAgAgB2xqSQRAIAAgAyAEIAVBgBAQbiIFQYh/SwRAIAUPC0G4fyAEIAVNDQEaIAEgAiADIAVqIAQgBWsgABBwDwsgACADIAQgBRBrIgVBiH9LBEAgBQ8LQbh/IAQgBU0NABogASACIAMgBWogBCAFayAAEG0LC90DAQh/IwBBgAFrIgMkAEFiIQkCQCACQQlJDQAgAEGY0ABqIAFBCGoiBSACQQhrIABBmNAAEG4iBEGIf0sNACADQR82AnwgAyADQfwAaiADQfgAaiAEIAVqIAUgBEGJf0kbIgQgASACaiIFIARrEAUiAkGIf0sNACADKAJ8IgdBH0sNACADKAJ4IgZBCU8NACAAQYggaiADIAdBwBtBwBwgBiAAQajQAWoiBxCAASADQTQ2AnwgAyADQfwAaiADQfgAaiACIARqIgIgBSACaxAFIgRBiH9LDQAgAygCfCIGQTRLDQAgAygCeCIIQQpPDQAgAEGQMGogAyAGQcAdQaAfIAggBxCAASADQSM2AnwgAyADQfwAaiADQfgAaiACIARqIgIgBSACaxAFIgRBiH9LIAMoAnwiBkEjS3IgAygCeCIIQQlLciIKRQRAIAAgAyAGQYAhQZAiIAggBxCAASACIARqIQILIAogAkEMaiIEIAVLcg0AIAUgBGsiBSACKAAAIgRBAWtNDQAgACAENgKc0AEgAigABCIEQQFrIAVPDQAgAEGg0AFqIAQ2AgAgBSACKAAIIgVBAWtNDQAgAEGk0AFqIAU2AgAgAiABa0EMaiEJCyADQYABaiQAIAkLkQIBBn8CfwJAIABFDQBBQCAAKAKA5wENARogAEH05gFqKAIAIQQgAEHw5gFqKAIAIQICQCAAKAKI5wEiAUUNACABQbjVAWooAgAhBSABQbTVAWooAgAhAwJAAkAgASgCACIGBEAgA0UNASAFIAYgAxEAACAFIAEgAxEAAAwDCyADRQ0BIAUgASADEQAADAILIAYQoQELIAEQoQELIABBADYCmOcBIABCADcDiOcBAkACQCAAKAKg5wEiAQRAIAJFDQEgBCABIAIRAAAgAEEANgKg5wEgBCAAIAIRAAAMAwsgAEEANgKg5wEgAkUNASAEIAAgAhEAAAwCCyABEKEBIABBADYCoOcBCyAAEKEBC0EACwv8BAIEfwJ+IABCADcDACAAQgA3AyAgAEIANwMYIABCADcDECAAQgA3AwggAkEBQQUgAxsiBEkEQCAEDwsgAUUEQEF/DwtBASEFAkACQAJAAkACQAJAAn8CfyADQQFGBEAgASACDQEaQbh/DAILIAEoAAAiBUGo6r5pRw0CIAQhBSABIARqQQFrCyEDIAMtAAAiA0EDcUECdEHQxgBqKAIAIAVqIANBBnYiBUECdEHgxgBqKAIAaiADQSBxIgNFaiAFRSADQQV2cWoLIgMgAksNBSAAIAM2AhhBciEDIAEgBGoiAkEBay0AACIGQQhxDQUgBkEgcSIHRQRAQXAhAyACLQAAIgJBpwFLDQYgAkEHca1CASACQQN2QQpqrYYiCEIDiH4gCHwhCCAEQQFqIQQLIAZBBnYhBSAGQQJ2IQJBACEDIAZBA3FBAWsOAwECAwQLQXYhAyAFQXBxQdDUtMIBRw0EQQghAyACQQhJDQQgAEIANwMAIABCADcDICAAQgA3AxggAEIANwMQIABCADcDCCABNQAEIQggAEEBNgIUIAAgCDcDAEEADwsgASAEai0AACEDIARBAWohBAwCCyABIARqLwAAIQMgBEECaiEEDAELIAEgBGooAAAhAyAEQQRqIQQLIAJBAXEhAgJ+AkACQAJAAkAgBUEBaw4DAQIDAAtCfyAHRQ0DGiABIARqMQAADAMLIAEgBGozAABCgAJ8DAILIAEgBGo1AAAMAQsgASAEaikAAAshCSAAIAI2AiAgACADNgIcIAAgCTcDAEEAIQMgAEEANgIUIAAgCSAIIAcbIgg3AwggACAIQoCACCAIQoCACFQbPgIQCyADC0ECAX8BfiMAQTBrIgIkAAJ+Qn4gAkEIaiAAIAFBABB0DQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40DAgZ/AX4jAEEwayIEJAACQAJAIAJBCEkNACABKAAAQXBxQdDUtMIBRw0AIAEoAAQhASAAQgA3AwggAEEANgIEIABBckG4fyABQQhqIgAgACACSxsgAUF3Sxs2AgAMAQsgAAJ+IARBCGogASACQQAQdCIDQYl/TwRAIAAgAzYCAEJ+DAELIAMEQCAAQbh/NgIAQn4MAQsgAiAEKAIgIgNrIQIgASADaiEDAkADQCACQQNJBEBBuH8hBQwCC0FsIQUCQAJAIAMvAAAiB0EBdkEDcSIIQQFrDgMBAAMACyADLQACQRB0IAdyQQN2IQgLIAhBA2oiBSACSwRAIABBuH82AgBCfgwDCyAGQQFqIQYgAiAFayECIAMgBWohAyAHQQFxRQ0ACyAEKAIoBEAgAkEDTQRAIABBuH82AgBCfgwDCyADQQRqIQMLIAQoAhghAiAEKQMIIQkgAEEANgIEIAAgAyABazYCACACIAZsrSAJIAlCf1EbDAELIAAgBTYCAEJ+CzcDCAsgBEEwaiQAC6MMAhl/AX4gBQRAIAUoAgghDyAFKAIEIQwLAkACQAJAIARBAUEFIAAoAtzmASIGGyIISQRAIAEhCgwBCyAAQYDmAWohECAAQcDlAWohFCAFQaTQAGohFSAFQZQgaiEWIAVBnDBqIRcgBUEMaiEYIABBmCBqIRkgAEGgMGohGiAAQRBqIRsgAEGs0AFqIREgAEGo0ABqIRwgAEGs5QFqIQ0gAEGo5gFqIgshHSABIQoDQCADKAAAQXBxQdDUtMIBRgRAQQFBBSAGGyEIA0AgBEEISQRAQbh/DwsgAygABCIGQXdLBEBBcg8LQbh/IAZBCGoiBiAEIAZJGyIGQYh/Sw0EIAQgBmsiBCAISQ0DIAMgBmoiAygAAEFwcUHQ1LTCAUYNAAsLAkAgBQRAIAUoAgghByAFKAIEIQYgAEEANgL05QEgACAINgK85QEgAEIANwPo5QEgACAAKAK45QEgBiAHakc2ApTnASANQgA3AgggDUIANwIAIABBjICA4AA2AqhQIABCADcD+OUBIABBAzYC8OUBIBFBmBcoAgA2AgggEUGQFykCADcCACAAIBw2AgwgACAZNgIIIAAgGjYCBCAAIBs2AgAgACAFKAKo1QE2ApDnASAAIAUoAgQiBjYCtOUBIAAgBjYCsOUBIAAgBiAFKAIIaiIGNgKs5QEgACAGNgK45QEgBSgCrNUBBEAgAEKBgICAEDcD+OUBIAAgFTYCDCAAIBY2AgggACAXNgIEIAAgGDYCACAAIAUoAqjQATYCrNABIAAgBSgCrNABNgKw0AEgACAFKAKw0AE2ArTQAQwCCyAAQgA3A/jlAQwBCyAAIAwgDxB4IgZBiH9LDQMgDSgCACEGCyAGIApHBEAgACAGNgK45QEgACAKNgKs5QEgACgCsOUBIQcgACAKNgKw5QEgACAKIAcgBmtqNgK05QELQQVBCSAAKALc5gEiCRsgBEsEQEG4fyEGDAQLQQFBBSAJGyIGIANqQQFrLQAAIghBA3FBAnRB0MYAaigCACAGaiAIQQZ2IgdBAnRB4MYAaigCAGogCEEgcSIGRWogB0UgBkEFdnFqIgZBiH9LDQMgBkEDaiAESwRAQbh/IQYMBAsgFCADIAYgCRB0IgdBiH9LBEAgByEGDAQLIAcEQEG4fyEGDAQLAkAgACgC3OUBIgdFDQAgACgCkOcBIAdGDQBBYCEGDAQLAkAgACgC4OUBRQRAIABBADYC5OYBDAELIAAgACgC4OYBIgdFNgLk5gEgBw0AIABC+erQ0OfJoeThADcDoOYBIABCADcDmOYBIABCz9bTvtLHq9lCNwOQ5gEgAELW64Lu6v2J9eAANwOI5gEgAEIANwOA5gEgC0IANwMgIB1CADcDGCALQgA3AxAgC0IANwMIIAtCADcDAAsgAiAKaiEOIAQgBmshBCADIAZqIQMgCiEJA0AgBEEDSQRAQbh/IQYMBQsgAy8AACISIAMtAAJBEHRyQQN2IQcgEkEBdkEDcSITIQhBbCEGAkACQCATQQFrDgMBAAYACyAHIQgLIAggBEEDayIESwRAQbh/IQYMBQsgA0EDaiEDAkACQAJAAkAgEw4DAAECCAsgDiAJayAISQRAQbp/IQYMCAsgCUUEQEEAIQYgCEUNA0G2fyEGDAgLIAkgAyAIEKYBGiAIIQYMAgsgDiAJayAHSQRAQbp/IQYMBwsgCUUEQEEAIQYgB0UNAkG2fyEGDAcLIAkgAy0AACAHEKcBGiAHIQYMAQsgACAJIA4gCWsgAyAIEHkiBkGIf0sNBQsgACgC5OYBBEAgECAJIAYQSwsgBCAIayEEIAMgCGohAyAGIAlqIQkgEkEBcUUNAAsgACkDwOUBIh9Cf1IEQEFsIQYgHyAJIAprrFINBAsgACgC4OUBBEBBaiEGIARBBEkNBCAAKALg5gFFBEAgAygAACAQEFOnRw0FCyAEQQRrIQQgA0EEaiEDCyAJIAprIgZBiX9PDQMgCSAKIAYbIQpBASEeIAIgBmshAiAEQQFBBSAAKALc5gEiBhsiCE8NAAsLQbh/IQYgBA0AIAogAWshBgsgBg8LQbh/IAYgBkF2RhsgBiAeGwuCAwEDfyAAQgA3A+jlASAAQgA3AqzlASAAQQA2ApDnASAAQgA3A/jlASAAQgM3A/DlASAAQbTlAWpCADcCACAAQajQAGoiBEGMgIDgADYCACAAQQFBBSAAKALc5gEbNgK85QEgACAENgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgAgAEGs0AFqQZAXKQIANwIAIABBtNABakGYFygCADYCAAJAAkAgAUUNACACRQ0AIAJBB00EQAwCCyABKAAAQbfIwuF+RwRADAILIAAgASgABDYCkOcBQWIhAyAAQRBqIAEgAhByIgRBiH9LDQAgAEKBgICAEDcD+OUBIAAgACgCrOUBIgM2ArjlASAAKAKw5QEhBSAAIAEgBGogASAEQYl/SRsiATYCsOUBIAAgASACIARrajYCrOUBIAAgASAFIANrajYCtOUBQQAhAwsgAw8LIAAgATYCtOUBIABBADYCuOUBIAAgATYCsOUBIAAgASACajYCrOUBQQAL5U0CH38FfiMAQeABayIFJAAgAEHI5QFqKQMAQoCAgBBWIR1BuH8hCwJAIARB//8HSw0AIAAgAyAEEH0iC0GIf0sNACAAKAKU5wEhBiAAIAVBNGogAyALaiADIAtBiX9JIgMbIgggBCALQQAgAxtrIgQQfiIDQYh/SwRAIAMhCwwBCyAFKAI0IRMgAUUEQEG6fyELIBNBAEoNAQsgBCADayEHIAMgCGohCgJAAkACQCAGBEAgAEEANgKU5wEMAQsgE0EFSA0BIABByOUBaikDAEKAgIAIWARADAILIAAoAggiA0EIaiEGIAMoAgQhA0EAIQtBACEEA0AgCyAGIARBA3RqLQACQRZLaiELIARBAWoiBCADdkUNAAsgAEEANgKU5wEgC0EIIANrdEEUSQ0CCyAFIAAoAujmASIENgLMASABIAJqIRcgBCAAKAL45gFqIRggASEDIBMEQCAAKAK45QEhFSAAKAK05QEhGyAAKAKw5QEhEiAAQQE2AvzlASAFIABBtNABaigCADYCbCAFIABBrNABaiIgKQIANwJkIAUgFTYCdCAFIBI2AnAgBSABIBJrIho2AnhBbCELIAdFDQMgBSAKNgJEIAUgCkEEajYCSAJ/IAdBBE8EQCAFIAogB0EEayIDaiICNgJAIAUgAigAACIENgI4IAcgCmpBAWstAAAiAkUNBSAHQYh/Sw0FIAJnQRdrDAELIAUgCjYCQCAFIAotAAAiBDYCOAJAAkACQCAHQQJrDgIBAAILIAotAAJBEHQgBHIhBAsgBSAKLQABQQh0IARqIgQ2AjgLIAcgCmpBAWstAAAiAkUNBEEAIQMgAmcgB0EDdGtBCWoLIQIgBSAEQQAgAiAAKAIAIgYoAgQiCGoiAmt2IAhBAnRB0C1qKAIAcSIWNgJMAkAgAkEgSwRAIAIhCAwBCyADQQROBEAgBSACQQdxIgg2AjwgBSAKIAMgAkEDdmsiA2oiAjYCQCAFIAIoAAAiBDYCOAwBCyADRQRAQQAhAyACIQgMAQsgBSAKIAMgAyACQQN2IgQgAyAKaiAEayAKSRsiCGsiA2oiBDYCQCAFIAQoAAAiBDYCOCACIAhBA3RrIQgLIBNBBEghAiAFIAZBCGoiITYCUCAFIARBACAIIAAoAggiCCgCBCIHaiIGa3YgB0ECdEHQLWooAgBxIgw2AlQCQCAGQSBLDQAgA0EETgRAIAUgCiADIAZBA3ZrIgNqIgQ2AkAgBSAEKAAAIgQ2AjggBkEHcSEGDAELIANFBEBBACEDDAELIAUgCiADIAMgBkEDdiIEIAMgCmogBGsgCkkbIgdrIgNqIgQ2AkAgBSAEKAAAIgQ2AjggBiAHQQN0ayEGCyATQQQgAhshHCAFIAhBCGoiIjYCWCAFIAAoAgQiCCgCBCIAIAZqIgY2AjxBACECIAUgAEECdEHQLWooAgAgBEEAIAZrdnEiFDYCXAJAAkAgBkEhTwRAIAUgCEEIajYCYAwBCwJAAkACQCADQQROBEAgBSAGQQdxIgI2AjwgBSAKIAMgBkEDdmsiAGoiAzYCQCAFIAMoAAAiBDYCOCACIQYMAQsgAw0BQQAhAAsgBSAIQQhqNgJgDAELIAUgBiADIAZBA3YiACADIApqIABrIApJGyIAQQN0ayIGNgI8IAUgCiADIABrIgBqIgI2AkAgAigAACEEIAUgCEEIajYCYCAFIAQ2AjhBACECIAZBIEsNAQsgHEEAIBxBAEobIREgCEEIaiEjIAAiByIJIg0iECEDQQAhAgNAAn8gBQJ/IANBBE4EQCAFIAZBB3EiCDYCPCAFIAogAyAGQQN2ayIAaiIDNgJAIAMoAAAMAQsgA0UEQCAGIQhBAAwCCyAFIAYgAyAGQQN2IgAgAyAKaiAAayAKSRsiAEEDdGsiCDYCPCAFIAogAyAAayIAaiIDNgJAIAMoAAALIgQ2AjggACIHIgkiDSIQCyEDIAIgEUYEQCAIIQYgESECDAMLICEgFkEDdGopAgAiJEIQiKciHkH/AXEhDyAjIBRBA3RqKQIAIiVCEIinIh9B/wFxIRYgIiAMQQN0aikCACImQiCIpyEMICVCIIghJyAkQiCIpyEOAkAgJkIQiKciFEH/AXEiBkECTwRAAkACQCAdRQ0AIAZBGUkNACAEIAh0QQAgBkEgIAhrIhQgBiAUSRsiGWt2IAYgGWsiFHQhBgJAIAggGWoiCEEgSw0AAn8gDUEETgRAIAUgCiANIAhBA3ZrIgBqIgM2AkAgBSADKAAAIgQ2AjggCEEHcQwBCyANRQRAQQAhDUEAIRBBACEDDAILIAUgCiANIA0gCEEDdiIAIAogDWogAGsgCkkbIgNrIgBqIgQ2AkAgBSAEKAAAIgQ2AjggCCADQQN0awshCCAAIgciCSINIhAhAwsgBiAMaiEMIBRFBEAgCCEGDAILIAUgCCAUaiIGNgI8IAQgCHRBACAUa3YgDGohDAwBCyAEIAh0QQAgFGt2IAxqIQwgBiAIaiIIQSBLBEAgCCEGDAELIAUCfyAQQQROBEAgBSAIQQdxIgY2AjwgBSAKIBAgCEEDdmsiAGoiAzYCQCADKAAADAELIBBFBEBBACEQIAghBkEAIQMMAgsgBSAIIBAgCEEDdiIAIAogEGogAGsgCkkbIgBBA3RrIgY2AjwgBSAKIBAgAGsiAGoiAzYCQCADKAAACyIENgI4IAAiByIJIg0iECEDCyAFKQJkISggBSAMNgJkIAUgKDcDaAwBCyAGRQRAIA4EQCAFKAJkIQwgCCEGDAILIAUoAmghDCAFIAUoAmQ2AmggBSAMNgJkIAghBgwBCyAFIAhBAWoiBjYCPAJAAkAgDkUgBCAIdEEfdmogDGoiCEEDRgRAIAUoAmRBAWsiCCAIRWohDAwBCyAIQQJ0IAVqKAJkIgwgDEVqIQwgCEEBRg0BCyAFIAUoAmg2AmwLIAUgBSgCZDYCaCAFIAw2AmQLICenIQggFgRAIAQgBnRBACAfa3YgCGohCCAGIBZqIQYLAkAgDyAWakEUSQ0AIAZBIEsNAAJ/IAlBBE4EQCAFIAogCSAGQQN2ayIAaiIDNgJAIAUgAygAACIENgI4IAZBB3EMAQsgCUUEQEEAIQlBACENQQAhEEEAIQMMAgsgBSAKIAkgCSAGQQN2IgAgCSAKaiAAayAKSRsiA2siAGoiBDYCQCAFIAQoAAAiBDYCOCAGIANBA3RrCyEGIAAiByIJIg0iECEDCyAPBEAgBCAGdEEAIB5rdiAOaiEOIAYgD2ohBgsgJachFCAkpyEWICVCGIinIR4gJEIYiKchHwJAIAZBIEsEQCAGIQ8MAQsgBQJ/IAdBBE4EQCAFIAZBB3EiDzYCPCAFIAogByAGQQN2ayIAaiIDNgJAIAMoAAAMAQsgB0UEQEEAIQdBACEJQQAhDUEAIRBBACEDIAYhDwwCCyAFIAYgByAGQQN2IgAgByAKaiAAayAKSRsiAEEDdGsiDzYCPCAFIAogByAAayIAaiIDNgJAIAMoAAALIgQ2AjggACIHIgkiDSIQIQMLIAUgDiAaaiIZIAhqIho2AnggBSAEQQAgDyAfQf8BcSIGaiIPa3YgBkECdEHQLWooAgBxIBZB//8DcWoiFjYCTCAFIB5B/wFxIgZBAnRB0C1qKAIAIARBACAGIA9qIgZrdnEgFEH//wNxaiIUNgJcIBkgFSASIAwgGUsbaiAMayEZAkAgBkEgSw0AAn8gAEEETgRAIAUgCiAAIAZBA3ZrIgBqIgM2AkAgBSADKAAAIgQ2AjggBkEHcQwBCyAARQRAQQAhAEEAIQdBACEJQQAhDUEAIRBBACEDDAILIAUgCiAAIAAgBkEDdiIDIAAgCmogA2sgCkkbIgNrIgBqIgQ2AkAgBSAEKAAAIgQ2AjggBiADQQN0awshBiAAIgciCSINIhAhAwsgBUGAAWogAkEEdGoiDyAZNgIMIA8gDDYCCCAPIAg2AgQgDyAONgIAIAUgBiAmpyIIQRh2Ig5qIgY2AjwgBSAOQQJ0QdAtaigCACAEQQAgBmt2cSAIQf//A3FqIgw2AlQgAkEBaiECIAZBIE0NAAsLIAIgHEgNBAsgF0EgayEQIAVB8ABqIRYgBUH0AGohFCABIQMCQANAIAZBIU8EQCACIBNIDQYMAgsCQCAFKAJAIgAgBSgCSCIHTwRAIAUgBkEHcSIINgI8IAUgACAGQQN2ayIANgJAIAUgACgAADYCOAwBCyAFKAJEIgQgAEYEQCAGIQgMAQsgBSAAIAAgBGsgBkEDdiIIIAAgCGsgBEkbIgRrIgA2AkAgBSAGIARBA3RrIgg2AjwgBSAAKAAANgI4CyACIBNODQEgBSgCUCAFKAJMQQN0aikCACIkQhCIpyIaQf8BcSEJIAUoAmAgBSgCXEEDdGopAgAiJUIQiKciGUH/AXEhDyAFKAJYIAUoAlRBA3RqKQIAIiZCIIinIQYgJUIgiCEnICRCIIinIQ4CQCAmQhCIpyINQf8BcSIEQQJPBEACQAJAIB1FDQAgBEEZSQ0AIAUoAjgiDSAIdEEAIARBICAIayIRIAQgEUkbIgprdiAEIAprIhF0IQwCQCAIIApqIghBIEsNACAAIAdPBEAgBSAAIAhBA3ZrIgA2AkAgBSAAKAAAIg02AjggCEEHcSEIDAELIAAgBSgCRCIERg0AIAUgACAAIARrIAhBA3YiDSAAIA1rIARJGyIEayIANgJAIAUgACgAACINNgI4IAggBEEDdGshCAsgBiAMaiEMIBFFBEAgCCEEDAILIAUgCCARaiIENgI8IA0gCHRBACARa3YgDGohDAwBCyAFKAI4IAh0QQAgDWt2IAZqIQwgBCAIaiIGQSBLBEAgBiEEDAELIAAgB08EQCAFIAZBB3EiBDYCPCAFIAAgBkEDdmsiADYCQCAFIAAoAAA2AjgMAQsgBSgCRCIEIABGBEAgBiEEDAELIAUgACAAIARrIAZBA3YiCCAAIAhrIARJGyIEayIANgJAIAUgBiAEQQN0ayIENgI8IAUgACgAADYCOAsgBSkCZCEoIAUgDDYCZCAFICg3A2gMAQsgBEUEQCAOBEAgBSgCZCEMIAghBAwCCyAFKAJoIQwgBSAFKAJkNgJoIAUgDDYCZCAIIQQMAQsgBSAIQQFqIgQ2AjwCQAJAIAYgDkVqIAUoAjggCHRBH3ZqIgZBA0YEQCAFKAJkQQFrIgYgBkVqIQwMAQsgBkECdCAFaigCZCIIIAhFaiEMIAZBAUYNAQsgBSAFKAJoNgJsCyAFIAUoAmQ2AmggBSAMNgJkCyAnpyEIIA8EQCAFKAI4IAR0QQAgGWt2IAhqIQggBCAPaiEECwJAIAkgD2pBFEkNACAEQSBLDQAgACAHTwRAIAUgACAEQQN2ayIANgJAIAUgACgAADYCOCAEQQdxIQQMAQsgACAFKAJEIgZGDQAgBSAAIAAgBmsgBEEDdiINIAAgDWsgBkkbIgZrIgA2AkAgBSAAKAAANgI4IAQgBkEDdGshBAsgCQRAIAUoAjggBHRBACAaa3YgDmohDiAEIAlqIQQLICWnIQkgJKchDyAlQhiIpyEKICRCGIinIRoCQCAEQSBLBEAgBCENDAELIAAgB08EQCAFIARBB3EiDTYCPCAFIAAgBEEDdmsiADYCQCAFIAAoAAA2AjgMAQsgBSgCRCIGIABGBEAgBCENDAELIAUgACAAIAZrIARBA3YiDSAAIA1rIAZJGyIGayIANgJAIAUgBCAGQQN0ayINNgI8IAUgACgAADYCOAsgBSAFKAJ4IA5qIhEgCGo2AnggBSAFKAI4IgZBACANIBpB/wFxIgRqIg1rdiAEQQJ0QdAtaigCAHEgD0H//wNxajYCTCAFIApB/wFxIgRBAnRB0C1qKAIAIAZBACAEIA1qIgRrdnEgCUH//wNxajYCXCAUIBYgDCARSxsoAgAhCgJAIARBIEsNACAAIAdPBEAgBSAAIARBA3ZrIgA2AkAgBSAAKAAAIgY2AjggBEEHcSEEDAELIAAgBSgCRCIHRg0AIAUgACAAIAdrIARBA3YiBiAAIAZrIAdJGyIAayIGNgJAIAUgBigAACIGNgI4IAQgAEEDdGshBAsgBSAEICanIgBBGHYiB2oiBDYCPCAFIAdBAnRB0C1qKAIAIAZBACAEa3ZxIABB//8DcWo2AlQgBSAFQYABaiACQQNxQQR0aiIPKQMIIiQ3A9gBIAUgDykDACIlNwPQAQJAAkACQCAFKALMASIAICWnIgdqIhogGEsNACADIAUoAtQBIg0gB2oiCWogEEsNACAJQSBqIBcgA2tNDQELIAUgBSkD2AE3AyggBSAFKQPQATcDICADIBcgBUEgaiAFQcwBaiAYIBIgGyAVEH8hCQwBCyADIAdqIQQgJKchBiADIAApAAA3AAAgAyAAKQAINwAIAkAgB0ERSQ0AIAMgACkAEDcAECADIAApABg3ABggB0EQa0ERSA0AIABBEGohACADQSBqIQcDQCAHIAApABA3AAAgByAAKQAYNwAIIAcgACkAIDcAECAHIAApACg3ABggAEEgaiEAIAdBIGoiByAESQ0ACwsgBCAGayEAIAUgGjYCzAEgBCASayAGSQRAIAYgBCAba0sNByAVIBUgACASayIAaiIHIA1qTwRAIAQgByANEKgBGgwCCyAEIAdBACAAaxCoASEEIAUgACANaiINNgLUASAEIABrIQQgEiEACyAGQRBPBEAgBCAAKQAANwAAIAQgACkACDcACCANQRFIDQEgBCANaiEGIARBEGohBANAIAQgACkAEDcAACAEIAApABg3AAggBCAAKQAgNwAQIAQgACkAKDcAGCAAQSBqIQAgBEEgaiIEIAZJDQALDAELAkAgBkEHTQRAIAQgAC0AADoAACAEIAAtAAE6AAEgBCAALQACOgACIAQgAC0AAzoAAyAEIAAgBkECdCIGQfDGAGooAgBqIgAoAAA2AAQgACAGQZDHAGooAgBrIQAMAQsgBCAAKQAANwAACyANQQlJDQAgBCANaiEHIARBCGoiBiAAQQhqIgBrQQ9MBEADQCAGIAApAAA3AAAgAEEIaiEAIAZBCGoiBiAHSQ0ADAILAAsgBiAAKQAANwAAIAYgACkACDcACCANQRlIDQAgBEEYaiEEA0AgBCAAKQAQNwAAIAQgACkAGDcACCAEIAApACA3ABAgBCAAKQAoNwAYIABBIGohACAEQSBqIgQgB0kNAAsLIAlBiH9NBEAgDyAONgIAIA8gCiARaiAMazYCDCAPIAw2AgggDyAINgIEIAJBAWohAiADIAlqIQMgBSgCPCEGDAELCyAJIQsMBAsgEyACIBxrIgdKBEAgF0EgayENA0AgBSAFQYABaiAHQQNxQQR0aiIAKQMIIiQ3A9gBIAUgACkDACIlNwPQAQJAAkACQCAFKALMASIAICWnIglqIg4gGEsNACADIAUoAtQBIgIgCWoiCGogDUsNACAIQSBqIBcgA2tNDQELIAUgBSkD2AE3AxggBSAFKQPQATcDECADIBcgBUEQaiAFQcwBaiAYIBIgGyAVEH8hCAwBCyADIAlqIQQgJKchBiADIAApAAA3AAAgAyAAKQAINwAIAkAgCUERSQ0AIAMgACkAEDcAECADIAApABg3ABggCUEQa0ERSA0AIABBEGohACADQSBqIQwDQCAMIAApABA3AAAgDCAAKQAYNwAIIAwgACkAIDcAECAMIAApACg3ABggAEEgaiEAIAxBIGoiDCAESQ0ACwsgBCAGayEAIAUgDjYCzAEgBCASayAGSQRAIAYgBCAba0sNByAVIBUgACASayIAaiIJIAJqTwRAIAQgCSACEKgBGgwCCyAEIAlBACAAaxCoASEEIAUgACACaiICNgLUASAEIABrIQQgEiEACyAGQRBPBEAgBCAAKQAANwAAIAQgACkACDcACCACQRFIDQEgAiAEaiECIARBEGohBANAIAQgACkAEDcAACAEIAApABg3AAggBCAAKQAgNwAQIAQgACkAKDcAGCAAQSBqIQAgBEEgaiIEIAJJDQALDAELAkAgBkEHTQRAIAQgAC0AADoAACAEIAAtAAE6AAEgBCAALQACOgACIAQgAC0AAzoAAyAEIAAgBkECdCIGQfDGAGooAgBqIgAoAAA2AAQgACAGQZDHAGooAgBrIQAMAQsgBCAAKQAANwAACyACQQlJDQAgAiAEaiEJIARBCGoiBiAAQQhqIgBrQQ9MBEADQCAGIAApAAA3AAAgAEEIaiEAIAZBCGoiBiAJSQ0ADAILAAsgBiAAKQAANwAAIAYgACkACDcACCACQRlIDQAgBEEYaiEEA0AgBCAAKQAQNwAAIAQgACkAGDcACCAEIAApACA3ABAgBCAAKQAoNwAYIABBIGohACAEQSBqIgQgCUkNAAsLIAhBiH9LBEAgCCELDAYLIAMgCGohAyAHQQFqIgcgE0cNAAsLICAgBSkCZDcCACAgIAUoAmw2AgggBSgCzAEhBAtBun8hCyAYIARrIgAgFyADa0sNAiADRQRAQQAgAWshCwwDCyADIAQgABCmASAAaiABayELDAILIABBADYClOcBCyAFIAAoAujmASIENgLQASABIAJqIQ0gBCAAKAL45gFqIRICQCATRQRAIAEhAwwBCyAAKAK45QEhDyAAKAK05QEhECAAKAKw5QEhCCAAQQE2AvzlASAFIABBtNABaigCADYCbCAFIABBrNABaiIVKQIANwJkIAdFBEBBbCELDAILIAUgCjYCRCAFIApBBGo2AkgCfwJAIAdBBE8EQCAFIAogB0EEayIGaiICNgJAIAUgAigAACILNgI4IAcgCmpBAWstAAAiAg0BQWwhCwwECyAFIAo2AkAgBSAKLQAAIgs2AjgCQAJAAkAgB0ECaw4CAQACCyAKLQACQRB0IAtyIQsLIAUgCi0AAUEIdCALaiILNgI4CyAHIApqQQFrLQAAIgJFBEBBbCELDAQLQQAhBiACZyAHQQN0a0EJagwBCyAHQYh/SwRAQWwhCwwDCyACZ0EXawshAiAFIAtBACACIAAoAgAiAygCBCIEaiICa3YgBEECdEHQLWooAgBxIgQ2AkwCQCACQSBLBEAgAiEODAELIAZBBE4EQCAFIAJBB3EiDjYCPCAFIAogBiACQQN2ayIGaiICNgJAIAUgAigAACILNgI4DAELIAZFBEBBACEGIAIhDgwBCyAFIAogBiAGIAJBA3YiByAGIApqIAdrIApJGyIHayIGaiILNgJAIAUgCygAACILNgI4IAIgB0EDdGshDgsgBSADQQhqIgI2AlAgBSALQQAgACgCCCIHKAIEIgkgDmoiA2t2IAlBAnRB0C1qKAIAcSIMNgJUAkAgA0EgSw0AIAZBBE4EQCAFIAogBiADQQN2ayIGaiILNgJAIAUgCygAACILNgI4IANBB3EhAwwBCyAGRQRAQQAhBgwBCyAFIAogBiAGIANBA3YiCyAGIApqIAtrIApJGyIJayIGaiILNgJAIAUgCygAACILNgI4IAMgCUEDdGshAwsgBSAHQQhqIg42AlggBSAAKAIEIgkoAgQiACADaiIDNgI8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ACIIQQFqOwEAIAkgBSAIZ0Fgc2oiADoAAyAJIAggAHQgD2s7AQAgCSAEIAJBAnQiAGooAgA6AAIgCSAAIANqKAIANgIEIAFBAWoiASAMRw0ACwuuAQEBf0Gg6AkQoAEiAEUEQEEADwsgAEEANgL05gEgAEIANwLs5gEgAEEANgKc6AkgAEIANwLE5wEgAEEANgK05wEgAEEANgK45QEgAEIANwOA5wEgAEEANgLc5gEgAEIANwKU5wEgAEIANwLU5wEgAEGBgIDAADYCrOcBIABCgICAgBA3A+DmASAAQYjnAWpCADcDACAAQZznAWpCADcCACAAQaTnAWpBADYCACAACwYAIAAQcwsGAEGDgAgLngEBBH8gAEEANgLU5wEgAEEANgKc5wECQCAAKAKI5wEiAUUNACABQbjVAWooAgAhAyABQbTVAWooAgAhAgJAAkAgASgCACIEBEAgAkUNASADIAQgAhEAACADIAEgAhEAAAwDCyACRQ0BIAMgASACEQAADAILIAQQoQELIAEQoQELIABBADYCmOcBIABCADcDiOcBQQFBBSAAKALc5gEbC/wZAh1/An4jAEEQayITJAACQCACKAIIIgggAigCBCIKSwRAQbh/IQMMAQsgASgCCCIFIAEoAgQiBksEQEG6fyEDDAELIAEoAgAhBCACKAIAIQsCQCAAKALY5wFBAUcNACAAKAKc5wFFDQBBmH8hAyAAQeDnAWooAgAgBkcNASAAKALc5wEgBEcNASAAQeTnAWooAgAgBUcNAQsgBCAGaiEMIABBmCBqIRogAEGgMGohGyAAQRBqIRwgAEGs0AFqIRUgAEGo0ABqIR0gAEGs5QFqIRYgCiALaiIKIAggC2oiC2shFyAAQYjoCWohFCAAQcDlAWohDiAAQdznAWohECAAQfTlAWohDyAAQaTnAWohESAAQbTnAWohDSAAQZzoCWohGCAAQajmAWoiEiEeIAshBiAEIAVqIhkhCANAAkBBfyEDAn8CQAJ/AkACQAJAIA4gFAJ/AkACQAJAIAAoApznAQ4FAgEEAAUMCyAPKAIAIQcgACgCvOUBIQUMBwsgACgCwOcBDAELIABBATYCnOcBIABCADcDuOcBIABCADcCzOcBIABBADYCwOcBIABBADYCqOcBIBAgASkCADcCACAQIAEoAgg2AghBAAsgACgC3OYB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AwAgASkDCBCfATkDAAsDAAELUAEBfgJAIANBwABxBEAgASADQUBqrYYhAkIAIQEMAQsgA0UNACACIAOtIgSGIAFBwAAgA2utiIQhAiABIASGIQELIAAgATcDACAAIAI3AwgLUAEBfgJAIANBwABxBEAgAiADQUBqrYghAUIAIQIMAQsgA0UNACACQcAAIANrrYYgASADrSIEiIQhASACIASIIQILIAAgATcDACAAIAI3AwgL2QMCAn8CfiMAQSBrIgIkAAJAIAFC////////////AIMiBUKAgICAgIDAgDx9IAVCgICAgICAwP/DAH1UBEAgAUIEhiAAQjyIhCEFIABC//////////8PgyIAQoGAgICAgICACFoEQCAFQoGAgICAgICAwAB8IQQMAgsgBUKAgICAgICAgEB9IQQgAEKAgICAgICAgAiFQgBSDQEgBCAFQgGDfCEEDAELIABQIAVCgICAgICAwP//AFQgBUKAgICAgIDA//8AURtFBEAgAUIEhiAAQjyIhEL/////////A4NCgICAgICAgPz/AIQhBAwBC0KAgICAgICA+P8AIQQgBUL///////+//8MAVg0AQgAhBCAFQjCIpyIDQZH3AEkNACACQRBqIAAgAUL///////8/g0KAgICAgIDAAIQiBCADQYH3AGsQnQEgAiAAIARBgfgAIANrEJ4BIAIpAwhCBIYgAikDACIAQjyIhCEEIAIpAxAgAikDGIRCAFKtIABC//////////8Pg4QiAEKBgICAgICAgAhaBEAgBEIBfCEEDAELIABCgICAgICAgIAIhUIAUg0AIARCAYMgBHwhBAsgAkEgaiQAIAQgAUKAgICAgICAgIB/g4S/C9cuAQx/IwBBEGsiDCQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB9AFNBEBBkKcBKAIAIgVBECAAQQtqQXhxIABBC0kbIghBA3YiAnYiAUEDcQRAIAFBf3NBAXEgAmoiA0EDdCIBQcCnAWooAgAiBEEIaiEAAkAgBCgCCCICIAFBuKcBaiIBRgRAQZCnASAFQX4gA3dxNgIADAELQaCnASgCABogAiABNgIMIAEgAjYCCAsgBCADQQN0IgFBA3I2AgQgASAEaiIBIAEoAgRBAXI2AgQMDQsgCEGYpwEoAgAiCk0NASABBEACQEECIAJ0IgBB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AANAIAMgACgCACIBTwRAIAEgACgCBGogA0sNAwsgACgCCCIADQALC0EAEKUBIgFBf0YNBiACIQVB7KoBKAIAIgNBAWsiACABcQRAIAIgAWsgACABakEAIANrcWohBQsgBSAITQ0GIAVB/v///wdLDQZByKoBKAIAIgQEQEHAqgEoAgAiAyAFaiIAIANNDQcgACAESw0HCyAFEKUBIgAgAUcNAQwICyAFIAZrIAdxIgVB/v///wdLDQUgBRClASIBIAAoAgAgACgCBGpGDQQgASEACwJAIAhBMGogBU0NACAAQX9GDQBB8KoBKAIAIgEgCSAFa2pBACABa3EiAUH+////B0sEQCAAIQEMCAsgARClAUF/RwRAIAEgBWohBSAAIQEMCAtBACAFaxClARoMBQsgACIBQX9HDQYMBAsAC0EAIQMMBwtBACEBDAULIAFBf0cNAgtBzKoBQcyqASgCAEEEcjYCAAsgAkH+////B0sNASACEKUBIgFBABClASIATw0BIAFBf0YNASAAQX9GDQEgACABayIFIAhBKGpNDQELQcCqAUHAqgEoAgAgBWoiADYCAEHEqgEoAgAgAEkEQEHEqgEgADYCAAsCQAJAAkBBqKcBKAIAIgcEQEHQqgEhAANAIAEgACgCACIDIAAoAgQiAmpGDQIgACgCCCIADQALDAILQaCnASgCACIAQQAgACABTRtFBEBBoKcBIAE2AgALQQAhAEHUqgEgBTYCAEHQqgEgATYCAEGwpwFBfzYCAEG0pwFB6KoBKAIANgIAQdyqAUEANgIAA0AgAEEDdCIDQcCnAWogA0G4pwFqIgI2AgAgA0HEpwFqIAI2AgAgAEEBaiIAQSBHDQALQZynASAFQShrIgNBeCABa0EHcUEAIAFBCGpBB3EbIgBrIgI2AgBBqKcBIAAgAWoiADYCACAAIAJBAXI2AgQgASADakEoNgIEQaynAUH4qgEoAgA2AgAMAgsgASAHTQ0AIAMgB0sNACAAKAIMQQhxDQAgACACIAVqNgIEQainASAHQXggB2tBB3FBACAHQQhqQQdxGyIAaiICNgIAQZynAUGcpwEoAgAgBWoiASAAayIANgIAIAIgAEEBcjYCBCABIAdqQSg2AgRBrKcBQfiqASgCADYCAAwBC0GgpwEoAgAiAyABSwRAQaCnASABNgIAIAEhAwsgASAF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gYKECGwiATYCACADIAIgBGtBfHEiBGoiAkEEayABNgIAIARBCUkNACADIAE2AgggAyABNgIEIAJBCGsgATYCACACQQxrIAE2AgAgBEEZSQ0AIAMgATYCGCADIAE2AhQgAyABNgIQIAMgATYCDCACQRBrIAE2AgAgAkEUayABNgIAIAJBGGsgATYCACACQRxrIAE2AgAgBCADQQRxQRhyIgRrIgJBIEkNACABrUKBgICAEH4hBSADIARqIQEDQCABIAU3AxggASAFNwMQIAEgBTcDCCABIAU3AwAgAUEgaiEBIAJBIGsiAkEfSw0ACwsgAAvqAgEBfwJAIAAgAUYNACABIABrIAJrQQAgAkEBdGtNBEAgACABIAIQpgEPCyAAIAFzQQNxIQMCQAJAIAAgAUkEQCADBEAgACEDDAMLIABBA3FFBEAgACEDDAILIAAhAwNAIAJFDQQgAyABLQAAOgAAIAFBAWohASACQQFrIQIgA0EBaiIDQQNxDQALDAELAkAgAw0AIAAgAmpBA3EEQANAIAJFDQUgACACQQFrIgJqIgMgASACai0AADoAACADQQNxDQALCyACQQNNDQADQCAAIAJBBGsiAmogASACaigCADYCACACQQNLDQALCyACRQ0CA0AgACACQQFrIgJqIAEgAmotAAA6AAAgAg0ACwwCCyACQQNNDQADQCADIAEoAgA2AgAgAUEEaiEBIANBBGohAyACQQRrIgJBA0sNAAsLIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQQFrIgINAAsLIAALWQEBfyAAIAAtAEoiAUEBayABcjoASiAAKAIAIgFBCHEEQCAAIAFBIHI2AgBBfw8LIABCADcCBCAAIAAoAiwiATYCHCAAIAE2AhQgACABIAAoAjBqNgIQQQALqgEBA38CQCABIAIoAhAiBAR/IAQFIAIQqQENASACKAIQCyACKAIUIgVrSwRAIAIgACABIAIoAiQRAgAaDwsCQCACLABLQQBIDQAgASEEA0AgBCIDRQ0BIAAgA0EBayIEai0AAEEKRw0ACyACIAAgAyACKAIkEQIAIANJDQEgACADaiEAIAEgA2shASACKAIUIQULIAUgACABEKYBGiACIAIoAhQgAWo2AhQLCwcAIwAjAWsLBAAjAQuQAQEDfyAAIQECQAJAIABBA3FFDQAgAC0AAEUEQEEADwsDQCABQQFqIgFBA3FFDQEgAS0AAA0ACwwBCwNAIAEiAkEEaiEBIAIoAgAiA0F/cyADQYGChAhrcUGAgYKEeHFFDQALIANB/wFxRQRAIAIgAGsPCwNAIAItAAEhAyACQQFqIgEhAiADDQALCyABIABrCwMAAAu7AQECfyMAQaABayIEJAAgBEEIakGQzABBkAEQpgEaAkACQCABQQFrQf////8HTwRAIAENAUEBIQEgBEGfAWohAAsgBCAANgI0IAQgADYCHCAEQX4gAGsiBSABIAEgBUsbIgE2AjggBCAAIAFqIgA2AiQgBCAANgIYIARBCGogAiADEJEBIQAgAUUNASAEKAIcIgEgASAEKAIYRmtBADoAAAwBC0HApgFBPTYCAEF/IQALIARBoAFqJAAgAAs0AQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQpgEaIAAgACgCFCABajYCFCACCyoBAX8jAEEQayIEJAAgBCADNgIMIAAgASACIAMQrwEhACAEQRBqJAAgAAsEACAAC00BAn8gAS0AACECAkAgAC0AACIDRQ0AIAIgA0cNAANAIAEtAAEhAiAALQABIgNFDQEgAUEBaiEBIABBAWohACACIANGDQALCyADIAJrCwcAIAAQoQELLQAgAkUEQCAAKAIEIAEoAgRGDwsgACABRgRAQQEPCyAAKAIEIAEoAgQQswFFC58BAQF/IwBBQGoiAyQAAn9BASAAIAFBABC1AQ0AGkEAIAFFDQAaQQAgARC3ASIBRQ0AGiADQQhqQQRyQQBBNBCnARogA0EBNgI4IANBfzYCFCADIAA2AhAgAyABNgIIIAEgA0EIaiACKAIAQQEgASgCACgCHBEMACADKAIgIgBBAUYEQCACIAMoAhg2AgALIABBAUYLIQAgA0FAayQAIAALqQIBBH8jAEFAaiIBJAAgACgCACICQQRrKAIAIQMgAkEIaygCACEEIAFBADYCFCABQfjNADYCECABIAA2AgwgAUGozgA2AghBACECIAFBGGpBAEEnEKcBGiAAIARqIQACQCADQajOAEEAELUBBEAgAUEBNgI4IAMgAUEIaiAAIABBAUEAIAMoAgAoAhQRDgAgAEEAIAEoAiBBAUYbIQIMAQsgAyABQQhqIABBAUEAIAMoAgAoAhgRCgACQAJAIAEoAiwOAgABAgsgASgCHEEAIAEoAihBAUYbQQAgASgCJEEBRhtBACABKAIwQQFGGyECDAELIAEoAiBBAUcEQCABKAIwDQEgASgCJEEBRw0BIAEoAihBAUcNAQsgASgCGCECCyABQUBrJAAgAgtdAQF/IAAoAhAiA0UEQCAAQQE2AiQgACACNgIYIAAgATYCEA8LAkAgASADRgRAIAAoAhhBAkcNASAAIAI2AhgPCyAAQQE6ADYgAEECNgIYIAAgACgCJEEBajYCJAsLGgAgACABKAIIQQAQtQEEQCABIAIgAxC4AQsLMwAgACABKAIIQQAQtQEEQCABIAIgAxC4AQ8LIAAoAggiACABIAIgAyAAKAIAKAIcEQwAC6MBACAAQQE6ADUCQCAAKAIEIAJHDQAgAEEBOgA0IAAoAhAiAkUEQCAAQQE2AiQgACADNgIYIAAgATYCECADQQFHDQEgACgCMEEBRw0BIABBAToANg8LIAEgAkYEQCAAKAIYIgJBAkYEQCAAIAM2AhggAyECCyAAKAIwQQFHDQEgAkEBRw0BIABBAToANg8LIABBAToANiAAIAAoAiRBAWo2AiQLC4oCACAAIAEoAgggBBC1AQRAAkAgASgCBCACRw0AIAEoAhxBAUYNACABIAM2AhwLDwsCQCAAIAEoAgAgBBC1AQRAAkAgAiABKAIQRwRAIAEoAhQgAkcNAQsgA0EBRw0CIAFBATYCIA8LIAEgAzYCIAJAIAEoAixBBEYNACABQQA7ATQgACgCCCIAIAEgAiACQQEgBCAAKAIAKAIUEQ4AIAEtADUEQCABQQM2AiwgAS0ANEUNAQwDCyABQQQ2AiwLIAEgAjYCFCABIAEoAihBAWo2AiggASgCJEEBRw0BIAEoAhhBAkcNASABQQE6ADYPCyAAKAIIIgAgASACIAMgBCAAKAIAKAIYEQoACwupAQAgACABKAIIIAQQtQEEQAJAIAEoAgQgAkcNACABKAIcQQFGDQAgASADNgIcCw8LAkAgACABKAIAIAQQtQFFDQACQCACIAEoAhBHBEAgASgCFCACRw0BCyADQQFHDQEgAUEBNgIgDwsgASACNgIUIAEgAzYCICABIAEoAihBAWo2AigCQCABKAIkQQFHDQAgASgCGEECRw0AIAFBAToANgsgAUEENgIsCws5ACAAIAEoAgggBRC1AQRAIAEgAiADIAQQuwEPCyAAKAIIIgAgASACIAMgBCAFIAAoAgAoAhQRDgALHAAgACABKAIIIAUQtQEEQCABIAIgAyAEELsBCwv4AQEFfyMAQdAjayIFJAACQAJAIAAEQCABRQ0BIAINAQtBACEAIANFDQEgA0F9NgIADAELIAVBIGoiByAAIAAQrQEgAGoQxQFBACEAIAVBCGoiBEEANgIIIARCADcCACAEQX82AgwgBEF/NgIQAkAgBxDBASIIRQRAQX4hBgwBC0F/IQYgASACIAQQwgFFDQAgCCIAIAQgACgCACgCEBEAACAALQAFQQFHBEAgACAEIAAoAgAoAhQRAAALQQAhBiAEQQAQwwEgAgRAIAIgBCgCBDYCAAsgBCgCACEACyADBEAgAyAGNgIACyAHEMQBCyAFQdAjaiQAIAAL9gMBA38jAEHgAGsiASQAIAEgAUHYAGpBuM8AEMYBKQIANwMgAkACQCAAIAFBIGoQxwFFBEAgASABQdAAakG7zwAQxgEpAgA3AxggACABQRhqEMcBRQ0BCyABIAAQyAEiAjYCTCACRQRAQQAhAgwCCyAAKAIAIgMgACgCBEcEfyADLAAABUEAC0H/AXFBLkYEQCABIABBoANqIAFBzABqAn8gACgCACEDIAFBQGsiAiAAKAIENgIEIAIgAzYCACACCxDcASICNgJMIAAgACgCBDYCAAtBACACIAAoAgQgACgCAGsbIQIMAQsgASABQThqQb/PABDGASkCADcDEAJAIAAgAUEQahDHAUUEQCABIAFBMGpBxM8AEMYBKQIANwMIIAAgAUEIahDHAUUNAQsgASAAEMgBIgM2AkwgA0UNASABIAFBKGpBys8AEMYBKQIANwMAIAAgARDHAUUNASAAQd8AEMkBIQMgAUFAayAAQQAQygEgA0EAIAFBQGsiAygCACADKAIERhsNASAAKAIAIgMgACgCBEcEfyADLAAABUEAC0H/AXFBLkYEQCAAIAAoAgQ2AgALIAAoAgQgACgCAGsNASAAQdjPACABQcwAahDLASECDAELQQAgABDMASAAKAIEIAAoAgBrGyECCyABQeAAaiQAIAILNgAgAgJ/IABFBEBBgAhBgAgQoAEiAA0BGkEADwsgASgCAAs2AgggAiAANgIAIAJBADYCBEEBCycBAX8gAEEBEM0BIAAgACgCBCICQQFqNgIEIAIgACgCAGogAToAAAs3ACAAQaADahDSASAAQegCahDOASAAQcwCahDOASAAQaACahDOASAAQZQBahDOASAAQQhqEM4BC3UAIAAgAjYCBCAAIAE2AgAgAEEIahDPASAAQZQBahDPASAAQaACahDQARogAEHMAmoQ0QEaIABB6AJqENEBGiAAQgA3AowDIABBfzYCiAMgAEEBOwGEAyAAQQA2ApQDIABCADcDoAMgAEGgA2oiACAANgKAIAsYACAAIAE2AgAgACABEK0BIAFqNgIEIAALbQIDfwF+IwBBIGsiAyQAIAAoAgAhBCADQRhqIgIgACgCBDYCBCACIAQ2AgAgAyABKQIAIgU3AwggAyAFNwMQIAIgA0EIahDTASICBEAgACAAKAIAIAEoAgQgASgCAGtqNgIACyADQSBqJAAgAgurBAEFfyMAQUBqIgEkAAJAIAAoAgAiAiAAKAIERwR/IAIsAAAFQQALQRh0QRh1IgJB1ABHQQAgAkH/AXFBxwBHG0UEQCAAENQBIQAMAQsgASAANgI4IAEgACICAn8gAUEoaiIAQQA6AAggAEEANgIEIABBADsBACAAIAIoAuwCIAIoAugCa0ECdTYCDCAAIgQLENUBIgM2AiRBACEAIANFDQAgAiAEENYBDQAgAyEAIAFBOGoQ1wENACABQQA2AiAgASABQRhqQfrPABDGASkCADcDAAJAIAIgARDHAQRAIAJBCGoiACIDKAIEIAMoAgBrQQJ1IQMDQCACQcUAEMkBRQRAIAEgAhDYASIFNgIQIAVFDQMgACABQRBqENkBDAELCyABQRBqIAIgAxDaASABIAJBoANqIAFBEGoQ+AE2AiALIAFBADYCDAJAIAEtACgNACAELQABRQ0AIAEgAhDMASIANgIMIABFDQELIAJB9gAQyQEEQCACIAFBDGogAUEkagJ/IAFBEGoiAEIANwIAIAALIAFBIGogBEEEaiAEQQhqENsBIQAMAgsgAkEIaiIAIgMoAgQgAygCAGtBAnUhAwNAIAEgAhDMASIFNgIQIAVFDQEgACABQRBqENkBIAFBOGoQ1wFFDQALIAFBEGogAiADENoBIAIgAUEMaiABQSRqIAFBEGogAUEgaiAEQQRqIARBCGoQ2wEhAAwBC0EAIQALIAFBQGskACAACzQBAn8CQCAAKAIAIgMgACgCBEYNACADLAAAIAFB/wFxRw0AQQEhAiAAIANBAWo2AgALIAILfwEBfyABKAIAIQMgAgRAIAFB7gAQyQEaCwJAIAEoAgQgASgCAEYNACABKAIAIgIsAABBMGtBCk8NAANAAkAgASgCBCABKAIARg0AIAIsAABBMGtBCUsNACABIAJBAWoiAjYCAAwBCwsgACACNgIEIAAgAzYCAA8LIABCADcCAAsPACAAQaADaiABIAIQ3QELshEBBX8jAEEgayICJAAgAkEANgIcAkACQCACAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgACgCACIDIAAoAgRHBH8gAywAAAVBAAtBGHRBGHUiA0HBAGsOOhkiHxciGCAiIiIAIhoiHhwiHSEbJQAiIiIiIiIiIiIiBQMEEhMRFAYJCiILDA8QIiIABwgWAQINDhUiCwJAQQJBASADQfIARiIDGyADIAMgACgCBCAAKAIAIgRrSQR/IAMgBGosAAAFQQALQf8BcUHWAEYbIgMiBCAAKAIEIAAoAgAiBWtJBH8gBCAFaiwAAAVBAAtB/wFxQcsARiADaiIDIgQgACgCBCAAKAIAIgVrSQR/IAQgBWosAAAFQQALQRh0QRh1Qf8BcUHEAGsOAwAlJiULIANBAWoiAyAAKAIEIAAoAgAiBGtJBH8gAyAEaiwAAAVBAAtBGHRBGHVB/wFxIgNB7wBrIgRBCUsNI0EBIAR0QYEGcUUNIwwlCyAAIAAoAgBBAWo2AgAgAEG4lQEQ3gEhAQwnCyAAIAAoAgBBAWo2AgAgAEGj2QAQ3gEhAQwmCyAAIAAoAgBBAWo2AgAgAEG9lQEQ3gEhAQwlCyAAIAAoAgBBAWo2AgAgAEGz2QAQ3gEhAQwkCyAAIAAoAgBBAWo2AgAgAEG42QAQ3gEhAQwjCyAAIAAoAgBBAWo2AgAgAEHE2QAQ3gEhAQwiCyAAIAAoAgBBAWo2AgAgAEHS2QAQ3gEhAQwhCyAAIAAoAgBBAWo2AgAgAEHY2QAQ3gEhAQwgCyAAIAAoAgBBAWo2AgAgAEHClQEQ3gEhAQwfCyAAIAAoAgBBAWo2AgAgAEHGlQEQ3gEhAQweCyAAIAAoAgBBAWo2AgAgAEHTlQEQ3gEhAQwdCyAAIAAoAgBBAWo2AgAgAEHYlQEQ3gEhAQwcCyAAIAAoAgBBAWo2AgAgAEHmlQEQ3gEhAQwbCyAAIAAoAgBBAWo2AgAgAEGgA2pB8JUBEJMCIQEMGgsgACAAKAIAQQFqNgIAIABB9tkAEN4BIQEMGQsgACAAKAIAQQFqNgIAIABB/9kAEN4BIQEMGAsgACAAKAIAQQFqNgIAIABBg5YBEN4BIQEMFwsgACAAKAIAQQFqNgIAIABBoANqQYmWARCTAiEBDBYLIAAgACgCAEEBajYCACAAQZCWARDeASEBDBULIAAgACgCAEEBajYCACAAQZyWARDeASEBDBQLIAAgACgCAEEBajYCACAAQYTmABDeASEBDBMLIAAgACgCAEEBajYCACACQRBqIAAQ3wEgAigCECACKAIURg0MIAIgACACQRBqEOABNgIcDBELAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAIEIAAoAgAiA2tBAUsEfyADLAABBUEAC0EYdEEYdUHPAGsOKg0fHx8fCh8fHx8fHx8fHx8fHwcfCAABAh8DBB8fHx8JDQwfHwUKBgsNDR8LIAAgACgCAEECajYCACAAQaeWARDeASEBDB4LIAAgACgCAEECajYCACAAQbGWARDeASEBDB0LIAAgACgCAEECajYCACAAQbyWARDeASEBDBwLIAAgACgCAEECajYCACAAQcaWARDeASEBDBsLIAAgACgCAEECajYCACAAQdCWARDeASEBDBoLIAAgACgCAEECajYCACAAQdmWARDeASEBDBkLIAAgACgCAEECajYCACAAQeKWARDeASEBDBgLIAAgACgCAEECajYCACAAQavWABDeASEBDBcLIAAgACgCAEECajYCACAAQeqWARDeASEBDBYLIAAgACgCAEECajYCACAAQfmWARDeASEBDBULIAAQ4QEMEgsgABDiAQwRCyAAIAAoAgBBAmo2AgAgAiAAEMwBIgM2AhAgA0UNEiACIAAgAkEQahDjATYCHAwRCyAAEOQBDA8LIAAQ5AEMDgsgABDlAQwNCyAAEOYBDAwLAkACQAJAIAAoAgQgACgCACIDa0EBSwR/IAMsAAEFQQALQRh0QRh1Qf8BcSIDQfMAaw4DAQIBAAsgA0HlAEcNAQsgABDnAQwMCyAC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ACABQdAAahCrAiECDBELIARB1gBHDRAgACADQQJqNgIAIAEgAUHQBGpB8NcAEMYBKQIANwNYIAAgAUHYAGoQqwIhAgwQCwJAAkACQCADLAABIgRB7wBrDgMAEgIBCyAAIANBAmo2AgAgASABQcgEakHz1wAQxgEpAgA3A2AgACABQeAAahCrAiECDBELIARBzwBHDRAgACADQQJqNgIAIAEgAUHABGpB9dcAEMYBKQIANwNoIAAgAUHoAGoQqwIhAgwQCyAAIANBAmo2AgAgASABQbgEakH41wAQxgEpAgA3A3AgACABQfAAahCrAiECDA8LIAMsAAEiBEH0AEcEQCAEQeUARw0PIAAgA0ECajYCACABIAFBsARqQfvXABDGASkCADcDeCAAIAFB+ABqEKsCIQIMDwsgACADQQJqNgIAIAEgAUGoBGpB/tcAEMYBKQIANwOAASAAIAFBgAFqEKsCIQIMDgsgAywAASIEQewARwRAIARB+ABHDQ4gACADQQJqNgIAIAEgABD1ASICNgL4BCACRQ0NIAEgABD1ASICNgKEBSACRQ0NIABBoANqQRAQ+wEgASgC+AQgASgChAUQqQMhAgwOCyAAIANBAmo2AgAgAEEIaiIDIgQoAgQgBCgCAGtBAnUhBANAIABBxQAQyQFFBEAgASAAELECIgU2AvgEIAVFDQ8gAyABQfgEahDZAQwBCwsgAUEANgKEBSABQfgEaiAAIAQQ2gEgAEGgA2ogAUGEBWogAUH4BGoQxwIhAgwNCwJAAkACQAJAIAMsAAEiBEHzAGsOAgEDAAsgBEHTAEYNASAEQeUARw0PIAAgA0ECajYCACABIAFBoARqQYDYABDGASkCADcDiAEgACABQYgBahCrAiECDA8LIAAgA0ECajYCACABIAFBmARqQYPYABDGASkCADcDkAEgACABQZABahCrAiECDA4LIAAgA0ECajYCACABIAFBkARqQYbYABDGASkCADcDmAEgACABQZgBahCrAiECDA0LIAAgA0ECajYCACABIAFBiARqQYrYABDGASkCADcDoAEgACABQaABahCrAiECDAwLAkACQAJAAkACQAJAIAMsAAEiBEHpAGsOBQEREQMFAAsgBEHJAGsOBAEQEAMQCyAAIANBAmo2AgAgASABQYAEakGM2AAQxgEpAgA3A6gBIAAgAUGoAWoQqwIhAgwPCyAAIANBAmo2AgAgASABQfgDakGO2AAQxgEpAgA3A7ABIAAgAUGwAWoQqwIhAgwOCyAAIANBAmo2AgAgASABQfADakHn1wAQxgEpAgA3A7gBIAAgAUG4AWoQqwIhAgwNCyAAIANBAmo2AgAgASABQegDakGR2AAQxgEpAgA3A8ABIAAgAUHAAWoQqwIhAgwMCyAAIANBAmo2AgAgAEHfABDJAQRAIAEgAUHgA2pBlNgAEMYBKQIANwPIASAAIAFByAFqEKwCIQIMDAsgASAAEPUBIgI2AvgEIAJFDQogACABQfgEakGU2AAQsgIhAgwLCwJAAkACQAJAAkACQCADLAABIgRB4QBrDgcBEBAQAhADAAsgBEH0AGsOBQMPDwAEDwsgABCzAiECDA4LIAAgA0ECajYCACABIAFB2ANqQZfYABDGASkCADcD0AEgACABQdABahCrAiECDA0LIAAgA0ECajYCACABIAFB0ANqQYzYABDGASkCADcD2AEgACABQdgBahCsAiECDAwLIAAgA0ECajYCACABIAFByANqQZrYABDGASkCADcD4AEgACABQeABahCsAiECDAsLIAAgA0ECajYCACABIAAQ9QEiAjYC+AQgAkUNCSAAQaADakGc2AAgAUH4BGpBstcAELYCIQIMCgsCQAJAAkACQCADLAABIgRB7gBrDgUAAQ0NAgMLIAAQrwIhAgwMCyAAIANBAmo2AgAgASABQcADakGn2AAQxgEpAgA3A+gBIAAgAUHoAWoQqwIhAgwLCyAAIANBAmo2AgAgASABQbgDakGq2AAQxgEpAgA3A/ABIAAgAUHwAWoQqwIhAgwKCyAEQdIARw0JIAAgA0ECajYCACABIAFBsANqQazYABDGASkCADcD+AEgACABQfgBahCrAiECDAkLAkACQAJAAkACQAJAIAMsAAEiBEHsAGsOCQEADg4DDg4EBQILIAAgA0ECajYCACABIAFBqANqQa/YABDGASkCADcDgAIgACABQYACahCrAiECDA0LIAAgA0ECajYCACABIAFBoANqQbPYABDGASkCADcDiAIgACABQYgCahCrAiECDAwLIARBzABHDQsgACADQQJqNgIAIAEgAUGYA2pBtdgAEMYBKQIANwOQAiAAIAFBkAJqEKsCIQIMCwsgACADQQJqNgIAIABB3wAQyQEEQCABIAFBkANqQbjYABDGASkCADcDmAIgACABQZgCahCsAiECDAsLIAEgABD1ASICNgL4BCACRQ0JIAAgAUH4BGpBuNgAELICIQIMCgsgACADQQJqNgIAIAEgAUGIA2pBs9gAEMYBKQIANwOgAiAAIAFBoAJqEKwCIQIMCQsgACADQQJqNgIAIAEgABD1ASICNgL4BCACRQ0HIAEgABD1ASICNgKEBSACRQ0HIAAgAUH4BGpBu9gAIAFBhAVqELACIQIMCAsgAy0AAUH1AEcNByAAIANBAmo2AgAgASAAEPUBIgI2AvgEIAJFDQYgASAAEPUBIgI2AoQFIAJFDQYgASAAEPUBIgI2AoQDIAJFDQYgAEGgA2pBFBD7ASABKAL4BCABKAKEBSABKAKEAxC3AyECDAcLAkACQCADLAABIgRBzQBHBEAgBEHTAEYNAiAEQfMARg0BIARB7QBHBEAgBEHjAEcNCiAAIANBAmo2AgAgASAAEMwBIgI2AvgEIAJFDQkgASAAEPUBIgI2AoQFIAJFDQkgAEGgA2pBvtgAIAFB+ARqIAFBhAVqEL0CIQIMCgsgACADQQJqNgIAIAEgAUH4AmpBz9gAEMYBKQIANwOoAiAAIAFBqAJqEKsCIQIMCQsgACADQQJqNgIAIAEgAUHwAmpB0dgAEMYBKQIANwOwAiAAIAFBsAJqEKsCIQIMCAsgACADQQJqNgIAIAEgAUHoAmpB1NgAEMYBKQIANwO4AiAAIAFBuAJqEKsCIQIMBwsgACADQQJqNgIAIAEgAUHgAmpB19gAEMYBKQIANwPAAiAAIAFBwAJqEKsCIQIMBgsCQAJAAkACQAJAAkACQCADLAABIgRB8ABrDgUBDAIMAwALIARB0ABGDQUgBEHaAEYNBCAEQfoARg0DIARB4wBHDQsgACADQQJqNgIAIAEgABDMASICNgL4BCACRQ0KIAEgABD1ASICNgKEBSACRQ0KIABBoANqQdvYACABQfgEaiABQYQFahC9AiECDAsLIAAgA0ECajYCACABIAAQ9QEiAjYC+AQgAkUNCSAAIAFB+ARqEOMBIQIMCgsgABCvAiECDAkLIAAgA0ECajYCACABIAAQzAEiAjYC+AQgAkUNByAAQefYACABQfgEahCVAiECDAgLIAAgA0ECajYCACABIAAQ9QEiAjYC+AQgAkUNBiAAQefYACABQfgEahCVAiECDAcLIAAgA0ECajYCACAAKAIAIgMgACgCBEcEfyADLAAABUEAC0EYdEEYdSIDQeYARwRAIANB/wFxQdQARw0HIAEgABDoASICNgL4BCACRQ0GIABBoANqIAFB+ARqEMoCIQIMBwsgASAAEKkCIgI2AvgEIAJFDQUgACABQfgEahC0AiECDAYLIAAgA0ECajYCACAAQQhqIgMiBCgCBCAEKAIAa0ECdSEEA0AgAEHFABDJAUUEQCABIAAQ2AEiBTYC+AQgBUUNByADIAFB+ARqENkBDAELCyABQfgEaiAAIAQQ2gEgASAAQaADaiABQfgEahDLAjYChAUgACABQYQFahC0AiECDAULAkACQAJAAkACQCADLAABIgRB6QBrDgQBCQkCAAsgBEH3AEYNAyAEQfIARg0CIARB5QBHDQggACADQQJqNgIAIAEgABD1ASICNgL4BCACRQ0HIABB/NgAIAFB+ARqEJUCIQIMCAsgACADQQJqNgIAIAEgABDMASICNgL4BCACRQ0GIABB/NgAIAFB+ARqEJUCIQIMBwsgACADQQJqNgIAIAEgABDMASICNgKEBSACRQ0FIABBCGoiAiIDKAIEIAMoAgBrQQJ1IQMDQCAAQcUAEMkBRQRAIAEgABCxAiIENgL4BCAERQ0HIAIgAUH4BGoQ2QEMAQsLIAFB+ARqIAAgAxDaASAAQaADaiABQYQFaiABQfgEahDMAiECDAYLIAAgA0ECajYCACAAQYXZABDeASECDAULIAAgA0ECajYCACABIAAQ9QEiAjYC+AQgAkUNAyAAQaADaiABQfgEahDNAiECDAQLIARBMWtBCUkNAQsgASABQdgCakGL2QAQxgEpAgA3AwggACABQQhqEMcBBEAgASAAEMwBIgI2AvgEIAJFDQIgACABQfgEahC1AiECDAMLIAEgAUHQAmpBl9kAEMYBKQIANwMAIAAgARDHAUUNAiABIAAQ9QEiAjYC+AQgAkUNASAAIAFB+ARqELUCIQIMAgsgABCvAiECDAELQQAhAgsgAUHABWokACACC+oKAQN/IwBBsAJrIgEkAAJAIABBzAAQyQFFDQACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAAoAgAiAyAAKAIERwR/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AX4gAEEBOgAHIABBAToABiAAQQE6AAUgAEEUOgAEIABBnNMANgIAIABBhNIANgIAIAEpAgAhAyAAIAI2AhAgACADNwIIIAALRAEBfyABQQhqEKABIgFFBEBBuKYBKAIAEQsAAAsgACgCgCAiACgCACECIAFBADYCBCABIAI2AgAgACABNgIAIAFBCGoLOQECf0GAIBCgASIBRQRAQbimASgCABELAAALIAAoAoAgIQIgAUEANgIEIAEgAjYCACAAIAE2AoAgCwQAQQALBAAgAAteAgF/AX4jAEEQayICJAAgAiAAKQIIIgM3AwAgAiADNwMIIAEgAhCCAiAAKAIQIgAgASAAKAIAKAIQEQAAIAAtAAVBAUcEQCAAIAEgACgCACgCFBEAAAsgAkEQaiQACz4BAX8gASgCBCABKAIAayICBEAgACACEM0BIAAoAgAgACgCBGogASgCACACEKgBGiAAIAAoAgQgAmo2AgQLCwMAAQsJACAAQgA3AgALAwAAC0AAIABBAToAByAAQQE6AAYgAEEBOgAFIABBFToABCAAQZzTADYCACAAIAI2AgwgACABNgIIIABByNMANgIAIAALqQEBAn8jAEEgayICJAAgAiACQRhqQbTUABDGASkCADcDCCABIAJBCGoQggIgACgCCCIDIAEgAygCACgCEBEAACADLQAFQQFHBEAgAyABIAMoAgAoAhQRAAALIAIgAkEQakHN1AAQxgEpAgA3AwAgASACEIICIAAoAgwiACABIAAoAgAoAhARAAAgAC0ABUEBRwRAIAAgASAAKAIAKAIUEQAACyACQSBqJAALbAEBfyMAQRBrIgEkACABQQA2AgwgAEHyABDJAQRAIAEgASgCDEEEcjYCDAsgAEHWABDJAQRAIAEgASgCDEECcjYCDAsgAEHLABDJAQRAIAEgASgCDEEBcjYCDAsgASgCDCEAIAFBEGokACAAC4YBAQJ/IwBBEGsiAiQAIAIgATYCDCABBH8CQCAAKAIAIgMoAgAEQCAAKAIEQaADakEQEPsBIAMoAgAgAigCDBCcAiEBIAAoAgAgATYCAAwBCyADIAE2AgALIAAoAggoAgAiAQRAIAFBADoAAQsgACgCACgCAEEARwVBAAshACACQRBqJAAgAAu9AwEEfyMAQSBrIgMkAAJAIAEoAgAiBC0ABEEpRw0AIAMgBCgCCCIENgIcIARBAmtBA0sNACABIABBoANqIANBHGoQvgM2AgALAkAgAEHDABDJAQRAQQAhBCAAQckAEMkBIQUgACgCACIGIAAoAgRHBH8gBiwAAAVBAAtBGHRBGHVBMWtB/wFxQQRLDQEgAyAAKAIAIgYgACgCBEcEfyAGLAAABUEAC0EYdEEYdUEwazYCGCAAIAAoAgBBAWo2AgAgAgRAIAJBAToAAAsCQCAFRQ0AIAAgAhDVAQ0ADAILIANBADoAFyAAIAEgA0EXaiADQRhqEJYCIQQMAQtBACEEIAAoAgAiBSAAKAIERwR/IAUsAAAFQQALQf8BcUHEAEcNACAAKAIEIAAoAgAiBWtBAUsEfyAFLAABBUEAC0EYdEEYdUH/AXFBMGsiBUEFSw0AIAVBA0YNACADIAAoAgQgACgCACIEa0EBSwR/IAQsAAEFQQALQRh0QRh1QTBrNgIQIAAgACgCAEECajYCACACBEAgAkEBOgAACyADQQE6AA8gACABIANBD2ogA0EQahCWAiEECyADQSBqJAAgBAtoAQF/IwBBEGsiAiQAIAIgATYCDAJ/AkADQCAAQcIAEMkBRQ0BIAIgABDfASACKAIAIAIoAgRHBEAgAiAAQaADaiACQQxqIAIQwwM2AgwMAQsLQQAMAQsgAigCDAshACACQRBqJAAgAAv/AQEDfyMAQSBrIgIkAAJ/AkACQAJ/IAAoAgAiAyAAKAIERwR/IAMsAAAFQQALQRh0QRh1IgNB1QBGBEAgACABEJcCDAELIANBMWtB/wFxQQhNBEAgABCYAgwBCyACIAJBGGpBzooBEMYBKQIANwMIIAAgAkEIahDHAQRAIABBCGoiASIDKAIEIAMoAgBrQQJ1IQMDQCACIAAQmAIiBDYCECAERQ0DIAEgAkEQahDZASAAQcUAEMkBRQ0ACyACQRBqIAAgAxDaASAAQaADaiACQRBqEMYDIQEMAwsgACABEJkCCyIBDQELQQAMAQsgACABEIsCCyEAIAJBIGokACAAC60BAQJ/AkAgACABRg0AIAAsAAAiAkHfAEYEQCAAQQFqIAFGDQEgACwAASICQTBrQQlNBEAgAEECag8LIAJB3wBHDQEgAEECaiECA0AgASACRg0CIAIsAAAiA0Ewa0EJTQRAIAJBAWohAgwBCwsgAkEBaiAAIANB3wBGGw8LIAJBMGtBCUsNACAAIQIDQCABIAJBAWoiAkYEQCABDwsgAiwAAEEwa0EKSQ0ACwsgAAsaACAAQaADakEQEPsBIAEoAgAgAigCABDIAwsVACAAQaADakEMEPsBIAEoAgAQyQMLkQEBAX8gABDRASEAIAEoAgAgAUEMakYEQCABKAIAIAEoAgQgACgCABCoAiAAIAAoAgAgASgCBCABKAIAa0ECdUECdGo2AgQgASABKAIANgIEIAAPCyAAIAEoAgA2AgAgACABKAIENgIEIAAgASgCCDYCCCABIAFBHGo2AgggASABQQxqIgI2AgQgASACNgIAIAALkAIBAX8gACgCACAAQQxqRiECAkAgASgCACABQQxqRgRAIAJFBEAgACgCABChASAAIABBHGo2AgggACAAQQxqIgI2AgQgACACNgIACyABKAIAIAEoAgQgACgCABCoAiAAIAAoAgAgASgCBCABKAIAa0ECdUECdGo2AgQMAQsgAgRAIAAgASgCADYCACAAIAEoAgQ2AgQgACABKAIINgIIIAEgAUEcajYCCCABIAFBDGoiADYCBCABIAA2AgAPCyAAKAIAIQIgACABKAIANgIAIAEgAjYCACAAKAIEIQIgACABKAIENgIEIAEgAjYCBCAAKAIIIQIgACABKAIINgIIIAEgAjYCCAsgASABKAIANgIECwwAIAAgASkCCDcCAAs6AQF/IwBBEGsiAiQAIABBEBD7ASEAIAIgAkEIaiABEMYBKQIANwMAIAAgAhCaAiEAIAJBEGokACAAC4sBAQN/IAFBADYCAAJAIAAoAgAiAiAAKAIERwR/IAIsAAAFQQALQRh0QRh1QTBrQf8BcUEJSyICDQADQCAAKAIAIgMgACgCBEcEfyADLAAABUEAC0EYdEEYdUEwa0H/AXFBCUsNASABIARBCmw2AgAgASAAEJ8CIAEoAgBqQTBrIgQ2AgAMAAsACyACCxMAIABBoANqIAEgAkGy1wAQtgILHwAgAEGgA2pBFBD7ASABKAIAIAItAAAgAygCABDBAwv7BAEFfyMAQaABayICJAAgAQRAIAAgACgCzAI2AtACCyACIAJBmAFqQdLfABDGASkCADcDGAJAIAAgAkEYahDHAQRAQQAhASACQcgAaiAAQQAQygEgAEHfABDJAUUNASAAQaADaiACQcgAahDmAiEBDAELIAIgAkGQAWpB1d8AEMYBKQIANwMQIAAgAkEQahDHAQRAIAJBgAFqIABBiANqIAAoAtACIAAoAswCa0ECdRDPAiEDIAJByABqIAAQ0AIhBiAAQQhqIgQiASgCBCABKAIAa0ECdSEFAn8CQANAAkAgACgCACIBIAAoAgRHBH8gASwAAAVBAAtB/wFxQdQARw0AIAJBQGtB2N8AEMYBIAAoAgQgACgCACIBa0EBSwR/IAEsAAEFQQALQRh0QRh1ENECQX9GDQAgAiAAENICIgE2AkAgAUUNAiAEIAJBQGsQ2QEMAQsLIAJBQGsgACAFENoBIAJBQGsoAgRFBEAgACAAKALQAkEEazYC0AILIAIgAkE4akHd3wAQxgEpAgA3AwAgACACEMcBRQRAA0AgAiAAEMwBIgE2AjAgAUUNAiAEIAJBMGoQ2QEgAEHFABDJAUUNAAsLIAJBMGogACAFENoBIAJBKGogAEEAEMoBQQAgAEHfABDJAUUNARogAEGgA2ogAkFAayACQTBqIAJBKGoQ6AIMAQtBAAshASAGENMCIAMtAAgEQCADKAIAIAMoAgQ2AgALDAELIAIgAkEgakHg3wAQxgEpAgA3AwhBACEBIAAgAkEIahDHAUUNACACQcgAaiAAQQAQygEgAEHfABDJAUUNACAAQePfABDeASEBCyACQaABaiQAIAELqAEBBX8jAEEgayIBJAAgAUEANgIcAkAgACABQRxqEJQCDQAgASgCHCIDQQFrIAAoAgQgACgCAGtPDQAgACgCACIEIQUgAUEQaiICIAMgBGo2AgQgAiAFNgIAIAAgACgCACADajYCACABIAFBCGpBpvEAEMYBKQIANwMAIAIgARDTAQRAIABBoANqQbHxABCTAiECDAELIAAgAhDgASECCyABQSBqJAAgAgvsEwEFfyMAQSBrIgMkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgACgCACIEIAAoAgRHBH8gBCwAAAVBAAtBGHRBGHVB4QBrDhYAEAECAxAEEAUQEAYHCAkKCwwNEBAOEAsCQAJAAkACQCAAKAIEIAAoAgAiAWtBAUsEfyABLAABBUEAC0EYdEEYdSIBQeEAaw4EEhMTAQALIAFBzgBGDQEgAUHTAEYNAiABQe4ARw0SCyAAIAAoAgBBAmo2AgAgAEGr8wAQ3gEhAgwRCyAAIAAoAgBBAmo2AgAgAEG18wAQ3gEhAgwQCyAAIAAoAgBBAmo2AgAgAEHA8wAQ3gEhAgwPCwJAAkACQAJAIAAoAgQgACgCACIEa0EBSwR/IAQsAAEFQQALQRh0QRh1IgRB7ABrDgQAARICAwsgACAAKAIAQQJqNgIAIABByvMAEN4BIQIMEQsgACAAKAIAQQJqNgIAIABB1fMAEN4BIQIMEAsgACAAKAIAQQJqNgIAIABB3/MAEN4BIQIMDwsgBEH2AEcNDiAAIAAoAgBBAmo2AgAgA0EYaiAAQYQDakEAEKICIQUgA0EQaiAAQYUDaiABIAAtAIUDckEARxCiAiEEIAMgABDMASIGNgIMIAYEQCABBEAgAUEBOgAACyAAIANBDGoQnQMhAgsgBC0ABQRAIAQoAgAgBC0ABDoAAAsgBS0ABQRAIAUoAgAgBS0ABDoAAAsMDgsCQAJAAkACQAJAIAAoAgQgACgCACIBa0EBSwR/IAEsAAEFQQALQRh0QRh1IgFB4QBrDgUBEhISAgALIAFB1gBGDQMgAUHsAEYNAiABQfYARw0RIAAgACgCAEECajYCACAAQZX0ABDeASECDBELIAAgACgCAEECajYCACAAQenzABDeASECDBALIAAgACgCAEECajYCACAAQfvzABDeASECDA8LIAAgACgCAEECajYCACAAQYX0ABDeASECDA4LIAAgACgCAEECajYCACAAQZ/0ABDeASECDA0LAkACQAJAIAAoAgQgACgCACIBa0EBSwR/IAEsAAEFQQALQRh0QRh1IgFB7wBrDgMADwIBCyAAIAAoAgBBAmo2AgAgAEGq9AAQ3gEhAgwOCyABQc8ARw0NIAAgACgCAEECajYCACAAQbT0ABDeASECDA0LIAAgACgCAEECajYCACAAQb/0ABDeASECDAwLIAAoAgQgACgCACIBa0EBSwR/IAEsAAEFQQALQRh0QRh1IgFB9ABHBEAgAUHlAEcNDCAAIAAoAgBBAmo2AgAgAEHK9AAQ3gEhAgwMCyAAIAAoAgBBAmo2AgAgAEHV9AAQ3gEhAgwLCyAAKAIEIAAoAgAiAWtBAUsEfyABLAABBUEAC0H/AXFB+ABHDQogACAAKAIAQQJqNgIAIABB3/QAEN4BIQIMCgsCQAJAAkACQAJAAkAgACgCBCAAKAIAIgFrQQFLBH8gASwAAQVBAAtBGHRBGHUiAUHlAGsOBQEPDw8CAAsgAUHzAGsOAgIEAwsgACAAKAIAQQJqNgIAIABB6vQAEN4BIQIMDQsgACAAKAIAQQJqNgIAIAMgABCYAiIBNgIYIAFFDQwgAEGgA2ogA0EYahCgAyECDAwLIAAgACgCAEECajYCACAAQfX0ABDeASECDAsLIAFB0wBHDQogACAAKAIAQQJqNgIAIABBgPUAEN4BIQIMCgsgACAAKAIAQQJqNgIAIABBjPUAEN4BIQIMCQsCQAJAAkACQAJAAkAgACgCBCAAKAIAIgFrQQFLBH8gASwAAQVBAAtBGHRBGHUiAUHpAGsOBQEODgMFAAsgAUHJAGsOBAENDQMNCyAAIAAoAgBBAmo2AgAgAEGW9QAQ3gEhAgwMCyAAIAAoAgBBAmo2AgAgAEGg9QAQ3gEhAgwLCyAAIAAoAgBBAmo2AgAgAEH78wAQ3gEhAgwKCyAAIAAoAgBBAmo2AgAgAEGr9QAQ3gEhAgwJCyAAIAAoAgBBAmo2AgAgAEG29QAQ3gEhAgwICwJAAkACQAJAAkACQCAAKAIEIAAoAgAiAWtBAUsEfyABLAABBUEAC0EYdEEYdSIBQeEAaw4HAQ0NDQINAwALIAFB9ABrDgQDDAwEDAsgACAAKAIAQQJqNgIAIABBwfUAEN4BIQIMCwsgACAAKAIAQQJqNgIAIABB0PUAEN4BIQIMCgsgACAAKAIAQQJqNgIAIABBlvUAEN4BIQIMCQsgACAAKAIAQQJqNgIAIABB2/UAEN4BIQIMCAsgACAAKAIAQQJqNgIAIABB5fUAEN4BIQIMBwsCQAJAAkAgACgCBCAAKAIAIgFrQQFLBH8gASwAAQVBAAtBGHRBGHUiAUHvAGsOBAAJCQECCyAAIAAoAgBBAmo2AgAgAEHy9QAQ3gEhAgwICyAAIAAoAgBBAmo2AgAgAEH99QAQ3gEhAgwHCyABQdIARw0GIAAgACgCAEECajYCACAAQYf2ABDeASECDAYLAkACQAJAAkACQAJAIAAoAgQgACgCACIBa0EBSwR/IAEsAAEFQQALQRh0QRh1IgFB7ABrDgkBAAsLAwsLBAUCCyAAIAAoAgBBAmo2AgAgAEGS9gAQ3gEhAgwKCyAAIAAoAgBBAmo2AgAgAEGe9gAQ3gEhAgwJCyABQcwARw0IIAAgACgCAEECajYCACAAQaj2ABDeASECDAgLIAAgACgCAEECajYCACAAQbP2ABDeASECDAcLIAAgACgCAEECajYCACAAQZ72ABDeASECDAYLIAAgACgCAEECajYCACAAQb72ABDeASECDAULIAAoAgQgACgCACIBa0EBSwR/IAEsAAEFQQALQf8BcUH1AEcNBCAAIAAoAgBBAmo2AgAgAEHJ9gAQ3gEhAgwECwJAAkAgACgCBCAAKAIAIgFrQQFLBH8gASwAAQVBAAtBGHRBGHUiAUHNAEcEQCABQdMARg0CIAFB8wBGDQEgAUHtAEcNBiAAIAAoAgBBAmo2AgAgAEHT9gAQ3gEhAgwGCyAAIAAoAgBBAmo2AgAgAEHd9gAQ3gEhAgwFCyAAIAAoAgBBAmo2AgAgAEHo9gAQ3gEhAgwECyAAIAAoAgBBAmo2AgAgAEHz9gAQ3gEhAgwDCyAAKAIEIAAoAgAiAWtBAUsEfyABLAABBUEAC0H/AXFB8wBHDQIgACAAKAIAQQJqNgIAIABB//YAEN4BIQIMAgsgACgCBCAAKAIAIgFrQQFLBH8gASwAAQVBAAtBGHRBGHVBMGtBCUsNASAAIAAoAgBBAmo2AgAgAyAAEJgCIgE2AhggAUUNASAAIANBGGoQnQMhAgwBCyAAIAAoAgBBAmo2AgAgAEGg8wAQ3gEhAgsgA0EgaiQAIAILPAAgAEEBOgAHIABBAToABiAAQQE6AAUgAEEHOgAEIABBnNMANgIAIABB5NQANgIAIAAgASkCADcCCCAACzACAX8BfiMAQRBrIgIkACACIAApAggiAzcDACACIAM3AwggASACEIICIAJBEGokAAtAACAAQQE6AAcgAEEBOgAGIABBAToABSAAQRc6AAQgAEGc0wA2AgAgACACNgIMIAAgATYCCCAAQcjVADYCACAAC4sBAQJ/IwBBEGsiAiQAIAAoAggiAyABIAMoAgAoAhARAAAgAy0ABUEBRwRAIAMgASADKAIAKAIUEQAACyACIAJBCGpBqNYAEMYBKQIANwMAIAEgAhCCAiAAKAIMIgAgASAAKAIAKAIQEQAAIAAtAAVBAUcEQCAAIAEgACgCACgCFBEAAAsgAkEQaiQACxYAIAAgASgCDCIAIAAoAgAoAhgRAAALLgEBfwJ/QQAgACgCACIBIAAoAgRGDQAaIAAgAUEBajYCACABLQAAC0EYdEEYdQtHACAAQQI6AAcgAEECOgAGIABBAjoABSAAQSQ6AAQgAEGc0wA2AgAgAEEAOgAQIABBADYCDCAAIAE2AgggAEG41gA2AgAgAAtwAQN/IwBBEGsiBCQAIAAtABBFBEAgBEEIaiAAQRBqQQEQogIhAwJ/IAAoAgwiAi0ABSIAQQJHBEAgAEUMAQsgAiABIAIoAgAoAgARAQALIQIgAy0ABQRAIAMoAgAgAy0ABDoAAAsLIARBEGokACACC0kBAX8jAEEQayIDJAAgAyACOgAPIAAgATYCACABLQAAIQEgAEEBOgAFIAAgAToABCAAKAIAIANBD2otAAA6AAAgA0EQaiQAIAALcAEDfyMAQRBrIgQkACAALQAQRQRAIARBCGogAEEQakEBEKICIQMCfyAAKAIMIgItAAYiAEECRwRAIABFDAELIAIgASACKAIAKAIEEQEACyECIAMtAAUEQCADKAIAIAMtAAQ6AAALCyAEQRBqJAAgAgtwAQN/IwBBEGsiBCQAIAAtABBFBEAgBEEIaiAAQRBqQQEQogIhAwJ/IAAoAgwiAi0AByIAQQJHBEAgAEUMAQsgAiABIAIoAgAoAggRAQALIQIgAy0ABQRAIAMoAgAgAy0ABDoAAAsLIARBEGokACACC1sBAn8jAEEQayIDJAAgAC0AEEUEQCADQQhqIABBEGpBARCiAiECIAAoAgwiACABIAAoAgAoAgwRAQAhACACLQAFBEAgAigCACACLQAEOgAACwsgA0EQaiQAIAALVwECfyMAQRBrIgMkACAALQAQRQRAIANBCGogAEEQakEBEKICIQIgACgCDCIAIAEgACgCACgCEBEAACACLQAFBEAgAigCACACLQAEOgAACwsgA0EQaiQAC1cBAn8jAEEQayIDJAAgAC0AEEUEQCADQQhqIABBEGpBARCiAiECIAAoAgwiACABIAAoAgAoAhQRAAAgAi0ABQRAIAIoAgAgAi0ABDoAAAsLIANBEGokAAsWACABIABrIgEEQCACIAAgARCoARoLC9MBAQJ/IwBBMGsiASQAIAEgAUEoakHc6AAQxgEpAgA3AxACQCAAIAFBEGoQxwEEQCAAEIgCGiABQSBqIABBABDKASAAQd8AEMkBRQ0BIAAgAUEgahC8AiECDAELIAEgAUEYakHf6AAQxgEpAgA3AwggACABQQhqEMcBRQ0AIAFBIGogAEEAEMoBIAEoAiAgASgCJEYNACAAQfAAEMkBRQ0AIAAQiAIaIAFBIGogAEEAEMoBIABB3wAQyQFFDQAgACABQSBqELwCIQILIAFBMGokACACC+gOAQV/IwBBkARrIgEkAAJAIABB5gAQyQFFDQAgAQJ/QQEgACgCACIDIAAoAgRHBH8gAywAAAVBAAtBGHRBGHUiA0HMAEYNABogA0H/AXEiBEHyAEcEQEEBIARB7ABGDQEaIARB0gBHDQILQQALOgCPBCAAIAAoAgBBAWo2AgAgAUGABGoiBEIANwIAIAEgAUH4A2pB0OkAEMYBKQIANwPwAQJAIAAgAUHwAWoQxwEEQCABQfADakG31wAQxgEaDAELIAEgAUHoA2pB0+kAEMYBKQIANwPoASAAIAFB6AFqEMcBBEAgAUHwA2pButcAEMYBGgwBCyABIAFB4ANqQdbpABDGASkCADcD4AEgACABQeABahDHAQRAIAFB8ANqQbzXABDGARoMAQsgASABQdgDakHZ6QAQxgEpAgA3A9gBIAAgAUHYAWoQxwEEQCABQfADakG/1wAQxgEaDAELIAEgAUHQA2pB3OkAEMYBKQIANwPQASAAIAFB0AFqEMcBBEAgAUHwA2pB1tcAEMYBGgwBCyABIAFByANqQd/pABDGASkCADcDyAEgACABQcgBahDHAQRAIAFB8ANqQenXABDGARoMAQsgASABQcADakHi6QAQxgEpAgA3A8ABIAAgAUHAAWoQxwEEQCABQfADakHu1wAQxgEaDAELIAEgAUG4A2pB5ekAEMYBKQIANwO4ASAAIAFBuAFqEMcBBEAgAUHwA2pB8NcAEMYBGgwBCyABIAFBsANqQejpABDGASkCADcDsAEgACABQbABahDHAQRAIAFB8ANqQfPXABDGARoMAQsgASABQagDakHr6QAQxgEpAgA3A6gBIAAgAUGoAWoQxwEEQCABQfADakH11wAQxgEaDAELIAEgAUGgA2pB7ukAEMYBKQIANwOgASAAIAFBoAFqEMcBBEAgAUHwA2pB+NcAEMYBGgwBCyABIAFBmANqQfHpABDGASkCADcDmAEgACABQZgBahDHAQRAIAFB8ANqQfvXABDGARoMAQsgASABQZADakH06QAQxgEpAgA3A5ABIAAgAUGQAWoQxwEEQCABQfADakH+1wAQxgEaDAELIAEgAUGIA2pB9+kAEMYBKQIANwOIASAAIAFBiAFqEMcBBEAgAUHwA2pBgNgAEMYBGgwBCyABIAFBgANqQfrpABDGASkCADcDgAEgACABQYABahDHAQRAIAFB8ANqQYPYABDGARoMAQsgASABQfgCakH96QAQxgEpAgA3A3ggACABQfgAahDHAQRAIAFB8ANqQYbYABDGARoMAQsgASABQfACakGA6gAQxgEpAgA3A3AgACABQfAAahDHAQRAIAFB8ANqQYrYABDGARoMAQsgASABQegCakGD6gAQxgEpAgA3A2ggACABQegAahDHAQRAIAFB8ANqQYzYABDGARoMAQsgASABQeACakGG6gAQxgEpAgA3A2AgACABQeAAahDHAQRAIAFB8ANqQY7YABDGARoMAQsgASABQdgCakGJ6gAQxgEpAgA3A1ggACABQdgAahDHAQRAIAFB8ANqQefXABDGARoMAQsgASABQdACakGM6gAQxgEpAgA3A1AgACABQdAAahDHAQRAIAFB8ANqQZHYABDGARoMAQsgASABQcgCakGP6gAQxgEpAgA3A0ggACABQcgAahDHAQRAIAFB8ANqQZfYABDGARoMAQsgASABQcACakGS6gAQxgEpAgA3A0AgACABQUBrEMcBBEAgAUHwA2pBp9gAEMYBGgwBCyABIAFBuAJqQZXqABDGASkCADcDOCAAIAFBOGoQxwEEQCABQfADakGq2AAQxgEaDAELIAEgAUGwAmpBmOoAEMYBKQIANwMwIAAgAUEwahDHAQRAIAFB8ANqQazYABDGARoMAQsgASABQagCakGb6gAQxgEpAgA3AyggACABQShqEMcBBEAgAUHwA2pBs9gAEMYBGgwBCyABIAFBoAJqQZ7qABDGASkCADcDICAAIAFBIGoQxwEEQCABQfADakG12AAQxgEaDAELIAEgAUGYAmpBoeoAEMYBKQIANwMYIAAgAUEYahDHAQRAIAFB8ANqQc/YABDGARoMAQsgASABQZACakGk6gAQxgEpAgA3AxAgACABQRBqEMcBBEAgAUHwA2pB0dgAEMYBGgwBCyABIAFBiAJqQafqABDGASkCADcDCCAAIAFBCGoQxwEEQCABQfADakHU2AAQxgEaDAELIAEgAUGAAmpBquoA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KQIANwMIIAAgAUEIahDHARogASAAQQAQmQIiAjYCHEEAIAJFDQAaIAIgACgCACICIAAoAgRHBH8gAiwAAAVBAAtB/wFxQckARw0AGiABIABBABDpASICNgIYIAIEfyAAIAFBHGogAUEYahDqAQVBAAsLIQAgAUEwaiQAIAALFQAgAEGgA2pBDBD7ASABKAIAEKQDC1ABAX8jAEEQayIEJAAgAEEYEPsBIQAgASgCACEBIARBCGogAhDGASECIAMoAgAhAyAEIAIpAgA3AwAgACABIAQgAxCnAyEAIARBEGokACAACx8AIABBoANqQRQQ+wEgASgCACACKAIAIAMtAAAQqwMLPQEBfiMAQRBrIgEkACAAQRQQ+wEhACABIAIpAgAiAzcDACABIAM3AwggAEEAIAEQrwMhACABQRBqJAAgAAtDAQF/IwBBEGsiAyQAIABBFBD7ASEAIAEoAgAhASADIANBCGogAhDGASkCADcDACAAIAEgAxCxAyEAIANBEGokACAACxUAIABBoANqIAEgAiADIAQgBRCyAwtJACAAQQwQ+wEhACABKAIAIQEgAEEBOgAHIABBAToABiAAQQE6AAUgAEE2OgAEIABBnNMANgIAIAAgATYCCCAAQfSBATYCACAAC2wCAX8BfiMAQRBrIgIkACAAQRAQ+wEhACACIAEpAgAiAzcDACACIAM3AwggAEEBOgAHIABBAToABiAAQQE6AAUgAEEAOgAEIABBnNMANgIAIABB8IIBNgIAIAAgAikCADcCCCACQRBqJAAgAAtGAgF/AX4jAEEQayIDJAAgAEEUEPsBIQAgASgCACEBIAMgAikCACIENwMAIAMgBDcDCCAAIAEgAxCvAyEAIANBEGokACAAC0kAIABBDBD7ASEAIAEoAgAhASAAQQE6AAcgAEEBOgAGIABBAToABSAAQT86AAQgAEGc0wA2AgAgACABNgIIIABB3IMBNgIAIAALSgAgAEEMEPsBIQAgASgCACEBIABBAToAByAAQQE6AAYgAEEBOgAFIABBwgA6AAQgAEGc0wA2AgAgACABNgIIIABB6N4ANgIAIAALSQEBfyMAQRBrIgMkACADIAI2AgwgACABNgIAIAEoAgAhASAAQQE6AAggACABNgIEIAAoAgAgA0EMaigCADYCACADQRBqJAAgAAtPAQJ/IwBBEGsi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ADcDKCACQgA3AyAgAiACKgI4uzkDECACQRhqIgAgAkEgakEYQfDcACACQRBqELEBIAJBIGpqNgIEIAAgAkEgajYCACACIAApAgA3AwggASACQQhqEIICCyACQUBrJAALCQAgACABEN8CCywAAkAgACABRg0AA0AgACABQQFrIgFPDQEgACABEOACIABBAWohAAwACwALCzUBAX8jAEEQayICJAAgAiAALQAAOgAPIAAgAS0AADoAACABIAJBD2otAAA6AAAgAkEQaiQAC20CAX8BfiMAQRBrIgIkACAAQRAQ+wEhACACIAEpAgAiAzcDACACIAM3AwggAEEBOgAHIABBAToABiAAQQE6AAUgAEHHADoABCAAQZzTADYCACAAQfzcADYCACAAIAIpAgA3AgggAkEQaiQAIAALiQIBBH8jAEHQAGsiAiQAIABBCGoiACgCACEEIAAoAgQgBGtBAWpBEU8EQCACQcgAaiEDQQAhAANAIABBEEcEQCADQVBBqX8gBCAAQQFyaiwAACIFQTBrQQpJGyAFakEAQQkgACAEaiwAACIFQTBrQQpJGyAFakEEdGo6AAAgA0EBaiEDIABBAmohAAwBCwsgAkHIAGogAxDeAiACQgA3AzggAkIANwMwIAJCADcDKCACQgA3AyAgAiACKwNIOQMQIAJBGGoiACACQSBqQSBB5N0AIAJBEGoQsQEgAkEgamo2AgQgACACQSBqNgIAIAIgACkCADcDCCABIAJBCGoQggILIAJB0ABqJAALbQIBfwF+IwBBEGsiAiQAIABBEBD7ASEAIAIgASkCACIDNwMAIAIgAzcDCCAAQQE6AAcgAEEBOgAGIABBAToABSAAQcgAOgAEIABBnNMANgIAIABB8N0ANgIAIAAgAikCADcCCCACQRBqJAAgAAuEAgEEfyMAQfAAayICJAAgAEEIaiIAKAIAIQQgACgCBCAEa0EBakEhTwRAIAJB4ABqIQNBACEAA0AgAEEgRwRAIANBUEGpfyAEIABBAXJqLAAAIgVBMGtBCkkbIAVqQQBBCSAAIARqLAAAIgVBMGtBCkkbIAVqQQR0ajoAACADQQFqIQMgAEECaiEADAELCyACQeAAaiADEN4CIAJBMGpBAEEoEKcBGiACIAIpA2A3AxAgAiACKQNoNwMYIAJBKGoiACACQTBqQShB2N4AIAJBEGoQsQEgAkEwamo2AgQgACACQTBqNgIAIAIgACkCADcDCCABIAJBCGoQggILIAJB8ABqJAALewEBfyMAQSBrIgIkACACIAJBGGpBzN8AEMYBKQIANwMIIAEgAkEIahCCAiAAKAIIIgAgASAAKAIAKAIQEQAAIAAtAAVBAUcEQCAAIAEgACgCACgCFBEAAAsgAiACQRBqQc/fABDGASkCADcDACABIAIQggIgAkEgaiQAC2wCAX8BfiMAQRBrIgIkACAAQRAQ+wEhACACIAEpAgAiAzcDACACIAM3AwggAEEBOgAHIABBAToABiAAQQE6AAUgAEEsOgAEIABBnNMANgIAIABB/N8ANgIAIAAgAikCADcCCCACQRBqJAAgAAt4AQF/IwBBEGsiAiQAIAIgATYCDCAAKAIAIgAgAUECdGoiASABKAKMAyIBQQFqNgKMAyACIAE2AgggAiAAQaADakEQEPsBIAIoAgwgAkEIaigCABDtAiIBNgIEIAAoAtACQQRrKAIAIAJBBGoQ2QEgAkEQaiQAIAELbQIBfwN+IwBBMGsiBCQAIABBIBD7ASEAIAQgASkCACIFNwMoIAQgAikCACIGNwMgIAQgAykCACIHNwMYIAQgBTcDECAEIAY3AwggBCAHNwMAIAAgBEEQaiAEQQhqIAQQ+wIhACAEQTBqJAAgAAtsAgF/AX4jAEEwayICJAAgAiACQShqQeDgABDGASkCADcDECABIAJBEGoQggIgAiAAKQIIIgM3AwggAiADNwMgIAEgAkEIahCCAiACIAJBGGpB6eAAEMYBKQIANwMAIAEgAhCCAiACQTBqJAALSQAgAEEMEPsBIQAgASgCACEBIABBAToAByAAQQE6AAYgAEEAOgAFIABBHDoABCAAQZzTADYCACAAIAE2AgggAEGI4gA2AgAgAAtGAgF/AX4jAEEQayIDJAAgAEEUEPsBIQAgASgCACEBIAMgAikCACIENwMAIAMgBDcDCCAAIAEgAxD2AiEAIANBEGokACAAC0kAIABBDBD7ASEAIAEoAgAhASAAQQE6AAcgAEEBOgAGIABBADoABSAAQR86AAQgAEGc0wA2AgAgACABNgIIIABBmOUANgIAIAALQAAgAEEBOgAHIABBAToABiAAQQE6AAUgAEEbOgAEIABBnNMANgIAIAAgAjYCDCAAIAE2AgggAEGE4QA2AgAgAAt6AQF/IwBBIGsiAiQAAkAgAgJ/AkACQAJAIAAoAggOAwABAgQLIAJBGGpB9OEAEMYBDAILIAJBEGpB9+EAEMYBDAELIAJBCGpB+uEAEMYBCykCADcDACABIAIQggILIAAoAgwiAARAIAEgAEEBa60Q7wILIAJBIGokAAt7AQN/IwBBMGsiAiQAAkAgAVAEQCAAQTAQwwEMAQsgAkElaiEDA0AgAVBFBEAgA0EBayIDIAEgAUIKgCIBQgp+fadBMHI6AAAMAQsLIAJBCGoiBCACQSVqNgIEIAQgAzYCACACIAQpAgA3AwAgACACEPACCyACQTBqJAALMAIBfwF+IwBBEGsiAiQAIAIgASkCACIDNwMAIAIgAzcDCCAAIAIQggIgAkEQaiQACy0AIwBBEGsiACQAIAAgAEEIakH04gAQxgEpAgA3AwAgASAAEIICIABBEGokAAswACAAKAIIIgAgASAAKAIAKAIQEQAAIAAtAAVBAUcEQCAAIAEgACgCACgCFBEAAAsLQAAgAEEBOgAHIABBAToABiAAQQA6AAUgAEEdOgAEIABBnNMANgIAIAAgAjYCDCAAIAE2AgggAEGI4wA2AgAgAAtwAQJ/IwBBEGsiAiQAIAAoAgwiAyABIAMoAgAoAhARAAACfyAAKAIMIgAtAAUiA0ECRwRAIANFDAELIAAgASAAKAIAKAIAEQEAC0UEQCACIAJBCGpB+OMAEMYBKQIANwMAIAEgAhCCAgsgAkEQaiQAC0YBAX8gACgCCCICIAEgAigCACgCEBEAACACLQAFQQFHBEAgAiABIAIoAgAoAhQRAAALIAAoAgwiACABIAAoAgAoAhQRAAALQwAgAEEBOgAHIABBAToABiAAQQA6AAUgAEEeOgAEIABBnNMANgIAIAAgATYCCCAAQYTkADYCACAAIAIpAgA3AgwgAAtXAQF/IwBBIGsiAiQAIAIgAkEYakH05AAQxgEpAgA3AwggASACQQhqEIICIABBDGogARD4AiACIAJBEGpB/uQAEMYBKQIANwMAIAEgAhCCAiACQSBqJAALsQEBBn8jAEEQayICJABBASEEA0AgACgCBCAFRwRAIAEoAgQhBiAEQQFxRQRAIAIgAkEIakGK5QAQxgEpAgA3AwAgASACEIICCyABKAIEIQcgACgCACAFQQJ0aigCACIDIAEgAygCACgCEBEAACADLQAFQQFHBEAgAyABIAMoAgAoAhQRAAALIAVBAWohBSAHIAEoAgRGBH8gASAGNgIEIAQFQQALIQQMAQsLIAJBEGokAAtDAQF/IwBBEGsiAiQAIAAoAggiACABIAAoAgAoAhARAAAgAiACQQhqQYTmABDGASkCADcDACABIAIQggIgAkEQaiQACxYAIAAoAggiACABIAAoAgAoAhQRAAALUAAgAEEBOgAHIABBAToABiAAQQE6AAUgAEEtOgAEIABBnNMANgIAIABBkOYANgIAIAAgASkCADcCCCAAIAIpAgA3AhAgACADKQIANwIYIAALcwIBfwF+IwBBMGsiAiQAIAIgAkEoakH05gAQxgEpAgA3AxAgASACQRBqEIICIAIgACkCGCIDNwMIIAIgAzcDICABIAJBCGoQggIgAiACQRhqQengABDGASkCADcDACABIAIQggIgACABEP0CIAJBMGokAAunAQECfyMAQUBqIgIkACAAQQhqIgMoAgQEQCACIAJBOGpBitgAEMYBKQIANwMYIAEgAkEYahCCAiADIAEQ+AIgAiACQTBqQf7XABDGASkCADcDECABIAJBEGoQggILIAIgAkEoakGM2wAQxgEpAgA3AwggASACQQhqEIICIABBEGogARD4AiACIAJBIGpBstcAEMYBKQIANwMAIAEgAhCCAiACQUBrJAALZAEBfyMAQSBrIgIkACACIAJBGGpB5OcAEMYBKQIANwMIIAEgAkEIahCCAiAAKAIIIgAtAARBLUYEQCAAIAEQ/QILIAIgAkEQakHn5wAQxgEpAgA3AwAgASACEIICIAJBIGokAAtEACAAQQE6AAcgAEEBOgAGIABBAToABSAAQcQAOgAEIABBnNMANgIAIAAgATYCCCAAQfjnADYCACAAIAIpAgA3AgwgAAuaAQICfwF+IwBBMGsiAiQAIAIgAkEoakGM2wAQxgEpAgA3AxAgASACQRBqEIICIAAoAggiAyABIAMoAgAoAhARAAAgAy0ABUEBRwRAIAMgASADKAIAKAIUEQAACyACIAJBIGpBstcAEMYBKQIANwMIIAEgAkEIahCCAiACIAApAgwiBDcDACACIAQ3AxggASACEIICIAJBMGokAAtsAgF/AX4jAEEQayICJAAgAEEQEPsBIQAgAiABKQIA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EMYBEI0DBEAgAiACQUBrQbLXABDGASkCADcDCCABIAJBCGoQggILIAJBgAFqJAALMQAgACgCBCAAKAIAayABKAIEIAEoAgBrRgR/IAAoAgAgACgCBCABKAIAEO4BBUEACwtGAgF/AX4jAEEQayIDJAAgAEEUEPsBIQAgAyABKQIAIgQ3AwggAigCACEBIAMgBDcDACAAIAMgARCPAyEAIANBEGokACAAC0kBAX4gAEEBOgAHIABBAToABiAAQQE6AAUgAEE6OgAEIABBnNMANgIAIABBjO0ANgIAIAEpAgAhAyAAIAI2AhAgACADNwIIIAALmgECAX8BfiMAQTBrIgIkACACIAApAggiAzcDECACIAM3AyggASACQRBqEIICIAIgAkEgakGM2wAQxgEpAgA3AwggASACQQhqEIICIAAoAhAiACABIAAoAgAoAhARAAAgAC0ABUEBRwRAIAAgASAAKAIAKAIUEQAACyACIAJBGGpBstcAEMYBKQIANwMAIAEgAhCCAiACQTBqJAALUAEBfiAAQQE6AAcgAEEBOgAGIABBAToABSAAQTU6AAQgAEGc0wA2AgAgAEH07QA2AgAgASkCACEEIAAgAzYCFCAAIAI2AhAgACAENwIIIAALsgECAn8BfiMAQUBqIgIkACACIAApAggiBDcDGCACIAQ3AzggASACQRhqEIICIAIgAkEwakGK2AAQxgEpAgA3AxAgASACQRBqEIICIAAoAhAiAyABIAMoAgAoAhARAAAgAiACQShqQdDuABDGASkCADcDCCABIAJBCGoQggIgACgCFCIAIAEgACgCACgCEBEAACACIAJBIGpBstcAEMYBKQIANwMAIAEgAhCCAiACQUBrJAALQwAgAEEBOgAHIABBAToABiAAQQE6AAUgAEE3OgAEIABBnNMANgIAIAAgATYCCCAAQdzuADYCACAAIAIpAgA3AgwgAAuFAQECfyMAQSBrIgIkACAAKAIIIgMgASADKAIAKAIQEQAAIAMtAAVBAUcEQCADIAEgAygCACgCFBEAAAsgAiACQRhqQYzbABDGASkCADcDCCABIAJBCGoQggIgAEEMaiABEPgCIAIgAkEQakGy1wAQxgEpAgA3AwAgASACEIICIAJBIGokAAtGAgF/AX4jAEEQayIDJAAgAEEUEPsBIQAgASgCACEBIAMgAikCACIENwMAIAMgBDcDCCAAIAEgAxCWAyEAIANBEGokACAAC0MAIABBAToAByAAQQE6AAYgAEEBOgAFIABBPDoABCAAQZzTADYCACAAIAE2AgggAEHE7wA2AgAgACACKQIANwIMIAALowEBAn8jAEEwayICJAAgAiACQShqQYzbABDGASkCADcDECABIAJBEGoQggIgACgCCCIDIAEgAygCACgCEBEAACADLQAFQQFHBEAgAyABIAMoAgAoAhQRAAALIAIgAkEgakGo8AAQxgEpAgA3AwggASACQQhqEIICIABBDGogARD4AiACIAJBGGpBstcAEMYBKQIANwMAIAEgAhCCAiACQTBqJAALRwAgAEEBOgAHIABBAToABiAAQQE6AAUgAEE5OgAEIABBnNMANgIAIAAgAzoADSAAIAI6AAwgACABNgIIIABBtPAANgIAIAALqQEBAX8jAEEwayICJAAgAC0ADARAIAIgAkEoakGo1gAQxgEpAgA3AxAgASACQRBqEIICCyACIAJBIGpBlPEAEMYBKQIANwMIIAEgAkEIahCCAiAALQANBEAgAiACQRhqQZvxABDGASkCADcDACABIAIQggILIAAoAggiACABIAAoAgAoAhARAAAgAC0ABUEBRwRAIAAgASAAKAIAKAIUEQAACyACQTBqJAALawECfyMAQRBrIgEkACABAn8gACgCACICIAAoAgRHBH8gAiwAAAVBAAtBGHRBGHVBMGtBCU0EQCAAEMECDAELIAAQwAILIgI2AgwgAgR/IABBoANqIAFBDGoQngMFQQALIQAgAUEQaiQAIAALPQIBfwF+IwBBEGsiAiQAIABBEBD7ASEAIAIgASkCACIDNwMAIAIgAzcDCCAAIAIQmgIhACACQRBqJAAgAAtAACAAQQE6AAcgAEEBOgAGIABBAToABSAAQRY6AAQgAEGc0wA2AgAgACACNgIMIAAgATYCCCAAQdDxADYCACAACxUAIABBoANqQQwQ+wEgASgCABChAwtJACAAQQwQ+wEhACABKAIAIQEgAEEBOgAHIABBAToABiAAQQE6AAUgAEErOgAEIABBnNMANgIAIAAgATYCCCAAQcTyADYCACAAC0MBAX8jAEEQayICJAAgAiACQQhqQdjXABDGASkCADcDACABIAIQggIgACgCCCIAIAEgACgCACgCEBEAACACQRBqJAALSQAgAEEMEPsBIQAgASgCACEBIABBAToAByAAQQE6AAYgAEEBOgAFIABBEzoABCAAQZzTADYCACAAIAE2AgggAEGU+AA2AgAgAAs5ACAAQQE6AAcgAEEBOgAGIABBAToABSAAQQQ6AAQgAEGc0wA2AgAgACABNgIIIABBlPcANgIAIAALXQEBfyMAQRBrIgIkACACIAJBCGpBgPgAEMYBKQIANwMAIAEgAhCCAiAAKAIIIgAgASAAKAIAKAIQEQAAIAAtAAVBAUcEQCAAIAEgACgCACgCFBEAAAsgAkEQaiQAC10BAX8jAEEQayICJAAgAiACQQhqQfj4ABDGASkCADcDACABIAIQggIgACgCCCIAIAEgACgCACgCEBEAACAALQAFQQFHBEAgACABIAAoAgAoAhQRAAALIAJBEGokAAs5ACAAQQE6AAcgAEEBOgAGIABBAToABSAAQSY6AAQgAEGc0wA2AgAgACABNgIIIABBjPkANgIAIAALXQEBfyMAQRBrIgIkACACIAJBCGpBqNYAEMYBKQIANwMAIAEgAhCCAiAAKAIIIgAgASAAKAIAKAIQEQAAIAAtAAVBAUcEQCAAIAEgACgCACgCFBEAAAsgAkEQaiQACxYAIAAgASgCCCIAIAAoAgAoAhgRAAALUAEBfiAAQQE6AAcgAEEBOgAGIABBAToABSAAQTM6AAQgAEGc0wA2AgAgACABNgIIIABB/PkANgIAIAIpAgAhBCAAIAM2AhQgACAENwIMIAALjAECAn8BfiMAQRBrIgIkACAAKAIIIgMgASADKAIAKAIQEQAAIAMtAAVBAUcEQCADIAEgAygCACgCFBEAAAsgAiAAKQIMIgQ3AwAgAiAENwMIIAEgAhCCAiAAKAIUIgAgASAAKAIAKAIQEQAAIAAtAAVBAUcEQCAAIAEgACgCACgCFBEAAAsgAkEQaiQAC0AAIABBAToAByAAQQE6AAYgAEEBOgAFIABBMDoABCAAQZzTADYCACAAIAI2AgwgACABNgIIIABB5PoANgIAIAALxwEBAn8jAEEwayICJAAgAiACQShqQYzbABDGASkCADcDECABIAJBEGoQggIgACgCCCIDIAEgAygCACgCEBEAACADLQAFQQFHBEAgAyABIAMoAgAoAhQRAAALIAIgAkEgakHM+wAQxgEpAgA3AwggASACQQhqEIICIAAoAgwiACABIAAoAgAoAhARAAAgAC0ABUEBRwRAIAAgASAAKAIAKAIUEQAACyACIAJBGGpBz/sAEMYBKQIANwMAIAEgAhCCAiACQTBqJAALSAAgAEEBOgAHIABBAToABiAAQQE6AAUgAEHJADoABCAAQZzTADYCACAAIAM6ABAgACACNgIMIAAgATYCCCAAQdz7ADYCACAAC/oBAQJ/IwBBEGsiAyQAAkAgAC0AEARAIAFB2wAQwwEgACgCCCICIAEgAigCACgCEBEAACACLQAFQQFHBEAgAiABIAIoAgAoAhQRAAALIAFB3QAQwwEMAQsgAUEuEMMBIAAoAggiAiABIAIoAgAoAhARAAAgAi0ABUEBRwRAIAIgASACKAIAKAIUEQAACwsCfyAAKAIMIgItAARByQBrQf8BcUECTwRAIAMgA0EIakG8/AAQxgEpAgA3AwAgASADEIICIAAoAgwhAgsgAgsgASACKAIAKAIQEQAAIAItAAVBAUcEQCACIAEgAigCACgCFBEAAAsgA0EQaiQAC0gAIABBAToAByAAQQE6AAYgAEEBOgAFIABBygA6AAQgAEGc0wA2AgAgACADNgIQIAAgAjYCDCAAIAE2AgggAEHI/AA2AgAgAAuEAgECfyMAQSBrIgMkACABQdsAEMMBIAAoAggiAiABIAIoAgAoAhARAAAgAi0ABUEBRwRAIAIgASACKAIAKAIUEQAACyADIANBGGpBrP0AEMYBKQIANwMIIAEgA0EIahCCAiAAKAIMIgIgASACKAIAKAIQEQAAIAItAAVBAUcEQCACIAEgAigCACgCFBEAAAsgAUHdABDDAQJ/IAAoAhAiAi0ABEHJAGtB/wFxQQJPBEAgAyADQRBqQbz8ABDGASkCADcDACABIAMQggIgACgCECECCyACCyABIAIoAgAoAhARAAAgAi0ABUEBRwRAIAIgASACKAIAKAIUEQAACyADQSBqJAALQwAgAEEBOgAHIABBAToABiAAQQE6AAUgAEE9OgAEIABBnNMANgIAIAAgATYCCCAAQbz9ADYCACAAIAIpAgA3AgwgAAtRAQF/IAAoAggiAgRAIAIgASACKAIAKAIQEQAAIAItAAVBAUcEQCACIAEgAigCACgCFBEAAAsLIAFB+wAQwwEgAEEMaiABEPgCIAFB/QAQwwELQwAgAEEBOgAHIABBAToABiAAQQE6AAUgAEExOgAEIABBnNMANgIAIAAgATYCCCAAQaj+ADYCACAAIAIpAgA3AgwgAAtwAQF/IwBBIGsiBiQAIABBIBD7ASEAIAYgASkCADcDGCACKAIAIQEgBiADKQIANwMQIAQtAAAhAiAFLQAAIQMgBiAGKQMYNwMIIAYgBikDEDcDACAAIAZBCGogASAGIAIgAxCzAyEAIAZBIGokACAAC2UBAX4gAEEBOgAHIABBAToABiAAQQE6AAUgAEE4OgAEIABBnNMANgIAIABBnP8ANgIAIAEpAgAhBiAAIAI2AhAgACAGNwIIIAMpAgAhBiAAIAU6AB0gACAEOgAcIAAgBjcCFCAAC9cCAQJ/IwBB8ABrIgIkACAALQAcBEAgAiACQegAakH4/wAQxgEpAgA3AzAgASACQTBqEIICCyACIAJB4ABqQYSAARDGASkCADcDKCABIAJBKGoQggIgAC0AHQRAIAIgAkHYAGpB5OcAEMYBKQIANwMgIAEgAkEgahCCAgsgAUEgEMMBIABBCGoiAygCBARAIAIgAkHQAGpBjNsAEMYBKQIANwMYIAEgAkEYahCCAiADIAEQ+AIgAiACQcgAakGy1wAQxgEpAgA3AxAgASACQRBqEIICCyAAKAIQIgMgASADKAIAKAIQEQAAIAMtAAVBAUcEQCADIAEgAygCACgCFBEAAAsgAEEUaiIAKAIEBEAgAiACQUBrQYzbABDGASkCADcDCCABIAJBCGoQggIgACABEPgCIAIgAkE4akGy1wAQxgEpAgA3AwAgASACEIICCyACQfAAaiQAC1MBAX4gAEEBOgAHIABBAToABiAAQQE6AAUgAEE0OgAEIABBnNMANgIAIABBkIABNgIAIAEpAgAhBCAAIAI2AhAgACAENwIIIAAgAykCADcCFCAAC3sCAn8BfiMAQSBrIgIkACACIAApAggiBDcDCCACIAQ3AxggASACQQhqEIICIAAoAhAiAyABIAMoAgAoAhARAAAgAy0ABUEBRwRAIAMgASADKAIAKAIUEQAACyACIAApAhQiBDcDACACIAQ3AxAgASACEIICIAJBIGokAAtHACAAQQE6AAcgAEEBOgAGIABBAToABSAAQTI6AAQgAEGc0wA2AgAgACADNgIQIAAgAjYCDCAAIAE2AgggAEH8gAE2AgAgAAuTAgECfyMAQUBqIgIkACACIAJBOGpBjNsAEMYBKQIANwMYIAEgAkEYahCCAiAAKAIIIgMgASADKAIAKAIQEQAAIAMtAAVBAUcEQCADIAEgAygCACgCFBEAAAsgAiACQTBqQeCBARDGASkCADcDECABIAJBEGoQggIgACgCDCIDIAEgAygCACgCEBEAACADLQAFQQFHBEAgAyABIAMoAgAoAhQRAAALIAIgAkEoakHmgQEQxgEpAgA3AwggASACQQhqEIICIAAoAhAiACABIAAoAgAoAhARAAAgAC0ABUEBRwRAIAAgASAAKAIAKAIUEQAACyACIAJBIGpBstcAEMYBKQIANwMAIAEgAhCCAiACQUBrJAALXwEBfyMAQTBrIgIkACACIAJBKGpB3IIBEMYBKQIANwMIIAEgAkEIahCCAiACQRhqIAAoAggQhwMgARCIAyACIAJBEGpBstcAEMYBKQIANwMAIAEgAhCCAiACQTBqJAALDAAgAEEIaiABEPgCC10BAX8jAEEQayICJAAgAiACQQhqQbyEARDGASkCADcDACABIAIQggIgACgCCCIAIAEgACgCACgCEBEAACAALQAFQQFHBEAgACABIAAoAgAoAhQRAAALIAJBEGokAAs6ACAAQQE6AAcgAEEBOgAGIABBAToABSAAQcAAOgAEIABBnNMANgIAIAAgATYCCCAAQcyEATYCACAAC3sBAX8jAEEgayICJAAgAiACQRhqQayFARDGASkCADcDCCABIAJBCGoQ8AIgACgCCCIAIAEgACgCACgCEBEAACAALQAFQQFHBEAgACABIAAoAgAoAhQRAAALIAIgAkEQakGy1wAQxgEpAgA3AwAgASACEPACIAJBIGokAAtJACAAQQwQ+wEhACABKAIAIQEgAEEBOgAHIABBAToABiAAQQE6AAUgAEEoOgAEIABBnNMANgIAIAAgATYCCCAAQcCFATYCACAAC54BAQF/IwBBQGoiAiQAAkAgAgJ/AkACQAJAAkACQAJAIAAoAggOBgABAgMEBQcLIAJBOGpBsIYBEMYBDAULIAJBMGpBv4YBEMYBDAQLIAJBKGpB0YYBEMYBDAMLIAJBIGpBmIcBEMYBDAILIAJBGGpByocBEMYBDAELIAJBEGpB/IcBEMYBCykCADcDCCABIAJBCGoQggILIAJBQGskAAsYACAAIAEoAghBAnRBoKQBaigCABDGARoLRwAgAEEBOgAHIABBAToABiAAQQE6AAUgAEEqOgAEIABBnNMANgIAIAAgAzYCECAAIAI6AAwgACABNgIIIABB/IgBNgIAIAALYgEBfyMAQSBrIgIkACAALQAMBEAgAiACQRhqQdjXABDGASkCADcDCCABIAJBCGoQggILIAJBEGogACgCCCIAIAAoAgAoAhgRAAAgAiACKQMQNwMAIAEgAhCCAiACQSBqJAALRgIBfwF+IwBBEGsiAyQAIABBFBD7ASEAIAEoAgAhASADIAIpAgAiBDcDACADIAQ3AwggACABIAMQxAMhACADQRBqJAAgAAtWAQJ/IAEtAAUhAyABLQAGIQQgACABLQAHOgAHIAAgBDoABiAAIAM6AAUgAEEIOgAEIABBnNMANgIAIAAgATYCCCAAQeiJATYCACAAIAIpAgA3AgwgAAuAAQICfwF+IwBBMGsiAiQAIAAoAggiAyABIAMoAgAoAhARAAAgAiACQShqQciKARDGASkCADcDECABIAJBEGoQggIgAiAAKQIMIgQ3AwggAiAENwMgIAEgAkEIahCCAiACIAJBGGpBz/sAEMYBKQIANwMAIAEgAhCCAiACQTBqJAALbAIBfwF+IwBBEGsiAiQAIABBEBD7ASEAIAIgASkCACIDNwMAIAIgAzcDCCAAQQE6AAcgAEEBOgAGIABBAToABSAAQS46AAQgAEGc0wA2AgAgAEHcigE2AgAgACACKQIANwIIIAJBEGokACAACxwAIAFB2wAQwwEgAEEIaiABEPgCIAFB3QAQwwELQAAgAEEBOgAHIABBAToABiAAQQE6AAUgAEEYOgAEIABBnNMANgIAIAAgAjYCDCAAIAE2AgggAEHgiwE2AgAgAAs5ACAAQQE6AAcgAEEBOgAGIABBAToABSAAQSk6AAQgAEGc0wA2AgAgACABNgIIIABByIwBNgIAIAALngEBAX8jAEFAaiICJAACQCACAn8CQAJAAkACQAJAAkAgACgCCA4GAAECAwQFBwsgAkE4akGwhgEQxgEMBQsgAkEwakG/hgEQxgEMBAsgAkEoakGwjQEQxgEMAwsgAkEgakG8jQEQxgEMAgsgAkEYakHJjQEQxgEMAQsgAkEQakHWjQEQxgELKQIANwMIIAEgAkEIahCCAgsgAkFAayQACxgAIAAgASgCCEECdEG4pAFqKAIAEMYBGgs9AgF/AX4jAEEQayICJAAgAEEQEPsBIQAgAiABKQIAIgM3AwAgAiADNwMIIAAgAhDOAyEAIAJBEGokACAAC2wCAX8BfiMAQRBrIgIkACAAQRAQ+wEhACACIAEpAgAiAzcDACACIAM3AwggAEEBOgAHIABBAToABiAAQQE6AAUgAEEjOgAEIABBnNMANgIAIABB+I4BNgIAIAAgAikCADcCCCACQRBqJAAgAAu2AQEBfiAAQQE6AAcgAEEBOgAGIABBAToABSAAQSA6AAQgAEGc0wA2AgAgAEGMjgE2AgAgASkCACECIABBAjoAByAAIAI3AgggAEGCBDsABSAAQQFBAiAAQQhqIgEoAgAgASgCACABKAIEQQJ0ahDPAxs6AAYgASgCACABKAIAIAEoAgRBAnRqENADBEAgAEEBOgAHCyABKAIAIAEoAgAgASgCBEECdGoQ0QMEQCAAQQE6AAULIAALLAECfwNAIAAgAUYiAkUEQCAAKAIAIQMgAEEEaiEAIAMtAAZBAUYNAQsLIAILLAECfwNAIAAgAUYiAkUEQCAAKAIAIQMgAEEEaiEAIAMtAAdBAUYNAQsLIAILLAECfwNAIAAgAUYiAkUEQCAAKAIAIQMgAEEEaiEAIAMtAAVBAUYNAQsLIAILaQEBfyABKAIQQX9GBEAgACgCDCECIAFBADYCDCABIAI2AhALIAEoAgwiAiAAKAIMSQR/An8gACgCCCACQQJ0aigCACIALQAFIgJBAkcEQCACRQwBCyAAIAEgACgCACgCABEBAAsFQQALC2kBAX8gASgCEEF/RgRAIAAoAgwhAiABQQA2AgwgASACNgIQCyABKAIMIgIgACgCDEkEfwJ/IAAoAgggAkECdGooAgAiAC0ABiICQQJHBEAgAkUMAQsgACABIAAoAgAoAgQRAQALBUEACwtpAQF/IAEoAhBBf0YEQCAAKAIMIQIgAUEANgIMIAEgAjYCEAsgASgCDCICIAAoAgxJBH8CfyAAKAIIIAJBAnRqKAIAIgAtAAciAkECRwRAIAJFDAELIAAgASAAKAIAKAIIEQEACwVBAAsLVAEBfyABKAIQQX9GBEAgACgCDCECIAFBADYCDCABIAI2AhALIAEoAgwiAiAAKAIMSQR/IAAoAgggAkECdGooAgAiACABIAAoAgAoAgwRAQAFIAALC1EBAX8gASgCEEF/RgRAIAAoAgwhAiABQQA2AgwgASACNgIQCyABKAIMIgIgACgCDEkEQCAAKAIIIAJBAnRqKAIAIgAgASAAKAIAKAIQEQAACwtRAQF/IAEoAhBBf0YEQCAAKAIMIQIgAUEANgIMIAEgAjYCEAsgASgCDCICIAAoAgxJBEAgACgCCCACQQJ0aigCACIAIAEgACgCACgCFBEAAAsLnQEBAX8jAEEwayICJAAgAiACQShqQYrYABDGASkCADcDECABIAJBEGoQggIgAEEIaiABEPgCAn9BACABKAIEIgBFDQAaIAAgASgCAGpBAWstAAALQf8BcUE+RgRAIAIgAkEgakH44wAQxgEpAgA3AwggASACQQhqEIICCyACIAJBGGpB/tcAEMYBKQIANwMAIAEgAhCCAiACQTBqJAALQAAgAEEBOgAHIABBAToABiAAQQE6AAUgAEElOgAEIABBnNMANgIAIAAgAjYCDCAAIAE2AgggAEHkjwE2AgAgAAtgAQF/IAAoAggiAiABIAIoAgAoAhARAAAgAi0ABUEBRwRAIAIgASACKAIAKAIUEQAACyAAKAIMIgAgASAAKAIAKAIQEQAAIAAtAAVBAUcEQCAAIAEgACgCACgCFBEAAAsLSQAgAEEMEPsBIQAgASgCACEBIABBAToAByAAQQE6AAYgAEEBOgAFIABBJzoABCAAQZzTADYCACAAIAE2AgggAEHckAE2AgAgAAtdAQF/IwBBEGsiAiQAIAIgAkEIakHEkQEQxgEpAgA3AwAgASACEIICIAAoAggiACABIAAoAgAoAhARAAAgAC0ABUEBRwRAIAAgASAAKAIAKAIUEQAACyACQRBqJAALbAIBfwF+IwBBEGsiAiQAIABBEBD7ASEAIAIgASkCACIDNwMAIAIgAzcDCCAAQQE6AAcgAEEBOgAGIABBAToABSAAQSE6AAQgAEGc0wA2AgAgAEHUkQE2AgAgACACKQIANwIIIAJBEGokACAAC0EBAX8jAEEQayICJAAgAiACQQhqQayTARDGASkCADcDACABIAIQggIgAEEIaiABEPgCIAFB3QAQwwEgAkEQaiQAC2UBAX4gAEEAOgAHIABBAToABiAAQQA6AAUgAEESOgAEIABBnNMANgIAIAAgAjYCDCAAIAE2AgggAEHEkwE2AgAgAykCACEHIAAgBjoAICAAIAU2AhwgACAENgIYIAAgBzcCECAACwQAQQELpAEBA38jAEEQayIDJAACQCAAKAIIIgJFDQAgAiABIAIoAgAoAhARAAACfyAAKAIIIgItAAUiBEECRwRAIARFDAELIAIgASACKAIAKAIAEQEACw0AIAMgA0EIakH44wAQxgEpAgA3AwAgASADEIICCyAAKAIMIgAgASAAKAIAKAIQEQAAIAAtAAVBAUcEQCAAIAEgACgCACgCFBEAAAsgA0EQaiQAC/kCAQJ/IwBB8ABrIgIkACACIAJB6ABqQYzbABDGASkCADcDMCABIAJBMGoQggIgAEEQaiABEPgCIAIgAkHgAGpBstcAEMYBKQIANwMoIAEgAkEoahCCAiAAKAIIIgMEQCADIAEgAygCACgCFBEAAAsCfyAAKAIcIgNBAXEEQCACIAJB2ABqQayUARDGASkCADcDICABIAJBIGoQggIgACgCHCEDCyADQQJxCwR/IAIgAkHQAGpBs5QBEMYBKQIANwMYIAEgAkEYahCCAiAAKAIcBSADC0EEcQRAIAIgAkHIAGpBvZQBEMYBKQIANwMQIAEgAkEQahCCAgsCQCACAn8CQAJAIAAtACBBAWsOAgABAwsgAkFAa0HHlAEQxgEMAQsgAkE4akHKlAEQxgELKQIANwMIIAEgAkEIahCCAgsgACgCGCIABEAgACABIAAoAgAoAhARAAAgAC0ABUEBRwRAIAAgASAAKAIAKAIUEQAACwsgAkHwAGokAAtDACAAQQE6AAcgAEEBOgAGIABBAToABSAAQQE6AAQgAEGc0wA2AgAgACABNgIIIABB2JQBNgIAIAAgAikCADcCDCAAC5oBAgJ/AX4jAEEwayICJAAgACgCCCIDIAEgAygCACgCEBEAACADLQAFQQFHBEAgAyABIAMoAgAoAhQRAAALIAIgAkEoakH/7AAQxgEpAgA3AxAgASACQRBqEIICIAIgACkCDCIENwMIIAIgBDcDICABIAJBCGoQggIgAiACQRhqQbLXABDGASkCADcDACABIAIQggIgAkEwaiQACxoAIABBoANqQRAQ+wEgASgCACACKAIAEP8DC1IBAn8gAEEMEPsBIgIhACABKAIAIgEtAAUhAyAAQQE6AAcgAEEBOgAGIAAgAzoABSAAQQs6AAQgAEGc0wA2AgAgAiABNgIIIAJB0KEBNgIAIAILQwEBfyMAQRBrIgMkACAAQRQQ+wEhACABKAIAIQEgAyADQQhqIAIQxgEpAgA3AwAgACABIAMQkgQhACADQRBqJAAgAAtJACAAQQwQ+wEhACABKAIAIQEgAEEBOgAHIABBAToABiAAQQE6AAUgAEEQOgAEIABBnNMANgIAIAAgATYCCCAAQcCXATYCACAAC2wCAX8BfiMAQRBrIgIkACAAQRAQ+wEhACACIAEpAgAiAzcDACACIAM3AwggAEEBOgAHIABBAToABiAAQQE6AAUgAEEROgAEIABBnNMANgIAIABBuJgBNgIAIAAgAikCADcCCCACQRBqJAAgAAthAgF/AX4jAEEQayIGJAAgAEEgEPsBIQAgASgCACEBIAYgAikCACIHNwMIIAUoAgAhAiAELQAAIQQgAygCACEDIAYgBzcDACAAIAEgBiADIAQgAhDtAyEAIAZBEGokACAAC3sBAX8jAEEgayICJAAgAiACQRhqQaSYARDGASkCADcDCCABIAJBCGoQggIgACgCCCIAIAEgACgCACgCEBEAACAALQAFQQFHBEAgACABIAAoAgAoAhQRAAALIAIgAkEQakGy1wAQxgEpAgA3AwAgASACEIICIAJBIGokAAtAAQF/IwBBEGsiAiQAIAIgAkEIakGkmQEQxgEpAgA3AwAgASACEIICIABBCGogARD4AiABQSkQwwEgAkEQaiQAC14BAX4gAEEAOgAHIABBAToABiAAQQA6AAUgAEEPOgAEIABBnNMANgIAIAAgATYCCCAAQbSZATYCACACKQIAIQYgACAFNgIcIAAgBDoAGCAAIAM2AhQgACAGNwIMIAALQwEBfyMAQRBrIgIkACAAKAIIIgAgASAAKAIAKAIQEQAAIAIgAkEIakH44wAQxgEpAgA3AwAgASACEIICIAJBEGokAAv+AgECfyMAQfAAayICJAAgAiACQegAakGM2wAQxgEpAgA3AzAgASACQTBqEIICIABBDGogARD4AiACIAJB4ABqQbLXABDGASkCADcDKCABIAJBKGoQggIgACgCCCIDIAEgAygCACgCFBEAAAJ/IAAoAhQiA0EBcQRAIAIgAkHYAGpBrJQBEMYBKQIANwMgIAEgAkEgahCCAiAAKAIUIQMLIANBAnELBH8gAiACQdAAakGzlAEQxgEpAgA3AxggASACQRhqEIICIAAoAhQFIAMLQQRxBEAgAiACQcgAakG9lAEQxgEpAgA3AxAgASACQRBqEIICCwJAIAICfwJAAkAgAC0AGEEBaw4CAAEDCyACQUBrQceUARDGAQwBCyACQThqQcqUARDGAQspAgA3AwggASACQQhqEIICCyAAKAIcBEAgAUEgEMMBIAAoAhwiACABIAAoAgAoAhARAAAgAC0ABUEBRwRAIAAgASAAKAIAKAIUEQAACwsgAkHwAGokAAtGAgF/AX4jAEEQayIDJAAgAEEUEPsBIQAgASgCACEBIAMgAikCACIENwMAIAMgBDcDCCAAIAEgAxDyAyEAIANBEGokACAAC0YCAX8BfiMAQRBrIgMkACAAQRQQ+wEhACABKAIAIQEgAyACKQIAIgQ3AwAgAyAENwMIIAAgASADEPQDIQAgA0EQaiQAIAALQwAgAEEBOgAHIABBAToABiAAQQE6AAUgAEEKOgAEIABBnNMANgIAIAAgATYCCCAAQayaATYCACAAIAIpAgA3AgwgAAuaAQICfwF+IwBBMGsiAiQAIAAoAggiAyABIAMoAgAoAhARAAAgAy0ABUEBRwRAIAMgASADKAIAKAIUEQAACyACIAJBKGpBitgAEMYBKQIANwMQIAEgAkEQahCCAiACIAApAgwiBDcDCCACIAQ3AyAgASACQQhqEIICIAIgAkEYakH+1wAQxgEpAgA3AwAgASACEIICIAJBMGokAAtDACAAQQE6AAcgAEEBOgAGIABBAToABSAAQQI6AAQgAEGc0wA2AgAgACABNgIIIABBmJsBNgIAIAAgAikCADcCDCAAC3wCAn8BfiMAQSBrIgIkACAAKAIIIgMgASADKAIAKAIQEQAAIAMtAAVBAUcEQCADIAEgAygCACgCFBEAAAsgAiACQRhqQfjjABDGASkCADcDCCABIAJBCGoQggIgAiAAKQIMIgQ3AwAgAiAENwMQIAEgAhCCAiACQSBqJAALUwECfyABLQAFIQMgAS0ABiEEIAAgAS0ABzoAByAAIAQ6AAYgACADOgAFIABBAzoABCAAQZzTADYCACAAIAE2AgwgACACNgIIIABBiJwBNgIAIAALLQEBfwJ/IAAoAgwiAC0ABSICQQJHBEAgAkUMAQsgACABIAAoAgAoAgARAQALCy0BAX8CfyAAKAIMIgAtAAYiAkECRwRAIAJFDAELIAAgASAAKAIAKAIEEQEACwstAQF/An8gACgCDCIALQAHIgJBAkcEQCACRQwBCyAAIAEgACgCACgCCBEBAAsLHwEBfyAAKAIMIgIgASACKAIAKAIQEQAAIAAgARD7AwuYAQECfyMAQTBrIgIkAAJ/IAAoAggiA0EBcQRAIAIgAkEoakGslAEQxgEpAgA3AxAgASACQRBqEIICIAAoAgghAwsgA0ECcQsEfyACIAJBIGpBs5QBEMYBKQIANwMIIAEgAkEIahCCAiAAKAIIBSADC0EEcQRAIAIgAkEYakG9lAEQxgEpAgA3AwAgASACEIICCyACQTBqJAALFgAgACgCDCIAIAEgACgCACgCFBEAAAtJACAAQQwQ+wEhACABKAIAIQEgAEEBOgAHIABBAToABiAAQQE6AAUgAEEaOgAEIABBnNMANgIAIAAgATYCCCAAQfCcATYCACAAC3sBAX8jAEEgayICJAAgAiACQRhqQdSdARDGASkCADcDCCABIAJBCGoQggIgACgCCCIAIAEgACgCACgCEBEAACAALQAFQQFHBEAgACABIAAoAgAoAhQRAAALIAIgAkEQakHP+wAQxgEpAgA3AwAgASACEIICIAJBIGokAAtAACAAQQE6AAcgAEEBOgAGIABBAToABSAAQRk6AAQgAEGc0wA2AgAgACACNgIMIAAgATYCCCAAQeydATYCACAAC64BAQJ/IwBBIGsiAiQAIAAoAggiAyABIAMoAgAoAhARAAAgAy0ABUEBRwRAIAMgASADKAIAKAIUEQAACyACIAJBGGpBzJ4BEMYBKQIANwMIIAEgAkEIahCCAiAAKAIMIgAEQCAAIAEgACgCACgCEBEAACAALQAFQQFHBEAgACABIAAoAgAoAhQRAAALCyACIAJBEGpBz/sAEMYBKQIANwMAIAEgAhCCAiACQSBqJAALQAAgAEEBOgAHIABBADoABiAAQQA6AAUgAEEOOgAEIABBnNMANgIAIAAgAjYCDCAAIAE2AgggAEHgngE2AgAgAAsWACAAKAIIIgAgASAAKAIAKAIQEQAAC9sBAQJ/IwBBMGsiAiQAAn9BACABKAIEIgNFDQAaIAMgASgCAGpBAWstAAALQf8BcUHdAEcEQCACIAJBKGpB+OMAEMYBKQIANwMQIAEgAkEQahCCAgsgAiACQSBqQcCfARDGASkCADcDCCABIAJBCGoQggIgACgCDCIDBEAgAyABIAMoAgAoAhARAAAgAy0ABUEBRwRAIAMgASADKAIAKAIUEQAACwsgAiACQRhqQc/7ABDGASkCADcDACABIAIQggIgACgCCCIAIAEgACgCACgCFBEAACACQTBqJAALSQEBfyACLQAFIQMgAEEBOgAHIABBAToABiAAIAM6AAUgAEENOgAEIABBnNMANgIAIAAgAjYCDCAAIAE2AgggAEHMnwE2AgAgAAv/AQEDfyMAQTBrIgIkACAAKAIMIgMgASADKAIAKAIQEQAAIAICfwJAAn8gACgCDCIDLQAGIgRBAkcEQCAERQwBCyADIAEgAygCACgCBBEBAAtFBEACfyAAKAIMIgMtAAciBEECRwRAIARFDAELIAMgASADKAIAKAIIEQEAC0UNAQsgAkEoakGM2wAQxgEMAQsgAkEgakH44wAQxgELKQIANwMQIAEgAkEQahCCAiAAKAIIIgAgASAAKAIAKAIQEQAAIAAtAAVBAUcEQCAAIAEgACgCACgCFBEAAAsgAiACQRhqQbSgARDGASkCADcDCCABIAJBCGoQggIgAkEwaiQAC58BAQN/IwBBEGsiAyQAAkACfyAAKAIMIgItAAYiBEECRwRAIARFDAELIAIgASACKAIAKAIEEQEAC0UEQAJ/IAAoAgwiAi0AByIEQQJHBEAgBEUMAQsgAiABIAIoAgAoAggRAQALRQ0BCyADIANBCGpBstcAEMYBKQIANwMAIAEgAxCCAgsgACgCDCIAIAEgACgCACgCFBEAACADQRBqJAALRgIBfwF+IwBBEGsiAyQAIABBFBD7ASEAIAMgASkCACIENwMIIAIoAgAhASADIAQ3AwAgACADIAEQiAQhACADQRBqJAAgAAtJAQF+IABBAToAByAAQQE6AAYgAEEBOgAFIABBBjoABCAAQZzTADYCACAAQdygATYCACABKQIAIQMgACACNgIQIAAgAzcCCCAAC2UCAX8BfiMAQRBrIgIkACACIAApAggiAzcDACACIAM3AwggASACEIICIAFBIBDDASAAKAIQIgAgASAAKAIAKAIQEQAAIAAtAAVBAUcEQCAAIAEgACgCACgCFBEAAAsg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IG1lbW9yeSBmb3IgZGVjb2RpbmcAQ29ycnVwdGVkIGJsb2NrIGRldGVjdGVkAFJlc3RvcmVkIGRhdGEgZG9lc24ndCBtYXRjaCBjaGVja3N1bQBVbnN1cHBvcnRlZCBwYXJhbWV0ZXIAUGFyYW1ldGVyIGlzIG91dCBvZiBib3VuZABDb250ZXh0IHNob3VsZCBiZSBpbml0IGZpcnN0AEFsbG9jYXRpb24gZXJyb3IgOiBub3QgZW5vdWdoIG1lbW9yeQB3b3JrU3BhY2UgYnVmZmVyIGlzIG5vdCBsYXJnZSBlbm91Z2gAT3BlcmF0aW9uIG5vdCBhdXRob3JpemVkIGF0IGN1cnJlbnQgcHJvY2Vzc2luZyBzdGFnZQB0YWJsZUxvZyByZXF1aXJlcyB0b28gbXVjaCBtZW1vcnkgOiB1bnN1cHBvcnRlZABVbnN1cHBvcnRlZCBtYXggU3ltYm9sIFZhbHVlIDogdG9vIGxhcmdlAFNwZWNpZmllZCBtYXhTeW1ib2xWYWx1ZSBpcyB0b28gc21hbGwARGljdGlvbmFyeSBpcyBjb3JydXB0ZWQARGljdGlvbmFyeSBtaXNtYXRjaABDYW5ub3QgY3JlYXRlIERpY3Rpb25hcnkgZnJvbSBwcm92aWRlZCBzYW1wbGVzAERlc3RpbmF0aW9uIGJ1ZmZlciBpcyB0b28gc21hbGwAU3JjIHNpemUgaXMgaW5jb3JyZWN0AE9wZXJhdGlvbiBvbiBOVUxMIGRlc3RpbmF0aW9uIGJ1ZmZlcgBGcmFtZSBpbmRleCBpcyB0b28gbGFyZ2UAQW4gSS9PIGVycm9yIG9jY3VycmVkIHdoZW4gcmVhZGluZy9zZWVraW5nAERlc3RpbmF0aW9uIGJ1ZmZlciBpcyB3cm9uZwBTb3VyY2UgYnVmZmVyIGlzIHdyb25nAEH0DguhCWs4BwANsgcAnPIHAHBkCABgrgoAsHELADCqDAAAAAAAAAgAAAAHAABqBgAAAAYAAK0FAABqBQAAMQUAAAAFAADUBAAArQQAAIoEAABqBAAATAQAADEEAAAXBAAAAAQAAOkDAADUAwAAwAMAAK0DAACbAwAAigMAAHkDAABqAwAAWwMAAEwDAAA+AwAAMQMAACQDAAAXAwAACwMAAAADAAD0AgAA6QIAAN4CAADUAgAAygIA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AAAALwAAADMAAAA7AAAAQwAAAFMAAABjAAAAgwAAAAMBAAADAgAAAwQAAAMIAAADEAAAAyAAAANAAAADgAAAAwABAEGgIAtRAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAwAAAAMAAAAEAAAABAAAAAUAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAEGEIQuLAQEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAASAAAAFAAAABYAAAAYAAAAHAAAACAAAAAoAAAAMAAAAEAAAACAAAAAAAEAAAACAAAABAAAAAgAAAAQAAAAIAAAAEAAAACAAAAAAAEAQdAiC9YEAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAwAAAAMAAAAEAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAABAAEBBgAAAAAAAAQAAAAAEAAABAAAAAAgAAAFAQAAAAAAAAUDAAAAAAAABQQAAAAAAAAFBgAAAAAAAAUHAAAAAAAABQkAAAAAAAAFCgAAAAAAAAUMAAAAAAAABg4AAAAAAAEFEAAAAAAAAQUUAAAAAAABBRYAAAAAAAIFHAAAAAAAAwUgAAAAAAAEBTAAAAAgAAYFQAAAAAAABwWAAAAAAAAIBgABAAAAAAoGAAQAAAAADAYAEAAAIAAABAAAAAAAAAAEAQAAAAAAAAUCAAAAIAAABQQAAAAAAAAFBQAAACAAAAUHAAAAAAAABQgAAAAgAAAFCgAAAAAAAAULAAAAAAAABg0AAAAgAAEFEAAAAAAAAQUSAAAAIAABBRYAAAAAAAIFGAAAACAAAwUgAAAAAAADBSgAAAAAAAYEQAAAABAABgRAAAAAIAAHBYAAAAAAAAkGAAIAAAAACwYACAAAMAAABAAAAAAQAAAEAQAAACAAAAUCAAAAIAAABQMAAAAgAAAFBQAAACAAAAUGAAAAIAAABQgAAAAgAAAFCQAAACAAAAULAAAAIAAABQwAAAAAAAAGDwAAACAAAQUSAAAAIAABBRQAAAAgAAIFGAAAACAAAgUcAAAAIAADBSgAAAAgAAQFMAAAAAAAEAYAAAEAAAAPBgCAAAAAAA4GAEAAAAAADQYAIABBsCcLhwIBAAEBBQAAAAAAAAUAAAAAAAAGBD0AAAAAAAkF/QEAAAAADwX9fwAAAAAVBf3/HwAAAAMFBQAAAAAABwR9AAAAAAAMBf0PAAAAABIF/f8DAAAAFwX9/38AAAAFBR0AAAAAAAgE/QAAAAAADgX9PwAAAAAUBf3/DwAAAAIFAQAAABAABwR9AAAAAAALBf0HAAAAABEF/f8BAAAAFgX9/z8AAAAEBQ0AAAAQAAgE/QAAAAAADQX9HwAAAAATBf3/BwAAAAEFAQAAABAABgQ9AAAAAAAKBf0DAAAAABAF/f8AAAAAHAX9//8PAAAbBf3//wcAABoF/f//AwAAGQX9//8BAAAYBf3//wBBwCkLhgQBAAEBBgAAAAAAAAYDAAAAAAAABAQAAAAgAAAFBQAAAAAAAAUGAAAAAAAABQgAAAAAAAAFCQAAAAAAAAULAAAAAAAABg0AAAAAAAAGEAAAAAAAAAYTAAAAAAAABhYAAAAAAAAGGQAAAAAAAAYcAAAAAAAABh8AAAAAAAAGIgAAAAAAAQYlAAAAAAABBikAAAAAAAIGLwAAAAAAAwY7AAAAAAAEBlMAAAAAAAcGgwAAAAAACQYDAgAAEAAABAQAAAAAAAAEBQAAACAAAAUGAAAAAAAABQcAAAAgAAAFCQAAAAAAAAUKAAAAAAAABgwAAAAAAAAGDwAAAAAAAAYSAAAAAAAABhUAAAAAAAAGGAAAAAAAAAYbAAAAAAAABh4AAAAAAAAGIQAAAAAAAQYjAAAAAAABBicAAAAAAAIGKwAAAAAAAwYzAAAAAAAEBkMAAAAAAAUGYwAAAAAACAYDAQAAIAAABAQAAAAwAAAEBAAAABAAAAQFAAAAIAAABQcAAAAgAAAFCAAAACAAAAUKAAAAIAAABQsAAAAAAAAGDgAAAAAAAAYRAAAAAAAABhQAAAAAAAAGFwAAAAAAAAYaAAAAAAAABh0AAAAAAAAGIAAAAAAAEAYDAAEAAAAPBgOAAAAAAA4GA0AAAAAADQYDIAAAAAAMBgMQAAAAAAsGAwgAAAAACgYDBABB1C0L4gQBAAAAAwAAAAcAAAAPAAAAHwAAAD8AAAB/AAAA/wAAAP8BAAD/AwAA/wcAAP8PAAD/HwAA/z8AAP9/AAD//wAA//8BAP//AwD//wcA//8PAP//HwD//z8A//9/AP///wD///8B////A////wf///8P////H////z////9/BAADAAIAAgACAAIAAgACAAIAAgACAAIAAgABAAEAAQACAAIAAgACAAIAAgACAAIAAgADAAIAAQABAAEAAQABAP//////////AAAAAAAAAAABAAEAAQABAAEAAQACAAIAAgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQD/////////////AAAAAAAAAQAEAAMAAgACAAIAAgACAAIAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQD//////////////////wAAAAAAAAABAgMEBQYHCAkKCwwNDg8QEBEREhITExQUFBQVFRUVFhYWFhYWFhYXFxcXFxcXFxgYGBgYGBgYGBgYGBgYGBgAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAgISEiIiMjJCQkJCUlJSUmJiYmJiYmJicnJycnJycnKCgoKCgoKCgoKCgoKCgoKCkpKSkpKSkpKSkpKSkpKSkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgAgAAAAIAAAAEAAAACAAAAAgAAAAIAAAACAAAAAgAAAACAAAAAgAEHAMguAFRMAAAAMAAAADQAAAAEAAAAGAAAAAQAAAAEAAAATAAAADQAAAA4AAAABAAAABwAAAAAAAAABAAAAFAAAAA8AAAAQAAAAAQAAAAYAAAAAAAAAAQAAABUAAAAQAAAAEQAAAAEAAAAFAAAAAAAAAAIAAAAVAAAAEgAAABIAAAABAAAABQAAAAAAAAACAAAAFQAAABIAAAATAAAAAgAAAAUAAAACAAAAAwAAABUAAAATAAAAEwAAAAMAAAAFAAAABAAAAAMAAAAVAAAAEwAAABMAAAADAAAABQAAAAgAAAAEAAAAFQAAABMAAAATAAAAAwAAAAUAAAAQAAAABQAAABUAAAATAAAAFAAAAAQAAAAFAAAAEAAAAAUAAAAWAAAAFAAAABUAAAAEAAAABQAAABAAAAAFAAAAFgAAABUAAAAWAAAABAAAAAUAAAAQAAAABQAAABYAAAAVAAAAFgAAAAUAAAAFAAAAEAAAAAUAAAAWAAAAFQAAABYAAAAFAAAABQAAACAAAAAGAAAAFgAAABYAAAAXAAAABQAAAAUAAAAgAAAABgAAABYAAAAXAAAAFwAAAAYAAAAFAAAAIAAAAAYAAAAWAAAAFgAAABYAAAAFAAAABQAAADAAAAAHAAAAFwAAABcAAAAWAAAABQAAAAQAAABAAAAABwAAABcAAAAXAAAAFgAAAAYAAAADAAAAQAAAAAgAAAAXAAAAGAAAABYAAAAHAAAAAwAAAAABAAAJAAAAGQAAABkAAAAXAAAABwAAAAMAAAAAAQAACQAAABoAAAAaAAAAGAAAAAcAAAADAAAAAAIAAAkAAAAbAAAAGwAAABkAAAAJAAAAAwAAAOcDAAAJAAAAEgAAAAwAAAANAAAAAQAAAAUAAAABAAAAAQAAABIAAAANAAAADgAAAAEAAAAGAAAAAAAAAAEAAAASAAAADgAAAA4AAAABAAAABQAAAAAAAAACAAAAEgAAABAAAAAQAAAAAQAAAAQAAAAAAAAAAgAAABIAAAAQAAAAEQAAAAIAAAAFAAAAAgAAAAMAAAASAAAAEgAAABIAAAADAAAABQAAAAIAAAADAAAAEgAAABIAAAATAAAAAwAAAAUAAAAEAAAABAAAABIAAAASAAAAEwAAAAQAAAAEAAAABAAAAAQAAAASAAAAEgAAABMAAAAEAAAABAAAAAgAAAAFAAAAEgAAABIAAAATAAAABQAAAAQAAAAIAAAABQAAABIAAAASAAAAEwAAAAYAAAAEAAAACAAAAAUAAAASAAAAEgAAABMAAAAFAAAABAAAAAwAAAAGAAAAEgAAABMAAAATAAAABwAAAAQAAAAMAAAABgAAABIAAAASAAAAEwAAAAQAAAAEAAAAEAAAAAcAAAASAAAAEgAAABMAAAAEAAAAAwAAACAAAAAHAAAAEgAAABIAAAATAAAABgAAAAMAAACAAAAABwAAABIAAAATAAAAEwAAAAYAAAADAAAAgAAAAAgAAAASAAAAEwAAABMAAAAIAAAAAwAAAAABAAAIAAAAEgAAABMAAAATAAAABgAAAAMAAACAAAAACQAAABIAAAATAAAAEwAAAAgAAAADAAAAAAEAAAkAAAASAAAAEwAAABMAAAAKAAAAAwAAAAACAAAJAAAAEgAAABMAAAATAAAADAAAAAMAAAAAAgAACQAAABIAAAATAAAAEwAAAA0AAAADAAAA5wMAAAkAAAARAAAADAAAAAwAAAABAAAABQAAAAEAAAABAAAAEQAAAAwAAAANAAAAAQAAAAYAAAAAAAAAAQAAABEAAAANAAAADwAAAAEAAAAFAAAAAAAAAAEAAAARAAAADwAAABAAAAACAAAABQAAAAAAAAACAAAAEQAAABEAAAARAAAAAgAAAAQAAAAAAAAAAgAAABEAAAAQAAAAEQAAAAMAAAAEAAAAAgAAAAMAAAARAAAAEQAAABEAAAADAAAABAAAAAQAAAAEAAAAEQAAABEAAAARAAAAAwAAAAQAAAAIAAAABQAAABEAAAARAAAAEQAAAAQAAAAEAAAACAAAAAUAAAARAAAAEQAAABEAAAAFAAAABAAAAAgAAAAFAAAAEQAAABEAAAARAAAABgAAAAQAAAAIAAAABQAAABEAAAARAAAAEQAAAAUAAAAEAAAACAAAAAYAAAARAAAAEgAAABEAAAAHAAAABAAAAAwAAAAGAAAAEQAAABIAAAARAAAAAwAAAAQAAAAMAAAABwAAABEAAAASAAAAEQAAAAQAAAADAAAAIAAAAAcAAAARAAAAEgAAABEAAAAGAAAAAwAAAAABAAAHAAAAEQAAABIAAAARAAAABgAAAAMAAACAAAAACAAAABEAAAASAAAAEQAAAAgAAAADAAAAAAEAAAgAAAARAAAAEgAAABEAAAAKAAAAAwAAAAACAAAIAAAAEQAAABIAAAARAAAABQAAAAMAAAAAAQAACQAAABEAAAASAAAAEQAAAAcAAAADAAAAAAIAAAkAAAARAAAAEgAAABEAAAAJAAAAAwAAAAACAAAJAAAAEQAAABIAAAARAAAACwAAAAMAAADnAwAACQAAAA4AAAAMAAAADQAAAAEAAAAFAAAAAQAAAAEAAAAOAAAADgAAAA8AAAABAAAABQAAAAAAAAABAAAADgAAAA4AAAAPAAAAAQAAAAQAAAAAAAAAAQAAAA4AAAAOAAAADwAAAAIAAAAEAAAAAAAAAAIAAAAOAAAADgAAAA4AAAAEAAAABAAAAAIAAAADAAAADgAAAA4AAAAOAAAAAwAAAAQAAAAEAAAABAAAAA4AAAAOAAAADgAAAAQAAAAEAAAACAAAAAUAAAAOAAAADgAAAA4AAAAGAAAABAAAAAgAAAAFAAAADgAAAA4AAAAOAAAACAAAAAQAAAAIAAAABQAAAA4AAAAPAAAADgAAAAUAAAAEAAAACAAAAAYAAAAOAAAADwAAAA4AAAAJAAAABAAAAAgAAAAGAAAADgAAAA8AAAAOAAAAAwAAAAQAAAAMAAAABwAAAA4AAAAPAAAADgAAAAQAAAADAAAAGAAAAAcAAAAOAAAADwAAAA4AAAAFAAAAAwAAACAAAAAIAAAADgAAAA8AAAAPAAAABgAAAAMAAABAAAAACAAAAA4AAAAPAAAADwAAAAcAAAADAAAAAAEAAAgAAAAOAAAADwAAAA8AAAAFAAAAAwAAADAAAAAJAAAADgAAAA8AAAAPAAAABgAAAAMAAACAAAAACQAAAA4AAAAPAAAADwAAAAcAAAADAAAAAAEAAAkAAAAOAAAADwAAAA8AAAAIAAAAAwAAAAABAAAJAAAADgAAAA8AAAAPAAAACAAAAAMAAAAAAgAACQAAAA4AAAAPAAAADwAAAAkAAAADAAAAAAIAAAkAAAAOAAAADwAAAA8AAAAKAAAAAwAAAOcDAAAJAAAAAAAAAAEAAAACAAAABAAAAAAAAAACAAAABAAAAAgAAAAAAAAAAQAAAAIAAAABAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAACAAAAAcAAAAIAAAACQAAAAoAAAALAAAALSsgICAwWDB4AChudWxsKQBB0McAC0ERAAoAERERAAAAAAUAAAAAAAAJAAAAAAsAAAAAAAAAABEADwoREREDCgcAAQAJCwsAAAkGCwAACwAGEQAAABEREQBBocgACyELAAAAAAAAAAARAAoKERERAAoAAAIACQsAAAAJAAsAAAsAQdvIAAsBDABB58gACxUMAAAAAAwAAAAACQwAAAAAAAwAAAwAQZXJAAsBDgBBockACxUNAAAABA0AAAAACQ4AAAAAAA4AAA4AQc/JAAsBEABB28kACx4PAAAAAA8AAAAACRAAAAAAABAAABAAABIAAAASEhIAQZLKAAsOEgAAABISEgAAAAAAAAkAQcPKAAsBCwBBz8oACxUKAAAAAAoAAAAACQsAAAAAAAsAAAsAQf3KAAsBDABBicsAC38MAAAAAAwAAAAACQwAAAAAAAwAAAwAADAxMjM0NTY3ODlBQkNERUYtMFgrMFggMFgtMHgrMHggMHgAaW5mAElORgBuYW4ATkFOAC4AdGVybWluYXRpbmcAdGVybWluYXRlX2hhbmRsZXIgdW5leHBlY3RlZGx5IHJldHVybmVkAEG0zAALASAAQdvMAAsF//////8AQaDNAAuuV1N0OXR5cGVfaW5mbwAAAAA8JwAAoCYAAFB1cmUgdmlydHVhbCBmdW5jdGlvbiBjYWxsZWQhAE4xMF9fY3h4YWJpdjExNl9fc2hpbV90eXBlX2luZm9FAABkJwAA1iYAALAmAABOMTBfX2N4eGFiaXYxMTdfX2NsYXNzX3R5cGVfaW5mb0UAAABkJwAABCcAAPgmAAAAAAAAKCcAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAAAAAAKwnAAAhAAAAKQAAACMAAAAkAAAAJQAAACoAAAArAAAALAAAAE4xMF9fY3h4YWJpdjEyMF9fc2lfY2xhc3NfdHlwZV9pbmZvRQAAAABkJwAAhCcAACgnAABfWgBfX1oAX19fWgBfX19fWgBfYmxvY2tfaW52b2tlAGludm9jYXRpb24gZnVuY3Rpb24gZm9yIGJsb2NrIGluIABVYTllbmFibGVfaWZJAHZ0YWJsZSBmb3IgAFZUVCBmb3IgAHR5cGVpbmZvIGZvciAAdHlwZWluZm8gbmFtZSBmb3IgAGNvdmFyaWFudCByZXR1cm4gdGh1bmsgdG8gAHRocmVhZC1sb2NhbCB3cmFwcGVyIHJvdXRpbmUgZm9yIAB0aHJlYWQtbG9jYWwgaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgAHZpcnR1YWwgdGh1bmsgdG8gAG5vbi12aXJ0dWFsIHRodW5rIHRvIABndWFyZCB2YXJpYWJsZSBmb3IgAHJlZmVyZW5jZSB0ZW1wb3JhcnkgZm9yIAAAAAAAAAAAiCkAAC0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAANQAAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTExU3BlY2lhbE5hbWVFAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTROb2RlRQA8JwAAWCkAAGQnAAAoKQAAgCkAAAAAAACAKQAALQAAAC4AAAAvAAAAMAAAADYAAAAyAAAAMwAAADQAAAA3AAAAAAAAACgqAAAtAAAALgAAAC8AAAAwAAAAOAAAADIAAAAzAAAANAAAADkAAABOMTJfR0xPQkFMX19OXzExNml0YW5pdW1fZGVtYW5nbGUyMUN0b3JWdGFibGVTcGVjaWFsTmFtZUUAAABkJwAA7CkAAIApAABjb25zdHJ1Y3Rpb24gdnRhYmxlIGZvciAALWluLQBTdABzdGQAAAAAAAAAALQqAAAtAAAALgAAAC8AAAAwAAAAOgAAADIAAAA7AAAANAAAADwAAABOMTJfR0xPQkFMX19OXzExNml0YW5pdW1fZGVtYW5nbGU4TmFtZVR5cGVFAGQnAACIKgAAgCkAAAAAAAAcKwAALQAAAC4AAAAvAAAAMAAAAD0AAAAyAAAAPgAAADQAAAA/AAAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlMTBOZXN0ZWROYW1lRQAAZCcAAOwqAACAKQAAOjoAYXV0bwAAAAAAnCsAAEAAAABBAAAAQgAAAEMAAABEAAAARQAAADMAAAA0AAAARgAAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTI0Rm9yd2FyZFRlbXBsYXRlUmVmZXJlbmNlRQAAAABkJwAAXCsAAIApAABkZWNsdHlwZSgAKQBncwAmJgAmACY9AD0AYWxpZ25vZiAoAGNvbnN0X2Nhc3QALAB+AGR5bmFtaWNfY2FzdAAqAC4qAC4ALwAvPQBeAF49AD09AD49AD4APD0APDwAPDw9ADwALQAtPQAqPQAtLQAhPQAhAG5vZXhjZXB0ICgAfHwAfAB8PQAtPioAKwArPQArKwAtPgByZWludGVycHJldF9jYXN0ACUAJT0APj4APj49AHN0YXRpY19jYXN0AHNpemVvZiAoAHNpemVvZi4uLiAoAHR5cGVpZCAoAHRocm93AHU4X191dWlkb2Z0AHU4X191dWlkb2Z6AHdjaGFyX3QAYjBFAGIxRQBjaGFyAHNpZ25lZCBjaGFyAHVuc2lnbmVkIGNoYXIAc2hvcnQAdW5zaWduZWQgc2hvcnQAAHUAbAB1bABsbAB1bGwAX19pbnQxMjgAdW5zaWduZWQgX19pbnQxMjgARG5FAG51bGxwdHIAAAAAAAAAAIAtAAAtAAAALgAAAC8AAAAwAAAARwAAADIAAAAzAAAANAAAAEgAAABOMTJfR0xPQkFMX19OXzExNml0YW5pdW1f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TF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlMTRDb252ZXJzaW9uRXhwckUAAGQnAADoNwAAgCkAACkoAAAAAAAAiDgAAC0AAAAuAAAALwAAADAAAAB5AAAAMgAAADMAAAA0AAAAegAAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTEwRGVsZXRlRXhwckUAAGQnAABYOAAAgCkAAGRlbGV0ZQBbXSAAc3JOAHNyAF9HTE9CQUxfX04AKGFub255bW91cyBuYW1lc3BhY2UpAAAAAAAAKDkAAC0AAAAuAAAALwAAADAAAAB7AAAAMgAAAHwAAAA0AAAAfQAAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTEzUXVhbGlmaWVkTmFtZUUAAABkJwAA9DgAAIApAABkbgBvbgAAAAAAAACUOQAALQAAAC4AAAAvAAAAMAAAAH4AAAAyAAAAMwAAADQAAAB/AAAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlOER0b3JOYW1lRQBkJwAAaDkAAIApAABvcGVyYXRvciYmAG9wZXJhdG9yJgBvcGVyYXRvciY9AG9wZXJhdG9yPQBvcGVyYXRvcigpAG9wZXJhdG9yLABvcGVyYXRvcn4Ab3BlcmF0b3IgZGVsZXRlW10Ab3BlcmF0b3IqAG9wZXJhdG9yIGRlbGV0ZQBvcGVyYXRvci8Ab3BlcmF0b3IvPQBvcGVyYXRvcl4Ab3BlcmF0b3JePQBvcGVyYXRvcj09AG9wZXJhdG9yPj0Ab3BlcmF0b3I+AG9wZXJhdG9yW10Ab3BlcmF0b3I8PQBvcGVyYXRvcjw8AG9wZXJhdG9yPDw9AG9wZXJhdG9yPABvcGVyYXRvci0Ab3BlcmF0b3ItPQBvcGVyYXRvcio9AG9wZXJhdG9yLS0Ab3BlcmF0b3IgbmV3W10Ab3BlcmF0b3IhPQBvcGVyYXRvciEAb3BlcmF0b3IgbmV3AG9wZXJhdG9yfHwAb3BlcmF0b3J8AG9wZXJhdG9yfD0Ab3BlcmF0b3ItPioAb3BlcmF0b3IrAG9wZXJhdG9yKz0Ab3BlcmF0b3IrKwBvcGVyYXRvci0+AG9wZXJhdG9yPwBvcGVyYXRvciUAb3BlcmF0b3IlPQBvcGVyYXRvcj4+AG9w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XzExNml0YW5pdW1fZGVtYW5nbGUxMFVVSURPZkV4cHJFAABkJwAAcEIAAIApAABfX3V1aWRvZigAAAAAAAAAJEMAAC0AAAAuAAAALwAAADAAAAChAAAAMgAAAKIAAAA0AAAAowAAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTI3RXhwYW5kZWRTcGVjaWFsU3Vic3RpdHV0aW9uRQBkJwAA5EIAAIApAABzdGQ6OmFsbG9jYXRvcgBzdGQ6OmJhc2ljX3N0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+AHN0ZDo6YmFzaWNfaXN0cmVhbTxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+ID4Ac3RkOjpiYXNpY19vc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4gPgBzdGQ6OmJhc2ljX2lvc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4gPgBhbGxvY2F0b3IAYmFzaWNfc3RyaW5nAGJhc2ljX2lzdHJlYW0AYmFzaWNfb3N0cmVhbQBiYXNpY19pb3N0cmVhbQAAAAAAAAAA1EQAAC0AAAAuAAAALwAAADAAAACkAAAAMgAAADMAAAA0AAAApQAAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTEyQ3RvckR0b3JOYW1lRQAAAABkJwAAoEQAAIApAAAAAAAAPEUAAC0AAAAuAAAALwAAADAAAACmAAAAMgAAADMAAAA0AAAApwAAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTEwQWJpVGFnQXR0ckUAAGQnAAAMRQAAgCkAAFthYmk6AERDAAAAAAAAAAC8RQAALQAAAC4AAAAvAAAAMAAAAKgAAAAyAAAAMwAAADQAAACpAAAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlMjFTdHJ1Y3R1cmVkQmluZGluZ05hbWVFAAAAZCcAAIBFAACAKQAAc3RyaW5nIGxpdGVyYWwAAAAAAAA0RgAALQAAAC4AAAAvAAAAMAAAAKoAAAAyAAAAMwAAADQAAACrAAAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlOUxvY2FsTmFtZUUAAAAAZCcAAARGAACAKQAAAAAAAKRGAAAtAAAALgAAAC8AAAAwAAAArAAAADIAAACtAAAANAAAAK4AAABOMTJfR0xPQkFMX19OXzExNml0YW5pdW1fZGVtYW5nbGUxOVNwZWNpYWxTdWJzdGl0dXRpb25FAGQnAABsRgAAgCkAAHN0ZDo6c3RyaW5nAHN0ZDo6aXN0cmVhbQBzdGQ6Om9zdHJlYW0Ac3RkOjppb3N0cmVhbQBzdHJpbmcAaXN0cmVhbQBvc3RyZWFtAGlvc3RyZWFtAAAAAABkRwAArwAAALAAAACxAAAAsgAAALMAAAC0AAAAMwAAADQAAAC1AAAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlMTNQYXJhbWV0ZXJQYWNrRQAAAGQnAAAwRwAAgCkAAAAAAADQRwAALQAAAC4AAAAvAAAAMAAAALYAAAAyAAAAMwAAADQAAAC3AAAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlMTJUZW1wbGF0ZUFyZ3NFAAAAAGQnAACcRwAAgCkAAAAAAABESAAALQAAAC4AAAAvAAAAMAAAALgAAAAyAAAAuQAAADQAAAC6AAAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlMjBOYW1lV2l0aFRlbXBsYXRlQXJnc0UAAAAAZCcAAAhIAACAKQAAU3RMAAAAAAC4SAAALQAAAC4AAAAvAAAAMAAAALsAAAAyAAAAvAAAADQAAAC9AAAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlMTZTdGRRdWFsaWZpZWROYW1lRQAAAABkJwAAgEgAAIApAABzdGQ6OgAAAAAAAAA0SQAALQAAAC4AAAAvAAAAMAAAAL4AAAAyAAAAMwAAADQAAAC/AAAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlMjBUZW1wbGF0ZUFyZ3VtZW50UGFja0UAAAAAZCcAAPhIAACAKQAAAAAAAKBJAAAtAAAALgAAAC8AAAAwAAAAwAAAADIAAAAzAAAANAAAAMEAAABOMTJfR0xPQkFMX19OXzExNml0YW5pdW1fZGVtYW5nbGUxMkVuYWJsZUlmQXR0ckUAAAAAZCcAAGxJAACAKQAAIFtlbmFibGVfaWY6AAAAAAAAAAAgSgAAwgAAAC4AAADDAAAAMAAAAMQAAADFAAAAMwAAADQAAADGAAAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlMTZGdW5jdGlvbkVuY29kaW5nRQAAAABkJwAA6EkAAIApAAAgY29uc3QAIHZvbGF0aWxlACByZXN0cmljdAAgJgAgJiYAAAAAAAAArEoAAC0AAAAuAAAALwAAADAAAADHAAAAMgAAADMAAAA0AAAAyAAAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTlEb3RTdWZmaXhFAAAAAGQnAAB8SgAAgCkAAHZvaWQAYm9vbABpbnQAdW5zaWduZWQgaW50AGxvbmcAdW5zaWduZWQgbG9uZwBsb25nIGxvbmcAdW5zaWduZWQgbG9uZyBsb25nAGZsb2F0AGRvdWJsZQBsb25nIGRvdWJsZQBfX2Zsb2F0MTI4AGRlY2ltYWw2NABkZWNpbWFsMTI4AGRlY2ltYWwzMgBkZWNpbWFsMTYAY2hhcjMyX3QAY2hhcjE2X3QAY2hhcjhfdABkZWNsdHlwZShhdXRvKQBzdGQ6Om51bGxwdHJfdAAgY29tcGxleAAgaW1hZ2luYXJ5AERvAG5vZXhjZXB0AERPAER3AER4AFJFAE9FAAAAAAAAGEwAAC0AAAAuAAAALwAAADAAAADJAAAAMgAAADMAAAA0AAAAygAAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTEyTm9leGNlcHRTcGVjRQAAAABkJwAA5EsAAIApAABub2V4Y2VwdCgAAAAAAAAAmEwAAC0AAAAuAAAALwAAADAAAADLAAAAMgAAADMAAAA0AAAAzAAAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTIwRHluYW1pY0V4Y2VwdGlvblNwZWNFAAAAAGQnAABcTAAAgCkAAHRocm93KAAAAAAAAAxNAADNAAAALgAAAM4AAAAwAAAAzwAAANAAAAAzAAAANAAAANEAAABOMTJfR0xPQkFMX19OXzExNml0YW5pdW1fZGVtYW5nbGUxMkZ1bmN0aW9uVHlwZUUAAAAAZCcAANhMAACAKQAAb2JqY3Byb3RvAAAAAAAAAIRNAAAtAAAALgAAAC8AAAAwAAAA0gAAADIAAAAzAAAANAAAANMAAABOMTJfR0xPQkFMX19OXzExNml0YW5pdW1fZGVtYW5nbGUxM09iakNQcm90b05hbWVFAAAAZCcAAFBNAACAKQAAAAAAAPRNAAAtAAAALgAAAC8AAAAwAAAA1AAAADIAAAAzAAAANAAAANUAAABOMTJfR0xPQkFMX19OXzExNml0YW5pdW1fZGVtYW5nbGUxN1ZlbmRvckV4dFF1YWxUeXBlRQAAAGQnAAC8TQAAgCkAAAAAAABYTgAA1gAAANcAAADYAAAAMAAAANkAAADaAAAAMwAAADQAAADbAAAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlOFF1YWxUeXBlRQBkJwAALE4AAIApAABEdgAAAAAAAMhOAAAtAAAALgAAAC8AAAAwAAAA3AAAADIAAAAzAAAANAAAAN0AAABOMTJfR0xPQkFMX19OXzExNml0YW5pdW1fZGVtYW5nbGUxNVBpeGVsVmVjdG9yVHlwZUUAZCcAAJROAACAKQAAcGl4ZWwgdmVjdG9yWwAAAAAAAABATwAALQAAAC4AAAAvAAAAMAAAAN4AAAAyAAAAMwAAADQAAADfAAAATjEyX0dMT0JBTF9fTl8xMTZpdGFuaXVtX2RlbWFuZ2xlMTBWZWN0b3JUeXBlRQAAZCcAABBPAACAKQAAIHZlY3RvclsAAAAAAAAAALRPAADgAAAA4QAAAC8AAAAwAAAA4gAAAOMAAAAzAAAANAAAAOQAAABOMTJfR0xPQkFMX19OXzExNml0YW5pdW1fZGVtYW5nbGU5QXJyYXlUeXBlRQAAAABkJwAAhE8AAIApAABbAAAAAAAAAChQAADlAAAALgAAAC8AAAAwAAAA5gAAAOcAAAAzAAAANAAAAOgAAABOMTJfR0xPQkFMX19OXzExNml0YW5pdW1fZGVtYW5nbGUxOVBvaW50ZXJUb01lbWJlclR5cGVFAGQnAADwTwAAgCkAADo6KgBUcwBzdHJ1Y3QAVHUAdW5pb24AVGUAZW51bQAAAAAAALxQAAAtAAAALgAAAC8AAAAwAAAA6QAAADIAAAAzAAAANAAAAOoAAABOMTJfR0xPQkFMX19OXzExNml0YW5pdW1fZGVtYW5nbGUyMkVsYWJvcmF0ZWRUeXBlU3BlZlR5cGVFAABkJwAAgFAAAIApAAAAAAAAJFEAAOsAAAAuAAAALwAAADAAAADsAAAA7QAAADMAAAA0AAAA7gAAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTExUG9pbnRlclR5cGVFAGQnAAD0UAAAgCkAAGlkPABvYmpjX29iamVjdAAAAAAAoFEAAO8AAAAuAAAALwAAADAAAADwAAAA8QAAADMAAAA0AAAA8gAAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTEzUmVmZXJlbmNlVHlwZUUAAABkJwAAbFEAAIApAAAAAAAAFFIAAC0AAAAuAAAALwAAADAAAADzAAAAMgAAADMAAAA0AAAA9AAAAE4xMl9HTE9CQUxfX05fMTE2aXRhbml1bV9kZW1hbmdsZTIwUG9zdGZpeFF1YWxpZmllZFR5cGVFAAAAAGQnAADYUQAAgCkAAC9EAAA5RAAAOUQAAEZEAABURAAAYkQAAC9EAAA5RAAA5EYAAOtGAADzRgAA+0YAQfylAQsCeFMAQbSmAQsFgFVQAB8=";function iA(A){try{if(A==EA&&S)return new Uint8Array(S);var I=yA(A);if(I)return I;if(y)return y(A);throw"both async and sync fetching of the wasm failed";}catch(A){z(A);}}function oA(A){for(;A.length>0;){var g=A.shift();if("function"!=typeof g){var B=g.func;"number"==typeof B?void 0===g.arg?p.get(B)():p.get(B)(g.arg):B(void 0===g.arg?null:g.arg);}else g(I);}}function DA(A){if(DA.recursionGuard=1+(0|DA.recursionGuard),DA.recursionGuard>1)return A;var g=I.___cxa_demangle||I.__cxa_demangle;k(g);var B=SA();try{var C=A;C.startsWith("__Z")&&(C=C.substr(1));var Q=function(A){for(var I=0,g=0;g=55296&&B<=57343&&(B=65536+((1023&B)<<10)|1023&A.charCodeAt(++g)),B<=127?++I:I+=B<=2047?2:B<=65535?3:4;}return I;}(C)+1,E=hA(Q);n(C,E,Q);var i=hA(4),o=g(E,0,0,i);if(0===K[i>>2]&&o)return d(o);}catch(A){}finally{RA(o),NA(B),DA.recursionGuard<2&&--DA.recursionGuard;}return A;}function aA(A){try{return N.grow(A-J.byteLength+65535>>>16),T(N.buffer),1;}catch(I){console.error("emscripten_realloc_buffer: Attempted to grow heap from "+J.byteLength+" bytes to "+A+" bytes, but got error: "+I);}}function GA(A){for(var I=[],g=0;g255&&(k(!1,"Character code "+B+" ("+String.fromCharCode(B)+") at offset "+g+" not in 0x00-0xFF."),B&=255),I.push(String.fromCharCode(B));}return I.join("");}AA(EA)||(BA=EA,EA=I.locateFile?I.locateFile(BA,R):R+BA);var FA="function"==typeof atob?atob:function(A){var I,g,B,C,Q,E,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o="",D=0;A=A.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{I=i.indexOf(A.charAt(D++))<<2|(C=i.indexOf(A.charAt(D++)))>>4,g=(15&C)<<4|(Q=i.indexOf(A.charAt(D++)))>>2,B=(3&Q)<<6|(E=i.indexOf(A.charAt(D++))),o+=String.fromCharCode(I),64!==Q&&(o+=String.fromCharCode(g)),64!==E&&(o+=String.fromCharCode(B));}while(DI);var g,B,C=2147483648;if(A>C)return h("Cannot enlarge memory, asked to go up to "+A+" bytes, but the limit is 2147483648 bytes!"),!1;for(var Q=1;Q<=4;Q*=2){var E=I*(1+.2/Q);E=Math.min(E,A+100663296);var i=Math.min(C,((g=Math.max(A,E))%(B=65536)>0&&(g+=B-g%B),g));if(aA(i))return!0;}return h("Failed to grow the heap from "+I+" bytes to "+i+" bytes, not enough memory!"),!1;},setTempRet0:function(A){}};!function(){var A,g={env:sA,wasi_snapshot_preview1:sA};function B(A,g){var B=A.exports;I.asm=B,k(N=I.asm.memory,"memory not found in wasm exports"),T(N.buffer),k(p=I.asm.__indirect_function_table,"table not found in wasm exports"),function(A){if(V--,I.monitorRunDependencies&&I.monitorRunDependencies(V),A?(k(u[A]),delete u[A]):h("warning: run dependency removed without ID"),0==V&&(null!==j&&(clearInterval(j),j=null),X)){var g=X;X=null,g();}}("wasm-instantiate");}A="wasm-instantiate",V++,I.monitorRunDependencies&&I.monitorRunDependencies(V),A?(k(!u[A]),u[A]=1,null===j&&"undefined"!=typeof setInterval&&(j=setInterval(function(){if(L)return clearInterval(j),void(j=null);var A=!1;for(var I in u)A||(A=!0,h("still waiting on run dependencies:")),h("dependency: "+I);A&&h("(end of list)");},1e4))):h("warning: run dependency added without ID");var Q=I;function o(A){k(I===Q,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?"),Q=null,B(A.instance);}function D(A){return function(){if(!S&&(E||i)){if("function"==typeof fetch&&!IA(EA))return fetch(EA,{credentials:"same-origin"}).then(function(A){if(!A.ok)throw"failed to load wasm binary file at '"+EA+"'";return A.arrayBuffer();}).catch(function(){return iA(EA);});if(F)return new Promise(function(A,I){F(EA,function(I){A(new Uint8Array(I));},I);});}return Promise.resolve().then(function(){return iA(EA);});}().then(function(A){return WebAssembly.instantiate(A,g);}).then(A,function(A){h("failed to asynchronously prepare wasm: "+A),IA(EA)&&h("warning: Loading from a file URI ("+EA+") is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing"),z(A);});}if(I.instantiateWasm)try{return I.instantiateWasm(g,B);}catch(A){return h("Module.instantiateWasm callback failed with error: "+A),!1;}(S||"function"!=typeof WebAssembly.instantiateStreaming||AA(EA)||IA(EA)||"function"!=typeof fetch?D(o):fetch(EA,{credentials:"same-origin"}).then(function(A){return WebAssembly.instantiateStreaming(A,g).then(o,function(A){return h("wasm streaming compile failed: "+A),h("falling back to ArrayBuffer instantiation"),D(o);});})).catch(C);}();var wA=I.___wasm_call_ctors=gA("__wasm_call_ctors");I._malloc=gA("malloc");var RA=I._free=gA("free");I._ZSTD_isError=gA("ZSTD_isError"),I._ZSTD_getErrorName=gA("ZSTD_getErrorName"),I._ZSTD_compressBound=gA("ZSTD_compressBound"),I._ZSTD_CCtx_setParameter=gA("ZSTD_CCtx_setParameter"),I._ZSTD_compress=gA("ZSTD_compress"),I._ZSTD_createCStream=gA("ZSTD_createCStream"),I._ZSTD_freeCStream=gA("ZSTD_freeCStream"),I._ZSTD_CStreamInSize=gA("ZSTD_CStreamInSize"),I._ZSTD_CStreamOutSize=gA("ZSTD_CStreamOutSize"),I._ZSTD_initCStream=gA("ZSTD_initCStream"),I._ZSTD_compressStream2_simpleArgs=gA("ZSTD_compressStream2_simpleArgs"),I._ZSTD_getFrameContentSize=gA("ZSTD_getFrameContentSize"),I._ZSTD_decompress=gA("ZSTD_decompress"),I._ZSTD_createDStream=gA("ZSTD_createDStream"),I._ZSTD_freeDStream=gA("ZSTD_freeDStream"),I._ZSTD_DStreamInSize=gA("ZSTD_DStreamInSize"),I._ZSTD_DStreamOutSize=gA("ZSTD_DStreamOutSize"),I._ZSTD_initDStream=gA("ZSTD_initDStream"),I._ZSTD_decompressStream_simpleArgs=gA("ZSTD_decompressStream_simpleArgs"),I._fflush=gA("fflush"),I.___errno_location=gA("__errno_location");var SA=I.stackSave=gA("stackSave"),NA=I.stackRestore=gA("stackRestore"),hA=I.stackAlloc=gA("stackAlloc"),UA=I._emscripten_stack_init=function(){return(UA=I._emscripten_stack_init=I.asm.emscripten_stack_init).apply(null,arguments);};I._emscripten_stack_get_free=function(){return(I._emscripten_stack_get_free=I.asm.emscripten_stack_get_free).apply(null,arguments);};var LA,kA=I._emscripten_stack_get_end=function(){return(kA=I._emscripten_stack_get_end=I.asm.emscripten_stack_get_end).apply(null,arguments);};function tA(A){this.name="ExitStatus",this.message="Program terminated with exit("+A+")",this.status=A;}function JA(A){function g(){LA||(LA=!0,I.calledRun=!0,L||(Z(),k(!x),x=!0,oA(b),Z(),oA(l),B(I),I.onRuntimeInitialized&&I.onRuntimeInitialized(),k(!I._main,'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]'),function(){if(Z(),I.postRun)for("function"==typeof I.postRun&&(I.postRun=[I.postRun]);I.postRun.length;)A=I.postRun.shift(),O.unshift(A);var A;oA(O);}()));}V>0||(UA(),f(),function(){if(I.preRun)for("function"==typeof I.preRun&&(I.preRun=[I.preRun]);I.preRun.length;)A=I.preRun.shift(),P.unshift(A);var A;oA(P);}(),V>0||(I.setStatus?(I.setStatus("Running..."),setTimeout(function(){setTimeout(function(){I.setStatus("");},1),g();},1)):g(),Z()));}if(I.___cxa_demangle=gA("__cxa_demangle"),Object.getOwnPropertyDescriptor(I,"intArrayFromString")||(I.intArrayFromString=function(){z("'intArrayFromString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"intArrayToString")||(I.intArrayToString=function(){z("'intArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"ccall")||(I.ccall=function(){z("'ccall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),I.cwrap=function(A,I,g,B){return function(){return t(A,I,g,arguments);};},I.setValue=function(A,I,g,B){switch("*"===(g=g||"i8").charAt(g.length-1)&&(g="i32"),g){case"i1":case"i8":c[A>>0]=I;break;case"i16":M[A>>1]=I;break;case"i32":K[A>>2]=I;break;case"i64":QA=[I>>>0,(CA=I,+Math.abs(CA)>=1?CA>0?(0|Math.min(+Math.floor(CA/4294967296),4294967295))>>>0:~~+Math.ceil((CA-+(~~CA>>>0))/4294967296)>>>0:0)],K[A>>2]=QA[0],K[A+4>>2]=QA[1];break;case"float":q[A>>2]=I;break;case"double":r[A>>3]=I;break;default:z("invalid type for setValue: "+g);}},I.getValue=function(A,I,g){switch("*"===(I=I||"i8").charAt(I.length-1)&&(I="i32"),I){case"i1":case"i8":return c[A>>0];case"i16":return M[A>>1];case"i32":case"i64":return K[A>>2];case"float":return q[A>>2];case"double":return r[A>>3];default:z("invalid type for getValue: "+I);}return null;},Object.getOwnPropertyDescriptor(I,"allocate")||(I.allocate=function(){z("'allocate' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"UTF8ArrayToString")||(I.UTF8ArrayToString=function(){z("'UTF8ArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"UTF8ToString")||(I.UTF8ToString=function(){z("'UTF8ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"stringToUTF8Array")||(I.stringToUTF8Array=function(){z("'stringToUTF8Array' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"stringToUTF8")||(I.stringToUTF8=function(){z("'stringToUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"lengthBytesUTF8")||(I.lengthBytesUTF8=function(){z("'lengthBytesUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"stackTrace")||(I.stackTrace=function(){z("'stackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"addOnPreRun")||(I.addOnPreRun=function(){z("'addOnPreRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),I.addOnInit=function(A){b.unshift(A);},Object.getOwnPropertyDescriptor(I,"addOnPreMain")||(I.addOnPreMain=function(){z("'addOnPreMain' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"addOnExit")||(I.addOnExit=function(){z("'addOnExit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"addOnPostRun")||(I.addOnPostRun=function(){z("'addOnPostRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"writeStringToMemory")||(I.writeStringToMemory=function(){z("'writeStringToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"writeArrayToMemory")||(I.writeArrayToMemory=function(){z("'writeArrayToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"writeAsciiToMemory")||(I.writeAsciiToMemory=function(){z("'writeAsciiToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"addRunDependency")||(I.addRunDependency=function(){z("'addRunDependency' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you");}),Object.getOwnPropertyDescriptor(I,"removeRunDependency")||(I.removeRunDependency=function(){z("'removeRunDependency' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you");}),Object.getOwnPropertyDescriptor(I,"FS_createFolder")||(I.FS_createFolder=function(){z("'FS_createFolder' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"FS_createPath")||(I.FS_createPath=function(){z("'FS_createPath' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you");}),Object.getOwnPropertyDescriptor(I,"FS_createDataFile")||(I.FS_createDataFile=function(){z("'FS_createDataFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you");}),Object.getOwnPropertyDescriptor(I,"FS_createPreloadedFile")||(I.FS_createPreloadedFile=function(){z("'FS_createPreloadedFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you");}),Object.getOwnPropertyDescriptor(I,"FS_createLazyFile")||(I.FS_createLazyFile=function(){z("'FS_createLazyFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you");}),Object.getOwnPropertyDescriptor(I,"FS_createLink")||(I.FS_createLink=function(){z("'FS_createLink' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"FS_createDevice")||(I.FS_createDevice=function(){z("'FS_createDevice' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you");}),Object.getOwnPropertyDescriptor(I,"FS_unlink")||(I.FS_unlink=function(){z("'FS_unlink' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you");}),Object.getOwnPropertyDescriptor(I,"getLEB")||(I.getLEB=function(){z("'getLEB' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"getFunctionTables")||(I.getFunctionTables=function(){z("'getFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"alignFunctionTables")||(I.alignFunctionTables=function(){z("'alignFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"registerFunctions")||(I.registerFunctions=function(){z("'registerFunctions' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"addFunction")||(I.addFunction=function(){z("'addFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"removeFunction")||(I.removeFunction=function(){z("'removeFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"getFuncWrapper")||(I.getFuncWrapper=function(){z("'getFuncWrapper' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"prettyPrint")||(I.prettyPrint=function(){z("'prettyPrint' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"makeBigInt")||(I.makeBigInt=function(){z("'makeBigInt' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"dynCall")||(I.dynCall=function(){z("'dynCall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"getCompilerSetting")||(I.getCompilerSetting=function(){z("'getCompilerSetting' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"print")||(I.print=function(){z("'print' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"printErr")||(I.printErr=function(){z("'printErr' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"getTempRet0")||(I.getTempRet0=function(){z("'getTempRet0' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"setTempRet0")||(I.setTempRet0=function(){z("'setTempRet0' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"callMain")||(I.callMain=function(){z("'callMain' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"abort")||(I.abort=function(){z("'abort' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"stringToNewUTF8")||(I.stringToNewUTF8=function(){z("'stringToNewUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"setFileTime")||(I.setFileTime=function(){z("'setFileTime' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"emscripten_realloc_buffer")||(I.emscripten_realloc_buffer=function(){z("'emscripten_realloc_buffer' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"ENV")||(I.ENV=function(){z("'ENV' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"ERRNO_CODES")||(I.ERRNO_CODES=function(){z("'ERRNO_CODES' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"ERRNO_MESSAGES")||(I.ERRNO_MESSAGES=function(){z("'ERRNO_MESSAGES' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"setErrNo")||(I.setErrNo=function(){z("'setErrNo' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"readSockaddr")||(I.readSockaddr=function(){z("'readSockaddr' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"writeSockaddr")||(I.writeSockaddr=function(){z("'writeSockaddr' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"DNS")||(I.DNS=function(){z("'DNS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"getHostByName")||(I.getHostByName=function(){z("'getHostByName' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"GAI_ERRNO_MESSAGES")||(I.GAI_ERRNO_MESSAGES=function(){z("'GAI_ERRNO_MESSAGES' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"Protocols")||(I.Protocols=function(){z("'Protocols' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"Sockets")||(I.Sockets=function(){z("'Sockets' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"getRandomDevice")||(I.getRandomDevice=function(){z("'getRandomDevice' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"traverseStack")||(I.traverseStack=function(){z("'traverseStack' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"UNWIND_CACHE")||(I.UNWIND_CACHE=function(){z("'UNWIND_CACHE' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"withBuiltinMalloc")||(I.withBuiltinMalloc=function(){z("'withBuiltinMalloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"readAsmConstArgsArray")||(I.readAsmConstArgsArray=function(){z("'readAsmConstArgsArray' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"readAsmConstArgs")||(I.readAsmConstArgs=function(){z("'readAsmConstArgs' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"mainThreadEM_ASM")||(I.mainThreadEM_ASM=function(){z("'mainThreadEM_ASM' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"jstoi_q")||(I.jstoi_q=function(){z("'jstoi_q' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"jstoi_s")||(I.jstoi_s=function(){z("'jstoi_s' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"getExecutableName")||(I.getExecutableName=function(){z("'getExecutableName' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"listenOnce")||(I.listenOnce=function(){z("'listenOnce' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"autoResumeAudioContext")||(I.autoResumeAudioContext=function(){z("'autoResumeAudioContext' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"dynCallLegacy")||(I.dynCallLegacy=function(){z("'dynCallLegacy' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"getDynCaller")||(I.getDynCaller=function(){z("'getDynCaller' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"dynCall")||(I.dynCall=function(){z("'dynCall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"callRuntimeCallbacks")||(I.callRuntimeCallbacks=function(){z("'callRuntimeCallbacks' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"abortStackOverflow")||(I.abortStackOverflow=function(){z("'abortStackOverflow' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"reallyNegative")||(I.reallyNegative=function(){z("'reallyNegative' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"unSign")||(I.unSign=function(){z("'unSign' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"reSign")||(I.reSign=function(){z("'reSign' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"formatString")||(I.formatString=function(){z("'formatString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"PATH")||(I.PATH=function(){z("'PATH' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"PATH_FS")||(I.PATH_FS=function(){z("'PATH_FS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"SYSCALLS")||(I.SYSCALLS=function(){z("'SYSCALLS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"syscallMmap2")||(I.syscallMmap2=function(){z("'syscallMmap2' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"syscallMunmap")||(I.syscallMunmap=function(){z("'syscallMunmap' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"getSocketFromFD")||(I.getSocketFromFD=function(){z("'getSocketFromFD' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"getSocketAddress")||(I.getSocketAddress=function(){z("'getSocketAddress' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"JSEvents")||(I.JSEvents=function(){z("'JSEvents' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"registerKeyEventCallback")||(I.registerKeyEventCallback=function(){z("'registerKeyEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"specialHTMLTargets")||(I.specialHTMLTargets=function(){z("'specialHTMLTargets' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"maybeCStringToJsString")||(I.maybeCStringToJsString=function(){z("'maybeCStringToJsString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"findEventTarget")||(I.findEventTarget=function(){z("'findEventTarget' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"findCanvasEventTarget")||(I.findCanvasEventTarget=function(){z("'findCanvasEventTarget' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"getBoundingClientRect")||(I.getBoundingClientRect=function(){z("'getBoundingClientRect' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"fillMouseEventData")||(I.fillMouseEventData=function(){z("'fillMouseEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"registerMouseEventCallback")||(I.registerMouseEventCallback=function(){z("'registerMouseEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"registerWheelEventCallback")||(I.registerWheelEventCallback=function(){z("'registerWheelEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"registerUiEventCallback")||(I.registerUiEventCallback=function(){z("'registerUiEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"registerFocusEventCallback")||(I.registerFocusEventCallback=function(){z("'registerFocusEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"fillDeviceOrientationEventData")||(I.fillDeviceOrientationEventData=function(){z("'fillDeviceOrientationEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"registerDeviceOrientationEventCallback")||(I.registerDeviceOrientationEventCallback=function(){z("'registerDeviceOrientationEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"fillDeviceMotionEventData")||(I.fillDeviceMotionEventData=function(){z("'fillDeviceMotionEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"registerDeviceMotionEventCallback")||(I.registerDeviceMotionEventCallback=function(){z("'registerDeviceMotionEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"screenOrientation")||(I.screenOrientation=function(){z("'screenOrientation' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"fillOrientationChangeEventData")||(I.fillOrientationChangeEventData=function(){z("'fillOrientationChangeEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"registerOrientationChangeEventCallback")||(I.registerOrientationChangeEventCallback=function(){z("'registerOrientationChangeEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"fillFullscreenChangeEventData")||(I.fillFullscreenChangeEventData=function(){z("'fillFullscreenChangeEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"registerFullscreenChangeEventCallback")||(I.registerFullscreenChangeEventCallback=function(){z("'registerFullscreenChangeEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"registerRestoreOldStyle")||(I.registerRestoreOldStyle=function(){z("'registerRestoreOldStyle' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"hideEverythingExceptGivenElement")||(I.hideEverythingExceptGivenElement=function(){z("'hideEverythingExceptGivenElement' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"restoreHiddenElements")||(I.restoreHiddenElements=function(){z("'restoreHiddenElements' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"setLetterbox")||(I.setLetterbox=function(){z("'setLetterbox' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"currentFullscreenStrategy")||(I.currentFullscreenStrategy=function(){z("'currentFullscreenStrategy' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"restoreOldWindowedStyle")||(I.restoreOldWindowedStyle=function(){z("'restoreOldWindowedStyle' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"softFullscreenResizeWebGLRenderTarget")||(I.softFullscreenResizeWebGLRenderTarget=function(){z("'softFullscreenResizeWebGLRenderTarget' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"doRequestFullscreen")||(I.doRequestFullscreen=function(){z("'doRequestFullscreen' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"fillPointerlockChangeEventData")||(I.fillPointerlockChangeEventData=function(){z("'fillPointerlockChangeEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"registerPointerlockChangeEventCallback")||(I.registerPointerlockChangeEventCallback=function(){z("'registerPointerlockChangeEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"registerPointerlockErrorEventCallback")||(I.registerPointerlockErrorEventCallback=function(){z("'registerPointerlockErrorEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"requestPointerLock")||(I.requestPointerLock=function(){z("'requestPointerLock' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"fillVisibilityChangeEventData")||(I.fillVisibilityChangeEventData=function(){z("'fillVisibilityChangeEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"registerVisibilityChangeEventCallback")||(I.registerVisibilityChangeEventCallback=function(){z("'registerVisibilityChangeEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"registerTouchEventCallback")||(I.registerTouchEventCallback=function(){z("'registerTouchEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"fillGamepadEventData")||(I.fillGamepadEventData=function(){z("'fillGamepadEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"registerGamepadEventCallback")||(I.registerGamepadEventCallback=function(){z("'registerGamepadEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"registerBeforeUnloadEventCallback")||(I.registerBeforeUnloadEventCallback=function(){z("'registerBeforeUnloadEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"fillBatteryEventData")||(I.fillBatteryEventData=function(){z("'fillBatteryEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"battery")||(I.battery=function(){z("'battery' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"registerBatteryEventCallback")||(I.registerBatteryEventCallback=function(){z("'registerBatteryEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"setCanvasElementSize")||(I.setCanvasElementSize=function(){z("'setCanvasElementSize' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"getCanvasElementSize")||(I.getCanvasElementSize=function(){z("'getCanvasElementSize' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"polyfillSetImmediate")||(I.polyfillSetImmediate=function(){z("'polyfillSetImmediate' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"demangle")||(I.demangle=function(){z("'demangle' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"demangleAll")||(I.demangleAll=function(){z("'demangleAll' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"jsStackTrace")||(I.jsStackTrace=function(){z("'jsStackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"stackTrace")||(I.stackTrace=function(){z("'stackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"getEnvStrings")||(I.getEnvStrings=function(){z("'getEnvStrings' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"checkWasiClock")||(I.checkWasiClock=function(){z("'checkWasiClock' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"flush_NO_FILESYSTEM")||(I.flush_NO_FILESYSTEM=function(){z("'flush_NO_FILESYSTEM' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"writeI53ToI64")||(I.writeI53ToI64=function(){z("'writeI53ToI64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"writeI53ToI64Clamped")||(I.writeI53ToI64Clamped=function(){z("'writeI53ToI64Clamped' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"writeI53ToI64Signaling")||(I.writeI53ToI64Signaling=function(){z("'writeI53ToI64Signaling' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"writeI53ToU64Clamped")||(I.writeI53ToU64Clamped=function(){z("'writeI53ToU64Clamped' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"writeI53ToU64Signaling")||(I.writeI53ToU64Signaling=function(){z("'writeI53ToU64Signaling' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"readI53FromI64")||(I.readI53FromI64=function(){z("'readI53FromI64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"readI53FromU64")||(I.readI53FromU64=function(){z("'readI53FromU64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"convertI32PairToI53")||(I.convertI32PairToI53=function(){z("'convertI32PairToI53' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"convertU32PairToI53")||(I.convertU32PairToI53=function(){z("'convertU32PairToI53' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"uncaughtExceptionCount")||(I.uncaughtExceptionCount=function(){z("'uncaughtExceptionCount' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"exceptionLast")||(I.exceptionLast=function(){z("'exceptionLast' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"exceptionCaught")||(I.exceptionCaught=function(){z("'exceptionCaught' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"ExceptionInfoAttrs")||(I.ExceptionInfoAttrs=function(){z("'ExceptionInfoAttrs' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"ExceptionInfo")||(I.ExceptionInfo=function(){z("'ExceptionInfo' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"CatchInfo")||(I.CatchInfo=function(){z("'CatchInfo' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"exception_addRef")||(I.exception_addRef=function(){z("'exception_addRef' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"exception_decRef")||(I.exception_decRef=function(){z("'exception_decRef' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"Browser")||(I.Browser=function(){z("'Browser' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"funcWrappers")||(I.funcWrappers=function(){z("'funcWrappers' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"getFuncWrapper")||(I.getFuncWrapper=function(){z("'getFuncWrapper' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"setMainLoop")||(I.setMainLoop=function(){z("'setMainLoop' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"FS")||(I.FS=function(){z("'FS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"mmapAlloc")||(I.mmapAlloc=function(){z("'mmapAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"MEMFS")||(I.MEMFS=function(){z("'MEMFS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"TTY")||(I.TTY=function(){z("'TTY' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"PIPEFS")||(I.PIPEFS=function(){z("'PIPEFS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"SOCKFS")||(I.SOCKFS=function(){z("'SOCKFS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"_setNetworkCallback")||(I._setNetworkCallback=function(){z("'_setNetworkCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"tempFixedLengthArray")||(I.tempFixedLengthArray=function(){z("'tempFixedLengthArray' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"miniTempWebGLFloatBuffers")||(I.miniTempWebGLFloatBuffers=function(){z("'miniTempWebGLFloatBuffers' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"heapObjectForWebGLType")||(I.heapObjectForWebGLType=function(){z("'heapObjectForWebGLType' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"heapAccessShiftForWebGLHeap")||(I.heapAccessShiftForWebGLHeap=function(){z("'heapAccessShiftForWebGLHeap' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"GL")||(I.GL=function(){z("'GL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"emscriptenWebGLGet")||(I.emscriptenWebGLGet=function(){z("'emscriptenWebGLGet' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"computeUnpackAlignedImageSize")||(I.computeUnpackAlignedImageSize=function(){z("'computeUnpackAlignedImageSize' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"emscriptenWebGLGetTexPixelData")||(I.emscriptenWebGLGetTexPixelData=function(){z("'emscriptenWebGLGetTexPixelData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"emscriptenWebGLGetUniform")||(I.emscriptenWebGLGetUniform=function(){z("'emscriptenWebGLGetUniform' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"emscriptenWebGLGetVertexAttrib")||(I.emscriptenWebGLGetVertexAttrib=function(){z("'emscriptenWebGLGetVertexAttrib' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"writeGLArray")||(I.writeGLArray=function(){z("'writeGLArray' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"AL")||(I.AL=function(){z("'AL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"SDL_unicode")||(I.SDL_unicode=function(){z("'SDL_unicode' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"SDL_ttfContext")||(I.SDL_ttfContext=function(){z("'SDL_ttfContext' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"SDL_audio")||(I.SDL_audio=function(){z("'SDL_audio' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"SDL")||(I.SDL=function(){z("'SDL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"SDL_gfx")||(I.SDL_gfx=function(){z("'SDL_gfx' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"GLUT")||(I.GLUT=function(){z("'GLUT' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"EGL")||(I.EGL=function(){z("'EGL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"GLFW_Window")||(I.GLFW_Window=function(){z("'GLFW_Window' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"GLFW")||(I.GLFW=function(){z("'GLFW' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"GLEW")||(I.GLEW=function(){z("'GLEW' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"IDBStore")||(I.IDBStore=function(){z("'IDBStore' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"runAndAbortIfError")||(I.runAndAbortIfError=function(){z("'runAndAbortIfError' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"warnOnce")||(I.warnOnce=function(){z("'warnOnce' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"stackSave")||(I.stackSave=function(){z("'stackSave' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"stackRestore")||(I.stackRestore=function(){z("'stackRestore' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"stackAlloc")||(I.stackAlloc=function(){z("'stackAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"AsciiToString")||(I.AsciiToString=function(){z("'AsciiToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"stringToAscii")||(I.stringToAscii=function(){z("'stringToAscii' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"UTF16ToString")||(I.UTF16ToString=function(){z("'UTF16ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"stringToUTF16")||(I.stringToUTF16=function(){z("'stringToUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"lengthBytesUTF16")||(I.lengthBytesUTF16=function(){z("'lengthBytesUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"UTF32ToString")||(I.UTF32ToString=function(){z("'UTF32ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"stringToUTF32")||(I.stringToUTF32=function(){z("'stringToUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"lengthBytesUTF32")||(I.lengthBytesUTF32=function(){z("'lengthBytesUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"allocateUTF8")||(I.allocateUTF8=function(){z("'allocateUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"allocateUTF8OnStack")||(I.allocateUTF8OnStack=function(){z("'allocateUTF8OnStack' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),I.writeStackCookie=f,I.checkStackCookie=Z,Object.getOwnPropertyDescriptor(I,"intArrayFromBase64")||(I.intArrayFromBase64=function(){z("'intArrayFromBase64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),Object.getOwnPropertyDescriptor(I,"tryParseAsDataURI")||(I.tryParseAsDataURI=function(){z("'tryParseAsDataURI' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)");}),I.ALLOC_NORMAL=0,I.ALLOC_STACK=1,X=function A(){LA||JA(),LA||(X=A);},I.run=JA,I.preInit)for("function"==typeof I.preInit&&(I.preInit=[I.preInit]);I.preInit.length>0;)I.preInit.pop()();return JA(),A.ready;});A.exports=B;}(C={exports:{}},C.exports),C.exports),E=Object.freeze(Object.assign(Object.create(null),Q,{default:Q})),i=function(A,I,g){this.positionPtr=A,this.size=I,this.dataPtr=g;},o=function(){function A(A){this.zstdGetErrorName=A.cwrap("ZSTD_getErrorName","string",["number"]),this.zstdIsError=A.cwrap("ZSTD_isError","number",["number"]);}return A.prototype.checkError=function(A){if(A<0)throw new Error("ZSTD_ERROR: "+this.zstdGetErrorName(A)+", error code: "+A);},A;}(),D=null,a=null;var G=function(){return!!D&&!!a;},F=function(A){function g(){return null!==A&&A.apply(this,arguments)||this;}return I(g,A),g.compress=function(A,I,B){if(void 0===I&&(I=3),void 0===B&&(B=!1),!G())throw new Error("Error: Zstd library not initialized. Please call the ZstdInit before usages");g.isCompressInit||(g.initCompressFunctions(),g.isCompressInit=!0);var C,Q=D._malloc(g.inputSizeCo),E=D._malloc(g.outputSizeCo);try{C=g.initCompressStream();}catch(A){throw D._free(Q),D._free(E),new Error(A);}g.setCompressionLevel(C,I,B);var o=D._malloc(g.positionSize),F=D._malloc(g.positionSize),y=new Uint8Array([]),s=g.inputSizeCo,w=0;try{for(;w100)");var B=A.byteLength+g.zstdFrameHeaderSizeMax,C=g.createArrayPointer(A,B),Q=D._malloc(g.zstdCompressBound(A.length));try{var E=g.zstdCompress(Q,g.zstdCompressBound(A.length),C,B,I);return a.checkError(E),new Uint8Array(D.HEAPU8.subarray(Q,Q+E));}finally{D._free(C),D._free(Q);}},g.initCompressFunctions=function(){g.zstdCompress=D.cwrap("ZSTD_compress","number",["number","number","number","number","number"]),g.zstdCompressBound=D.cwrap("ZSTD_compressBound","number",["number"]);},g.isCompressInit=!1,g;}(function(){function A(){}return A.decompress=function(I){if(!G())throw new Error("Error: Zstd library not initialized. Please call the ZstdInit before usages");A.isDecompressInit||(A.initDecompressFunctions(),A.isDecompressInit=!0);var g=I.length,B=A.createArrayPointer(I,g),C=A.zstdGetFrameContentSize(B,g),Q=D._malloc(C);a.checkError(C);try{var E=A.zstdDecompress(Q,C,B,g);return a.checkError(E),new Uint8Array(D.HEAPU8.subarray(Q,Q+E-A.zstdFrameHeaderSizeMax));}finally{D._free(B),D._free(Q);}},A.initDecompressFunctions=function(){A.zstdDecompress=D.cwrap("ZSTD_decompress","number",["number","number","number","number"]),A.zstdGetFrameContentSize=D.cwrap("ZSTD_getFrameContentSize","number",["number","number"]);},A.createArrayPointer=function(A,I){var g=D._malloc(I);return D.HEAPU8.set(A,g),g;},A.zstdFrameHeaderSizeMax=18,A.isDecompressInit=!1,A;}());function s(){return g(this,void 0,void 0,function(){return B(this,function(A){return[2,(I=E,g={ZstdSimple:y,ZstdStream:F},new Promise(function(A,B){D&&A({ZstdSimple:g.ZstdSimple,ZstdStream:g.ZstdStream}),("function"==typeof I?I:I.default)().then(function(I){a=new o(D=I),A({ZstdSimple:g.ZstdSimple,ZstdStream:g.ZstdStream});}).catch(function(A){B(A);});}))];var I,g;});});}export{s as ZstdInit,y as ZstdSimple,F as ZstdStream}; \ No newline at end of file diff --git a/catalyst_voices/packages/libs/catalyst_compression/catalyst_compression_web/pubspec.yaml b/catalyst_voices/packages/libs/catalyst_compression/catalyst_compression_web/pubspec.yaml index 83c32b808e3..edf53e228f7 100644 --- a/catalyst_voices/packages/libs/catalyst_compression/catalyst_compression_web/pubspec.yaml +++ b/catalyst_voices/packages/libs/catalyst_compression/catalyst_compression_web/pubspec.yaml @@ -19,6 +19,8 @@ flutter: assets: - assets/js/ + - assets/js/brotli/ + - assets/js/zstd/ dependencies: catalyst_compression_platform_interface: ^0.2.0 diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/.earthlyignore b/catalyst_voices/packages/libs/catalyst_key_derivation/.earthlyignore new file mode 100644 index 00000000000..c0dad16a97f --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/.earthlyignore @@ -0,0 +1,22 @@ +# Files and directories created by pub + +**/.dart_tool/ +**/.packages +**/build/ +**/pubspec.lock +**/pubspec_overrides.yaml +**/.flutter-plugins +**/.flutter-plugins-dependencies +**/.idea/ +**/*.iml +**/coverage/ +**/test_reports/ +**/*.log + +# node related + +**/node_modules/ + +# Rust related + +**/target diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/.gitignore b/catalyst_voices/packages/libs/catalyst_key_derivation/.gitignore index 0a4490147e4..105973cfae7 100644 --- a/catalyst_voices/packages/libs/catalyst_key_derivation/.gitignore +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/.gitignore @@ -27,4 +27,7 @@ migrate_working_dir/ **/doc/api/ .dart_tool/ build/ -/web/pkg \ No newline at end of file +/web/pkg + +# Ignore all auto generated file for rust +rust/src/frb_generated.rs \ No newline at end of file diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/Earthfile b/catalyst_voices/packages/libs/catalyst_key_derivation/Earthfile new file mode 100644 index 00000000000..66756590226 --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/Earthfile @@ -0,0 +1,70 @@ +VERSION 0.8 + +IMPORT github.com/input-output-hk/catalyst-ci/earthly/flutter:v3.2.24 AS flutter-ci +IMPORT github.com/input-output-hk/catalyst-ci/earthly/flutter_rust_bridge:v3.2.24 AS flutter_rust_bridge + +builder: + FROM flutter_rust_bridge+builder + COPY . . + +# Generated necessary files for running Flutter web locally and save it locally. +code-generator: + ARG local = false + FROM +builder + DO flutter_rust_bridge+CODE_GENERATOR_WEB + + IF [ $local = true ] + SAVE ARTIFACT ./assets/js AS LOCAL ./assets/js + SAVE ARTIFACT ./rust/src/frb_generated.rs AS LOCAL ./rust/src/frb_generated.rs + SAVE ARTIFACT ./lib/src AS LOCAL ./lib/src + ELSE + SAVE ARTIFACT ./assets/js assets_js + SAVE ARTIFACT ./rust/src/frb_generated.rs frb_generated.rs + SAVE ARTIFACT ./lib/src src + END + +builder-example: + FROM scratch + DO flutter-ci+SETUP + COPY . . + WORKDIR example + +integration-test-web: + FROM +builder-example + ARG browser + LET driver_port = 4444 + + IF [ $browser = "chrome" ] + LET driver = "chromedriver" + END + + IF [ $browser = "firefox" ] + LET driver = "geckodriver" + END + + RUN ($driver --port=$driver_port > $driver.log &) && \ + sleep 5 && \ + flutter drive --driver=test_driver/integration_tests.dart \ + --target=integration_test/catalyst_key_derivation_test.dart \ + -d web-server --browser-name=$browser --driver-port=$driver_port \ + # https://github.com/flutter/flutter/issues/154727 + --web-browser-flag=--disable-web-security \ + --web-browser-flag=--disable-gpu \ + --web-browser-flag=--headless=old \ + --web-browser-flag=--disable-search-engine-choice-screen \ + --profile || echo fail > fail + WAIT + SAVE ARTIFACT $driver.log AS LOCAL $driver.log + END + + IF [ -f fail ] + RUN --no-cache echo ""$browser" integration test failed" && \ + echo "Printing "$driver" logs..." && \ + cat $driver.log && \ + exit 1 + END + +test-web-all: + BUILD +integration-test-web \ + --browser=chrome \ + --browser=firefox diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/Justfile b/catalyst_voices/packages/libs/catalyst_key_derivation/Justfile new file mode 100644 index 00000000000..565c19b03ff --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/Justfile @@ -0,0 +1,12 @@ +# use with https://github.com/casey/just +# +# Catalyst Key Derivation developers' convenience functions. + +# Generated necessary files using Earthly for running Flutter web locally. +code-gen-web: + earthly +code-generator + +# Run local Flutter web. +run-web: code-gen-web + cd example + flutter run --web-header=Cross-Origin-Opener-Policy=same-origin --web-header=Cross-Origin-Embedder-Policy=require-corp -d chrome diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/README.md b/catalyst_voices/packages/libs/catalyst_key_derivation/README.md index 0d27bf10d41..2a5390b181c 100644 --- a/catalyst_voices/packages/libs/catalyst_key_derivation/README.md +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/README.md @@ -2,16 +2,28 @@ * [Content](#content) * [Features](#features) + * [References](#references) * [Requirements](#requirements) * [Install](#install) - * [How to run](#how-to-run) + * [Web setup](#web-setup) * [Example](#example) + * [How to contribute changes](#how-to-contribute-changes) * [Support](#support) * [License](#license) ## Features -This package exposes a CIP-1852 Cardano HD Key Derivation. +This package exposes BIP32-Ed25519 Cardano HD Key Derivation for Flutter (SLIP-0023). + +The underlying implementation is written in rust and translated to Flutter +via the [flutter_rust_bridge](https://pub.dev/packages/flutter_rust_bridge). + +## References + +* [BIP32-Ed25519](https://input-output-hk.github.io/adrestia/static/Ed25519_BIP.pdf) +* [SLIP-0023](https://github.com/satoshilabs/slips/blob/master/slip-0023.md) +* [BIP-0032](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) +* [flutter_rust_bridge](https://pub.dev/packages/flutter_rust_bridge) ## Requirements @@ -25,14 +37,67 @@ dependencies: catalyst_key_derivation: any # or the latest version on Pub ``` -## How to run +## Web setup -1. cd catalyst_key_derivation -2. ./run.sh +[flutter_rust_bridge](https://pub.dev/packages/flutter_rust_bridge) requires custom cross origin +headers in order to enable sharing buffer across origins. + +* When running the app via `flutter run` follow: +[#when-flutter-run](https://cjycode.com/flutter_rust_bridge/manual/miscellaneous/web-cross-origin#when-flutter-run) +* When deploying the app via a web server make sure to setup these headers from your server: +[web-cross-origin#background](https://cjycode.com/flutter_rust_bridge/manual/miscellaneous/web-cross-origin#background) ## Example -TODO(dtscalac): update example +```dart +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; + +Future main() async { + // init has to be called once per app lifetime before the package could be used + await CatalystKeyDerivation.init(); + + const keyDerivation = CatalystKeyDerivation(); + + final xprv = await keyDerivation.deriveMasterKey( + mnemonic: 'prevent company field green slot measure chief' + ' hero apple task eagle sunset endorse dress seed', + ); + print('Master xprv ${xprv.toHex()}'); + + final xpub = await xprv.derivePublicKey(); + print('Master xpub ${xpub.toHex()}'); + + final data = [1, 2, 3, 4]; + final sig = await xprv.sign(data); + + final checkXprvSig = await xprv.verify(data, signature: sig); + print('Check signature by using xprv $checkXprvSig'); + + final checkXpubSig = await xpub.verify(data, signature: sig); + print('Check signature by using xpub $checkXpubSig'); + + const path = "m/1852'/1815'/0'/2/0"; + final childXprv = await xprv.derivePrivateKey(path: path); + print('Derive xprv with $path: ${childXprv.toHex()}'); + + final childXprvHex = childXprv.toHex(); + print('Child xprv hex $childXprvHex'); + + xprv.drop(); + print('Master xprv dropped ${xprv.toHex()}'); +} +``` + +## How to contribute changes + +[flutter_rust_bridge](https://pub.dev/packages/flutter_rust_bridge) is used as a bridge between Rust and Flutter. +To add/update existing functionality offered by this package follow these steps: + +1. [Setup flutter_rust_bridge](https://cjycode.com/flutter_rust_bridge/quickstart) +2. Make changes to Rust code in /rust/src/* +3. Generate Flutter bindings via [earthly](https://earthly.dev/): `earthly +code-generator --local true` +4. Update Flutter code that references Rust exposed API +5. Commit your changes and raise a PR ## Support diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/assets/js/catalyst_key_derivation.js b/catalyst_voices/packages/libs/catalyst_key_derivation/assets/js/catalyst_key_derivation.js new file mode 100644 index 00000000000..589b3147503 --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/assets/js/catalyst_key_derivation.js @@ -0,0 +1,934 @@ +let wasm_bindgen; +(function() { + const __exports = {}; + let script_src; + if (typeof document !== 'undefined' && document.currentScript !== null) { + script_src = new URL(document.currentScript.src, location.href).toString(); + } + let wasm = undefined; + + function _assertBoolean(n) { + if (typeof(n) !== 'boolean') { + throw new Error(`expected a boolean argument, found ${typeof(n)}`); + } + } + + const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } ); + + if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }; + + let cachedUint8ArrayMemory0 = null; + + function getUint8ArrayMemory0() { + if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.buffer !== wasm.memory.buffer) { + cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8ArrayMemory0; + } + + function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8ArrayMemory0().slice(ptr, ptr + len)); + } + + function isLikeNone(x) { + return x === undefined || x === null; + } + + function _assertNum(n) { + if (typeof(n) !== 'number') throw new Error(`expected a number argument, found ${typeof(n)}`); + } + + let cachedDataViewMemory0 = null; + + function getDataViewMemory0() { + if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer !== wasm.memory.buffer) { + cachedDataViewMemory0 = new DataView(wasm.memory.buffer); + } + return cachedDataViewMemory0; + } + + let WASM_VECTOR_LEN = 0; + + const cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } ); + + const encodeString = function (arg, view) { + const buf = cachedTextEncoder.encode(arg); + view.set(buf); + return { + read: arg.length, + written: buf.length + }; + }; + + function passStringToWasm0(arg, malloc, realloc) { + + if (typeof(arg) !== 'string') throw new Error(`expected a string argument, found ${typeof(arg)}`); + + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length, 1) >>> 0; + getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + + const mem = getUint8ArrayMemory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + if (ret.read !== arg.length) throw new Error('failed to pass whole string'); + offset += ret.written; + ptr = realloc(ptr, len, offset, 1) >>> 0; + } + + WASM_VECTOR_LEN = offset; + return ptr; + } + + function debugString(val) { + // primitive types + const type = typeof val; + if (type == 'number' || type == 'boolean' || val == null) { + return `${val}`; + } + if (type == 'string') { + return `"${val}"`; + } + if (type == 'symbol') { + const description = val.description; + if (description == null) { + return 'Symbol'; + } else { + return `Symbol(${description})`; + } + } + if (type == 'function') { + const name = val.name; + if (typeof name == 'string' && name.length > 0) { + return `Function(${name})`; + } else { + return 'Function'; + } + } + // objects + if (Array.isArray(val)) { + const length = val.length; + let debug = '['; + if (length > 0) { + debug += debugString(val[0]); + } + for(let i = 1; i < length; i++) { + debug += ', ' + debugString(val[i]); + } + debug += ']'; + return debug; + } + // Test for built-in + const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); + let className; + if (builtInMatches.length > 1) { + className = builtInMatches[1]; + } else { + // Failed to match the standard '[object ClassName]' + return toString.call(val); + } + if (className == 'Object') { + // we're a user defined class or Object + // JSON.stringify avoids problems with cycles, and is generally much + // easier than looping through ownProperties of `val`. + try { + return 'Object(' + JSON.stringify(val) + ')'; + } catch (_) { + return 'Object'; + } + } + // errors + if (val instanceof Error) { + return `${val.name}: ${val.message}\n${val.stack}`; + } + // TODO we could test for more things here, like `Set`s and `Map`s. + return className; + } + + const CLOSURE_DTORS = (typeof FinalizationRegistry === 'undefined') + ? { register: () => {}, unregister: () => {} } + : new FinalizationRegistry(state => { + wasm.__wbindgen_export_4.get(state.dtor)(state.a, state.b) +}); + +function makeMutClosure(arg0, arg1, dtor, f) { + const state = { a: arg0, b: arg1, cnt: 1, dtor }; + const real = (...args) => { + // First up with a closure we increment the internal reference + // count. This ensures that the Rust closure environment won't + // be deallocated while we're invoking it. + state.cnt++; + const a = state.a; + state.a = 0; + try { + return f(a, state.b, ...args); + } finally { + if (--state.cnt === 0) { + wasm.__wbindgen_export_4.get(state.dtor)(a, state.b); + CLOSURE_DTORS.unregister(state); + } else { + state.a = a; + } + } + }; + real.original = state; + CLOSURE_DTORS.register(real, state, state); + return real; +} + +function logError(f, args) { + try { + return f.apply(this, args); + } catch (e) { + let error = (function () { + try { + return e instanceof Error ? `${e.message}\n\nStack:\n${e.stack}` : e.toString(); + } catch(_) { + return ""; + } + }()); + console.error("wasm-bindgen: imported JS function that was not marked as `catch` threw an error:", error); + throw e; + } +} +function __wbg_adapter_36(arg0, arg1, arg2) { + _assertNum(arg0); + _assertNum(arg1); + wasm.closure126_externref_shim(arg0, arg1, arg2); +} + +function __wbg_adapter_39(arg0, arg1, arg2) { + _assertNum(arg0); + _assertNum(arg1); + wasm.closure154_externref_shim(arg0, arg1, arg2); +} + +function __wbg_adapter_42(arg0, arg1, arg2) { + _assertNum(arg0); + _assertNum(arg1); + wasm.closure158_externref_shim(arg0, arg1, arg2); +} + +/** + * @returns {number} + */ +__exports.frb_get_rust_content_hash = function() { + const ret = wasm.frb_get_rust_content_hash(); + return ret; +}; + +/** + * @param {number} func_id + * @param {any} port_ + * @param {any} ptr_ + * @param {number} rust_vec_len_ + * @param {number} data_len_ + */ +__exports.frb_pde_ffi_dispatcher_primary = function(func_id, port_, ptr_, rust_vec_len_, data_len_) { + _assertNum(func_id); + _assertNum(rust_vec_len_); + _assertNum(data_len_); + wasm.frb_pde_ffi_dispatcher_primary(func_id, port_, ptr_, rust_vec_len_, data_len_); +}; + +/** + * @param {number} func_id + * @param {any} ptr_ + * @param {number} rust_vec_len_ + * @param {number} data_len_ + * @returns {any} + */ +__exports.frb_pde_ffi_dispatcher_sync = function(func_id, ptr_, rust_vec_len_, data_len_) { + _assertNum(func_id); + _assertNum(rust_vec_len_); + _assertNum(data_len_); + const ret = wasm.frb_pde_ffi_dispatcher_sync(func_id, ptr_, rust_vec_len_, data_len_); + return ret; +}; + +/** + * @param {number} call_id + * @param {any} ptr_ + * @param {number} rust_vec_len_ + * @param {number} data_len_ + */ +__exports.dart_fn_deliver_output = function(call_id, ptr_, rust_vec_len_, data_len_) { + _assertNum(call_id); + _assertNum(rust_vec_len_); + _assertNum(data_len_); + wasm.dart_fn_deliver_output(call_id, ptr_, rust_vec_len_, data_len_); +}; + +/** + * @param {number} ptr + */ +__exports.rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature = function(ptr) { + _assertNum(ptr); + wasm.rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature(ptr); +}; + +/** + * @param {number} ptr + */ +__exports.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature = function(ptr) { + _assertNum(ptr); + wasm.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature(ptr); +}; + +/** + * @param {number} ptr + */ +__exports.rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey = function(ptr) { + _assertNum(ptr); + wasm.rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey(ptr); +}; + +/** + * @param {number} ptr + */ +__exports.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey = function(ptr) { + _assertNum(ptr); + wasm.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey(ptr); +}; + +/** + * @param {number} ptr + */ +__exports.rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey = function(ptr) { + _assertNum(ptr); + wasm.rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey(ptr); +}; + +/** + * @param {number} ptr + */ +__exports.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey = function(ptr) { + _assertNum(ptr); + wasm.rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey(ptr); +}; + +function takeFromExternrefTable0(idx) { + const value = wasm.__wbindgen_export_3.get(idx); + wasm.__externref_table_dealloc(idx); + return value; +} + +function addToExternrefTable0(obj) { + const idx = wasm.__externref_table_alloc(); + wasm.__wbindgen_export_3.set(idx, obj); + return idx; +} + +function passArrayJsValueToWasm0(array, malloc) { + const ptr = malloc(array.length * 4, 4) >>> 0; + const mem = getDataViewMemory0(); + for (let i = 0; i < array.length; i++) { + mem.setUint32(ptr + 4 * i, addToExternrefTable0(array[i]), true); + } + WASM_VECTOR_LEN = array.length; + return ptr; +} +/** + * ## Safety + * This function reclaims a raw pointer created by [`TransferClosure`], and therefore + * should **only** be used in conjunction with it. + * Furthermore, the WASM module in the worker must have been initialized with the shared + * memory from the host JS scope. + * @param {number} payload + * @param {any[]} transfer + */ +__exports.receive_transfer_closure = function(payload, transfer) { + _assertNum(payload); + const ptr0 = passArrayJsValueToWasm0(transfer, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.receive_transfer_closure(payload, ptr0, len0); + if (ret[1]) { + throw takeFromExternrefTable0(ret[0]); + } +}; + +function handleError(f, args) { + try { + return f.apply(this, args); + } catch (e) { + const idx = addToExternrefTable0(e); + wasm.__wbindgen_exn_store(idx); + } +} +/** + * @param {number} ptr + */ +__exports.dart_opaque_drop_thread_box_persistent_handle = function(ptr) { + _assertNum(ptr); + wasm.dart_opaque_drop_thread_box_persistent_handle(ptr); +}; + +function notDefined(what) { return () => { throw new Error(`${what} is not defined`); }; } +function __wbg_adapter_124(arg0, arg1, arg2, arg3) { + _assertNum(arg0); + _assertNum(arg1); + wasm.closure259_externref_shim(arg0, arg1, arg2, arg3); +} + +/** + * @param {number} ptr + * @returns {any} + */ +__exports.dart_opaque_rust2dart_decode = function(ptr) { + _assertNum(ptr); + const ret = wasm.dart_opaque_rust2dart_decode(ptr); + return ret; +}; + +/** + * # Safety + * + * This should never be called manually. + * @param {any} handle + * @param {any} dart_handler_port + * @returns {number} + */ +__exports.dart_opaque_dart2rust_encode = function(handle, dart_handler_port) { + const ret = wasm.dart_opaque_dart2rust_encode(handle, dart_handler_port); + return ret >>> 0; +}; + +__exports.wasm_start_callback = function() { + wasm.wasm_start_callback(); +}; + +const WorkerPoolFinalization = (typeof FinalizationRegistry === 'undefined') + ? { register: () => {}, unregister: () => {} } + : new FinalizationRegistry(ptr => wasm.__wbg_workerpool_free(ptr >>> 0, 1)); + +class WorkerPool { + + __destroy_into_raw() { + const ptr = this.__wbg_ptr; + this.__wbg_ptr = 0; + WorkerPoolFinalization.unregister(this); + return ptr; + } + + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_workerpool_free(ptr, 0); + } + /** + * Creates a new `WorkerPool` which immediately creates `initial` workers. + * + * The pool created here can be used over a long period of time, and it + * will be initially primed with `initial` workers. Currently workers are + * never released or gc'd until the whole pool is destroyed. + * + * # Errors + * + * Returns any error that may happen while a JS web worker is created and a + * message is sent to it. + * @param {number} initial + * @param {string} script_src + */ + constructor(initial, script_src) { + _assertNum(initial); + const ptr0 = passStringToWasm0(script_src, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.workerpool_new(initial, ptr0, len0); + if (ret[2]) { + throw takeFromExternrefTable0(ret[1]); + } + this.__wbg_ptr = ret[0] >>> 0; + WorkerPoolFinalization.register(this, this.__wbg_ptr, this); + return this; + } +} +__exports.WorkerPool = WorkerPool; + +async function __wbg_load(module, imports) { + if (typeof Response === 'function' && module instanceof Response) { + if (typeof WebAssembly.instantiateStreaming === 'function') { + try { + return await WebAssembly.instantiateStreaming(module, imports); + + } catch (e) { + if (module.headers.get('Content-Type') != 'application/wasm') { + console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); + + } else { + throw e; + } + } + } + + const bytes = await module.arrayBuffer(); + return await WebAssembly.instantiate(bytes, imports); + + } else { + const instance = await WebAssembly.instantiate(module, imports); + + if (instance instanceof WebAssembly.Instance) { + return { instance, module }; + + } else { + return instance; + } + } +} + +function __wbg_get_imports() { + const imports = {}; + imports.wbg = {}; + imports.wbg.__wbindgen_number_new = function(arg0) { + const ret = arg0; + return ret; + }; + imports.wbg.__wbindgen_jsval_eq = function(arg0, arg1) { + const ret = arg0 === arg1; + _assertBoolean(ret); + return ret; + }; + imports.wbg.__wbindgen_string_new = function(arg0, arg1) { + const ret = getStringFromWasm0(arg0, arg1); + return ret; + }; + imports.wbg.__wbindgen_number_get = function(arg0, arg1) { + const obj = arg1; + const ret = typeof(obj) === 'number' ? obj : undefined; + if (!isLikeNone(ret)) { + _assertNum(ret); + } + getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true); + }; + imports.wbg.__wbindgen_cb_drop = function(arg0) { + const obj = arg0.original; + if (obj.cnt-- == 1) { + obj.a = 0; + return true; + } + const ret = false; + _assertBoolean(ret); + return ret; + }; + imports.wbg.__wbindgen_is_falsy = function(arg0) { + const ret = !arg0; + _assertBoolean(ret); + return ret; + }; + imports.wbg.__wbg_error_ff1fa6a31da883f3 = function() { return logError(function (arg0, arg1) { + console.error(getStringFromWasm0(arg0, arg1)); + }, arguments) }; + imports.wbg.__wbindgen_string_get = function(arg0, arg1) { + const obj = arg1; + const ret = typeof(obj) === 'string' ? obj : undefined; + var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + var len1 = WASM_VECTOR_LEN; + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + }; + imports.wbg.__wbg_postMessage_4f5b1f1567ceb41e = function() { return handleError(function (arg0, arg1) { + arg0.postMessage(arg1); + }, arguments) }; + imports.wbg.__wbg_waitAsync_d62f74bb033aed68 = function() { return logError(function () { + const ret = Atomics.waitAsync; + return ret; + }, arguments) }; + imports.wbg.__wbindgen_is_undefined = function(arg0) { + const ret = arg0 === undefined; + _assertBoolean(ret); + return ret; + }; + imports.wbg.__wbg_waitAsync_87bf5e0c4485591d = function() { return logError(function (arg0, arg1, arg2) { + const ret = Atomics.waitAsync(arg0, arg1 >>> 0, arg2); + return ret; + }, arguments) }; + imports.wbg.__wbg_async_a3f53c0737bd7dbb = function() { return logError(function (arg0) { + const ret = arg0.async; + _assertBoolean(ret); + return ret; + }, arguments) }; + imports.wbg.__wbg_value_be4e2931afebd744 = function() { return logError(function (arg0) { + const ret = arg0.value; + return ret; + }, arguments) }; + imports.wbg.__wbindgen_link_541969fbbd47a922 = function() { return logError(function (arg0) { + const val = `onmessage = function (ev) { + let [ia, index, value] = ev.data; + ia = new Int32Array(ia.buffer); + let result = Atomics.wait(ia, index, value); + postMessage(result); + }; + `; + const ret = typeof URL.createObjectURL === 'undefined' ? "data:application/javascript," + encodeURIComponent(val) : URL.createObjectURL(new Blob([val], { type: "text/javascript" })); + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + }, arguments) }; + imports.wbg.__wbg_queueMicrotask_c5419c06eab41e73 = typeof queueMicrotask == 'function' ? queueMicrotask : notDefined('queueMicrotask'); + imports.wbg.__wbg_queueMicrotask_848aa4969108a57e = function() { return logError(function (arg0) { + const ret = arg0.queueMicrotask; + return ret; + }, arguments) }; + imports.wbg.__wbindgen_is_function = function(arg0) { + const ret = typeof(arg0) === 'function'; + _assertBoolean(ret); + return ret; + }; + imports.wbg.__wbg_newwithblobsequenceandoptions_4af878769922c608 = function() { return handleError(function (arg0, arg1) { + const ret = new Blob(arg0, arg1); + return ret; + }, arguments) }; + imports.wbg.__wbg_createObjectURL_11804d71ac214694 = function() { return handleError(function (arg0, arg1) { + const ret = URL.createObjectURL(arg1); + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + }, arguments) }; + imports.wbg.__wbg_instanceof_MessageEvent_a025220a70647214 = function() { return logError(function (arg0) { + let result; + try { + result = arg0 instanceof MessageEvent; + } catch (_) { + result = false; + } + const ret = result; + _assertBoolean(ret); + return ret; + }, arguments) }; + imports.wbg.__wbg_data_134d3a704b9fca32 = function() { return logError(function (arg0) { + const ret = arg0.data; + return ret; + }, arguments) }; + imports.wbg.__wbg_setonmessage_7e6ff33e920fdb07 = function() { return logError(function (arg0, arg1) { + arg0.onmessage = arg1; + }, arguments) }; + imports.wbg.__wbg_setonerror_b4509e7faa7b467c = function() { return logError(function (arg0, arg1) { + arg0.onerror = arg1; + }, arguments) }; + imports.wbg.__wbg_new_00d033f8a8736a28 = function() { return handleError(function (arg0, arg1) { + const ret = new Worker(getStringFromWasm0(arg0, arg1)); + return ret; + }, arguments) }; + imports.wbg.__wbg_postMessage_49334e5d7d9cc421 = function() { return handleError(function (arg0, arg1) { + arg0.postMessage(arg1); + }, arguments) }; + imports.wbg.__wbg_postMessage_857ce8a4ab57c841 = function() { return handleError(function (arg0, arg1, arg2) { + arg0.postMessage(arg1, arg2); + }, arguments) }; + imports.wbg.__wbg_postMessage_db4646ee95ec1359 = function() { return handleError(function (arg0, arg1) { + arg0.postMessage(arg1); + }, arguments) }; + imports.wbg.__wbg_instanceof_BroadcastChannel_95a2d09ab0acabf5 = function() { return logError(function (arg0) { + let result; + try { + result = arg0 instanceof BroadcastChannel; + } catch (_) { + result = false; + } + const ret = result; + _assertBoolean(ret); + return ret; + }, arguments) }; + imports.wbg.__wbg_name_b2ecc084c5f949ae = function() { return logError(function (arg0, arg1) { + const ret = arg1.name; + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + }, arguments) }; + imports.wbg.__wbg_new_2fa7be5f655ff747 = function() { return handleError(function (arg0, arg1) { + const ret = new BroadcastChannel(getStringFromWasm0(arg0, arg1)); + return ret; + }, arguments) }; + imports.wbg.__wbg_instanceof_ErrorEvent_d4e102d1c48abb99 = function() { return logError(function (arg0) { + let result; + try { + result = arg0 instanceof ErrorEvent; + } catch (_) { + result = false; + } + const ret = result; + _assertBoolean(ret); + return ret; + }, arguments) }; + imports.wbg.__wbg_message_81c104ef29dcf2fc = function() { return logError(function (arg0, arg1) { + const ret = arg1.message; + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + }, arguments) }; + imports.wbg.__wbg_settype_623d2ee701e6310a = function() { return logError(function (arg0, arg1, arg2) { + arg0.type = getStringFromWasm0(arg1, arg2); + }, arguments) }; + imports.wbg.__wbg_new_034f913e7636e987 = function() { return logError(function () { + const ret = new Array(); + return ret; + }, arguments) }; + imports.wbg.__wbg_newnoargs_1ede4bf2ebbaaf43 = function() { return logError(function (arg0, arg1) { + const ret = new Function(getStringFromWasm0(arg0, arg1)); + return ret; + }, arguments) }; + imports.wbg.__wbg_get_ef828680c64da212 = function() { return handleError(function (arg0, arg1) { + const ret = Reflect.get(arg0, arg1); + return ret; + }, arguments) }; + imports.wbg.__wbg_call_a9ef466721e824f2 = function() { return handleError(function (arg0, arg1) { + const ret = arg0.call(arg1); + return ret; + }, arguments) }; + imports.wbg.__wbg_new_e69b5f66fda8f13c = function() { return logError(function () { + const ret = new Object(); + return ret; + }, arguments) }; + imports.wbg.__wbg_self_bf91bf94d9e04084 = function() { return handleError(function () { + const ret = self.self; + return ret; + }, arguments) }; + imports.wbg.__wbg_window_52dd9f07d03fd5f8 = function() { return handleError(function () { + const ret = window.window; + return ret; + }, arguments) }; + imports.wbg.__wbg_globalThis_05c129bf37fcf1be = function() { return handleError(function () { + const ret = globalThis.globalThis; + return ret; + }, arguments) }; + imports.wbg.__wbg_global_3eca19bb09e9c484 = function() { return handleError(function () { + const ret = global.global; + return ret; + }, arguments) }; + imports.wbg.__wbg_eval_1bab7c4fbae3b3d6 = function() { return handleError(function (arg0, arg1) { + const ret = eval(getStringFromWasm0(arg0, arg1)); + return ret; + }, arguments) }; + imports.wbg.__wbg_of_89e8c832a3ab551d = function() { return logError(function (arg0, arg1, arg2) { + const ret = Array.of(arg0, arg1, arg2); + return ret; + }, arguments) }; + imports.wbg.__wbg_push_36cf4d81d7da33d1 = function() { return logError(function (arg0, arg1) { + const ret = arg0.push(arg1); + _assertNum(ret); + return ret; + }, arguments) }; + imports.wbg.__wbg_unshift_326da4ca20840433 = function() { return logError(function (arg0, arg1) { + const ret = arg0.unshift(arg1); + _assertNum(ret); + return ret; + }, arguments) }; + imports.wbg.__wbg_call_3bfa248576352471 = function() { return handleError(function (arg0, arg1, arg2) { + const ret = arg0.call(arg1, arg2); + return ret; + }, arguments) }; + imports.wbg.__wbg_new_1073970097e5a420 = function() { return logError(function (arg0, arg1) { + try { + var state0 = {a: arg0, b: arg1}; + var cb0 = (arg0, arg1) => { + const a = state0.a; + state0.a = 0; + try { + return __wbg_adapter_124(a, state0.b, arg0, arg1); + } finally { + state0.a = a; + } + }; + const ret = new Promise(cb0); + return ret; + } finally { + state0.a = state0.b = 0; + } + }, arguments) }; + imports.wbg.__wbg_resolve_0aad7c1484731c99 = function() { return logError(function (arg0) { + const ret = Promise.resolve(arg0); + return ret; + }, arguments) }; + imports.wbg.__wbg_then_748f75edfb032440 = function() { return logError(function (arg0, arg1) { + const ret = arg0.then(arg1); + return ret; + }, arguments) }; + imports.wbg.__wbg_buffer_ccaed51a635d8a2d = function() { return logError(function (arg0) { + const ret = arg0.buffer; + return ret; + }, arguments) }; + imports.wbg.__wbg_new_c177f2faf9d9c9f2 = function() { return logError(function (arg0) { + const ret = new Int32Array(arg0); + return ret; + }, arguments) }; + imports.wbg.__wbg_newwithbyteoffsetandlength_7e3eb787208af730 = function() { return logError(function (arg0, arg1, arg2) { + const ret = new Uint8Array(arg0, arg1 >>> 0, arg2 >>> 0); + return ret; + }, arguments) }; + imports.wbg.__wbg_new_fec2611eb9180f95 = function() { return logError(function (arg0) { + const ret = new Uint8Array(arg0); + return ret; + }, arguments) }; + imports.wbg.__wbg_set_ec2fcf81bc573fd9 = function() { return logError(function (arg0, arg1, arg2) { + arg0.set(arg1, arg2 >>> 0); + }, arguments) }; + imports.wbg.__wbg_length_9254c4bd3b9f23c4 = function() { return logError(function (arg0) { + const ret = arg0.length; + _assertNum(ret); + return ret; + }, arguments) }; + imports.wbg.__wbindgen_debug_string = function(arg0, arg1) { + const ret = debugString(arg1); + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + }; + imports.wbg.__wbindgen_throw = function(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); + }; + imports.wbg.__wbindgen_rethrow = function(arg0) { + throw arg0; + }; + imports.wbg.__wbindgen_module = function() { + const ret = __wbg_init.__wbindgen_wasm_module; + return ret; + }; + imports.wbg.__wbindgen_memory = function() { + const ret = wasm.memory; + return ret; + }; + imports.wbg.__wbg_new_abda76e883ba8a5f = function() { return logError(function () { + const ret = new Error(); + return ret; + }, arguments) }; + imports.wbg.__wbg_stack_658279fe44541cf6 = function() { return logError(function (arg0, arg1) { + const ret = arg1.stack; + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + }, arguments) }; + imports.wbg.__wbg_error_f851667af71bcfc6 = function() { return logError(function (arg0, arg1) { + let deferred0_0; + let deferred0_1; + try { + deferred0_0 = arg0; + deferred0_1 = arg1; + console.error(getStringFromWasm0(arg0, arg1)); + } finally { + wasm.__wbindgen_free(deferred0_0, deferred0_1, 1); + } + }, arguments) }; + imports.wbg.__wbindgen_closure_wrapper447 = function() { return logError(function (arg0, arg1, arg2) { + const ret = makeMutClosure(arg0, arg1, 127, __wbg_adapter_36); + return ret; + }, arguments) }; + imports.wbg.__wbindgen_closure_wrapper558 = function() { return logError(function (arg0, arg1, arg2) { + const ret = makeMutClosure(arg0, arg1, 155, __wbg_adapter_39); + return ret; + }, arguments) }; + imports.wbg.__wbindgen_closure_wrapper560 = function() { return logError(function (arg0, arg1, arg2) { + const ret = makeMutClosure(arg0, arg1, 159, __wbg_adapter_42); + return ret; + }, arguments) }; + imports.wbg.__wbindgen_init_externref_table = function() { + const table = wasm.__wbindgen_export_3; + const offset = table.grow(4); + table.set(0, undefined); + table.set(offset + 0, undefined); + table.set(offset + 1, null); + table.set(offset + 2, true); + table.set(offset + 3, false); + ; + }; + + return imports; +} + +function __wbg_init_memory(imports, memory) { + imports.wbg.memory = memory || new WebAssembly.Memory({initial:22,maximum:16384,shared:true}); +} + +function __wbg_finalize_init(instance, module, thread_stack_size) { + wasm = instance.exports; + __wbg_init.__wbindgen_wasm_module = module; + cachedDataViewMemory0 = null; + cachedUint8ArrayMemory0 = null; + +if (typeof thread_stack_size !== 'undefined' && (typeof thread_stack_size !== 'number' || thread_stack_size === 0 || thread_stack_size % 65536 !== 0)) { throw 'invalid stack size' } +wasm.__wbindgen_start(thread_stack_size); +return wasm; +} + +function initSync(module, memory) { + if (wasm !== undefined) return wasm; + + let thread_stack_size + if (typeof module !== 'undefined') { + if (Object.getPrototypeOf(module) === Object.prototype) { + ({module, memory, thread_stack_size} = module) + } else { + console.warn('using deprecated parameters for `initSync()`; pass a single object instead') + } + } + + const imports = __wbg_get_imports(); + + __wbg_init_memory(imports, memory); + + if (!(module instanceof WebAssembly.Module)) { + module = new WebAssembly.Module(module); + } + + const instance = new WebAssembly.Instance(module, imports); + + return __wbg_finalize_init(instance, module, thread_stack_size); +} + +async function __wbg_init(module_or_path, memory) { + if (wasm !== undefined) return wasm; + + let thread_stack_size + if (typeof module_or_path !== 'undefined') { + if (Object.getPrototypeOf(module_or_path) === Object.prototype) { + ({module_or_path, memory, thread_stack_size} = module_or_path) + } else { + console.warn('using deprecated parameters for the initialization function; pass a single object instead') + } + } + + if (typeof module_or_path === 'undefined' && typeof script_src !== 'undefined') { + module_or_path = script_src.replace(/\.js$/, '_bg.wasm'); + } + const imports = __wbg_get_imports(); + + if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) { + module_or_path = fetch(module_or_path); + } + + __wbg_init_memory(imports, memory); + + const { instance, module } = await __wbg_load(await module_or_path, imports); + + return __wbg_finalize_init(instance, module, thread_stack_size); +} + +wasm_bindgen = Object.assign(__wbg_init, { initSync }, __exports); + +})(); diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/assets/js/catalyst_key_derivation_bg.wasm b/catalyst_voices/packages/libs/catalyst_key_derivation/assets/js/catalyst_key_derivation_bg.wasm new file mode 100644 index 00000000000..089450e3d11 Binary files /dev/null and b/catalyst_voices/packages/libs/catalyst_key_derivation/assets/js/catalyst_key_derivation_bg.wasm differ diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/assets/js/package.json b/catalyst_voices/packages/libs/catalyst_key_derivation/assets/js/package.json new file mode 100644 index 00000000000..79b195a6ebb --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/assets/js/package.json @@ -0,0 +1,15 @@ +{ + "name": "catalyst_key_derivation", + "version": "0.1.0", + "license": "Apache-2.0", + "repository": { + "type": "git", + "url": "https://github.com/input-output-hk/catalyst-voices" + }, + "files": [ + "catalyst_key_derivation_bg.wasm", + "catalyst_key_derivation.js" + ], + "browser": "catalyst_key_derivation.js", + "homepage": "https://input-output-hk.github.io/catalyst-voices" +} \ No newline at end of file diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/blueprint.cue b/catalyst_voices/packages/libs/catalyst_key_derivation/blueprint.cue new file mode 100644 index 00000000000..71140f62062 --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/blueprint.cue @@ -0,0 +1,2 @@ +version: "1.0.0" +project: name: "catalyst-key-derivation" \ No newline at end of file diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/example/integration_test/catalyst_key_derivation_test.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/example/integration_test/catalyst_key_derivation_test.dart new file mode 100644 index 00000000000..2c5decf688b --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/example/integration_test/catalyst_key_derivation_test.dart @@ -0,0 +1,97 @@ +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; +import 'package:convert/convert.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:integration_test/integration_test.dart'; + +void main() { + IntegrationTestWidgetsFlutterBinding.ensureInitialized(); + + group(CatalystKeyDerivation, () { + const mnemonic = 'prevent company field green slot measure chief' + ' hero apple task eagle sunset endorse dress seed'; + const keyDerivation = CatalystKeyDerivation(); + var initializedSuccessfully = false; + + /// Returns true and marks a test from which this method is called + /// as skipped if initialization test didn't work. + /// + /// All other tests depend on successful initialization therefore + /// to limit unclear failures we will skip these tests if init doesn't work. + bool shouldSkipTest() { + if (initializedSuccessfully) { + markTestSkipped("Test is skipped because init does't work"); + } + + return !initializedSuccessfully; + } + + // Keep this test as the first (top) one, other tests depend on it. + testWidgets('init', (tester) async { + try { + await CatalystKeyDerivation.init(); + initializedSuccessfully = true; + } catch (ignored) { + initializedSuccessfully = false; + rethrow; + } + }); + + testWidgets('deriveMasterKey and derivePublicKey', (tester) async { + if (shouldSkipTest()) return; + + final xprv = await keyDerivation.deriveMasterKey(mnemonic: mnemonic); + + expect(xprv.bytes, isNotEmpty); + expect(xprv.bytes, equals(hex.decode(xprv.toHex()))); + + final xpub = await xprv.derivePublicKey(); + expect(xpub.bytes, isNotEmpty); + expect(xpub.bytes, equals(hex.decode(xpub.toHex()))); + }); + + testWidgets('deriveKeys, sign data and verify signature', (tester) async { + if (shouldSkipTest()) return; + + final xprv = await keyDerivation.deriveMasterKey(mnemonic: mnemonic); + final xpub = await xprv.derivePublicKey(); + + const data = [1, 2, 3, 4]; + final sig = await xprv.sign(data); + + final xprvVerification = await xprv.verify(data, signature: sig); + expect(xprvVerification, isTrue); + + final xpubVerification = await xpub.verify(data, signature: sig); + expect(xpubVerification, isTrue); + }); + + testWidgets('derivePrivateKey', (tester) async { + if (shouldSkipTest()) return; + + final xprv = await keyDerivation.deriveMasterKey(mnemonic: mnemonic); + const path = "m/1852'/1815'/0'/2/0"; + final derivedXprv = await xprv.derivePrivateKey(path: path); + expect(derivedXprv.bytes, isNotEmpty); + }); + + testWidgets('drop clears a key', (tester) async { + if (shouldSkipTest()) return; + + final xprv = await keyDerivation.deriveMasterKey(mnemonic: mnemonic); + + expect( + xprv.bytes.every((byte) => byte == 0), + isFalse, + reason: 'xprv is not cleared yet', + ); + + xprv.drop(); + + expect( + xprv.bytes.every((byte) => byte == 0), + isTrue, + reason: 'xprv is cleared now', + ); + }); + }); +} diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/example/lib/main.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/example/lib/main.dart index e01cba33fdf..05b6709786d 100644 --- a/catalyst_voices/packages/libs/catalyst_key_derivation/example/lib/main.dart +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/example/lib/main.dart @@ -1,8 +1,10 @@ +// ignore_for_file: avoid_print + import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; import 'package:flutter/material.dart'; Future main() async { - await RustLib.init(); + await CatalystKeyDerivation.init(); runApp(const MyApp()); } @@ -34,7 +36,34 @@ class MyApp extends StatelessWidget { } Future _doMagic() async { - // ignore: avoid_print - print(await greet(name: 'Tom')); + const keyDerivation = CatalystKeyDerivation(); + + final xprv = await keyDerivation.deriveMasterKey( + mnemonic: 'prevent company field green slot measure chief' + ' hero apple task eagle sunset endorse dress seed', + ); + print('Master xprv ${xprv.toHex()}'); + + final xpub = await xprv.derivePublicKey(); + print('Master xpub ${xpub.toHex()}'); + + final data = [1, 2, 3, 4]; + final sig = await xprv.sign(data); + + final checkXprvSig = await xprv.verify(data, signature: sig); + print('Check signature by using xprv $checkXprvSig'); + + final checkXpubSig = await xpub.verify(data, signature: sig); + print('Check signature by using xpub $checkXpubSig'); + + const path = "m/1852'/1815'/0'/2/0"; + final childXprv = await xprv.derivePrivateKey(path: path); + print('Derive xprv with $path: ${childXprv.toHex()}'); + + final childXprvHex = childXprv.toHex(); + print('Master xprv hex $childXprvHex'); + + xprv.drop(); + print('Master xprv dropped ${xprv.toHex()}'); } } diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/example/pubspec.yaml b/catalyst_voices/packages/libs/catalyst_key_derivation/example/pubspec.yaml index 1de207d7d63..c444f868822 100644 --- a/catalyst_voices/packages/libs/catalyst_key_derivation/example/pubspec.yaml +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/example/pubspec.yaml @@ -9,6 +9,7 @@ environment: dependencies: catalyst_key_derivation: path: ../ + convert: ^3.1.1 cupertino_icons: ^1.0.8 flutter: sdk: flutter diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/example/test_driver/integration_tests.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/example/test_driver/integration_tests.dart new file mode 100644 index 00000000000..b38629cca97 --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/example/test_driver/integration_tests.dart @@ -0,0 +1,3 @@ +import 'package:integration_test/integration_test_driver.dart'; + +Future main() => integrationDriver(); diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/example/web/enable-threads.js b/catalyst_voices/packages/libs/catalyst_key_derivation/example/web/enable-threads.js new file mode 100644 index 00000000000..3beb7e215b3 --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/example/web/enable-threads.js @@ -0,0 +1,80 @@ +// TODO(dtscalac): remove workaround when flutter_rust_bridge supports crossOriginIsolated for flutter drive: +// https://github.com/fzyzcjy/flutter_rust_bridge/issues/2407 + +// https://github.com/orgs/community/discussions/13309#discussioncomment-3844940 +// NOTE: This file creates a service worker that cross-origin-isolates the page (read more here: https://web.dev/coop-coep/) which allows us to use wasm threads. +// Normally you would set the COOP and COEP headers on the server to do this, but Github Pages doesn't allow this, so this is a hack to do that. + +/* Edited version of: coi-serviceworker v0.1.6 - Guido Zuidhof, licensed under MIT */ +// From here: https://github.com/gzuidhof/coi-serviceworker +if (typeof window === 'undefined') { + self.addEventListener("install", () => self.skipWaiting()); + self.addEventListener("activate", e => e.waitUntil(self.clients.claim())); + + async function handleFetch(request) { + if (request.cache === "only-if-cached" && request.mode !== "same-origin") { + return; + } + + if (request.mode === "no-cors") { // We need to set `credentials` to "omit" for no-cors requests, per this comment: https://bugs.chromium.org/p/chromium/issues/detail?id=1309901#c7 + request = new Request(request.url, { + cache: request.cache, + credentials: "omit", + headers: request.headers, + integrity: request.integrity, + destination: request.destination, + keepalive: request.keepalive, + method: request.method, + mode: request.mode, + redirect: request.redirect, + referrer: request.referrer, + referrerPolicy: request.referrerPolicy, + signal: request.signal, + }); + } + + let r = await fetch(request).catch(e => console.error(e)); + + if (r.status === 0) { + return r; + } + + const headers = new Headers(r.headers); + // NOTE https://github.com/fzyzcjy/flutter_rust_bridge/issues/1618 changes to require-corp + headers.set("Cross-Origin-Embedder-Policy", "require-corp"); // credentialless or require-corp + headers.set("Cross-Origin-Opener-Policy", "same-origin"); + + return new Response(r.body, { status: r.status, statusText: r.statusText, headers }); + } + + self.addEventListener("fetch", function (e) { + e.respondWith(handleFetch(e.request)); // respondWith must be executed synchonously (but can be passed a Promise) + }); + +} else { + (async function () { + if (window.crossOriginIsolated !== false) return; + + let registration = await navigator.serviceWorker.register(window.document.currentScript.src).catch(e => console.error("COOP/COEP Service Worker failed to register:", e)); + if (registration) { + console.log("COOP/COEP Service Worker registered", registration.scope); + + registration.addEventListener("updatefound", () => { + console.log("Reloading page to make use of updated COOP/COEP Service Worker."); + window.location.reload(); + }); + + // If the registration is active, but it's not controlling the page + if (registration.active && !navigator.serviceWorker.controller) { + console.log("Reloading page to make use of COOP/COEP Service Worker."); + window.location.reload(); + } + } + })(); +} + +// Code to deregister: +// let registrations = await navigator.serviceWorker.getRegistrations(); +// for(let registration of registrations) { +// await registration.unregister(); +// } \ No newline at end of file diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/example/web/index.html b/catalyst_voices/packages/libs/catalyst_key_derivation/example/web/index.html index 0035fe38a6a..2e95ff9161f 100644 --- a/catalyst_voices/packages/libs/catalyst_key_derivation/example/web/index.html +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/example/web/index.html @@ -35,6 +35,7 @@ + diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/lib/catalyst_key_derivation.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/catalyst_key_derivation.dart index 0b77496b9fd..4edc68de5d1 100644 --- a/catalyst_voices/packages/libs/catalyst_key_derivation/lib/catalyst_key_derivation.dart +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/catalyst_key_derivation.dart @@ -1,4 +1,5 @@ library catalyst_key_derivation; -export 'src/rust/api/simple.dart'; -export 'src/rust/frb_generated.dart' show RustLib; +export 'src/bip32_ed25519/bip32_ed25519.dart'; +export 'src/catalyst_key_derivation.dart'; +export 'src/ed25519/ed25519.dart'; diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/bip32_ed25519/bip32_ed25519.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/bip32_ed25519/bip32_ed25519.dart new file mode 100644 index 00000000000..4af12ea4e93 --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/bip32_ed25519/bip32_ed25519.dart @@ -0,0 +1,7 @@ +export 'bip32_ed25519_key_pair.dart'; +export 'bip32_ed25519_private_key.dart'; +export 'bip32_ed25519_private_key_factory.dart'; +export 'bip32_ed25519_public_key.dart'; +export 'bip32_ed25519_public_key_factory.dart'; +export 'bip32_ed25519_signature.dart'; +export 'bip32_ed25519_signature_factory.dart'; diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/bip32_ed25519/bip32_ed25519_key_pair.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/bip32_ed25519/bip32_ed25519_key_pair.dart new file mode 100644 index 00000000000..a060f866c80 --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/bip32_ed25519/bip32_ed25519_key_pair.dart @@ -0,0 +1,21 @@ +import 'package:catalyst_key_derivation/src/bip32_ed25519/bip32_ed25519_private_key.dart'; +import 'package:catalyst_key_derivation/src/bip32_ed25519/bip32_ed25519_public_key.dart'; +import 'package:equatable/equatable.dart'; + +/// The public and private BIP-32 Ed25519 extended key pair. +class Bip32Ed25519XKeyPair extends Equatable { + /// The public key. + final Bip32Ed25519XPublicKey publicKey; + + /// The private key. + final Bip32Ed25519XPrivateKey privateKey; + + /// The default constructor for [Bip32Ed25519XKeyPair]. + const Bip32Ed25519XKeyPair({ + required this.publicKey, + required this.privateKey, + }); + + @override + List get props => [publicKey, privateKey]; +} diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/bip32_ed25519/bip32_ed25519_private_key.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/bip32_ed25519/bip32_ed25519_private_key.dart new file mode 100644 index 00000000000..ad7b6b3ebc2 --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/bip32_ed25519/bip32_ed25519_private_key.dart @@ -0,0 +1,94 @@ +import 'dart:typed_data'; + +import 'package:catalyst_key_derivation/src/bip32_ed25519/bip32_ed25519_public_key.dart'; +import 'package:catalyst_key_derivation/src/bip32_ed25519/bip32_ed25519_signature.dart'; +import 'package:catalyst_key_derivation/src/rust/api/key_derivation.dart' + as rust; +import 'package:cbor/cbor.dart'; +import 'package:convert/convert.dart'; +import 'package:equatable/equatable.dart'; + +/// Represents an extended BIP-32 private key based on the Ed25519 curve. +/// +/// It is recommended to call [drop] as soon as the key is not needed anymore. +class Bip32Ed25519XPrivateKey extends Equatable { + final rust.Bip32Ed25519XPrivateKey _bytes; + + /// The default constructor for [Bip32Ed25519XPrivateKey]. + const Bip32Ed25519XPrivateKey(this._bytes); + + /// Constructs [Bip32Ed25519XPrivateKey] from a byte list. + Bip32Ed25519XPrivateKey.fromBytes(List bytes) + : _bytes = rust.Bip32Ed25519XPrivateKey( + xprvBytes: rust.U8Array96(Uint8List.fromList(bytes)), + ); + + /// Serializes the type as cbor. + CborValue toCbor() => CborBytes(bytes); + + /// Returns a hex representation of the [Bip32Ed25519XPrivateKey]. + String toHex() => hex.encode(bytes); + + /// Returns the bytes of the private key. + List get bytes => _bytes.inner; + + /// Signs the specified [message] and returns a [Bip32Ed25519XSignature]. + /// + /// This method uses the private key to generate a cryptographic signature + /// of the [message]. + Future sign(List message) async { + final signature = await _bytes.signData(data: message); + return Bip32Ed25519XSignature(signature); + } + + /// Verifies that the [signature] is valid for the given [message] using the + /// public key derived from this private key. + /// + /// Returns `true` if the [signature] is valid, `false` otherwise. + Future verify( + List message, { + required Bip32Ed25519XSignature signature, + }) async { + return _bytes.verifySignature( + data: message, + signature: rust.Bip32Ed25519Signature( + sigBytes: rust.U8Array64( + Uint8List.fromList(signature.bytes), + ), + ), + ); + } + + /// Derives and returns the associated [Bip32Ed25519XPublicKey] + /// for this private key. + /// + /// The derived public key can be used for signature verification and other + /// public-key cryptographic operations. + Future derivePublicKey() async { + final key = await _bytes.xpublicKey(); + return Bip32Ed25519XPublicKey(key); + } + + /// Derives and returns a child [Bip32Ed25519XPrivateKey] using the specified + /// BIP-32 derivation [path]. + /// + /// [path] is the BIP-32 derivation path, + /// used to generate a child private key. + Future derivePrivateKey({ + required String path, + }) async { + final key = await _bytes.deriveXprv(path: path); + return Bip32Ed25519XPrivateKey(key); + } + + /// Clears the sensitive data associated with this private key. + /// + /// This operation invalidates the key, making it unusable for future + /// operations. + void drop() { + _bytes.drop(); + } + + @override + List get props => [_bytes]; +} diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/bip32_ed25519/bip32_ed25519_private_key_factory.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/bip32_ed25519/bip32_ed25519_private_key_factory.dart new file mode 100644 index 00000000000..edf9be93186 --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/bip32_ed25519/bip32_ed25519_private_key_factory.dart @@ -0,0 +1,59 @@ +import 'package:catalyst_key_derivation/src/bip32_ed25519/bip32_ed25519_private_key.dart'; +import 'package:catalyst_key_derivation/src/rust/api/key_derivation.dart' + as rust; +import 'package:cbor/cbor.dart'; +import 'package:convert/convert.dart'; + +/// A factory that builds instances of [Bip32Ed25519XPrivateKey]. +/// +/// It is recommended to use the factory instead of directly constructing +/// instances of [Bip32Ed25519XPrivateKey] because the factory can be replaced +/// in tests to provide mocked private keys which don't need +/// to communicate with Rust. +abstract class Bip32Ed25519XPrivateKeyFactory { + static Bip32Ed25519XPrivateKeyFactory _instance = + const DefaultBip32Ed25519XPrivateKeyFactory(); + + const Bip32Ed25519XPrivateKeyFactory(); + + // ignore: unnecessary_getters_setters + static Bip32Ed25519XPrivateKeyFactory get instance => _instance; + + static set instance(Bip32Ed25519XPrivateKeyFactory factory) { + _instance = factory; + } + + /// Constructs a [Bip32Ed25519XPrivateKey] from a list of [bytes]. + Bip32Ed25519XPrivateKey fromBytes(List bytes); + + /// Constructs a [Bip32Ed25519XPrivateKey] from a hex-encoded list of bytes. + Bip32Ed25519XPrivateKey fromHex(String string) { + return fromBytes(hex.decode(string)); + } + + /// Creates a [Bip32Ed25519XPrivateKey] initialized + /// with a single repeated [byte]. + /// + /// This is useful for generating a deterministic private key with a fixed + /// pattern, primarily for testing or experimentation purposes. + Bip32Ed25519XPrivateKey seeded(int byte) { + return fromBytes(List.filled(rust.U8Array96.arraySize, byte)); + } + + /// Deserializes the type from cbor. + Bip32Ed25519XPrivateKey fromCbor(CborValue value) { + return fromBytes((value as CborBytes).bytes); + } +} + +/// The default implementation of [Bip32Ed25519XPrivateKeyFactory] +/// that provides real instances of [Bip32Ed25519XPrivateKey]. +final class DefaultBip32Ed25519XPrivateKeyFactory + extends Bip32Ed25519XPrivateKeyFactory { + const DefaultBip32Ed25519XPrivateKeyFactory(); + + @override + Bip32Ed25519XPrivateKey fromBytes(List bytes) { + return Bip32Ed25519XPrivateKey.fromBytes(bytes); + } +} diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/bip32_ed25519/bip32_ed25519_public_key.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/bip32_ed25519/bip32_ed25519_public_key.dart new file mode 100644 index 00000000000..3d32ebef57c --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/bip32_ed25519/bip32_ed25519_public_key.dart @@ -0,0 +1,55 @@ +import 'dart:typed_data'; + +import 'package:catalyst_key_derivation/src/bip32_ed25519/bip32_ed25519_signature.dart'; +import 'package:catalyst_key_derivation/src/rust/api/key_derivation.dart' + as rust; +import 'package:cbor/cbor.dart'; +import 'package:convert/convert.dart'; +import 'package:equatable/equatable.dart'; + +/// An extended public key using the BIP-32 standard with the Ed25519 curve. +class Bip32Ed25519XPublicKey extends Equatable { + final rust.Bip32Ed25519XPublicKey _bytes; + + /// The default constructor for [Bip32Ed25519XPublicKey]. + const Bip32Ed25519XPublicKey(this._bytes); + + /// Constructs [Bip32Ed25519XPublicKey] from a byte list. + Bip32Ed25519XPublicKey.fromBytes(List bytes) + : _bytes = rust.Bip32Ed25519XPublicKey( + xpubBytes: rust.U8Array64(Uint8List.fromList(bytes)), + ); + + /// Serializes the type as cbor. + CborValue toCbor({List tags = const []}) { + return CborBytes(bytes, tags: tags); + } + + /// Returns a hex representation of the [Bip32Ed25519XPublicKey]. + String toHex() => hex.encode(bytes); + + /// Returns the bytes of the public key. + List get bytes => _bytes.inner; + + /// Verifies whether a given [signature] was created using this public key + /// for the provided [message]. + /// + /// Returns `true` if the signature is valid for the [message] and matches + /// this public key; `false` otherwise. + Future verify( + List message, { + required Bip32Ed25519XSignature signature, + }) async { + return _bytes.verifySignature( + data: message, + signature: rust.Bip32Ed25519Signature( + sigBytes: rust.U8Array64( + Uint8List.fromList(signature.bytes), + ), + ), + ); + } + + @override + List get props => [_bytes]; +} diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/bip32_ed25519/bip32_ed25519_public_key_factory.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/bip32_ed25519/bip32_ed25519_public_key_factory.dart new file mode 100644 index 00000000000..505c5789578 --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/bip32_ed25519/bip32_ed25519_public_key_factory.dart @@ -0,0 +1,59 @@ +import 'package:catalyst_key_derivation/src/bip32_ed25519/bip32_ed25519_public_key.dart'; +import 'package:catalyst_key_derivation/src/rust/api/key_derivation.dart' + as rust; +import 'package:cbor/cbor.dart'; +import 'package:convert/convert.dart'; + +/// A factory that builds instances of [Bip32Ed25519XPublicKey]. +/// +/// It is recommended to use the factory instead of directly constructing +/// instances of [Bip32Ed25519XPublicKey] because the factory can be replaced +/// in tests to provide mocked private keys which don't need +/// to communicate with Rust. +abstract class Bip32Ed25519XPublicKeyFactory { + static Bip32Ed25519XPublicKeyFactory _instance = + const DefaultBip32Ed25519XPublicKeyFactory(); + + const Bip32Ed25519XPublicKeyFactory(); + + // ignore: unnecessary_getters_setters + static Bip32Ed25519XPublicKeyFactory get instance => _instance; + + static set instance(Bip32Ed25519XPublicKeyFactory factory) { + _instance = factory; + } + + /// Constructs a [Bip32Ed25519XPublicKey] from a list of [bytes]. + Bip32Ed25519XPublicKey fromBytes(List bytes); + + /// Constructs a [Bip32Ed25519XPublicKey] from a hex-encoded list of bytes. + Bip32Ed25519XPublicKey fromHex(String string) { + return fromBytes(hex.decode(string)); + } + + /// Creates a [Bip32Ed25519XPublicKey] initialized + /// with a single repeated [byte]. + /// + /// This is useful for generating a deterministic private key with a fixed + /// pattern, primarily for testing or experimentation purposes. + Bip32Ed25519XPublicKey seeded(int byte) { + return fromBytes(List.filled(rust.U8Array64.arraySize, byte)); + } + + /// Deserializes the type from cbor. + Bip32Ed25519XPublicKey fromCbor(CborValue value) { + return fromBytes((value as CborBytes).bytes); + } +} + +/// The default implementation of [Bip32Ed25519XPublicKeyFactory] +/// that provides real instances of [Bip32Ed25519XPublicKey]. +final class DefaultBip32Ed25519XPublicKeyFactory + extends Bip32Ed25519XPublicKeyFactory { + const DefaultBip32Ed25519XPublicKeyFactory(); + + @override + Bip32Ed25519XPublicKey fromBytes(List bytes) { + return Bip32Ed25519XPublicKey.fromBytes(bytes); + } +} diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/bip32_ed25519/bip32_ed25519_signature.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/bip32_ed25519/bip32_ed25519_signature.dart new file mode 100644 index 00000000000..cc33a0a52d7 --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/bip32_ed25519/bip32_ed25519_signature.dart @@ -0,0 +1,36 @@ +import 'dart:typed_data'; + +import 'package:catalyst_key_derivation/src/rust/api/key_derivation.dart' + as rust; +import 'package:cbor/cbor.dart'; +import 'package:convert/convert.dart'; +import 'package:equatable/equatable.dart'; + +/// Represents an extended BIP-32 signature using the Ed25519 curve. +/// +/// This class provides methods to create, serialize, and manipulate +/// cryptographic signatures based on the BIP-32 HD wallet standard. +class Bip32Ed25519XSignature extends Equatable { + final rust.Bip32Ed25519Signature _bytes; + + /// The default constructor for [Bip32Ed25519XSignature]. + const Bip32Ed25519XSignature(this._bytes); + + /// Constructs [Bip32Ed25519XSignature] from a byte list. + Bip32Ed25519XSignature.fromBytes(List bytes) + : _bytes = rust.Bip32Ed25519Signature( + sigBytes: rust.U8Array64(Uint8List.fromList(bytes)), + ); + + /// Serializes the type as cbor. + CborValue toCbor() => CborBytes(bytes); + + /// Returns a hex representation of the [Bip32Ed25519XSignature]. + String toHex() => hex.encode(bytes); + + /// Returns the bytes of the signature. + List get bytes => _bytes.inner; + + @override + List get props => [_bytes]; +} diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/bip32_ed25519/bip32_ed25519_signature_factory.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/bip32_ed25519/bip32_ed25519_signature_factory.dart new file mode 100644 index 00000000000..4a2b72fb15d --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/bip32_ed25519/bip32_ed25519_signature_factory.dart @@ -0,0 +1,59 @@ +import 'package:catalyst_key_derivation/src/bip32_ed25519/bip32_ed25519_signature.dart'; +import 'package:catalyst_key_derivation/src/rust/api/key_derivation.dart' + as rust; +import 'package:cbor/cbor.dart'; +import 'package:convert/convert.dart'; + +/// A factory that builds instances of [Bip32Ed25519XSignature]. +/// +/// It is recommended to use the factory instead of directly constructing +/// instances of [Bip32Ed25519XSignature] because the factory can be replaced +/// in tests to provide mocked private keys which don't need +/// to communicate with Rust. +abstract class Bip32Ed25519XSignatureFactory { + static Bip32Ed25519XSignatureFactory _instance = + const DefaultBip32Ed25519XSignatureFactory(); + + const Bip32Ed25519XSignatureFactory(); + + // ignore: unnecessary_getters_setters + static Bip32Ed25519XSignatureFactory get instance => _instance; + + static set instance(Bip32Ed25519XSignatureFactory factory) { + _instance = factory; + } + + /// Constructs a [Bip32Ed25519XSignature] from a list of [bytes]. + Bip32Ed25519XSignature fromBytes(List bytes); + + /// Constructs a [Bip32Ed25519XSignature] from a hex-encoded list of bytes. + Bip32Ed25519XSignature fromHex(String string) { + return fromBytes(hex.decode(string)); + } + + /// Creates a [Bip32Ed25519XSignature] initialized + /// with a single repeated [byte]. + /// + /// This is useful for generating a deterministic private key with a fixed + /// pattern, primarily for testing or experimentation purposes. + Bip32Ed25519XSignature seeded(int byte) { + return fromBytes(List.filled(rust.U8Array64.arraySize, byte)); + } + + /// Deserializes the type from cbor. + Bip32Ed25519XSignature fromCbor(CborValue value) { + return fromBytes((value as CborBytes).bytes); + } +} + +/// The default implementation of [Bip32Ed25519XSignatureFactory] +/// that provides real instances of [Bip32Ed25519XSignature]. +final class DefaultBip32Ed25519XSignatureFactory + extends Bip32Ed25519XSignatureFactory { + const DefaultBip32Ed25519XSignatureFactory(); + + @override + Bip32Ed25519XSignature fromBytes(List bytes) { + return Bip32Ed25519XSignature.fromBytes(bytes); + } +} diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/catalyst_key_derivation.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/catalyst_key_derivation.dart new file mode 100644 index 00000000000..ca546126f53 --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/catalyst_key_derivation.dart @@ -0,0 +1,59 @@ +import 'package:catalyst_key_derivation/src/bip32_ed25519/bip32_ed25519_private_key.dart'; +import 'package:catalyst_key_derivation/src/rust/api/key_derivation.dart' + as rust; +import 'package:catalyst_key_derivation/src/rust/frb_generated.dart' + show RustLib; + +/// A Flutter plugin for Cardano's SLIP-0023 hierarchical deterministic +/// key derivation. +/// +/// This class provides methods to securely derive cryptographic keys from +/// a BIP-39 mnemonic phrase, leveraging Cardano's SLIP-0023 standard +/// for hierarchical deterministic (HD) key derivation with the ed25519 +/// elliptic curve. It's particularly useful for developers building +/// applications that interact with the Cardano blockchain or need secure, +/// mnemonic-based cryptographic keys. +/// +/// Usage: +/// ```dart +/// // Initialize the library (one-time setup). +/// await CatalystKeyDerivation.init(); +/// +/// // Derive a master key from a BIP-39 mnemonic phrase. +/// const keyDerivation = CatalystKeyDerivation(); +/// final masterKey = await keyDerivation.deriveMasterKey( +/// mnemonic: 'your mnemonic phrase here', +/// ); +/// ``` +class CatalystKeyDerivation { + const CatalystKeyDerivation(); + + /// Initializes the `catalyst_key_derivation` package. + /// + /// This method should be called once at the start of your application + /// to initialize the underlying Rust library that powers the key derivation + /// functions. It is necessary to call this before attempting to derive + /// any keys, as it ensures that the native Rust dependencies + /// are properly set up. + static Future init() async { + await RustLib.init(); + } + + /// Derives a master private key from a BIP-39 [mnemonic] phrase. + /// + /// This method takes a mnemonic phrase as input, validates it, and derives a + /// `Bip32Ed25519XPrivateKey` following the Cardano SLIP-0023 standard. + /// + /// - [mnemonic]: A valid BIP-39 mnemonic phrase, consisting of a series + /// of words typically separated by spaces. The mnemonic must be valid + /// per BIP-39 standards. + /// + /// Returns a [Bip32Ed25519XPrivateKey] object representing the derived + /// master private key. + Future deriveMasterKey({ + required String mnemonic, + }) async { + final key = await rust.mnemonicToXprv(mnemonic: mnemonic); + return Bip32Ed25519XPrivateKey(key); + } +} diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/ed25519/ed25519.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/ed25519/ed25519.dart new file mode 100644 index 00000000000..02714dad528 --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/ed25519/ed25519.dart @@ -0,0 +1,4 @@ +export 'ed25519_key_pair.dart'; +export 'ed25519_private_key.dart'; +export 'ed25519_public_key.dart'; +export 'ed25519_signature.dart'; diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/ed25519/ed25519_key_pair.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/ed25519/ed25519_key_pair.dart new file mode 100644 index 00000000000..042339ee76f --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/ed25519/ed25519_key_pair.dart @@ -0,0 +1,41 @@ +import 'package:catalyst_key_derivation/src/ed25519/ed25519_private_key.dart'; +import 'package:catalyst_key_derivation/src/ed25519/ed25519_public_key.dart'; +import 'package:cryptography/cryptography.dart'; +import 'package:equatable/equatable.dart'; + +/// The public and private Ed25519 key pair. +final class Ed25519KeyPair extends Equatable { + /// The public key. + final Ed25519PublicKey publicKey; + + /// The private key. + final Ed25519PrivateKey privateKey; + + /// The default constructor for [Ed25519KeyPair]. + const Ed25519KeyPair({ + required this.publicKey, + required this.privateKey, + }); + + /// Generates a [Ed25519KeyPair] from given private key [seed]. + static Future fromSeed(List seed) async { + if (seed.length != Ed25519PrivateKey.length) { + throw ArgumentError( + 'Ed25519KeyPair seed length does not match: ${seed.length}', + ); + } + + final algorithm = Ed25519(); + final keyPair = await algorithm.newKeyPairFromSeed(seed); + final publicKey = await keyPair.extractPublicKey(); + final privateKey = await keyPair.extractPrivateKeyBytes(); + + return Ed25519KeyPair( + publicKey: Ed25519PublicKey.fromBytes(publicKey.bytes), + privateKey: Ed25519PrivateKey.fromBytes(privateKey), + ); + } + + @override + List get props => [publicKey, privateKey]; +} diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/ed25519/ed25519_private_key.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/ed25519/ed25519_private_key.dart new file mode 100644 index 00000000000..ba2260a3ba4 --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/ed25519/ed25519_private_key.dart @@ -0,0 +1,59 @@ +import 'package:catalyst_key_derivation/src/ed25519/ed25519_public_key.dart'; +import 'package:catalyst_key_derivation/src/ed25519/ed25519_signature.dart'; +import 'package:cbor/cbor.dart'; +import 'package:convert/convert.dart'; +import 'package:cryptography/cryptography.dart'; + +/// The Ed25519 private key that is 256 bits long. +/// +/// The [bytes] are the seed required by the Ed25519 algorithm. +extension type Ed25519PrivateKey._(List bytes) { + /// The length of the [Ed25519PrivateKey] in bytes. + static const int length = 32; + + /// The default constructor for [Ed25519PrivateKey]. + Ed25519PrivateKey.fromBytes(this.bytes) { + if (bytes.length != length) { + throw ArgumentError( + 'Ed25519PrivateKey length does not match: ${bytes.length}', + ); + } + } + + /// Constructs [Ed25519PrivateKey] from a hex [string]. + factory Ed25519PrivateKey.fromHex(String string) { + return Ed25519PrivateKey.fromBytes(hex.decode(string)); + } + + /// Returns the [Ed25519PrivateKey] filled with [byte] that can be + /// used to reserve size to calculate the final transaction bytes size. + factory Ed25519PrivateKey.seeded(int byte) => + Ed25519PrivateKey.fromBytes(List.filled(length, byte)); + + /// Deserializes the type from cbor. + factory Ed25519PrivateKey.fromCbor(CborValue value) { + return Ed25519PrivateKey.fromBytes((value as CborBytes).bytes); + } + + /// Serializes the type as cbor. + CborValue toCbor() => CborBytes(bytes); + + /// Returns a hex representation of the [Ed25519PrivateKey]. + String toHex() => hex.encode(bytes); + + /// Signs the [message] with the private key and returns the signature. + Future sign(List message) async { + final algorithm = Ed25519(); + final keyPair = await algorithm.newKeyPairFromSeed(bytes); + final signature = await algorithm.sign(message, keyPair: keyPair); + return Ed25519Signature.fromBytes(signature.bytes); + } + + /// Returns a [Ed25519PublicKey] derived from this private key. + Future derivePublicKey() async { + final algorithm = Ed25519(); + final keyPair = await algorithm.newKeyPairFromSeed(bytes); + final publicKey = await keyPair.extractPublicKey(); + return Ed25519PublicKey.fromBytes(publicKey.bytes); + } +} diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/ed25519/ed25519_public_key.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/ed25519/ed25519_public_key.dart new file mode 100644 index 00000000000..f295da8dfe7 --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/ed25519/ed25519_public_key.dart @@ -0,0 +1,58 @@ +import 'package:catalyst_key_derivation/src/ed25519/ed25519_signature.dart'; +import 'package:cbor/cbor.dart'; +import 'package:convert/convert.dart'; +import 'package:cryptography/cryptography.dart'; + +/// The ED25519 public key that is 256 bits long. +extension type Ed25519PublicKey._(List bytes) { + /// The length of the [Ed25519PublicKey] in bytes. + static const int length = 32; + + /// The default constructor for [Ed25519PublicKey]. + Ed25519PublicKey.fromBytes(this.bytes) { + if (bytes.length != length) { + throw ArgumentError( + 'Ed25519PublicKey length does not match: ${bytes.length}', + ); + } + } + + /// Constructs [Ed25519PublicKey] from a hex [string]. + factory Ed25519PublicKey.fromHex(String string) { + return Ed25519PublicKey.fromBytes(hex.decode(string)); + } + + /// Returns the [Ed25519PublicKey] filled with [byte] that can be + /// used to reserve size to calculate the final transaction bytes size. + factory Ed25519PublicKey.seeded(int byte) => + Ed25519PublicKey.fromBytes(List.filled(length, byte)); + + /// Deserializes the type from cbor. + factory Ed25519PublicKey.fromCbor(CborValue value) { + return Ed25519PublicKey.fromBytes((value as CborBytes).bytes); + } + + /// Serializes the type as cbor. + CborValue toCbor({List tags = const []}) { + return CborBytes(bytes, tags: tags); + } + + /// Returns a hex representation of the [Ed25519PublicKey]. + String toHex() => hex.encode(bytes); + + /// Returns true if this [signature] belongs to this public key + /// for given [message], false otherwise. + Future verify( + List message, { + required Ed25519Signature signature, + }) async { + final algorithm = Ed25519(); + return algorithm.verify( + message, + signature: Signature( + signature.bytes, + publicKey: SimplePublicKey(bytes, type: KeyPairType.ed25519), + ), + ); + } +} diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/ed25519/ed25519_signature.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/ed25519/ed25519_signature.dart new file mode 100644 index 00000000000..28432054b7b --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/ed25519/ed25519_signature.dart @@ -0,0 +1,38 @@ +import 'package:cbor/cbor.dart'; +import 'package:convert/convert.dart'; + +/// The witness signature of the transaction. +extension type Ed25519Signature._(List bytes) { + /// The length of the [Ed25519Signature] in bytes. + static const int length = 64; + + /// The default constructor for [Ed25519Signature]. + Ed25519Signature.fromBytes(this.bytes) { + if (bytes.length != length) { + throw ArgumentError( + 'Ed25519Signature length does not match: ${bytes.length}', + ); + } + } + + /// Constructs [Ed25519Signature] from a hex [string]. + factory Ed25519Signature.fromHex(String string) { + return Ed25519Signature.fromBytes(hex.decode(string)); + } + + /// Returns the [Ed25519Signature] filled with [byte] + /// that can be used to reserve size. + factory Ed25519Signature.seeded(int byte) => + Ed25519Signature.fromBytes(List.filled(length, byte)); + + /// Deserializes the type from cbor. + factory Ed25519Signature.fromCbor(CborValue value) { + return Ed25519Signature.fromBytes((value as CborBytes).bytes); + } + + /// Serializes the type as cbor. + CborValue toCbor() => CborBytes(bytes); + + /// Returns a hex representation of the [Ed25519Signature]. + String toHex() => hex.encode(bytes); +} diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/rust/api/key_derivation.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/rust/api/key_derivation.dart new file mode 100644 index 00000000000..1ed912fe8af --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/rust/api/key_derivation.dart @@ -0,0 +1,230 @@ +// This file is automatically generated, so please do not edit it. +// @generated by `flutter_rust_bridge`@ 2.5.1. + +// ignore_for_file: invalid_use_of_internal_member, unused_import, unnecessary_import + +import '../frb_generated.dart'; +import 'package:collection/collection.dart'; +import 'package:flutter_rust_bridge/flutter_rust_bridge_for_generated.dart'; + +// These functions are ignored because they are not marked as `pub`: `derive_xprv_helper`, `mnemonic_to_xprv_helper`, `sign_data_helper`, `verify_signature_xprv_helper`, `verify_signature_xpub_helper`, `xpublic_key_helper` +// These function are ignored because they are on traits that is not defined in current crate (put an empty `#[frb]` on it to unignore): `assert_receiver_is_total_eq`, `assert_receiver_is_total_eq`, `assert_receiver_is_total_eq`, `clone`, `clone`, `clone`, `eq`, `eq`, `eq`, `fmt`, `fmt`, `fmt`, `from`, `from` + +/// Generate a new extended private key (`XPrv`) from a mnemonic and passphrase. +/// Note that this function only works with BIP-0039 mnemonics. +/// For more information: Cardano Icarus master node derivation +/// +/// +/// # Arguments +/// +/// - `mnemonic`: A string representing the mnemonic. +/// - `passphrase`: An optional string representing the passphrase (aka. password). +/// +/// # Returns +/// +/// Returns a bytes of extended private key as a `Result`. +/// +/// # Errors +/// +/// Returns an error if the mnemonic is invalid. +Future mnemonicToXprv( + {required String mnemonic, String? passphrase}) => + RustLib.instance.api.crateApiKeyDerivationMnemonicToXprv( + mnemonic: mnemonic, passphrase: passphrase); + +// Rust type: RustOpaqueMoi> +abstract class Bip32Ed25519Signature implements RustOpaqueInterface { + /// Get the inner bytes. + U8Array64 get inner; + + /// Create a new `Bip32Ed25519Signature` from the given bytes. + factory Bip32Ed25519Signature({required U8Array64 sigBytes}) => + RustLib.instance.api + .crateApiKeyDerivationBip32Ed25519SignatureNew(sigBytes: sigBytes); + + /// Convert to a hex string. + String toHex(); +} + +// Rust type: RustOpaqueMoi> +abstract class Bip32Ed25519XPrivateKey implements RustOpaqueInterface { + /// Derive a new extended private key from the given extended private key. + /// - V2 derivation scheme is used as it is mention in [SLIP-0023](https://github.com/satoshilabs/slips/blob/master/slip-0023.md). + /// - More information about child key derivation can be found in [BIP32-Ed25519](https://input-output-hk.github.io/adrestia/static/Ed25519_BIP.pdf). + /// + /// # Arguments + /// + /// - `xprv_bytes`: An extended private key bytes of type `Bip32Ed25519XPrivateKey`. + /// - `path`: Derivation path. eg. m/0/2'/3 where ' represents hardened derivation. + /// + /// # Returns + /// + /// Returns a bytes of extended private key as a `Result`. + /// + /// # Errors + /// + /// Returns an error if the derivation path is invalid. + Future deriveXprv({required String path}); + + /// Drop the extended private key. + void drop(); + + /// Extract the chain code from the extended private key. + /// The chain code is the last 32 bytes of the extended private key. + /// + /// # Returns + /// + /// Returns a 32 length bytes representing the chain code. + U8Array32 get chainCode; + + /// Extract the extended secret key from the extended private key. + /// The extended secret key is the first 64 bytes of the extended private key. + /// + /// # Returns + /// + /// Returns a 64 length bytes representing the extended secret key. + U8Array64 get extendedSecretKey; + + /// Get the inner bytes. + U8Array96 get inner; + + /// Create a new `Bip32Ed25519XPrivateKey` from the given bytes. + factory Bip32Ed25519XPrivateKey({required U8Array96 xprvBytes}) => RustLib + .instance.api + .crateApiKeyDerivationBip32Ed25519XPrivateKeyNew(xprvBytes: xprvBytes); + + /// Sign the given data with the given extended private key. + /// + /// # Arguments + /// + /// - `data`: The data to sign. + /// + /// # Returns + /// Returns a 64 length bytes `Bip32Ed25519Signature` representing the signature. + /// + /// # Errors + /// + /// Returns an error if the extended private key is invalid. + Future signData({required List data}); + + /// Convert to a hex string. + String toHex(); + + /// Verify the signature on the given data using extended private key. + /// + /// # Arguments + /// + /// - `data`: The data to sign. + /// - `signature`: The signature to check. + /// + /// # Returns + /// Returns a boolean value indicating if the signature match the sign data + /// True if the signature is valid and match the sign data, false otherwise. + /// + /// # Errors + /// + /// Returns an error if the extended private key or signature is invalid. + Future verifySignature( + {required List data, required Bip32Ed25519Signature signature}); + + /// Get extended public key from the given extended private key. + /// + /// # Returns + /// + /// Returns a 64 length bytes `Bip32Ed25519XPublicKey` representing the extended + /// public key. + /// + /// # Errors + /// + /// Returns an error if the extended private key is invalid. + Future xpublicKey(); +} + +// Rust type: RustOpaqueMoi> +abstract class Bip32Ed25519XPublicKey implements RustOpaqueInterface { + /// Extract the chain code from the extended public key. + /// The chain code is the last 32 bytes of the extended public key. + /// + /// # Returns + /// + /// Returns a 32 length bytes representing the chain code. + U8Array32 get chainCode; + + /// Get the inner bytes. + U8Array64 get inner; + + /// Extract the public key from the extended public key. + /// The public key is the first 32 bytes of the extended public key. + /// + /// # Returns + /// + /// Returns a 32 length bytes representing the public key. + U8Array32 get publicKey; + + /// Create a new `Bip32Ed25519XPublicKey` from the given bytes. + factory Bip32Ed25519XPublicKey({required U8Array64 xpubBytes}) => + RustLib.instance.api + .crateApiKeyDerivationBip32Ed25519XPublicKeyNew(xpubBytes: xpubBytes); + + /// Convert to a hex string. + String toHex(); + + /// Verify the signature on the given data using extended public key. + /// + /// # Arguments + /// + /// - `data`: The data to sign. + /// - `signature`: The signature to check. + /// + /// # Returns + /// Returns a boolean value indicating if the signature match the sign data + /// True if the signature is valid and match the sign data, false otherwise. + /// + /// # Errors + /// + /// Returns an error if the extended public key or signature is invalid. + Future verifySignature( + {required List data, required Bip32Ed25519Signature signature}); +} + +class U8Array32 extends NonGrowableListView { + static const arraySize = 32; + + @internal + Uint8List get inner => _inner; + final Uint8List _inner; + + U8Array32(this._inner) + : assert(_inner.length == arraySize), + super(_inner); + + U8Array32.init() : this(Uint8List(arraySize)); +} + +class U8Array64 extends NonGrowableListView { + static const arraySize = 64; + + @internal + Uint8List get inner => _inner; + final Uint8List _inner; + + U8Array64(this._inner) + : assert(_inner.length == arraySize), + super(_inner); + + U8Array64.init() : this(Uint8List(arraySize)); +} + +class U8Array96 extends NonGrowableListView { + static const arraySize = 96; + + @internal + Uint8List get inner => _inner; + final Uint8List _inner; + + U8Array96(this._inner) + : assert(_inner.length == arraySize), + super(_inner); + + U8Array96.init() : this(Uint8List(arraySize)); +} diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/rust/frb_generated.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/rust/frb_generated.dart index 0762363c509..3bec0b3540b 100644 --- a/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/rust/frb_generated.dart +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/rust/frb_generated.dart @@ -3,7 +3,7 @@ // ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field -import 'api/simple.dart'; +import 'api/key_derivation.dart'; import 'dart:async'; import 'dart:convert'; import 'frb_generated.dart'; @@ -56,9 +56,7 @@ class RustLib extends BaseEntrypoint { RustLibWire.fromExternalLibrary; @override - Future executeRustInitializers() async { - await api.crateApiSimpleInitApp(); - } + Future executeRustInitializers() async {} @override ExternalLibraryLoaderConfig get defaultExternalLibraryLoaderConfig => @@ -68,20 +66,110 @@ class RustLib extends BaseEntrypoint { String get codegenVersion => '2.5.1'; @override - int get rustContentHash => -1918914929; + int get rustContentHash => -1976079523; static const kDefaultExternalLibraryLoaderConfig = ExternalLibraryLoaderConfig( stem: 'catalyst_key_derivation', ioDirectory: 'rust/target/release/', - webPrefix: 'pkg/', + webPrefix: '/assets/packages/catalyst_key_derivation/assets/js/', ); } abstract class RustLibApi extends BaseApi { - Future crateApiSimpleGreet({required String name}); + U8Array64 crateApiKeyDerivationBip32Ed25519SignatureGetInner( + {required Bip32Ed25519Signature that}); + + Bip32Ed25519Signature crateApiKeyDerivationBip32Ed25519SignatureNew( + {required U8Array64 sigBytes}); + + String crateApiKeyDerivationBip32Ed25519SignatureToHex( + {required Bip32Ed25519Signature that}); + + Future + crateApiKeyDerivationBip32Ed25519XPrivateKeyDeriveXprv( + {required Bip32Ed25519XPrivateKey that, required String path}); + + void crateApiKeyDerivationBip32Ed25519XPrivateKeyDrop( + {required Bip32Ed25519XPrivateKey that}); + + U8Array32 crateApiKeyDerivationBip32Ed25519XPrivateKeyGetChainCode( + {required Bip32Ed25519XPrivateKey that}); + + U8Array64 crateApiKeyDerivationBip32Ed25519XPrivateKeyGetExtendedSecretKey( + {required Bip32Ed25519XPrivateKey that}); + + U8Array96 crateApiKeyDerivationBip32Ed25519XPrivateKeyGetInner( + {required Bip32Ed25519XPrivateKey that}); + + Bip32Ed25519XPrivateKey crateApiKeyDerivationBip32Ed25519XPrivateKeyNew( + {required U8Array96 xprvBytes}); + + Future + crateApiKeyDerivationBip32Ed25519XPrivateKeySignData( + {required Bip32Ed25519XPrivateKey that, required List data}); + + String crateApiKeyDerivationBip32Ed25519XPrivateKeyToHex( + {required Bip32Ed25519XPrivateKey that}); + + Future crateApiKeyDerivationBip32Ed25519XPrivateKeyVerifySignature( + {required Bip32Ed25519XPrivateKey that, + required List data, + required Bip32Ed25519Signature signature}); + + Future + crateApiKeyDerivationBip32Ed25519XPrivateKeyXpublicKey( + {required Bip32Ed25519XPrivateKey that}); + + U8Array32 crateApiKeyDerivationBip32Ed25519XPublicKeyGetChainCode( + {required Bip32Ed25519XPublicKey that}); + + U8Array64 crateApiKeyDerivationBip32Ed25519XPublicKeyGetInner( + {required Bip32Ed25519XPublicKey that}); + + U8Array32 crateApiKeyDerivationBip32Ed25519XPublicKeyGetPublicKey( + {required Bip32Ed25519XPublicKey that}); + + Bip32Ed25519XPublicKey crateApiKeyDerivationBip32Ed25519XPublicKeyNew( + {required U8Array64 xpubBytes}); + + String crateApiKeyDerivationBip32Ed25519XPublicKeyToHex( + {required Bip32Ed25519XPublicKey that}); + + Future crateApiKeyDerivationBip32Ed25519XPublicKeyVerifySignature( + {required Bip32Ed25519XPublicKey that, + required List data, + required Bip32Ed25519Signature signature}); - Future crateApiSimpleInitApp(); + Future crateApiKeyDerivationMnemonicToXprv( + {required String mnemonic, String? passphrase}); + + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_Bip32Ed25519Signature; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_Bip32Ed25519Signature; + + CrossPlatformFinalizerArg + get rust_arc_decrement_strong_count_Bip32Ed25519SignaturePtr; + + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_Bip32Ed25519XPrivateKey; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_Bip32Ed25519XPrivateKey; + + CrossPlatformFinalizerArg + get rust_arc_decrement_strong_count_Bip32Ed25519XPrivateKeyPtr; + + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_Bip32Ed25519XPublicKey; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_Bip32Ed25519XPublicKey; + + CrossPlatformFinalizerArg + get rust_arc_decrement_strong_count_Bip32Ed25519XPublicKeyPtr; } class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { @@ -93,56 +181,706 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { }); @override - Future crateApiSimpleGreet({required String name}) { + U8Array64 crateApiKeyDerivationBip32Ed25519SignatureGetInner( + {required Bip32Ed25519Signature that}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + that, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 1)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_u_8_array_64, + decodeErrorData: null, + ), + constMeta: kCrateApiKeyDerivationBip32Ed25519SignatureGetInnerConstMeta, + argValues: [that], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiKeyDerivationBip32Ed25519SignatureGetInnerConstMeta => + const TaskConstMeta( + debugName: "Bip32Ed25519Signature_get_inner", + argNames: ["that"], + ); + + @override + Bip32Ed25519Signature crateApiKeyDerivationBip32Ed25519SignatureNew( + {required U8Array64 sigBytes}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_u_8_array_64(sigBytes, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 2)!; + }, + codec: SseCodec( + decodeSuccessData: + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature, + decodeErrorData: null, + ), + constMeta: kCrateApiKeyDerivationBip32Ed25519SignatureNewConstMeta, + argValues: [sigBytes], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiKeyDerivationBip32Ed25519SignatureNewConstMeta => + const TaskConstMeta( + debugName: "Bip32Ed25519Signature_new", + argNames: ["sigBytes"], + ); + + @override + String crateApiKeyDerivationBip32Ed25519SignatureToHex( + {required Bip32Ed25519Signature that}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + that, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 3)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_String, + decodeErrorData: null, + ), + constMeta: kCrateApiKeyDerivationBip32Ed25519SignatureToHexConstMeta, + argValues: [that], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiKeyDerivationBip32Ed25519SignatureToHexConstMeta => + const TaskConstMeta( + debugName: "Bip32Ed25519Signature_to_hex", + argNames: ["that"], + ); + + @override + Future + crateApiKeyDerivationBip32Ed25519XPrivateKeyDeriveXprv( + {required Bip32Ed25519XPrivateKey that, required String path}) { return handler.executeNormal(NormalTask( callFfi: (port_) { final serializer = SseSerializer(generalizedFrbRustBinding); - sse_encode_String(name, serializer); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + that, serializer); + sse_encode_String(path, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 1, port: port_); + funcId: 4, port: port_); }, codec: SseCodec( - decodeSuccessData: sse_decode_String, + decodeSuccessData: + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: + kCrateApiKeyDerivationBip32Ed25519XPrivateKeyDeriveXprvConstMeta, + argValues: [that, path], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiKeyDerivationBip32Ed25519XPrivateKeyDeriveXprvConstMeta => + const TaskConstMeta( + debugName: "Bip32Ed25519XPrivateKey_derive_xprv", + argNames: ["that", "path"], + ); + + @override + void crateApiKeyDerivationBip32Ed25519XPrivateKeyDrop( + {required Bip32Ed25519XPrivateKey that}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + that, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 5)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_unit, decodeErrorData: null, ), - constMeta: kCrateApiSimpleGreetConstMeta, - argValues: [name], + constMeta: kCrateApiKeyDerivationBip32Ed25519XPrivateKeyDropConstMeta, + argValues: [that], apiImpl: this, )); } - TaskConstMeta get kCrateApiSimpleGreetConstMeta => const TaskConstMeta( - debugName: "greet", - argNames: ["name"], + TaskConstMeta + get kCrateApiKeyDerivationBip32Ed25519XPrivateKeyDropConstMeta => + const TaskConstMeta( + debugName: "Bip32Ed25519XPrivateKey_drop", + argNames: ["that"], + ); + + @override + U8Array32 crateApiKeyDerivationBip32Ed25519XPrivateKeyGetChainCode( + {required Bip32Ed25519XPrivateKey that}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + that, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 6)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_u_8_array_32, + decodeErrorData: null, + ), + constMeta: + kCrateApiKeyDerivationBip32Ed25519XPrivateKeyGetChainCodeConstMeta, + argValues: [that], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiKeyDerivationBip32Ed25519XPrivateKeyGetChainCodeConstMeta => + const TaskConstMeta( + debugName: "Bip32Ed25519XPrivateKey_get_chain_code", + argNames: ["that"], + ); + + @override + U8Array64 crateApiKeyDerivationBip32Ed25519XPrivateKeyGetExtendedSecretKey( + {required Bip32Ed25519XPrivateKey that}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + that, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 7)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_u_8_array_64, + decodeErrorData: null, + ), + constMeta: + kCrateApiKeyDerivationBip32Ed25519XPrivateKeyGetExtendedSecretKeyConstMeta, + argValues: [that], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiKeyDerivationBip32Ed25519XPrivateKeyGetExtendedSecretKeyConstMeta => + const TaskConstMeta( + debugName: "Bip32Ed25519XPrivateKey_get_extended_secret_key", + argNames: ["that"], + ); + + @override + U8Array96 crateApiKeyDerivationBip32Ed25519XPrivateKeyGetInner( + {required Bip32Ed25519XPrivateKey that}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + that, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 8)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_u_8_array_96, + decodeErrorData: null, + ), + constMeta: kCrateApiKeyDerivationBip32Ed25519XPrivateKeyGetInnerConstMeta, + argValues: [that], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiKeyDerivationBip32Ed25519XPrivateKeyGetInnerConstMeta => + const TaskConstMeta( + debugName: "Bip32Ed25519XPrivateKey_get_inner", + argNames: ["that"], + ); + + @override + Bip32Ed25519XPrivateKey crateApiKeyDerivationBip32Ed25519XPrivateKeyNew( + {required U8Array96 xprvBytes}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_u_8_array_96(xprvBytes, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 9)!; + }, + codec: SseCodec( + decodeSuccessData: + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey, + decodeErrorData: null, + ), + constMeta: kCrateApiKeyDerivationBip32Ed25519XPrivateKeyNewConstMeta, + argValues: [xprvBytes], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiKeyDerivationBip32Ed25519XPrivateKeyNewConstMeta => + const TaskConstMeta( + debugName: "Bip32Ed25519XPrivateKey_new", + argNames: ["xprvBytes"], ); @override - Future crateApiSimpleInitApp() { + Future + crateApiKeyDerivationBip32Ed25519XPrivateKeySignData( + {required Bip32Ed25519XPrivateKey that, required List data}) { return handler.executeNormal(NormalTask( callFfi: (port_) { final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + that, serializer); + sse_encode_list_prim_u_8_loose(data, serializer); pdeCallFfi(generalizedFrbRustBinding, serializer, - funcId: 2, port: port_); + funcId: 10, port: port_); }, codec: SseCodec( - decodeSuccessData: sse_decode_unit, + decodeSuccessData: + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiKeyDerivationBip32Ed25519XPrivateKeySignDataConstMeta, + argValues: [that, data], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiKeyDerivationBip32Ed25519XPrivateKeySignDataConstMeta => + const TaskConstMeta( + debugName: "Bip32Ed25519XPrivateKey_sign_data", + argNames: ["that", "data"], + ); + + @override + String crateApiKeyDerivationBip32Ed25519XPrivateKeyToHex( + {required Bip32Ed25519XPrivateKey that}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + that, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 11)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_String, decodeErrorData: null, ), - constMeta: kCrateApiSimpleInitAppConstMeta, - argValues: [], + constMeta: kCrateApiKeyDerivationBip32Ed25519XPrivateKeyToHexConstMeta, + argValues: [that], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiKeyDerivationBip32Ed25519XPrivateKeyToHexConstMeta => + const TaskConstMeta( + debugName: "Bip32Ed25519XPrivateKey_to_hex", + argNames: ["that"], + ); + + @override + Future crateApiKeyDerivationBip32Ed25519XPrivateKeyVerifySignature( + {required Bip32Ed25519XPrivateKey that, + required List data, + required Bip32Ed25519Signature signature}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + that, serializer); + sse_encode_list_prim_u_8_loose(data, serializer); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + signature, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 12, port: port_); + }, + codec: SseCodec( + decodeSuccessData: sse_decode_bool, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: + kCrateApiKeyDerivationBip32Ed25519XPrivateKeyVerifySignatureConstMeta, + argValues: [that, data, signature], apiImpl: this, )); } - TaskConstMeta get kCrateApiSimpleInitAppConstMeta => const TaskConstMeta( - debugName: "init_app", - argNames: [], - ); - + TaskConstMeta + get kCrateApiKeyDerivationBip32Ed25519XPrivateKeyVerifySignatureConstMeta => + const TaskConstMeta( + debugName: "Bip32Ed25519XPrivateKey_verify_signature", + argNames: ["that", "data", "signature"], + ); + + @override + Future + crateApiKeyDerivationBip32Ed25519XPrivateKeyXpublicKey( + {required Bip32Ed25519XPrivateKey that}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + that, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 13, port: port_); + }, + codec: SseCodec( + decodeSuccessData: + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: + kCrateApiKeyDerivationBip32Ed25519XPrivateKeyXpublicKeyConstMeta, + argValues: [that], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiKeyDerivationBip32Ed25519XPrivateKeyXpublicKeyConstMeta => + const TaskConstMeta( + debugName: "Bip32Ed25519XPrivateKey_xpublic_key", + argNames: ["that"], + ); + + @override + U8Array32 crateApiKeyDerivationBip32Ed25519XPublicKeyGetChainCode( + {required Bip32Ed25519XPublicKey that}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + that, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 14)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_u_8_array_32, + decodeErrorData: null, + ), + constMeta: + kCrateApiKeyDerivationBip32Ed25519XPublicKeyGetChainCodeConstMeta, + argValues: [that], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiKeyDerivationBip32Ed25519XPublicKeyGetChainCodeConstMeta => + const TaskConstMeta( + debugName: "Bip32Ed25519XPublicKey_get_chain_code", + argNames: ["that"], + ); + + @override + U8Array64 crateApiKeyDerivationBip32Ed25519XPublicKeyGetInner( + {required Bip32Ed25519XPublicKey that}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + that, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 15)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_u_8_array_64, + decodeErrorData: null, + ), + constMeta: kCrateApiKeyDerivationBip32Ed25519XPublicKeyGetInnerConstMeta, + argValues: [that], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiKeyDerivationBip32Ed25519XPublicKeyGetInnerConstMeta => + const TaskConstMeta( + debugName: "Bip32Ed25519XPublicKey_get_inner", + argNames: ["that"], + ); + + @override + U8Array32 crateApiKeyDerivationBip32Ed25519XPublicKeyGetPublicKey( + {required Bip32Ed25519XPublicKey that}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + that, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 16)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_u_8_array_32, + decodeErrorData: null, + ), + constMeta: + kCrateApiKeyDerivationBip32Ed25519XPublicKeyGetPublicKeyConstMeta, + argValues: [that], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiKeyDerivationBip32Ed25519XPublicKeyGetPublicKeyConstMeta => + const TaskConstMeta( + debugName: "Bip32Ed25519XPublicKey_get_public_key", + argNames: ["that"], + ); + + @override + Bip32Ed25519XPublicKey crateApiKeyDerivationBip32Ed25519XPublicKeyNew( + {required U8Array64 xpubBytes}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_u_8_array_64(xpubBytes, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 17)!; + }, + codec: SseCodec( + decodeSuccessData: + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey, + decodeErrorData: null, + ), + constMeta: kCrateApiKeyDerivationBip32Ed25519XPublicKeyNewConstMeta, + argValues: [xpubBytes], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiKeyDerivationBip32Ed25519XPublicKeyNewConstMeta => + const TaskConstMeta( + debugName: "Bip32Ed25519XPublicKey_new", + argNames: ["xpubBytes"], + ); + + @override + String crateApiKeyDerivationBip32Ed25519XPublicKeyToHex( + {required Bip32Ed25519XPublicKey that}) { + return handler.executeSync(SyncTask( + callFfi: () { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + that, serializer); + return pdeCallFfi(generalizedFrbRustBinding, serializer, funcId: 18)!; + }, + codec: SseCodec( + decodeSuccessData: sse_decode_String, + decodeErrorData: null, + ), + constMeta: kCrateApiKeyDerivationBip32Ed25519XPublicKeyToHexConstMeta, + argValues: [that], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiKeyDerivationBip32Ed25519XPublicKeyToHexConstMeta => + const TaskConstMeta( + debugName: "Bip32Ed25519XPublicKey_to_hex", + argNames: ["that"], + ); + + @override + Future crateApiKeyDerivationBip32Ed25519XPublicKeyVerifySignature( + {required Bip32Ed25519XPublicKey that, + required List data, + required Bip32Ed25519Signature signature}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + that, serializer); + sse_encode_list_prim_u_8_loose(data, serializer); + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + signature, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 19, port: port_); + }, + codec: SseCodec( + decodeSuccessData: sse_decode_bool, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: + kCrateApiKeyDerivationBip32Ed25519XPublicKeyVerifySignatureConstMeta, + argValues: [that, data, signature], + apiImpl: this, + )); + } + + TaskConstMeta + get kCrateApiKeyDerivationBip32Ed25519XPublicKeyVerifySignatureConstMeta => + const TaskConstMeta( + debugName: "Bip32Ed25519XPublicKey_verify_signature", + argNames: ["that", "data", "signature"], + ); + + @override + Future crateApiKeyDerivationMnemonicToXprv( + {required String mnemonic, String? passphrase}) { + return handler.executeNormal(NormalTask( + callFfi: (port_) { + final serializer = SseSerializer(generalizedFrbRustBinding); + sse_encode_String(mnemonic, serializer); + sse_encode_opt_String(passphrase, serializer); + pdeCallFfi(generalizedFrbRustBinding, serializer, + funcId: 20, port: port_); + }, + codec: SseCodec( + decodeSuccessData: + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey, + decodeErrorData: sse_decode_AnyhowException, + ), + constMeta: kCrateApiKeyDerivationMnemonicToXprvConstMeta, + argValues: [mnemonic, passphrase], + apiImpl: this, + )); + } + + TaskConstMeta get kCrateApiKeyDerivationMnemonicToXprvConstMeta => + const TaskConstMeta( + debugName: "mnemonic_to_xprv", + argNames: ["mnemonic", "passphrase"], + ); + + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_Bip32Ed25519Signature => wire + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_Bip32Ed25519Signature => wire + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature; + + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_Bip32Ed25519XPrivateKey => wire + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_Bip32Ed25519XPrivateKey => wire + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey; + + RustArcIncrementStrongCountFnType + get rust_arc_increment_strong_count_Bip32Ed25519XPublicKey => wire + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey; + + RustArcDecrementStrongCountFnType + get rust_arc_decrement_strong_count_Bip32Ed25519XPublicKey => wire + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey; + + @protected + AnyhowException dco_decode_AnyhowException(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return AnyhowException(raw as String); + } + + @protected + Bip32Ed25519Signature + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return Bip32Ed25519SignatureImpl.frbInternalDcoDecode(raw as List); + } + + @protected + Bip32Ed25519XPrivateKey + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return Bip32Ed25519XPrivateKeyImpl.frbInternalDcoDecode( + raw as List); + } + + @protected + Bip32Ed25519XPublicKey + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return Bip32Ed25519XPublicKeyImpl.frbInternalDcoDecode( + raw as List); + } + + @protected + Bip32Ed25519XPrivateKey + dco_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return Bip32Ed25519XPrivateKeyImpl.frbInternalDcoDecode( + raw as List); + } + + @protected + Bip32Ed25519Signature + dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return Bip32Ed25519SignatureImpl.frbInternalDcoDecode(raw as List); + } + + @protected + Bip32Ed25519XPrivateKey + dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return Bip32Ed25519XPrivateKeyImpl.frbInternalDcoDecode( + raw as List); + } + + @protected + Bip32Ed25519XPublicKey + dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return Bip32Ed25519XPublicKeyImpl.frbInternalDcoDecode( + raw as List); + } + + @protected + Bip32Ed25519Signature + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return Bip32Ed25519SignatureImpl.frbInternalDcoDecode(raw as List); + } + + @protected + Bip32Ed25519XPrivateKey + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return Bip32Ed25519XPrivateKeyImpl.frbInternalDcoDecode( + raw as List); + } + + @protected + Bip32Ed25519XPublicKey + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return Bip32Ed25519XPublicKeyImpl.frbInternalDcoDecode( + raw as List); + } + + @protected + String dco_decode_String(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return raw as String; + } + + @protected + bool dco_decode_bool(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return raw as bool; + } + @protected - String dco_decode_String(dynamic raw) { + List dco_decode_list_prim_u_8_loose(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs - return raw as String; + return raw as List; } @protected @@ -151,18 +889,145 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return raw as Uint8List; } + @protected + String? dco_decode_opt_String(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return raw == null ? null : dco_decode_String(raw); + } + @protected int dco_decode_u_8(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs return raw as int; } + @protected + U8Array32 dco_decode_u_8_array_32(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return U8Array32(dco_decode_list_prim_u_8_strict(raw)); + } + + @protected + U8Array64 dco_decode_u_8_array_64(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return U8Array64(dco_decode_list_prim_u_8_strict(raw)); + } + + @protected + U8Array96 dco_decode_u_8_array_96(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return U8Array96(dco_decode_list_prim_u_8_strict(raw)); + } + @protected void dco_decode_unit(dynamic raw) { // Codec=Dco (DartCObject based), see doc to use other codecs return; } + @protected + BigInt dco_decode_usize(dynamic raw) { + // Codec=Dco (DartCObject based), see doc to use other codecs + return dcoDecodeU64(raw); + } + + @protected + AnyhowException sse_decode_AnyhowException(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var inner = sse_decode_String(deserializer); + return AnyhowException(inner); + } + + @protected + Bip32Ed25519Signature + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return Bip32Ed25519SignatureImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Bip32Ed25519XPrivateKey + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return Bip32Ed25519XPrivateKeyImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Bip32Ed25519XPublicKey + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return Bip32Ed25519XPublicKeyImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Bip32Ed25519XPrivateKey + sse_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return Bip32Ed25519XPrivateKeyImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Bip32Ed25519Signature + sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return Bip32Ed25519SignatureImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Bip32Ed25519XPrivateKey + sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return Bip32Ed25519XPrivateKeyImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Bip32Ed25519XPublicKey + sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return Bip32Ed25519XPublicKeyImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Bip32Ed25519Signature + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return Bip32Ed25519SignatureImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Bip32Ed25519XPrivateKey + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return Bip32Ed25519XPrivateKeyImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + + @protected + Bip32Ed25519XPublicKey + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return Bip32Ed25519XPublicKeyImpl.frbInternalSseDecode( + sse_decode_usize(deserializer), sse_decode_i_32(deserializer)); + } + @protected String sse_decode_String(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -170,6 +1035,19 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return utf8.decoder.convert(inner); } + @protected + bool sse_decode_bool(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return deserializer.buffer.getUint8() != 0; + } + + @protected + List sse_decode_list_prim_u_8_loose(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var len_ = sse_decode_i_32(deserializer); + return deserializer.buffer.getUint8List(len_); + } + @protected Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -177,17 +1055,55 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { return deserializer.buffer.getUint8List(len_); } + @protected + String? sse_decode_opt_String(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + if (sse_decode_bool(deserializer)) { + return (sse_decode_String(deserializer)); + } else { + return null; + } + } + @protected int sse_decode_u_8(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs return deserializer.buffer.getUint8(); } + @protected + U8Array32 sse_decode_u_8_array_32(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var inner = sse_decode_list_prim_u_8_strict(deserializer); + return U8Array32(inner); + } + + @protected + U8Array64 sse_decode_u_8_array_64(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var inner = sse_decode_list_prim_u_8_strict(deserializer); + return U8Array64(inner); + } + + @protected + U8Array96 sse_decode_u_8_array_96(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + var inner = sse_decode_list_prim_u_8_strict(deserializer); + return U8Array96(inner); + } + @protected void sse_decode_unit(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs } + @protected + BigInt sse_decode_usize(SseDeserializer deserializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + return deserializer.buffer.getBigUint64(); + } + @protected int sse_decode_i_32(SseDeserializer deserializer) { // Codec=Sse (Serialization based), see doc to use other codecs @@ -195,9 +1111,110 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { } @protected - bool sse_decode_bool(SseDeserializer deserializer) { + void sse_encode_AnyhowException( + AnyhowException self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs - return deserializer.buffer.getUint8() != 0; + sse_encode_String(self.message, serializer); + } + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + Bip32Ed25519Signature self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as Bip32Ed25519SignatureImpl).frbInternalSseEncode(move: true), + serializer); + } + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + Bip32Ed25519XPrivateKey self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as Bip32Ed25519XPrivateKeyImpl).frbInternalSseEncode(move: true), + serializer); + } + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + Bip32Ed25519XPublicKey self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as Bip32Ed25519XPublicKeyImpl).frbInternalSseEncode(move: true), + serializer); + } + + @protected + void + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + Bip32Ed25519XPrivateKey self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as Bip32Ed25519XPrivateKeyImpl).frbInternalSseEncode(move: false), + serializer); + } + + @protected + void + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + Bip32Ed25519Signature self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as Bip32Ed25519SignatureImpl).frbInternalSseEncode(move: false), + serializer); + } + + @protected + void + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + Bip32Ed25519XPrivateKey self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as Bip32Ed25519XPrivateKeyImpl).frbInternalSseEncode(move: false), + serializer); + } + + @protected + void + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + Bip32Ed25519XPublicKey self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as Bip32Ed25519XPublicKeyImpl).frbInternalSseEncode(move: false), + serializer); + } + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + Bip32Ed25519Signature self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as Bip32Ed25519SignatureImpl).frbInternalSseEncode(move: null), + serializer); + } + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + Bip32Ed25519XPrivateKey self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as Bip32Ed25519XPrivateKeyImpl).frbInternalSseEncode(move: null), + serializer); + } + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + Bip32Ed25519XPublicKey self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_usize( + (self as Bip32Ed25519XPublicKeyImpl).frbInternalSseEncode(move: null), + serializer); } @protected @@ -206,6 +1223,21 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { sse_encode_list_prim_u_8_strict(utf8.encoder.convert(self), serializer); } + @protected + void sse_encode_bool(bool self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + serializer.buffer.putUint8(self ? 1 : 0); + } + + @protected + void sse_encode_list_prim_u_8_loose( + List self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_i_32(self.length, serializer); + serializer.buffer + .putUint8List(self is Uint8List ? self : Uint8List.fromList(self)); + } + @protected void sse_encode_list_prim_u_8_strict( Uint8List self, SseSerializer serializer) { @@ -214,26 +1246,300 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi { serializer.buffer.putUint8List(self); } + @protected + void sse_encode_opt_String(String? self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + + sse_encode_bool(self != null, serializer); + if (self != null) { + sse_encode_String(self, serializer); + } + } + @protected void sse_encode_u_8(int self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs serializer.buffer.putUint8(self); } + @protected + void sse_encode_u_8_array_32(U8Array32 self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_list_prim_u_8_strict(self.inner, serializer); + } + + @protected + void sse_encode_u_8_array_64(U8Array64 self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_list_prim_u_8_strict(self.inner, serializer); + } + + @protected + void sse_encode_u_8_array_96(U8Array96 self, SseSerializer serializer) { + // Codec=Sse (Serialization based), see doc to use other codecs + sse_encode_list_prim_u_8_strict(self.inner, serializer); + } + @protected void sse_encode_unit(void self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs } @protected - void sse_encode_i_32(int self, SseSerializer serializer) { + void sse_encode_usize(BigInt self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs - serializer.buffer.putInt32(self); + serializer.buffer.putBigUint64(self); } @protected - void sse_encode_bool(bool self, SseSerializer serializer) { + void sse_encode_i_32(int self, SseSerializer serializer) { // Codec=Sse (Serialization based), see doc to use other codecs - serializer.buffer.putUint8(self ? 1 : 0); + serializer.buffer.putInt32(self); } } + +@sealed +class Bip32Ed25519SignatureImpl extends RustOpaque + implements Bip32Ed25519Signature { + // Not to be used by end users + Bip32Ed25519SignatureImpl.frbInternalDcoDecode(List wire) + : super.frbInternalDcoDecode(wire, _kStaticData); + + // Not to be used by end users + Bip32Ed25519SignatureImpl.frbInternalSseDecode( + BigInt ptr, int externalSizeOnNative) + : super.frbInternalSseDecode(ptr, externalSizeOnNative, _kStaticData); + + static final _kStaticData = RustArcStaticData( + rustArcIncrementStrongCount: RustLib + .instance.api.rust_arc_increment_strong_count_Bip32Ed25519Signature, + rustArcDecrementStrongCount: RustLib + .instance.api.rust_arc_decrement_strong_count_Bip32Ed25519Signature, + rustArcDecrementStrongCountPtr: RustLib + .instance.api.rust_arc_decrement_strong_count_Bip32Ed25519SignaturePtr, + ); + + /// Get the inner bytes. + U8Array64 get inner => + RustLib.instance.api.crateApiKeyDerivationBip32Ed25519SignatureGetInner( + that: this, + ); + + /// Convert to a hex string. + String toHex() => + RustLib.instance.api.crateApiKeyDerivationBip32Ed25519SignatureToHex( + that: this, + ); +} + +@sealed +class Bip32Ed25519XPrivateKeyImpl extends RustOpaque + implements Bip32Ed25519XPrivateKey { + // Not to be used by end users + Bip32Ed25519XPrivateKeyImpl.frbInternalDcoDecode(List wire) + : super.frbInternalDcoDecode(wire, _kStaticData); + + // Not to be used by end users + Bip32Ed25519XPrivateKeyImpl.frbInternalSseDecode( + BigInt ptr, int externalSizeOnNative) + : super.frbInternalSseDecode(ptr, externalSizeOnNative, _kStaticData); + + static final _kStaticData = RustArcStaticData( + rustArcIncrementStrongCount: RustLib + .instance.api.rust_arc_increment_strong_count_Bip32Ed25519XPrivateKey, + rustArcDecrementStrongCount: RustLib + .instance.api.rust_arc_decrement_strong_count_Bip32Ed25519XPrivateKey, + rustArcDecrementStrongCountPtr: RustLib.instance.api + .rust_arc_decrement_strong_count_Bip32Ed25519XPrivateKeyPtr, + ); + + /// Derive a new extended private key from the given extended private key. + /// - V2 derivation scheme is used as it is mention in [SLIP-0023](https://github.com/satoshilabs/slips/blob/master/slip-0023.md). + /// - More information about child key derivation can be found in [BIP32-Ed25519](https://input-output-hk.github.io/adrestia/static/Ed25519_BIP.pdf). + /// + /// # Arguments + /// + /// - `xprv_bytes`: An extended private key bytes of type `Bip32Ed25519XPrivateKey`. + /// - `path`: Derivation path. eg. m/0/2'/3 where ' represents hardened derivation. + /// + /// # Returns + /// + /// Returns a bytes of extended private key as a `Result`. + /// + /// # Errors + /// + /// Returns an error if the derivation path is invalid. + Future deriveXprv({required String path}) => + RustLib.instance.api + .crateApiKeyDerivationBip32Ed25519XPrivateKeyDeriveXprv( + that: this, path: path); + + /// Drop the extended private key. + void drop() => + RustLib.instance.api.crateApiKeyDerivationBip32Ed25519XPrivateKeyDrop( + that: this, + ); + + /// Extract the chain code from the extended private key. + /// The chain code is the last 32 bytes of the extended private key. + /// + /// # Returns + /// + /// Returns a 32 length bytes representing the chain code. + U8Array32 get chainCode => RustLib.instance.api + .crateApiKeyDerivationBip32Ed25519XPrivateKeyGetChainCode( + that: this, + ); + + /// Extract the extended secret key from the extended private key. + /// The extended secret key is the first 64 bytes of the extended private key. + /// + /// # Returns + /// + /// Returns a 64 length bytes representing the extended secret key. + U8Array64 get extendedSecretKey => RustLib.instance.api + .crateApiKeyDerivationBip32Ed25519XPrivateKeyGetExtendedSecretKey( + that: this, + ); + + /// Get the inner bytes. + U8Array96 get inner => + RustLib.instance.api.crateApiKeyDerivationBip32Ed25519XPrivateKeyGetInner( + that: this, + ); + + /// Sign the given data with the given extended private key. + /// + /// # Arguments + /// + /// - `data`: The data to sign. + /// + /// # Returns + /// Returns a 64 length bytes `Bip32Ed25519Signature` representing the signature. + /// + /// # Errors + /// + /// Returns an error if the extended private key is invalid. + Future signData({required List data}) => + RustLib.instance.api.crateApiKeyDerivationBip32Ed25519XPrivateKeySignData( + that: this, data: data); + + /// Convert to a hex string. + String toHex() => + RustLib.instance.api.crateApiKeyDerivationBip32Ed25519XPrivateKeyToHex( + that: this, + ); + + /// Verify the signature on the given data using extended private key. + /// + /// # Arguments + /// + /// - `data`: The data to sign. + /// - `signature`: The signature to check. + /// + /// # Returns + /// Returns a boolean value indicating if the signature match the sign data + /// True if the signature is valid and match the sign data, false otherwise. + /// + /// # Errors + /// + /// Returns an error if the extended private key or signature is invalid. + Future verifySignature( + {required List data, + required Bip32Ed25519Signature signature}) => + RustLib.instance.api + .crateApiKeyDerivationBip32Ed25519XPrivateKeyVerifySignature( + that: this, data: data, signature: signature); + + /// Get extended public key from the given extended private key. + /// + /// # Returns + /// + /// Returns a 64 length bytes `Bip32Ed25519XPublicKey` representing the extended + /// public key. + /// + /// # Errors + /// + /// Returns an error if the extended private key is invalid. + Future xpublicKey() => RustLib.instance.api + .crateApiKeyDerivationBip32Ed25519XPrivateKeyXpublicKey( + that: this, + ); +} + +@sealed +class Bip32Ed25519XPublicKeyImpl extends RustOpaque + implements Bip32Ed25519XPublicKey { + // Not to be used by end users + Bip32Ed25519XPublicKeyImpl.frbInternalDcoDecode(List wire) + : super.frbInternalDcoDecode(wire, _kStaticData); + + // Not to be used by end users + Bip32Ed25519XPublicKeyImpl.frbInternalSseDecode( + BigInt ptr, int externalSizeOnNative) + : super.frbInternalSseDecode(ptr, externalSizeOnNative, _kStaticData); + + static final _kStaticData = RustArcStaticData( + rustArcIncrementStrongCount: RustLib + .instance.api.rust_arc_increment_strong_count_Bip32Ed25519XPublicKey, + rustArcDecrementStrongCount: RustLib + .instance.api.rust_arc_decrement_strong_count_Bip32Ed25519XPublicKey, + rustArcDecrementStrongCountPtr: RustLib + .instance.api.rust_arc_decrement_strong_count_Bip32Ed25519XPublicKeyPtr, + ); + + /// Extract the chain code from the extended public key. + /// The chain code is the last 32 bytes of the extended public key. + /// + /// # Returns + /// + /// Returns a 32 length bytes representing the chain code. + U8Array32 get chainCode => RustLib.instance.api + .crateApiKeyDerivationBip32Ed25519XPublicKeyGetChainCode( + that: this, + ); + + /// Get the inner bytes. + U8Array64 get inner => + RustLib.instance.api.crateApiKeyDerivationBip32Ed25519XPublicKeyGetInner( + that: this, + ); + + /// Extract the public key from the extended public key. + /// The public key is the first 32 bytes of the extended public key. + /// + /// # Returns + /// + /// Returns a 32 length bytes representing the public key. + U8Array32 get publicKey => RustLib.instance.api + .crateApiKeyDerivationBip32Ed25519XPublicKeyGetPublicKey( + that: this, + ); + + /// Convert to a hex string. + String toHex() => + RustLib.instance.api.crateApiKeyDerivationBip32Ed25519XPublicKeyToHex( + that: this, + ); + + /// Verify the signature on the given data using extended public key. + /// + /// # Arguments + /// + /// - `data`: The data to sign. + /// - `signature`: The signature to check. + /// + /// # Returns + /// Returns a boolean value indicating if the signature match the sign data + /// True if the signature is valid and match the sign data, false otherwise. + /// + /// # Errors + /// + /// Returns an error if the extended public key or signature is invalid. + Future verifySignature( + {required List data, + required Bip32Ed25519Signature signature}) => + RustLib.instance.api + .crateApiKeyDerivationBip32Ed25519XPublicKeyVerifySignature( + that: this, data: data, signature: signature); +} diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/rust/frb_generated.io.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/rust/frb_generated.io.dart index f0efd013072..92f1fcc6bac 100644 --- a/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/rust/frb_generated.io.dart +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/rust/frb_generated.io.dart @@ -3,7 +3,7 @@ // ignore_for_file: unused_import, unused_element, unnecessary_import, duplicate_ignore, invalid_use_of_internal_member, annotate_overrides, non_constant_identifier_names, curly_braces_in_flow_control_structures, prefer_const_literals_to_create_immutables, unused_field -import 'api/simple.dart'; +import 'api/key_derivation.dart'; import 'dart:async'; import 'dart:convert'; import 'dart:ffi' as ffi; @@ -18,54 +18,283 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { required super.portManager, }); + CrossPlatformFinalizerArg + get rust_arc_decrement_strong_count_Bip32Ed25519SignaturePtr => wire + ._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519SignaturePtr; + + CrossPlatformFinalizerArg + get rust_arc_decrement_strong_count_Bip32Ed25519XPrivateKeyPtr => wire + ._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKeyPtr; + + CrossPlatformFinalizerArg + get rust_arc_decrement_strong_count_Bip32Ed25519XPublicKeyPtr => wire + ._rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKeyPtr; + + @protected + AnyhowException dco_decode_AnyhowException(dynamic raw); + + @protected + Bip32Ed25519Signature + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + dynamic raw); + + @protected + Bip32Ed25519XPrivateKey + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + dynamic raw); + + @protected + Bip32Ed25519XPublicKey + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + dynamic raw); + + @protected + Bip32Ed25519XPrivateKey + dco_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + dynamic raw); + + @protected + Bip32Ed25519Signature + dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + dynamic raw); + + @protected + Bip32Ed25519XPrivateKey + dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + dynamic raw); + + @protected + Bip32Ed25519XPublicKey + dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + dynamic raw); + + @protected + Bip32Ed25519Signature + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + dynamic raw); + + @protected + Bip32Ed25519XPrivateKey + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + dynamic raw); + + @protected + Bip32Ed25519XPublicKey + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + dynamic raw); + @protected String dco_decode_String(dynamic raw); + @protected + bool dco_decode_bool(dynamic raw); + + @protected + List dco_decode_list_prim_u_8_loose(dynamic raw); + @protected Uint8List dco_decode_list_prim_u_8_strict(dynamic raw); + @protected + String? dco_decode_opt_String(dynamic raw); + @protected int dco_decode_u_8(dynamic raw); + @protected + U8Array32 dco_decode_u_8_array_32(dynamic raw); + + @protected + U8Array64 dco_decode_u_8_array_64(dynamic raw); + + @protected + U8Array96 dco_decode_u_8_array_96(dynamic raw); + @protected void dco_decode_unit(dynamic raw); + @protected + BigInt dco_decode_usize(dynamic raw); + + @protected + AnyhowException sse_decode_AnyhowException(SseDeserializer deserializer); + + @protected + Bip32Ed25519Signature + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + SseDeserializer deserializer); + + @protected + Bip32Ed25519XPrivateKey + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + SseDeserializer deserializer); + + @protected + Bip32Ed25519XPublicKey + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + SseDeserializer deserializer); + + @protected + Bip32Ed25519XPrivateKey + sse_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + SseDeserializer deserializer); + + @protected + Bip32Ed25519Signature + sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + SseDeserializer deserializer); + + @protected + Bip32Ed25519XPrivateKey + sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + SseDeserializer deserializer); + + @protected + Bip32Ed25519XPublicKey + sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + SseDeserializer deserializer); + + @protected + Bip32Ed25519Signature + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + SseDeserializer deserializer); + + @protected + Bip32Ed25519XPrivateKey + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + SseDeserializer deserializer); + + @protected + Bip32Ed25519XPublicKey + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + SseDeserializer deserializer); + @protected String sse_decode_String(SseDeserializer deserializer); + @protected + bool sse_decode_bool(SseDeserializer deserializer); + + @protected + List sse_decode_list_prim_u_8_loose(SseDeserializer deserializer); + @protected Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer); + @protected + String? sse_decode_opt_String(SseDeserializer deserializer); + @protected int sse_decode_u_8(SseDeserializer deserializer); + @protected + U8Array32 sse_decode_u_8_array_32(SseDeserializer deserializer); + + @protected + U8Array64 sse_decode_u_8_array_64(SseDeserializer deserializer); + + @protected + U8Array96 sse_decode_u_8_array_96(SseDeserializer deserializer); + @protected void sse_decode_unit(SseDeserializer deserializer); + @protected + BigInt sse_decode_usize(SseDeserializer deserializer); + @protected int sse_decode_i_32(SseDeserializer deserializer); @protected - bool sse_decode_bool(SseDeserializer deserializer); + void sse_encode_AnyhowException( + AnyhowException self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + Bip32Ed25519Signature self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + Bip32Ed25519XPrivateKey self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + Bip32Ed25519XPublicKey self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + Bip32Ed25519XPrivateKey self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + Bip32Ed25519Signature self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + Bip32Ed25519XPrivateKey self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + Bip32Ed25519XPublicKey self, SseSerializer serializer); + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + Bip32Ed25519Signature self, SseSerializer serializer); + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + Bip32Ed25519XPrivateKey self, SseSerializer serializer); + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + Bip32Ed25519XPublicKey self, SseSerializer serializer); @protected void sse_encode_String(String self, SseSerializer serializer); + @protected + void sse_encode_bool(bool self, SseSerializer serializer); + + @protected + void sse_encode_list_prim_u_8_loose(List self, SseSerializer serializer); + @protected void sse_encode_list_prim_u_8_strict( Uint8List self, SseSerializer serializer); + @protected + void sse_encode_opt_String(String? self, SseSerializer serializer); + @protected void sse_encode_u_8(int self, SseSerializer serializer); + @protected + void sse_encode_u_8_array_32(U8Array32 self, SseSerializer serializer); + + @protected + void sse_encode_u_8_array_64(U8Array64 self, SseSerializer serializer); + + @protected + void sse_encode_u_8_array_96(U8Array96 self, SseSerializer serializer); + @protected void sse_encode_unit(void self, SseSerializer serializer); @protected - void sse_encode_i_32(int self, SseSerializer serializer); + void sse_encode_usize(BigInt self, SseSerializer serializer); @protected - void sse_encode_bool(bool self, SseSerializer serializer); + void sse_encode_i_32(int self, SseSerializer serializer); } // Section: wire_class @@ -81,4 +310,100 @@ class RustLibWire implements BaseWire { /// The symbols are looked up in [dynamicLibrary]. RustLibWire(ffi.DynamicLibrary dynamicLibrary) : _lookup = dynamicLibrary.lookup; + + void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + ffi.Pointer ptr, + ) { + return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + ptr, + ); + } + + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519SignaturePtr = + _lookup)>>( + 'frbgen_catalyst_key_derivation_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature'); + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature = + _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519SignaturePtr + .asFunction)>(); + + void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + ffi.Pointer ptr, + ) { + return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + ptr, + ); + } + + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519SignaturePtr = + _lookup)>>( + 'frbgen_catalyst_key_derivation_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature'); + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature = + _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519SignaturePtr + .asFunction)>(); + + void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + ffi.Pointer ptr, + ) { + return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + ptr, + ); + } + + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKeyPtr = + _lookup)>>( + 'frbgen_catalyst_key_derivation_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey'); + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey = + _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKeyPtr + .asFunction)>(); + + void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + ffi.Pointer ptr, + ) { + return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + ptr, + ); + } + + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKeyPtr = + _lookup)>>( + 'frbgen_catalyst_key_derivation_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey'); + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey = + _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKeyPtr + .asFunction)>(); + + void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + ffi.Pointer ptr, + ) { + return _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + ptr, + ); + } + + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKeyPtr = + _lookup)>>( + 'frbgen_catalyst_key_derivation_rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey'); + late final _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey = + _rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKeyPtr + .asFunction)>(); + + void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + ffi.Pointer ptr, + ) { + return _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + ptr, + ); + } + + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKeyPtr = + _lookup)>>( + 'frbgen_catalyst_key_derivation_rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey'); + late final _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey = + _rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKeyPtr + .asFunction)>(); } diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/rust/frb_generated.web.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/rust/frb_generated.web.dart index 2b2640718ad..0e0f899badd 100644 --- a/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/rust/frb_generated.web.dart +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/rust/frb_generated.web.dart @@ -6,7 +6,7 @@ // Static analysis wrongly picks the IO variant, thus ignore this // ignore_for_file: argument_type_not_assignable -import 'api/simple.dart'; +import 'api/key_derivation.dart'; import 'dart:async'; import 'dart:convert'; import 'frb_generated.dart'; @@ -20,60 +20,325 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl { required super.portManager, }); + CrossPlatformFinalizerArg + get rust_arc_decrement_strong_count_Bip32Ed25519SignaturePtr => wire + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature; + + CrossPlatformFinalizerArg + get rust_arc_decrement_strong_count_Bip32Ed25519XPrivateKeyPtr => wire + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey; + + CrossPlatformFinalizerArg + get rust_arc_decrement_strong_count_Bip32Ed25519XPublicKeyPtr => wire + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey; + + @protected + AnyhowException dco_decode_AnyhowException(dynamic raw); + + @protected + Bip32Ed25519Signature + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + dynamic raw); + + @protected + Bip32Ed25519XPrivateKey + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + dynamic raw); + + @protected + Bip32Ed25519XPublicKey + dco_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + dynamic raw); + + @protected + Bip32Ed25519XPrivateKey + dco_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + dynamic raw); + + @protected + Bip32Ed25519Signature + dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + dynamic raw); + + @protected + Bip32Ed25519XPrivateKey + dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + dynamic raw); + + @protected + Bip32Ed25519XPublicKey + dco_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + dynamic raw); + + @protected + Bip32Ed25519Signature + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + dynamic raw); + + @protected + Bip32Ed25519XPrivateKey + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + dynamic raw); + + @protected + Bip32Ed25519XPublicKey + dco_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + dynamic raw); + @protected String dco_decode_String(dynamic raw); + @protected + bool dco_decode_bool(dynamic raw); + + @protected + List dco_decode_list_prim_u_8_loose(dynamic raw); + @protected Uint8List dco_decode_list_prim_u_8_strict(dynamic raw); + @protected + String? dco_decode_opt_String(dynamic raw); + @protected int dco_decode_u_8(dynamic raw); + @protected + U8Array32 dco_decode_u_8_array_32(dynamic raw); + + @protected + U8Array64 dco_decode_u_8_array_64(dynamic raw); + + @protected + U8Array96 dco_decode_u_8_array_96(dynamic raw); + @protected void dco_decode_unit(dynamic raw); + @protected + BigInt dco_decode_usize(dynamic raw); + + @protected + AnyhowException sse_decode_AnyhowException(SseDeserializer deserializer); + + @protected + Bip32Ed25519Signature + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + SseDeserializer deserializer); + + @protected + Bip32Ed25519XPrivateKey + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + SseDeserializer deserializer); + + @protected + Bip32Ed25519XPublicKey + sse_decode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + SseDeserializer deserializer); + + @protected + Bip32Ed25519XPrivateKey + sse_decode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + SseDeserializer deserializer); + + @protected + Bip32Ed25519Signature + sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + SseDeserializer deserializer); + + @protected + Bip32Ed25519XPrivateKey + sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + SseDeserializer deserializer); + + @protected + Bip32Ed25519XPublicKey + sse_decode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + SseDeserializer deserializer); + + @protected + Bip32Ed25519Signature + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + SseDeserializer deserializer); + + @protected + Bip32Ed25519XPrivateKey + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + SseDeserializer deserializer); + + @protected + Bip32Ed25519XPublicKey + sse_decode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + SseDeserializer deserializer); + @protected String sse_decode_String(SseDeserializer deserializer); + @protected + bool sse_decode_bool(SseDeserializer deserializer); + + @protected + List sse_decode_list_prim_u_8_loose(SseDeserializer deserializer); + @protected Uint8List sse_decode_list_prim_u_8_strict(SseDeserializer deserializer); + @protected + String? sse_decode_opt_String(SseDeserializer deserializer); + @protected int sse_decode_u_8(SseDeserializer deserializer); + @protected + U8Array32 sse_decode_u_8_array_32(SseDeserializer deserializer); + + @protected + U8Array64 sse_decode_u_8_array_64(SseDeserializer deserializer); + + @protected + U8Array96 sse_decode_u_8_array_96(SseDeserializer deserializer); + @protected void sse_decode_unit(SseDeserializer deserializer); + @protected + BigInt sse_decode_usize(SseDeserializer deserializer); + @protected int sse_decode_i_32(SseDeserializer deserializer); @protected - bool sse_decode_bool(SseDeserializer deserializer); + void sse_encode_AnyhowException( + AnyhowException self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + Bip32Ed25519Signature self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + Bip32Ed25519XPrivateKey self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Owned_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + Bip32Ed25519XPublicKey self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_RefMut_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + Bip32Ed25519XPrivateKey self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + Bip32Ed25519Signature self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + Bip32Ed25519XPrivateKey self, SseSerializer serializer); + + @protected + void + sse_encode_Auto_Ref_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + Bip32Ed25519XPublicKey self, SseSerializer serializer); + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + Bip32Ed25519Signature self, SseSerializer serializer); + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + Bip32Ed25519XPrivateKey self, SseSerializer serializer); + + @protected + void + sse_encode_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + Bip32Ed25519XPublicKey self, SseSerializer serializer); @protected void sse_encode_String(String self, SseSerializer serializer); + @protected + void sse_encode_bool(bool self, SseSerializer serializer); + + @protected + void sse_encode_list_prim_u_8_loose(List self, SseSerializer serializer); + @protected void sse_encode_list_prim_u_8_strict( Uint8List self, SseSerializer serializer); + @protected + void sse_encode_opt_String(String? self, SseSerializer serializer); + @protected void sse_encode_u_8(int self, SseSerializer serializer); + @protected + void sse_encode_u_8_array_32(U8Array32 self, SseSerializer serializer); + + @protected + void sse_encode_u_8_array_64(U8Array64 self, SseSerializer serializer); + + @protected + void sse_encode_u_8_array_96(U8Array96 self, SseSerializer serializer); + @protected void sse_encode_unit(void self, SseSerializer serializer); @protected - void sse_encode_i_32(int self, SseSerializer serializer); + void sse_encode_usize(BigInt self, SseSerializer serializer); @protected - void sse_encode_bool(bool self, SseSerializer serializer); + void sse_encode_i_32(int self, SseSerializer serializer); } // Section: wire_class class RustLibWire implements BaseWire { RustLibWire.fromExternalLibrary(ExternalLibrary lib); + + void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + int ptr) => + wasmModule + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + ptr); + + void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + int ptr) => + wasmModule + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + ptr); + + void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + int ptr) => + wasmModule + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + ptr); + + void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + int ptr) => + wasmModule + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + ptr); + + void rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + int ptr) => + wasmModule + .rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + ptr); + + void rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + int ptr) => + wasmModule + .rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + ptr); } @JS('wasm_bindgen') @@ -81,4 +346,28 @@ external RustLibWasmModule get wasmModule; @JS() @anonymous -extension type RustLibWasmModule._(JSObject _) implements JSObject {} +extension type RustLibWasmModule._(JSObject _) implements JSObject { + external void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + int ptr); + + external void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519Signature( + int ptr); + + external void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + int ptr); + + external void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPrivateKey( + int ptr); + + external void + rust_arc_increment_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + int ptr); + + external void + rust_arc_decrement_strong_count_RustOpaque_flutter_rust_bridgefor_generatedRustAutoOpaqueInnerBip32Ed25519XPublicKey( + int ptr); +} diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/pubspec.yaml b/catalyst_voices/packages/libs/catalyst_key_derivation/pubspec.yaml index a5415ca9df5..cb2b9ae38d7 100644 --- a/catalyst_voices/packages/libs/catalyst_key_derivation/pubspec.yaml +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/pubspec.yaml @@ -11,6 +11,10 @@ environment: flutter: ">=3.24.1" dependencies: + cbor: ^6.2.0 + convert: ^3.1.1 + cryptography: ^2.7.0 + equatable: ^2.0.5 flutter: sdk: flutter flutter_rust_bridge: 2.5.1 @@ -22,8 +26,7 @@ dev_dependencies: ffigen: ^11.0.0 flutter_test: sdk: flutter - integration_test: - sdk: flutter + test: ^1.24.9 flutter: plugin: @@ -34,3 +37,5 @@ flutter: ffiPlugin: true macos: ffiPlugin: true + assets: + - assets/js/ diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/run.sh b/catalyst_voices/packages/libs/catalyst_key_derivation/run.sh deleted file mode 100755 index dec8541cab4..00000000000 --- a/catalyst_voices/packages/libs/catalyst_key_derivation/run.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -# Builds and rust the example for the catalyst_key_derivation. - -flutter_rust_bridge_codegen generate -flutter_rust_bridge_codegen build-web -cp -rf ./web/pkg ./example/web/ -cd example -flutter run --web-header=Cross-Origin-Opener-Policy=same-origin --web-header=Cross-Origin-Embedder-Policy=require-corp -d chrome \ No newline at end of file diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/rust/.cargo/config.toml b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/.cargo/config.toml new file mode 100644 index 00000000000..061a40c093c --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/.cargo/config.toml @@ -0,0 +1,93 @@ +# Use MOLD linker where possible, but ONLY in CI applicable targets. + +# Configure how Docker container targets build. + +# If you want to customize these targets for a local build, then customize them in your: +# $CARGO_HOME/config.toml +# NOT in the project itself. +# These targets are ONLY the targets used by CI and inside docker builds. + +# DO NOT remove `"-C", "target-feature=+crt-static"` from the rustflags for these targets. + +# Should be the default to have fully static rust programs in CI +[target.x86_64-unknown-linux-musl] +linker = "clang" +rustflags = [ + "-C", "link-arg=-fuse-ld=/usr/bin/mold", + "-C", "target-feature=-crt-static" +] + +# Should be the default to have fully static rust programs in CI +[target.aarch64-unknown-linux-musl] +linker = "clang" +rustflags = [ + "-C", "link-arg=-fuse-ld=/usr/bin/mold", + "-C", "target-feature=-crt-static" +] + +[build] +rustflags = [] +rustdocflags = [ + "--enable-index-page", + "-Z", + "unstable-options", +] + +[profile.dev] +opt-level = 1 +debug = true +debug-assertions = true +overflow-checks = true +lto = false +panic = "unwind" +incremental = true +codegen-units = 256 + +[profile.release] +opt-level = 3 +debug = false +debug-assertions = false +overflow-checks = false +lto = "thin" +panic = "unwind" +incremental = false +codegen-units = 16 + +[profile.test] +opt-level = 3 +debug = true +lto = false +debug-assertions = true +incremental = true +codegen-units = 256 + +[profile.bench] +opt-level = 3 +debug = false +debug-assertions = false +overflow-checks = false +lto = "thin" +incremental = false +codegen-units = 16 + +[alias] +lint = "clippy --all-targets" +lintfix = "clippy --all-targets --fix --allow-dirty" +lint-vscode = "clippy --message-format=json-diagnostic-rendered-ansi --all-targets" + +docs = "doc --release --no-deps --document-private-items --bins --lib --examples" +# nightly docs build broken... when they are'nt we can enable these docs... --unit-graph --timings=html,json -Z unstable-options" +testunit = "nextest run --release --bins --lib --tests --no-fail-fast -P ci" +testcov = "llvm-cov nextest --release --bins --lib --tests --no-fail-fast -P ci" +testdocs = "test --doc --release" + +# Rust formatting, MUST be run with +nightly +fmtchk = "fmt -- --check -v --color=always" +fmtfix = "fmt -- -v" + +[term] +quiet = false # whether cargo output is quiet +verbose = false # whether cargo provides verbose output +color = "auto" # whether cargo colorizes output use `CARGO_TERM_COLOR="off"` to disable. +progress.when = "never" # whether cargo shows progress bar +progress.width = 80 # width of progress bar \ No newline at end of file diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/rust/.config/nextest.toml b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/.config/nextest.toml new file mode 100644 index 00000000000..de5cf9b1ef9 --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/.config/nextest.toml @@ -0,0 +1,49 @@ +# cspell: words scrollability testcase +[store] +# The directory under the workspace root at which nextest-related files are +# written. Profile-specific storage is currently written to dir/. +# dir = "target/nextest" + +[profile.default] +# Print out output for failing tests as soon as they fail, and also at the end +# of the run (for easy scrollability). +failure-output = "immediate-final" + +# Do not cancel the test run on the first failure. +fail-fast = true + +status-level = "all" +final-status-level = "all" + +[profile.ci] +# Print out output for failing tests as soon as they fail, and also at the end +# of the run (for easy scrollability). +failure-output = "immediate-final" +# Do not cancel the test run on the first failure. +fail-fast = false + +status-level = "all" +final-status-level = "all" + + +[profile.ci.junit] +# Output a JUnit report into the given file inside 'store.dir/'. +# If unspecified, JUnit is not written out. + +path = "junit.xml" + +# The name of the top-level "report" element in JUnit report. If aggregating +# reports across different test runs, it may be useful to provide separate names +# for each report. +report-name = "nextest" + +# Whether standard output and standard error for passing tests should be stored in the JUnit report. +# Output is stored in the and elements of the element. +store-success-output = true + +# Whether standard output and standard error for failing tests should be stored in the JUnit report. +# Output is stored in the and elements of the element. +# +# Note that if a description can be extracted from the output, it is always stored in the +# element. +store-failure-output = true \ No newline at end of file diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/rust/Cargo.toml b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/Cargo.toml index e3e92d6f044..257bb6b8b7f 100644 --- a/catalyst_voices/packages/libs/catalyst_key_derivation/rust/Cargo.toml +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/Cargo.toml @@ -2,9 +2,56 @@ name = "catalyst_key_derivation" version = "0.1.0" edition = "2021" +homepage = "https://input-output-hk.github.io/catalyst-voices" +repository = "https://github.com/input-output-hk/catalyst-voices" +license = "Apache-2.0" [lib] -crate-type = ["cdylib", "staticlib"] +crate-type = ["cdylib", "staticlib", "rlib"] [dependencies] flutter_rust_bridge = "=2.5.1" +ed25519-bip32 = "0.4.1" +hmac = "0.12.1" +pbkdf2 = "0.12.2" +anyhow = "1.0.91" +bip39 = "2.0.0" +sha2 = "0.10" +bip32 = "0.5.1" +hex = "0.4.3" + +[lints.rust] +warnings = "deny" +missing_docs = "deny" +let_underscore_drop = "deny" +non_ascii_idents = "deny" +single_use_lifetimes = "deny" +trivial_casts = "deny" +trivial_numeric_casts = "deny" + +[lints.rustdoc] +broken_intra_doc_links = "deny" +invalid_codeblock_attributes = "deny" +invalid_html_tags = "deny" +invalid_rust_codeblocks = "deny" +bare_urls = "deny" +unescaped_backticks = "deny" + +[lints.clippy] +pedantic = { level = "deny", priority = -1 } +unwrap_used = "deny" +expect_used = "deny" +todo = "deny" +unimplemented = "deny" +exit = "deny" +get_unwrap = "deny" +index_refutable_slice = "deny" +indexing_slicing = "deny" +match_on_vec_items = "deny" +match_wild_err_arm = "deny" +missing_panics_doc = "deny" +panic = "deny" +string_slice = "deny" +unchecked_duration_subtraction = "deny" +unreachable = "deny" +missing_docs_in_private_items = "deny" \ No newline at end of file diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/rust/Earthfile b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/Earthfile new file mode 100644 index 00000000000..d314b28f4d1 --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/Earthfile @@ -0,0 +1,25 @@ +VERSION 0.8 + +IMPORT github.com/input-output-hk/catalyst-ci/earthly/rust:v3.2.24 AS rust-ci +IMPORT ../ AS flutter-rust-bridge + +# builder : Setup the builder +builder: + DO rust-ci+SETUP + COPY --dir .cargo .config src Cargo.toml clippy.toml deny.toml rustfmt.toml . + +# check : Run check using the most efficient host tooling +check: + FROM +builder + # Create a dummy file just to past the CI format check + # Add another blank line to satisfy the cargo fmt check + RUN printf "\n" > ./src/frb_generated.rs + DO rust-ci+EXECUTE --cmd="/scripts/std_checks.py" + +# build : Run build using the most efficient host tooling +build: + FROM +builder + + COPY flutter-rust-bridge+code-generator/frb_generated.rs ./src/frb_generated.rs + DO rust-ci+EXECUTE \ + --cmd="/scripts/std_build.py" \ diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/rust/blueprint.cue b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/blueprint.cue new file mode 100644 index 00000000000..38deb8c82a4 --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/blueprint.cue @@ -0,0 +1,2 @@ +version: "1.0.0" +project: name: "catalyst-key-derivation-rust" \ No newline at end of file diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/rust/clippy.toml b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/clippy.toml new file mode 100644 index 00000000000..0358cdb508c --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/clippy.toml @@ -0,0 +1,2 @@ +allow-unwrap-in-tests = true +allow-expect-in-tests = true diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/rust/deny.toml b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/deny.toml new file mode 100644 index 00000000000..b8a4f8ee74c --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/deny.toml @@ -0,0 +1,123 @@ +# cspell: words msvc, wasip, RUSTSEC, rustls, libssh, reqwest, tinyvec, Leay, webpki + +[graph] +# cargo-deny is really only ever intended to run on the "normal" tier-1 targets +targets = [ + "x86_64-unknown-linux-gnu", + "aarch64-unknown-linux-gnu", + "x86_64-unknown-linux-musl", + "aarch64-apple-darwin", + "x86_64-apple-darwin", + "x86_64-pc-windows-msvc", + "wasm32-unknown-unknown", + "wasm32-wasip1", + "wasm32-wasip2", +] + +[advisories] +version = 2 +ignore = [] + +[bans] +multiple-versions = "warn" +wildcards = 'deny' +deny = [ + # Scylla DB Drivers currently require OpenSSL. Its unavoidable. + # However, there is movement to enable support for Rustls. + # So, for now, allow open-ssl but it needs to be disabled as soon as Scylla DB enables Rustls. + #{ crate = "openssl", use-instead = "rustls" }, + #{ crate = "openssl-sys", use-instead = "rustls" }, + "libssh2-sys", + # { crate = "git2", use-instead = "gix" }, + # { crate = "cmake", use-instead = "cc" }, + # { crate = "windows", reason = "bloated and unnecessary", use-instead = "ideally inline bindings, practically, windows-sys" }, +] +skip = [ + # { crate = "bitflags@1.3.2", reason = "https://github.com/seanmonstar/reqwest/pull/2130 should be in the next version" }, + # { crate = "winnow@0.5.40", reason = "gix 0.59 was yanked, see https://github.com/Byron/gitoxide/issues/1309" }, + # { crate = "heck@0.4.1", reason = "strum_macros uses this old version" }, + # { crate = "base64@0.21.7", reason = "gix-transport pulls in this old version, as well as a newer version via reqwest" }, + # { crate = "byte-array-literalsase64@0.21.7", reason = "gix-transport pulls in this old version, as well as a newer version via reqwest" }, +] +skip-tree = [ + { crate = "windows-sys@0.48.0", reason = "a foundational crate for many that bumps far too frequently to ever have a shared version" }, +] + +[sources] +unknown-registry = "deny" +unknown-git = "deny" + +# List of URLs for allowed Git repositories +allow-git = [ + "https://github.com/input-output-hk/catalyst-libs.git", + "https://github.com/input-output-hk/catalyst-pallas.git", + "https://github.com/input-output-hk/catalyst-mithril.git", + "https://github.com/bytecodealliance/wasmtime", + "https://github.com/aldanor/hdf5-rust", + "https://github.com/txpipe/vrf", + "https://github.com/txpipe/kes", + "https://github.com/txpipe/curve25519-dalek", +] + +[licenses] +version = 2 +# Don't warn if a listed license isn't found +unused-allowed-license="allow" +# We want really high confidence when inferring licenses from text +confidence-threshold = 0.93 +allow = [ + "MIT", + "Apache-2.0", + "Unicode-DFS-2016", + "BSD-3-Clause", + "BSD-2-Clause", + "BlueOak-1.0.0", + "Apache-2.0 WITH LLVM-exception", + "CC0-1.0", + "ISC", + "Unicode-3.0", + "MPL-2.0", + "Zlib", + "MIT-0", +] +exceptions = [ + #{ allow = ["Zlib"], crate = "tinyvec" }, + #{ allow = ["Unicode-DFS-2016"], crate = "unicode-ident" }, + #{ allow = ["OpenSSL"], crate = "ring" }, +] + +[[licenses.clarify]] +crate = "byte-array-literals" +expression = "Apache-2.0 WITH LLVM-exception" +license-files = [{ path = "../../../LICENSE", hash = 0x001c7e6c }] + +[[licenses.clarify]] +crate = "hdf5-src" +expression = "MIT" +license-files = [{ path = "../LICENSE-MIT", hash = 0x001c7e6c }] + +[[licenses.clarify]] +crate = "ring" +expression = "MIT" +license-files = [{ path = "LICENSE", hash = 0xbd0eed23 }] + +# SPDX considers OpenSSL to encompass both the OpenSSL and SSLeay licenses +# https://spdx.org/licenses/OpenSSL.html +# ISC - Both BoringSSL and ring use this for their new files +# MIT - "Files in third_party/ have their own licenses, as described therein. The MIT +# license, for third_party/fiat, which, unlike other third_party directories, is +# compiled into non-test libraries, is included below." +# OpenSSL - Obviously +#expression = "ISC AND MIT AND OpenSSL" +#license-files = [{ path = "LICENSE", hash = 0xbd0eed23 }] + +#[[licenses.clarify]] +#crate = "webpki" +#expression = "ISC" +#license-files = [{ path = "LICENSE", hash = 0x001c7e6c }] + +# Actually "ISC-style" +#[[licenses.clarify]] +#crate = "rustls-webpki" +#expression = "ISC" +#license-files = [{ path = "LICENSE", hash = 0x001c7e6c }] \ No newline at end of file diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/rust/rust-toolchain.toml b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/rust-toolchain.toml new file mode 100644 index 00000000000..f01d02df3be --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/rust-toolchain.toml @@ -0,0 +1,3 @@ +[toolchain] +channel = "1.81" +profile = "default" \ No newline at end of file diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/rust/rustfmt.toml b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/rustfmt.toml new file mode 100644 index 00000000000..fa6d8c2e906 --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/rustfmt.toml @@ -0,0 +1,68 @@ +# Enable unstable features: +# * imports_indent +# * imports_layout +# * imports_granularity +# * group_imports +# * reorder_impl_items +# * trailing_comma +# * where_single_line +# * wrap_comments +# * comment_width +# * blank_lines_upper_bound +# * condense_wildcard_suffixes +# * force_multiline_blocks +# * format_code_in_doc_comments +# * format_generated_files +# * hex_literal_case +# * inline_attribute_width +# * normalize_comments +# * normalize_doc_attributes +# * overflow_delimited_expr +unstable_features = true + +# Compatibility: +edition = "2021" + +# Tabs & spaces - Defaults, listed for clarity +tab_spaces = 4 +hard_tabs = false + +# Commas. +trailing_comma = "Vertical" +match_block_trailing_comma = true + +# General width constraints. +max_width = 100 + +# Comments: +normalize_comments = true +normalize_doc_attributes = false +wrap_comments = true +comment_width = 90 # small excess is okay but prefer 80 +format_code_in_doc_comments = true +format_generated_files = false + +# Imports. +imports_indent = "Block" +imports_layout = "Mixed" +group_imports = "StdExternalCrate" +reorder_imports = true +imports_granularity = "Crate" + +# Arguments: +use_small_heuristics = "Default" +fn_params_layout = "Compressed" +overflow_delimited_expr = true +where_single_line = true + +# Misc: +inline_attribute_width = 0 +blank_lines_upper_bound = 1 +reorder_impl_items = true +use_field_init_shorthand = true +force_multiline_blocks = true +condense_wildcard_suffixes = true +hex_literal_case = "Upper" + +# Ignored files: +ignore = [] \ No newline at end of file diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/rust/src/api/key_derivation/mod.rs b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/src/api/key_derivation/mod.rs new file mode 100644 index 00000000000..6496d1c8502 --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/src/api/key_derivation/mod.rs @@ -0,0 +1,448 @@ +//! Cardano deterministic key hierarchy using BIP-0039 module. +//! +//! This module provides functions necessary to handle deterministic key derivation +//! using BIP-0039 mnemonics. + +use bip32::DerivationPath; +use bip39::Mnemonic; +pub use ed25519_bip32::{DerivationIndex, DerivationScheme, Signature, XPrv, XPub}; +use flutter_rust_bridge::{frb, spawn_blocking_with}; +use hmac::Hmac; +use pbkdf2::pbkdf2; +use sha2::Sha512; + +use crate::frb_generated::FLUTTER_RUST_BRIDGE_HANDLER; + +/// BIP32-Ed25519 extended private key bytes type. +/// Compose of: +/// - 64 Bytes: extended Ed25519 secret key +/// - 32 Bytes: chain code +#[derive(Clone, Debug, PartialEq, Eq)] +#[frb(opaque)] +pub struct Bip32Ed25519XPrivateKey([u8; 96]); + +impl From for Bip32Ed25519XPrivateKey { + fn from(xprv: XPrv) -> Self { + Bip32Ed25519XPrivateKey(xprv.into()) + } +} + +impl Bip32Ed25519XPrivateKey { + /// Create a new `Bip32Ed25519XPrivateKey` from the given bytes. + #[frb(sync)] + pub fn new(xprv_bytes: [u8; 96]) -> Self { + Bip32Ed25519XPrivateKey(xprv_bytes) + } + + /// Convert to a hex string. + #[frb(sync)] + pub fn to_hex(&self) -> String { + hex::encode(&self.0) + } + + /// Get the inner bytes. + #[frb(getter, sync)] + pub fn get_inner(&self) -> [u8; 96] { + self.0 + } + + /// Extract the chain code from the extended private key. + /// The chain code is the last 32 bytes of the extended private key. + /// + /// # Returns + /// + /// Returns a 32 length bytes representing the chain code. + #[frb(getter, sync)] + pub fn get_chain_code(&self) -> [u8; 32] { + let mut chain_code = [0; 32]; + chain_code.copy_from_slice(&self.0[64..96]); + chain_code + } + + /// Extract the extended secret key from the extended private key. + /// The extended secret key is the first 64 bytes of the extended private key. + /// + /// # Returns + /// + /// Returns a 64 length bytes representing the extended secret key. + #[frb(getter, sync)] + pub fn get_extended_secret_key(&self) -> [u8; 64] { + let mut x_secret = [0; 64]; + x_secret.copy_from_slice(&self.0[0..64]); + x_secret + } + + /// Derive a new extended private key from the given extended private key. + /// - V2 derivation scheme is used as it is mention in [SLIP-0023](https://github.com/satoshilabs/slips/blob/master/slip-0023.md). + /// - More information about child key derivation can be found in [BIP32-Ed25519](https://input-output-hk.github.io/adrestia/static/Ed25519_BIP.pdf). + /// + /// # Arguments + /// + /// - `xprv_bytes`: An extended private key bytes of type `Bip32Ed25519XPrivateKey`. + /// - `path`: Derivation path. eg. m/0/2'/3 where ' represents hardened derivation. + /// + /// # Returns + /// + /// Returns a bytes of extended private key as a `Result`. + /// + /// # Errors + /// + /// Returns an error if the derivation path is invalid. + // &str is not supported in flutter_rust_bridge + #[allow(clippy::needless_pass_by_value)] + pub async fn derive_xprv(&self, path: String) -> anyhow::Result { + let xprv = XPrv::from_bytes_verified(self.0)?; + + let derive_xprv = spawn_blocking_with( + move || derive_xprv_helper(xprv, &path), + FLUTTER_RUST_BRIDGE_HANDLER.thread_pool(), + ) + .await??; + + Ok(derive_xprv.into()) + } + + /// Get extended public key from the given extended private key. + /// + /// # Returns + /// + /// Returns a 64 length bytes `Bip32Ed25519XPublicKey` representing the extended + /// public key. + /// + /// # Errors + /// + /// Returns an error if the extended private key is invalid. + pub async fn xpublic_key(&self) -> anyhow::Result { + let xprv = XPrv::from_bytes_verified(self.0)?; + + let xpub = spawn_blocking_with( + move || xpublic_key_helper(&xprv), + FLUTTER_RUST_BRIDGE_HANDLER.thread_pool(), + ) + .await?; + + Ok(Bip32Ed25519XPublicKey(xpub.into())) + } + + /// Sign the given data with the given extended private key. + /// + /// # Arguments + /// + /// - `data`: The data to sign. + /// + /// # Returns + /// Returns a 64 length bytes `Bip32Ed25519Signature` representing the signature. + /// + /// # Errors + /// + /// Returns an error if the extended private key is invalid. + pub async fn sign_data(&self, data: Vec) -> anyhow::Result { + let xprv = XPrv::from_bytes_verified(self.0)?; + + let signature = spawn_blocking_with( + move || sign_data_helper(&xprv, &data), + FLUTTER_RUST_BRIDGE_HANDLER.thread_pool(), + ) + .await?; + + Ok(Bip32Ed25519Signature(*signature.to_bytes())) + } + + /// Verify the signature on the given data using extended private key. + /// + /// # Arguments + /// + /// - `data`: The data to sign. + /// - `signature`: The signature to check. + /// + /// # Returns + /// Returns a boolean value indicating if the signature match the sign data + /// True if the signature is valid and match the sign data, false otherwise. + /// + /// # Errors + /// + /// Returns an error if the extended private key or signature is invalid. + pub async fn verify_signature( + &self, data: Vec, signature: &Bip32Ed25519Signature, + ) -> anyhow::Result { + let xprv = XPrv::from_bytes_verified(self.0)?; + let verified_sig = Signature::from_slice(&signature.0) + .map_err(|_| anyhow::anyhow!("Invalid signature"))?; + + let result = spawn_blocking_with( + move || verify_signature_xprv_helper(&xprv, &data, &verified_sig), + FLUTTER_RUST_BRIDGE_HANDLER.thread_pool(), + ) + .await?; + + Ok(result) + } + + /// Drop the extended private key. + #[frb(sync)] + pub fn drop(&mut self) { + // Zero out the private key bytes to improve security + for byte in &mut self.0 { + *byte = 0; + } + } +} + +/// BIP32-Ed25519 extended public key bytes type. +#[derive(Clone, Debug, PartialEq, Eq)] +#[frb(opaque)] +pub struct Bip32Ed25519XPublicKey([u8; 64]); + +impl From for Bip32Ed25519XPublicKey { + fn from(xpub: XPub) -> Self { + Bip32Ed25519XPublicKey(xpub.into()) + } +} + +impl Bip32Ed25519XPublicKey { + /// Create a new `Bip32Ed25519XPublicKey` from the given bytes. + #[frb(sync)] + pub fn new(xpub_bytes: [u8; 64]) -> Self { + Bip32Ed25519XPublicKey(xpub_bytes) + } + + /// Convert to a hex string. + #[frb(sync)] + pub fn to_hex(&self) -> String { + hex::encode(&self.0) + } + + /// Get the inner bytes. + #[frb(getter, sync)] + pub fn get_inner(&self) -> [u8; 64] { + self.0 + } + + /// Extract the chain code from the extended public key. + /// The chain code is the last 32 bytes of the extended public key. + /// + /// # Returns + /// + /// Returns a 32 length bytes representing the chain code. + #[frb(getter, sync)] + pub fn get_chain_code(&self) -> [u8; 32] { + let mut chain_code = [0; 32]; + chain_code.copy_from_slice(&self.0[32..64]); + chain_code + } + + /// Extract the public key from the extended public key. + /// The public key is the first 32 bytes of the extended public key. + /// + /// # Returns + /// + /// Returns a 32 length bytes representing the public key. + #[frb(getter, sync)] + + pub fn get_public_key(&self) -> [u8; 32] { + let mut public_key = [0; 32]; + public_key.copy_from_slice(&self.0[0..32]); + public_key + } + + /// Verify the signature on the given data using extended public key. + /// + /// # Arguments + /// + /// - `data`: The data to sign. + /// - `signature`: The signature to check. + /// + /// # Returns + /// Returns a boolean value indicating if the signature match the sign data + /// True if the signature is valid and match the sign data, false otherwise. + /// + /// # Errors + /// + /// Returns an error if the extended public key or signature is invalid. + pub async fn verify_signature( + &self, data: Vec, signature: &Bip32Ed25519Signature, + ) -> anyhow::Result { + let xpub = XPub::from_bytes(self.0); + let verified_sig = Signature::from_slice(&signature.0) + .map_err(|_| anyhow::anyhow!("Invalid signature"))?; + + let result = spawn_blocking_with( + move || verify_signature_xpub_helper(&xpub, &data, &verified_sig), + FLUTTER_RUST_BRIDGE_HANDLER.thread_pool(), + ) + .await?; + + Ok(result) + } +} + +/// BIP32-Ed25519 signature bytes type. +#[derive(Clone, Debug, PartialEq, Eq)] +#[frb(opaque)] +pub struct Bip32Ed25519Signature([u8; 64]); + +impl Bip32Ed25519Signature { + /// Create a new `Bip32Ed25519Signature` from the given bytes. + #[frb(sync)] + pub fn new(sig_bytes: [u8; 64]) -> Self { + Bip32Ed25519Signature(sig_bytes) + } + + /// Convert to a hex string. + #[frb(sync)] + pub fn to_hex(&self) -> String { + hex::encode(&self.0) + } + + /// Get the inner bytes. + #[frb(getter, sync)] + pub fn get_inner(&self) -> [u8; 64] { + self.0 + } +} + +/// Generate a new extended private key (`XPrv`) from a mnemonic and passphrase. +/// Note that this function only works with BIP-0039 mnemonics. +/// For more information: Cardano Icarus master node derivation +/// +/// +/// # Arguments +/// +/// - `mnemonic`: A string representing the mnemonic. +/// - `passphrase`: An optional string representing the passphrase (aka. password). +/// +/// # Returns +/// +/// Returns a bytes of extended private key as a `Result`. +/// +/// # Errors +/// +/// Returns an error if the mnemonic is invalid. +pub async fn mnemonic_to_xprv( + mnemonic: String, passphrase: Option, +) -> anyhow::Result { + let xprv = spawn_blocking_with( + move || mnemonic_to_xprv_helper(mnemonic, passphrase), + FLUTTER_RUST_BRIDGE_HANDLER.thread_pool(), + ) + .await??; + + Ok(xprv.into()) +} + +/// Helper function for `mnemonic_to_xprv`. +/// +/// # Steps +/// +/// This implementation follows SLIP-0023 - Cardano Icarus master node derivation +/// +/// 1. Let `mnemonic` be a BIP-0039 mnemonic and `passphrase`be the passphrase. +/// 2. Determine entropy that was used to generate `mnemonic`. +/// 3. Compute `pbkdf2_result` = PBKDF2-HMAC-SHA512(password = `passphrase`, salt = +/// `entropy`, iterations = 4096, dkLen = 96). +/// 4. given `pbkdf2_result` is S, modify S by assigning S\[0\] := S\[0\] & 0xf8 and +/// S\[31\] := (S\[31\] & 0x1f) | 0x40. +/// 5. The result will be +/// - kL where S\[0:32\] a 256-bit integer in little-endian byte order. +/// - kR where S\[32:64\] +/// - Result in (kL, kR) as the root extended private key and c := S\[64:96\] as the +/// root chain code. +fn mnemonic_to_xprv_helper(mnemonic: String, passphrase: Option) -> anyhow::Result { + /// 4096 is the number of iterations for PBKDF2. + const ITER: u32 = 4096; + + // Parse will detect language and check mnemonic valid length + // 12, 15, 18, 21, 24 are valid mnemonic length + let mnemonic = + Mnemonic::parse(mnemonic).map_err(|e| anyhow::anyhow!("Invalid mnemonic: {e}"))?; + + let entropy = mnemonic.to_entropy(); + + let mut pbkdf2_result = [0; 96]; + let _ = pbkdf2::>( + passphrase.unwrap_or_default().as_bytes(), + &entropy, + ITER, + &mut pbkdf2_result, + ); + + Ok(XPrv::normalize_bytes_force3rd(pbkdf2_result)) +} + +/// Helper function for `derive_xprv`. +fn derive_xprv_helper(xprv: XPrv, path: &str) -> anyhow::Result { + let Ok(derivation_path) = path.parse::() else { + return Err(anyhow::anyhow!("Invalid derivation path: {path}")); + }; + let key = derivation_path.iter().fold(xprv, |xprv, child_num| { + if child_num.is_hardened() { + // Hardened derivation is indicated by setting the highest bit (i >= 2^31). + // This modifies the child index by applying a mask to ensure it falls within the + // hardened range. Note that 0x80_00_00_00 is equivalent to 2^31. + // More about hardened, please visit + // + xprv.derive(DerivationScheme::V2, child_num.index() | 0x80_00_00_00) + } else { + xprv.derive(DerivationScheme::V2, child_num.index()) + } + }); + Ok(key) +} + +/// Helper function for `xpub`. +fn xpublic_key_helper(xprv: &XPrv) -> XPub { + xprv.public() +} + +/// Helper function for `sign_data`. +fn sign_data_helper(xprv: &XPrv, data: &[u8]) -> Signature { + xprv.sign(data) +} + +/// Helper function for `Bip32Ed25519XPrivateKey` `verify_signature`. +fn verify_signature_xprv_helper( + xprv: &XPrv, data: &[u8], signature: &Signature, +) -> bool { + xprv.verify(data, signature) +} + +/// Helper function for `Bip32Ed25519XPublicKey` `verify_signature`. +fn verify_signature_xpub_helper( + xpub: &XPub, data: &[u8], signature: &Signature, +) -> bool { + xpub.verify(data, signature) +} + +#[cfg(test)] +mod test { + + use super::*; + + const MNEMONIC: &str = "prevent company field green slot measure chief hero apple task eagle sunset endorse dress seed"; + + // Call to function should not return error + #[test] + fn test_mnemonic_to_xprv() { + assert!(mnemonic_to_xprv_helper(MNEMONIC.to_string(), None).is_ok()); + } + + // Test vector from https://cips.cardano.org/cip/CIP-0011 + #[test] + fn test_key_derivation() { + let xprv = mnemonic_to_xprv_helper(MNEMONIC.to_string(), None).unwrap(); + let path = "m/1852'/1815'/0'/2/0"; + let derive_xprv = derive_xprv_helper(xprv, path).unwrap(); + assert_eq!(derive_xprv.to_string(), + "b8ab42f1aacbcdb3ae858e3a3df88142b3ed27a2d3f432024e0d943fc1e597442d57545d84c8db2820b11509d944093bc605350e60c533b8886a405bd59eed6dcf356648fe9e9219d83e989c8ff5b5b337e2897b6554c1ab4e636de791fe5427"); + } + + #[test] + fn test_sign_data() { + let data = vec![1, 2, 3]; + let xprv = mnemonic_to_xprv_helper(MNEMONIC.to_string(), None).unwrap(); + let sign_data = sign_data_helper(&xprv, &data); + assert!(verify_signature_xprv_helper(&xprv, &data, &sign_data)); + let xpub = xpublic_key_helper(&xprv); + assert!(verify_signature_xpub_helper(&xpub, &data, &sign_data)); + } +} diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/rust/src/api/mod.rs b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/src/api/mod.rs index b252f36bf9e..13a92cfbee7 100644 --- a/catalyst_voices/packages/libs/catalyst_key_derivation/rust/src/api/mod.rs +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/src/api/mod.rs @@ -1 +1,3 @@ -pub mod simple; +//! Module for the Catalyst key derivation library. + +pub mod key_derivation; diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/rust/src/api/simple.rs b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/src/api/simple.rs deleted file mode 100644 index 8e42034aea8..00000000000 --- a/catalyst_voices/packages/libs/catalyst_key_derivation/rust/src/api/simple.rs +++ /dev/null @@ -1,29 +0,0 @@ -use flutter_rust_bridge::spawn_blocking_with; -use crate::frb_generated::FLUTTER_RUST_BRIDGE_HANDLER; - -// spawn_blocking_with works similary to tokio spawn_blocking -// basically running blocking operations on a separate thread -// Just use FLUTTER_RUST_BRIDGE_HANDLER.thread_pool() as the second argument -// as mention in https://github.com/fzyzcjy/flutter_rust_bridge/blob/master/frb_rust/src/rust_async/io.rs -// https://cjycode.com/flutter_rust_bridge/guides/cross-platform/async -pub async fn greet(name: String) -> String { - let iterations = 50_000_000; - - let result = spawn_blocking_with(move || { - let mut sum = 0.0; - for i in 0..iterations { - sum += (i as f64).sqrt(); - } - sum - }, FLUTTER_RUST_BRIDGE_HANDLER.thread_pool()) - .await - .unwrap(); - - format!("Hello, {name} {result}!") -} - -#[flutter_rust_bridge::frb(init)] -pub fn init_app() { - // Default utilities - feel free to customize - flutter_rust_bridge::setup_default_user_utils(); -} diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/rust/src/frb_generated.rs b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/src/frb_generated.rs deleted file mode 100644 index 74519579b8d..00000000000 --- a/catalyst_voices/packages/libs/catalyst_key_derivation/rust/src/frb_generated.rs +++ /dev/null @@ -1,283 +0,0 @@ -// This file is automatically generated, so please do not edit it. -// @generated by `flutter_rust_bridge`@ 2.5.1. - -#![allow( - non_camel_case_types, - unused, - non_snake_case, - clippy::needless_return, - clippy::redundant_closure_call, - clippy::redundant_closure, - clippy::useless_conversion, - clippy::unit_arg, - clippy::unused_unit, - clippy::double_parens, - clippy::let_and_return, - clippy::too_many_arguments, - clippy::match_single_binding, - clippy::clone_on_copy, - clippy::let_unit_value, - clippy::deref_addrof, - clippy::explicit_auto_deref, - clippy::borrow_deref_ref, - clippy::needless_borrow -)] - -// Section: imports - -use flutter_rust_bridge::for_generated::byteorder::{NativeEndian, ReadBytesExt, WriteBytesExt}; -use flutter_rust_bridge::for_generated::{transform_result_dco, Lifetimeable, Lockable}; -use flutter_rust_bridge::{Handler, IntoIntoDart}; - -// Section: boilerplate - -flutter_rust_bridge::frb_generated_boilerplate!( - default_stream_sink_codec = SseCodec, - default_rust_opaque = RustOpaqueMoi, - default_rust_auto_opaque = RustAutoOpaqueMoi, -); -pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_VERSION: &str = "2.5.1"; -pub(crate) const FLUTTER_RUST_BRIDGE_CODEGEN_CONTENT_HASH: i32 = -1918914929; - -// Section: executor - -flutter_rust_bridge::frb_generated_default_handler!(); - -// Section: wire_funcs - -fn wire__crate__api__simple__greet_impl( - port_: flutter_rust_bridge::for_generated::MessagePort, - ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, - rust_vec_len_: i32, - data_len_: i32, -) { - FLUTTER_RUST_BRIDGE_HANDLER.wrap_async::( - flutter_rust_bridge::for_generated::TaskInfo { - debug_name: "greet", - port: Some(port_), - mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, - }, - move || { - let message = unsafe { - flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( - ptr_, - rust_vec_len_, - data_len_, - ) - }; - let mut deserializer = - flutter_rust_bridge::for_generated::SseDeserializer::new(message); - let api_name = ::sse_decode(&mut deserializer); - deserializer.end(); - move |context| async move { - transform_result_sse::<_, ()>( - (move || async move { - let output_ok = - Result::<_, ()>::Ok(crate::api::simple::greet(api_name).await)?; - Ok(output_ok) - })() - .await, - ) - } - }, - ) -} -fn wire__crate__api__simple__init_app_impl( - port_: flutter_rust_bridge::for_generated::MessagePort, - ptr_: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, - rust_vec_len_: i32, - data_len_: i32, -) { - FLUTTER_RUST_BRIDGE_HANDLER.wrap_normal::( - flutter_rust_bridge::for_generated::TaskInfo { - debug_name: "init_app", - port: Some(port_), - mode: flutter_rust_bridge::for_generated::FfiCallMode::Normal, - }, - move || { - let message = unsafe { - flutter_rust_bridge::for_generated::Dart2RustMessageSse::from_wire( - ptr_, - rust_vec_len_, - data_len_, - ) - }; - let mut deserializer = - flutter_rust_bridge::for_generated::SseDeserializer::new(message); - deserializer.end(); - move |context| { - transform_result_sse::<_, ()>((move || { - let output_ok = Result::<_, ()>::Ok({ - crate::api::simple::init_app(); - })?; - Ok(output_ok) - })()) - } - }, - ) -} - -// Section: dart2rust - -impl SseDecode for String { - // Codec=Sse (Serialization based), see doc to use other codecs - fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { - let mut inner = >::sse_decode(deserializer); - return String::from_utf8(inner).unwrap(); - } -} - -impl SseDecode for Vec { - // Codec=Sse (Serialization based), see doc to use other codecs - fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { - let mut len_ = ::sse_decode(deserializer); - let mut ans_ = vec![]; - for idx_ in 0..len_ { - ans_.push(::sse_decode(deserializer)); - } - return ans_; - } -} - -impl SseDecode for u8 { - // Codec=Sse (Serialization based), see doc to use other codecs - fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { - deserializer.cursor.read_u8().unwrap() - } -} - -impl SseDecode for () { - // Codec=Sse (Serialization based), see doc to use other codecs - fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self {} -} - -impl SseDecode for i32 { - // Codec=Sse (Serialization based), see doc to use other codecs - fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { - deserializer.cursor.read_i32::().unwrap() - } -} - -impl SseDecode for bool { - // Codec=Sse (Serialization based), see doc to use other codecs - fn sse_decode(deserializer: &mut flutter_rust_bridge::for_generated::SseDeserializer) -> Self { - deserializer.cursor.read_u8().unwrap() != 0 - } -} - -fn pde_ffi_dispatcher_primary_impl( - func_id: i32, - port: flutter_rust_bridge::for_generated::MessagePort, - ptr: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, - rust_vec_len: i32, - data_len: i32, -) { - // Codec=Pde (Serialization + dispatch), see doc to use other codecs - match func_id { - 1 => wire__crate__api__simple__greet_impl(port, ptr, rust_vec_len, data_len), - 2 => wire__crate__api__simple__init_app_impl(port, ptr, rust_vec_len, data_len), - _ => unreachable!(), - } -} - -fn pde_ffi_dispatcher_sync_impl( - func_id: i32, - ptr: flutter_rust_bridge::for_generated::PlatformGeneralizedUint8ListPtr, - rust_vec_len: i32, - data_len: i32, -) -> flutter_rust_bridge::for_generated::WireSyncRust2DartSse { - // Codec=Pde (Serialization + dispatch), see doc to use other codecs - match func_id { - _ => unreachable!(), - } -} - -// Section: rust2dart - -impl SseEncode for String { - // Codec=Sse (Serialization based), see doc to use other codecs - fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { - >::sse_encode(self.into_bytes(), serializer); - } -} - -impl SseEncode for Vec { - // Codec=Sse (Serialization based), see doc to use other codecs - fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { - ::sse_encode(self.len() as _, serializer); - for item in self { - ::sse_encode(item, serializer); - } - } -} - -impl SseEncode for u8 { - // Codec=Sse (Serialization based), see doc to use other codecs - fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { - serializer.cursor.write_u8(self).unwrap(); - } -} - -impl SseEncode for () { - // Codec=Sse (Serialization based), see doc to use other codecs - fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) {} -} - -impl SseEncode for i32 { - // Codec=Sse (Serialization based), see doc to use other codecs - fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { - serializer.cursor.write_i32::(self).unwrap(); - } -} - -impl SseEncode for bool { - // Codec=Sse (Serialization based), see doc to use other codecs - fn sse_encode(self, serializer: &mut flutter_rust_bridge::for_generated::SseSerializer) { - serializer.cursor.write_u8(self as _).unwrap(); - } -} - -#[cfg(not(target_family = "wasm"))] -mod io { - // This file is automatically generated, so please do not edit it. - // @generated by `flutter_rust_bridge`@ 2.5.1. - - // Section: imports - - use super::*; - use flutter_rust_bridge::for_generated::byteorder::{ - NativeEndian, ReadBytesExt, WriteBytesExt, - }; - use flutter_rust_bridge::for_generated::{transform_result_dco, Lifetimeable, Lockable}; - use flutter_rust_bridge::{Handler, IntoIntoDart}; - - // Section: boilerplate - - flutter_rust_bridge::frb_generated_boilerplate_io!(); -} -#[cfg(not(target_family = "wasm"))] -pub use io::*; - -/// cbindgen:ignore -#[cfg(target_family = "wasm")] -mod web { - // This file is automatically generated, so please do not edit it. - // @generated by `flutter_rust_bridge`@ 2.5.1. - - // Section: imports - - use super::*; - use flutter_rust_bridge::for_generated::byteorder::{ - NativeEndian, ReadBytesExt, WriteBytesExt, - }; - use flutter_rust_bridge::for_generated::wasm_bindgen; - use flutter_rust_bridge::for_generated::wasm_bindgen::prelude::*; - use flutter_rust_bridge::for_generated::{transform_result_dco, Lifetimeable, Lockable}; - use flutter_rust_bridge::{Handler, IntoIntoDart}; - - // Section: boilerplate - - flutter_rust_bridge::frb_generated_boilerplate_web!(); -} -#[cfg(target_family = "wasm")] -pub use web::*; diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/rust/src/lib.rs b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/src/lib.rs index cbb071f8bf2..6af52ba41f0 100644 --- a/catalyst_voices/packages/libs/catalyst_key_derivation/rust/src/lib.rs +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/rust/src/lib.rs @@ -1,2 +1,20 @@ +//! Catalyst Key Derivation + +// cspell: words uninlined + pub mod api; +#[allow( + clippy::missing_docs_in_private_items, + clippy::unwrap_used, + clippy::unreachable, + clippy::semicolon_if_nothing_returned, + clippy::cast_possible_truncation, + clippy::cast_possible_wrap, + clippy::cast_lossless, + clippy::wildcard_imports, + clippy::uninlined_format_args, + clippy::redundant_else, + clippy::unreadable_literal +)] +#[doc(hidden)] mod frb_generated; diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/test/ed25519/ed25519_private_key_test.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/test/ed25519/ed25519_private_key_test.dart new file mode 100644 index 00000000000..2eca8729171 --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/test/ed25519/ed25519_private_key_test.dart @@ -0,0 +1,59 @@ +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; +import 'package:test/test.dart'; + +void main() { + group(Ed25519PrivateKey, () { + final message = List.generate(256, (i) => i); + final reverseMessage = List.generate(256, (i) => 256 - i); + final privateKey = Ed25519PrivateKey.seeded(1); + + test('derivePublicKey', () async { + expect( + await privateKey.derivePublicKey(), + equals( + Ed25519PublicKey.fromHex( + '8a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c', + ), + ), + ); + }); + + test('KeyPair from seed equals private key', () async { + final keyPair = await Ed25519KeyPair.fromSeed(privateKey.bytes); + expect(keyPair.privateKey, equals(privateKey)); + }); + + test('sign and verify', () async { + final signature = await privateKey.sign(message); + final keyPair = await Ed25519KeyPair.fromSeed(privateKey.bytes); + + expect( + signature, + equals( + Ed25519Signature.fromHex( + '38be3f06b38db12c27898e52dd8b82a3c13a1b6f9b8ffda65' + 'ccfe1bd54923c7693c3478a5ca6265487fbd1a1e249ddf1a6' + '041c234c4144c1ea9818c7274b300c', + ), + ), + ); + + expect( + await keyPair.publicKey.verify(message, signature: signature), + isTrue, + ); + + expect( + await keyPair.publicKey.verify(reverseMessage, signature: signature), + isFalse, + ); + }); + + test('seeded has correct length', () { + expect( + Ed25519PrivateKey.seeded(2).bytes.length, + equals(Ed25519PrivateKey.length), + ); + }); + }); +} diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/test/ed25519/ed25519_public_key_test.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/test/ed25519/ed25519_public_key_test.dart new file mode 100644 index 00000000000..107fa684d0c --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/test/ed25519/ed25519_public_key_test.dart @@ -0,0 +1,13 @@ +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; +import 'package:test/test.dart'; + +void main() { + group(Ed25519PublicKey, () { + test('seeded has correct length', () { + expect( + Ed25519PublicKey.seeded(1).bytes.length, + equals(Ed25519PublicKey.length), + ); + }); + }); +} diff --git a/catalyst_voices/packages/libs/catalyst_key_derivation/test/ed25519/ed25519_signature_test.dart b/catalyst_voices/packages/libs/catalyst_key_derivation/test/ed25519/ed25519_signature_test.dart new file mode 100644 index 00000000000..54c699dcd24 --- /dev/null +++ b/catalyst_voices/packages/libs/catalyst_key_derivation/test/ed25519/ed25519_signature_test.dart @@ -0,0 +1,13 @@ +import 'package:catalyst_key_derivation/catalyst_key_derivation.dart'; +import 'package:test/test.dart'; + +void main() { + group(Ed25519Signature, () { + test('seeded has correct length', () { + expect( + Ed25519Signature.seeded(3).bytes.length, + equals(Ed25519Signature.length), + ); + }); + }); +} diff --git a/catalyst_voices/utilities/uikit_example/Earthfile b/catalyst_voices/utilities/uikit_example/Earthfile index 486e776d4a1..ec37290a2e5 100644 --- a/catalyst_voices/utilities/uikit_example/Earthfile +++ b/catalyst_voices/utilities/uikit_example/Earthfile @@ -1,7 +1,7 @@ VERSION 0.8 IMPORT ../../ AS catalyst-voices -IMPORT github.com/input-output-hk/catalyst-ci/earthly/flutter:v3.2.23 AS flutter-ci +IMPORT github.com/input-output-hk/catalyst-ci/earthly/flutter:v3.2.24 AS flutter-ci # local-build-web - build web version of UIKit example. # Prefixed by "local" to make sure it's not auto triggered, the target was diff --git a/catalyst_voices/utilities/uikit_example/lib/examples/voices_menu_example.dart b/catalyst_voices/utilities/uikit_example/lib/examples/voices_menu_example.dart index ff17f9b2631..3dcfa8fb0fa 100644 --- a/catalyst_voices/utilities/uikit_example/lib/examples/voices_menu_example.dart +++ b/catalyst_voices/utilities/uikit_example/lib/examples/voices_menu_example.dart @@ -13,11 +13,10 @@ class VoicesMenuExample extends StatefulWidget { } class _VoicesMenuExampleState extends State { - final _problemSensingController = VoicesNodeMenuController(); + int? _selectedItemId; @override void dispose() { - _problemSensingController.dispose(); super.dispose(); } @@ -35,7 +34,16 @@ class _VoicesMenuExampleState extends State { const _MenuExample2(), VoicesNodeMenu( name: 'Problem-sensing stage', - controller: _problemSensingController, + onItemTap: (value) { + setState(() { + if (_selectedItemId == value) { + _selectedItemId = null; + } else { + _selectedItemId = value; + } + }); + }, + selectedItemId: _selectedItemId, items: const [ VoicesNodeMenuItem(id: 0, label: 'Start'), VoicesNodeMenuItem(id: 1, label: 'Vote'), diff --git a/catalyst_voices/utilities/uikit_example/lib/examples/voices_rich_text_example.dart b/catalyst_voices/utilities/uikit_example/lib/examples/voices_rich_text_example.dart index b8a50812a19..ab837a6dc35 100644 --- a/catalyst_voices/utilities/uikit_example/lib/examples/voices_rich_text_example.dart +++ b/catalyst_voices/utilities/uikit_example/lib/examples/voices_rich_text_example.dart @@ -5,11 +5,33 @@ import 'package:catalyst_voices_brands/catalyst_voices_brands.dart'; import 'package:flutter/material.dart'; import 'package:flutter_quill/flutter_quill.dart'; -class VoicesRichTextExample extends StatelessWidget { +class VoicesRichTextExample extends StatefulWidget { static const String route = '/rich-text-example'; const VoicesRichTextExample({super.key}); + @override + State createState() => _VoicesRichTextExampleState(); +} + +class _VoicesRichTextExampleState extends State { + late final VoicesRichTextController _controller; + + @override + void initState() { + super.initState(); + _controller = VoicesRichTextController( + document: Document.fromJson(_textSample), + selection: const TextSelection.collapsed(offset: 0), + ); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -18,9 +40,9 @@ class VoicesRichTextExample extends StatelessWidget { body: SingleChildScrollView( child: VoicesRichText( title: 'Rich text', - document: Document.fromJson(_textSample), + controller: _controller, charsLimit: 800, - onSave: (document) => log('Saved document: $document'), + onSaved: (document) => log('Saved document: $document'), ), ), ); diff --git a/catalyst_voices/utilities/uikit_example/lib/examples/voices_snackbar_example.dart b/catalyst_voices/utilities/uikit_example/lib/examples/voices_snackbar_example.dart index 79cf16e14e5..4bec37625a0 100644 --- a/catalyst_voices/utilities/uikit_example/lib/examples/voices_snackbar_example.dart +++ b/catalyst_voices/utilities/uikit_example/lib/examples/voices_snackbar_example.dart @@ -15,7 +15,7 @@ class VoicesSnackbarExample extends StatelessWidget { [ VoicesSnackBarPrimaryAction( onPressed: () {}, - child: Text(context.l10n.snackbarRefreshButtonText), + child: Text(context.l10n.refresh), ), VoicesSnackBarSecondaryAction( onPressed: () {}, diff --git a/cspell.json b/cspell.json index 68b94eaaecf..80420acfbc2 100644 --- a/cspell.json +++ b/cspell.json @@ -179,7 +179,8 @@ "catalyst_voices/packages/libs/catalyst_key_derivation/cargokit/**", "catalyst_voices/utilities/remote_widgets/example/**/**", "catalyst_voices/utilities/poc_local_storage/**/**", - "**/*.svg" + "**/*.svg", + "catalyst_voices/packages/libs/catalyst_key_derivation/lib/src/rust/**", ], "enableFiletypes": [ "earthfile", diff --git a/docs/Earthfile b/docs/Earthfile index 338f0a810a7..2f5f2872d8b 100644 --- a/docs/Earthfile +++ b/docs/Earthfile @@ -1,6 +1,6 @@ VERSION 0.8 -IMPORT github.com/input-output-hk/catalyst-ci/earthly/docs:v3.2.23 AS docs-ci +IMPORT github.com/input-output-hk/catalyst-ci/earthly/docs:v3.2.24 AS docs-ci IMPORT .. AS repo IMPORT ../catalyst-gateway AS catalyst-gateway diff --git a/utilities/docs-preview/Earthfile b/utilities/docs-preview/Earthfile index cdee93fae41..429e63bf583 100644 --- a/utilities/docs-preview/Earthfile +++ b/utilities/docs-preview/Earthfile @@ -1,6 +1,6 @@ VERSION 0.8 -IMPORT github.com/input-output-hk/catalyst-ci/earthly/docs:v3.2.23 AS docs-ci +IMPORT github.com/input-output-hk/catalyst-ci/earthly/docs:v3.2.24 AS docs-ci # update-docs-dev-script: get the latest docs dev script from CI. diff --git a/utilities/local-cluster/.vagrant/rgloader/loader.rb b/utilities/local-cluster/.vagrant/rgloader/loader.rb deleted file mode 100644 index b6c81bf31b9..00000000000 --- a/utilities/local-cluster/.vagrant/rgloader/loader.rb +++ /dev/null @@ -1,12 +0,0 @@ -# Copyright (c) HashiCorp, Inc. -# SPDX-License-Identifier: BUSL-1.1 - -# This file loads the proper rgloader/loader.rb file that comes packaged -# with Vagrant so that encoded files can properly run with Vagrant. - -if ENV["VAGRANT_INSTALLER_EMBEDDED_DIR"] - require File.expand_path( - "rgloader/loader", ENV["VAGRANT_INSTALLER_EMBEDDED_DIR"]) -else - raise "Encoded files can't be read outside of the Vagrant installer." -end