From e11d77946bec4b023f75a8b93cf37fd537a73b72 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Fri, 8 May 2026 16:34:23 +0200 Subject: [PATCH 01/48] fix: build and wallet creation --- BeamWallet.xcodeproj/project.pbxproj | 167 ++++---- .../xcschemes/BeamWallet.xcscheme | 2 +- .../xcschemes/BeamWalletMasterNet.xcscheme | 2 +- .../xcschemes/BeamWalletTestNet.xcscheme | 2 +- BeamWallet/AppDelegate.swift | 46 ++- BeamWallet/BeamSDK/AppModel.h | 2 + BeamWallet/BeamSDK/AppModel.mm | 360 ++++++++++++------ BeamWallet/BeamSDK/DAO/AppsApiUI.mm | 14 +- BeamWallet/BeamSDK/DAO/WebAPICreator.mm | 5 +- BeamWallet/BeamSDK/WalletModel.mm | 14 + BeamWallet/Extensions/ViewController.swift | 2 +- .../Manager/BiometricAuthorization.swift | 132 ++++--- BeamWallet/Manager/KeychainManager.swift | 163 ++++---- BeamWallet/Manager/OnboardManager.swift | 24 +- BeamWallet/Protocols/LocalizableStrings.swift | 6 + .../EnterWalletPasswordViewController.swift | 11 +- .../OpenWalletProgressViewController.swift | 108 +++--- .../SeedPhraseViewController.swift | 5 + .../ViewControllers/Main/DAO/JS/XWVJson.swift | 2 + .../Main/Menu/LeftMenuViewController.swift | 2 +- .../CreateWalletPasswordViewController.swift | 58 +-- .../Passwords/UnlockPasswordPopover.swift | 3 +- .../Settings/SelectNodeViewController.swift | 48 ++- .../Settings/SettingsViewController.swift | 1 + .../Withdraw/WithdrawViewController.swift | 112 ++++++ Podfile.lock | 2 +- Resources/cs.lproj/Localizable.strings | 3 + Resources/en.lproj/Localizable.strings | 3 + Resources/es.lproj/Localizable.strings | 3 + Resources/fi-FI.lproj/Localizable.strings | 3 + Resources/fr.lproj/Localizable.strings | 3 + Resources/ko.lproj/Localizable.strings | 3 + Resources/nl.lproj/Localizable.strings | 3 + Resources/ru.lproj/Localizable.strings | 3 + Resources/sv-SE.lproj/Localizable.strings | 3 + Resources/sv.lproj/Localizable.strings | 3 + Resources/th.lproj/Localizable.strings | 3 + Resources/tr.lproj/Localizable.strings | 3 + Resources/vi.lproj/Localizable.strings | 3 + Resources/zh-Hans.lproj/Localizable.strings | 3 + 40 files changed, 902 insertions(+), 433 deletions(-) create mode 100644 BeamWallet/ViewControllers/Main/Wallet/Withdraw/WithdrawViewController.swift diff --git a/BeamWallet.xcodeproj/project.pbxproj b/BeamWallet.xcodeproj/project.pbxproj index 7a6b3ad0..e8fe9ffd 100644 --- a/BeamWallet.xcodeproj/project.pbxproj +++ b/BeamWallet.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -1357,14 +1357,14 @@ /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ - 9217D31E2652AB67006DD6F1 /* Embed App Extensions */ = { + 9217D31E2652AB67006DD6F1 /* Embed Foundation Extensions */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 13; files = ( ); - name = "Embed App Extensions"; + name = "Embed Foundation Extensions"; runOnlyForDeploymentPostprocessing = 0; }; 92365AE2222D4039000D7064 /* Embed Frameworks */ = { @@ -1389,14 +1389,14 @@ name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; - 92C4DBDF227906800073AEED /* Embed App Extensions */ = { + 92C4DBDF227906800073AEED /* Embed Foundation Extensions */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 13; files = ( ); - name = "Embed App Extensions"; + name = "Embed Foundation Extensions"; runOnlyForDeploymentPostprocessing = 0; }; 92E2EACC226F102100367928 /* Embed Watch Content */ = { @@ -2361,7 +2361,7 @@ 9253A76F25A5C6A500E456A2 /* openssl.framework */, 92E2EB8D226F24C200367928 /* masternet */, 92D3CBF02264B56D007E3C55 /* testnet */, - 92D3CBD32264B562007E3C55 /* mainnet */, + 92D3CBD32264B562007E3C55 /* beam-ios-7.5.14432/lib */, 927367212277AB330060CB67 /* UserNotifications.framework */, 927367232277AB340060CB67 /* UserNotificationsUI.framework */, 3B5894AC3136298FE0B7E8E3 /* Pods_BeamWallet.framework */, @@ -2952,7 +2952,7 @@ path = Images; sourceTree = ""; }; - 92D3CBD32264B562007E3C55 /* mainnet */ = { + 92D3CBD32264B562007E3C55 /* beam-ios-7.5.14432/lib */ = { isa = PBXGroup; children = ( 9244A4F12A014658007B03D0 /* libassets.a */, @@ -2988,7 +2988,7 @@ 9244A4E72A014656007B03D0 /* libwallet_client.a */, 9244A4E62A014655007B03D0 /* libwallet_core.a */, ); - path = mainnet; + path = "beam-ios-7.5.14432/lib"; sourceTree = ""; }; 92D3CBF02264B56D007E3C55 /* testnet */ = { @@ -3274,7 +3274,7 @@ 9288DD93223A55410020C501 /* Embed Frameworks */, 9288DD97223A55410020C501 /* ShellScript */, 92E2EACC226F102100367928 /* Embed Watch Content */, - 92C4DBDF227906800073AEED /* Embed App Extensions */, + 92C4DBDF227906800073AEED /* Embed Foundation Extensions */, 2938815B995B37F4BB538A0A /* [CP] Embed Pods Frameworks */, ); buildRules = ( @@ -3298,7 +3298,7 @@ 92E2EB81226F21C700367928 /* Embed Watch Content */, 922474FD24E3E694006FE2B2 /* ShellScript */, 03901693440105723276594D /* [CP] Embed Pods Frameworks */, - 9217D31E2652AB67006DD6F1 /* Embed App Extensions */, + 9217D31E2652AB67006DD6F1 /* Embed Foundation Extensions */, ); buildRules = ( ); @@ -3315,9 +3315,10 @@ 925AD5D02228254E00DDE66B /* Project object */ = { isa = PBXProject; attributes = { + BuildIndependentTargetsInParallel = YES; DefaultBuildSystemTypeForWorkspace = Latest; LastSwiftUpdateCheck = 1240; - LastUpgradeCheck = 1240; + LastUpgradeCheck = 1600; ORGANIZATIONNAME = Denis; TargetAttributes = { 925AD5D72228254E00DDE66B = { @@ -3723,10 +3724,14 @@ inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-BeamWalletMasterNet/Pods-BeamWalletMasterNet-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + inputPaths = ( + ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-BeamWalletMasterNet/Pods-BeamWalletMasterNet-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); + outputPaths = ( + ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-BeamWalletMasterNet/Pods-BeamWalletMasterNet-frameworks.sh\"\n"; @@ -3762,10 +3767,14 @@ inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-BeamWalletTestNet/Pods-BeamWalletTestNet-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + inputPaths = ( + ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-BeamWalletTestNet/Pods-BeamWalletTestNet-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); + outputPaths = ( + ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-BeamWalletTestNet/Pods-BeamWalletTestNet-frameworks.sh\"\n"; @@ -3779,10 +3788,14 @@ inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-BeamWallet/Pods-BeamWallet-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + inputPaths = ( + ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-BeamWallet/Pods-BeamWallet-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); + outputPaths = ( + ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-BeamWallet/Pods-BeamWallet-frameworks.sh\"\n"; @@ -4969,6 +4982,7 @@ ENABLE_BITCODE = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -5036,6 +5050,7 @@ ENABLE_BITCODE = NO; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -5065,10 +5080,11 @@ CLANG_ENABLE_MODULES = YES; CLANG_WARN_ENUM_CONVERSION = NO; CODE_SIGN_ENTITLEMENTS = Resources/BeamWallet.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 8; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = KNU2R94BJK; + DEVELOPMENT_TEAM = AB54LLK6SM; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -5077,14 +5093,14 @@ "$(PROJECT_DIR)/Frameworks/boost", ); HEADER_SEARCH_PATHS = ( - "\"$(SRCROOT)/../include\"", - "\"$(SRCROOT)/../include/3rdparty\"", - "\"$(SRCROOT)/../include/3rdparty/libuv/include\"", - "\"$(SRCROOT)/../include/core\"", - "\"$(SRCROOT)/../include/utility\"", - "\"$(SRCROOT)/../include/wallet\"", - "\"$(SRCROOT)/../include/3rdparty/sqlite\"", - "\"$(SRCROOT)/../include/keykeeper\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty/libuv/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/core\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/utility\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/wallet\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty/sqlite\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/keykeeper\"", ); INFOPLIST_FILE = "$(SRCROOT)/Resources/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; @@ -5096,13 +5112,14 @@ "$(inherited)", "$(PROJECT_DIR)/BeamWallet/BeamSDK", "$(PROJECT_DIR)/Frameworks", - "$(PROJECT_DIR)/Frameworks/mainnet", + "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14432/lib", "$(PROJECT_DIR)", "$(PROJECT_DIR)/Frameworks/boost", ); MARKETING_VERSION = 7.3; OTHER_LDFLAGS = ( "$(inherited)", + "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14432/lib/libsqlite.a", "-ObjC", "-l\"c++\"", "-l\"z\"", @@ -5122,8 +5139,9 @@ "\"UIKit\"", "-w", ); - PRODUCT_BUNDLE_IDENTIFIER = com.mw.beam.beamwalletiOSMainnet; + PRODUCT_BUNDLE_IDENTIFIER = com.mw.beam.beamwalletiOSMainnet2; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "BeamWallet/BeamWallet-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -5140,9 +5158,10 @@ CLANG_ENABLE_MODULES = YES; CLANG_WARN_ENUM_CONVERSION = NO; CODE_SIGN_ENTITLEMENTS = Resources/BeamWallet.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 8; - DEVELOPMENT_TEAM = KNU2R94BJK; + DEVELOPMENT_TEAM = AB54LLK6SM; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -5151,14 +5170,14 @@ "$(PROJECT_DIR)/Frameworks/boost", ); HEADER_SEARCH_PATHS = ( - "\"$(SRCROOT)/../include\"", - "\"$(SRCROOT)/../include/3rdparty\"", - "\"$(SRCROOT)/../include/3rdparty/libuv/include\"", - "\"$(SRCROOT)/../include/core\"", - "\"$(SRCROOT)/../include/utility\"", - "\"$(SRCROOT)/../include/wallet\"", - "\"$(SRCROOT)/../include/3rdparty/sqlite\"", - "\"$(SRCROOT)/../include/keykeeper\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty/libuv/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/core\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/utility\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/wallet\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty/sqlite\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/keykeeper\"", ); INFOPLIST_FILE = "$(SRCROOT)/Resources/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; @@ -5170,13 +5189,14 @@ "$(inherited)", "$(PROJECT_DIR)/BeamWallet/BeamSDK", "$(PROJECT_DIR)/Frameworks", - "$(PROJECT_DIR)/Frameworks/mainnet", + "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14432/lib", "$(PROJECT_DIR)", "$(PROJECT_DIR)/Frameworks/boost", ); MARKETING_VERSION = 7.3; OTHER_LDFLAGS = ( "$(inherited)", + "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14432/lib/libsqlite.a", "-ObjC", "-l\"c++\"", "-l\"z\"", @@ -5196,8 +5216,9 @@ "\"UIKit\"", "-w", ); - PRODUCT_BUNDLE_IDENTIFIER = com.mw.beam.beamwalletiOSMainnet; + PRODUCT_BUNDLE_IDENTIFIER = com.mw.beam.beamwalletiOSMainnet2; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "BeamWallet/BeamWallet-Bridging-Header.h"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; @@ -5208,7 +5229,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = D303009FB5F0DA4093A89DFB /* Pods-BeamWalletTestNet.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; CLANG_ENABLE_MODULES = YES; @@ -5227,14 +5247,14 @@ "$(PROJECT_DIR)/Frameworks/boost", ); HEADER_SEARCH_PATHS = ( - "\"$(SRCROOT)/../include\"", - "\"$(SRCROOT)/../include/3rdparty\"", - "\"$(SRCROOT)/../include/3rdparty/libuv/include\"", - "\"$(SRCROOT)/../include/core\"", - "\"$(SRCROOT)/../include/utility\"", - "\"$(SRCROOT)/../include/wallet\"", - "\"$(SRCROOT)/../include/3rdparty/sqlite\"", - "\"$(SRCROOT)/../include/keykeeper\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty/libuv/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/core\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/utility\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/wallet\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty/sqlite\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/keykeeper\"", ); INFOPLIST_FILE = "$(SRCROOT)/Resources/InfoTestnet.plist"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; @@ -5246,13 +5266,14 @@ "$(inherited)", "$(PROJECT_DIR)/BeamWallet/BeamSDK", "$(PROJECT_DIR)/Frameworks", - "$(PROJECT_DIR)/Frameworks/mainnet", + "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14432/lib", "$(PROJECT_DIR)", "$(PROJECT_DIR)/Frameworks/boost", ); MARKETING_VERSION = 7.1; OTHER_LDFLAGS = ( "$(inherited)", + "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14432/lib/libsqlite.a", "-ObjC", "-l\"c++\"", "-l\"z\"", @@ -5286,7 +5307,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 456B838BA83C92E05D36B091 /* Pods-BeamWalletTestNet.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; CLANG_ENABLE_MODULES = YES; @@ -5314,14 +5334,14 @@ "PB_ENABLE_MALLOC=1", ); HEADER_SEARCH_PATHS = ( - "\"$(SRCROOT)/../include\"", - "\"$(SRCROOT)/../include/3rdparty\"", - "\"$(SRCROOT)/../include/3rdparty/libuv/include\"", - "\"$(SRCROOT)/../include/core\"", - "\"$(SRCROOT)/../include/utility\"", - "\"$(SRCROOT)/../include/wallet\"", - "\"$(SRCROOT)/../include/3rdparty/sqlite\"", - "\"$(SRCROOT)/../include/keykeeper\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty/libuv/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/core\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/utility\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/wallet\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty/sqlite\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/keykeeper\"", ); INFOPLIST_FILE = "$(SRCROOT)/Resources/InfoTestnet.plist"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; @@ -5333,13 +5353,14 @@ "$(inherited)", "$(PROJECT_DIR)/BeamWallet/BeamSDK", "$(PROJECT_DIR)/Frameworks", - "$(PROJECT_DIR)/Frameworks/mainnet", + "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14432/lib", "$(PROJECT_DIR)", "$(PROJECT_DIR)/Frameworks/boost", ); MARKETING_VERSION = 7.1; OTHER_LDFLAGS = ( "$(inherited)", + "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14432/lib/libsqlite.a", "-ObjC", "-l\"c++\"", "-l\"z\"", @@ -5372,7 +5393,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = BA659A4953BE271B118EB5D6 /* Pods-BeamWalletMasterNet.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIconMaster; CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; CLANG_ENABLE_MODULES = YES; @@ -5391,14 +5411,14 @@ "$(PROJECT_DIR)/Frameworks/boost", ); HEADER_SEARCH_PATHS = ( - "\"$(SRCROOT)/../include\"", - "\"$(SRCROOT)/../include/3rdparty\"", - "\"$(SRCROOT)/../include/3rdparty/libuv/include\"", - "\"$(SRCROOT)/../include/core\"", - "\"$(SRCROOT)/../include/utility\"", - "\"$(SRCROOT)/../include/wallet\"", - "\"$(SRCROOT)/../include/3rdparty/sqlite\"", - "\"$(SRCROOT)/../include/keykeeper\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty/libuv/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/core\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/utility\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/wallet\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty/sqlite\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/keykeeper\"", ); INFOPLIST_FILE = "$(SRCROOT)/Resources/InfoMasternet.plist"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; @@ -5414,11 +5434,12 @@ "$(PROJECT_DIR)", "$(PROJECT_DIR)/Frameworks/boost", "$(PROJECT_DIR)/Frameworks/testnet", - "$(PROJECT_DIR)/Frameworks/mainnet", + "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14432/lib", ); MARKETING_VERSION = 7.3; OTHER_LDFLAGS = ( "$(inherited)", + "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14432/lib/libsqlite.a", "-ObjC", "-l\"c++\"", "-l\"z\"", @@ -5452,7 +5473,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = EAEED72AAED404575AB9A6E5 /* Pods-BeamWalletMasterNet.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIconMaster; CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; CLANG_ENABLE_MODULES = YES; @@ -5470,14 +5490,14 @@ "$(PROJECT_DIR)/Frameworks/boost", ); HEADER_SEARCH_PATHS = ( - "\"$(SRCROOT)/../include\"", - "\"$(SRCROOT)/../include/3rdparty\"", - "\"$(SRCROOT)/../include/3rdparty/libuv/include\"", - "\"$(SRCROOT)/../include/core\"", - "\"$(SRCROOT)/../include/utility\"", - "\"$(SRCROOT)/../include/wallet\"", - "\"$(SRCROOT)/../include/3rdparty/sqlite\"", - "\"$(SRCROOT)/../include/keykeeper\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty/libuv/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/core\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/utility\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/wallet\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty/sqlite\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/keykeeper\"", ); INFOPLIST_FILE = "$(SRCROOT)/Resources/InfoMasternet.plist"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; @@ -5493,11 +5513,12 @@ "$(PROJECT_DIR)", "$(PROJECT_DIR)/Frameworks/boost", "$(PROJECT_DIR)/Frameworks/testnet", - "$(PROJECT_DIR)/Frameworks/mainnet", + "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14432/lib", ); MARKETING_VERSION = 7.3; OTHER_LDFLAGS = ( "$(inherited)", + "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14432/lib/libsqlite.a", "-ObjC", "-l\"c++\"", "-l\"z\"", diff --git a/BeamWallet.xcodeproj/xcshareddata/xcschemes/BeamWallet.xcscheme b/BeamWallet.xcodeproj/xcshareddata/xcschemes/BeamWallet.xcscheme index 0f1e58c2..56f40e83 100644 --- a/BeamWallet.xcodeproj/xcshareddata/xcschemes/BeamWallet.xcscheme +++ b/BeamWallet.xcodeproj/xcshareddata/xcschemes/BeamWallet.xcscheme @@ -1,6 +1,6 @@ Bool { CrashEye.add(delegate: self) - + if #available(iOS 15.0, *) { UITableView.appearance().sectionHeaderTopPadding = CGFloat(0) } - + if #available(iOS 13.0, *) { let SVGCoder = SDImageSVGCoder.shared SDImageCodersManager.shared.addCoder(SVGCoder) } - + UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplication.backgroundFetchIntervalMinimum) - + UIApplication.shared.isIdleTimerDisabled = true - + Localizable.shared.reset() Settings.sharedManager() - + KeyboardListener.shared.start() - + NotificationManager.sharedManager.requestPermissions() - + // if Settings.sharedManager().target != Mainnet { // CrowdinManager.updateLocalizations() // } - + AppModel.sharedManager().checkRecoveryWallet() AppModel.sharedManager().addDelegate(self) Settings.sharedManager().addDelegate(self) let added = AppModel.sharedManager().isWalletAlreadyAdded() - - let rootController = BaseNavigationController.navigationController(rootViewController: added ? EnterWalletPasswordViewController() : WellcomeViewController()) - + + // DB file present but integrity marker missing implies a crash between + // DB init and onWalledOpened — fall back to onboarding with a recovery prompt. + let needsRecovery = added && !OnboardManager.shared.isWalletInitializedFlag() + + let rootViewController: UIViewController = (added && !needsRecovery) + ? EnterWalletPasswordViewController() + : WellcomeViewController() + let rootController = BaseNavigationController.navigationController(rootViewController: rootViewController) + self.window = UIWindow(frame: UIScreen.main.bounds) self.window?.backgroundColor = UIColor.main.navy self.window?.rootViewController = rootController self.window?.makeKeyAndVisible() + + if needsRecovery { + DispatchQueue.main.async { + rootController.confirmAlert( + title: Localizable.shared.strings.wallet_recovery_title, + message: Localizable.shared.strings.wallet_recovery_message, + cancelTitle: Localizable.shared.strings.cancel, + confirmTitle: Localizable.shared.strings.reset_and_retry, + cancelHandler: { _ in }, + confirmHandler: { _ in + AppModel.sharedManager().resetWallet(true) + } + ) + } + } if #available(iOS 12.0, *) { let isDark = self.window?.rootViewController?.traitCollection.userInterfaceStyle == .dark diff --git a/BeamWallet/BeamSDK/AppModel.h b/BeamWallet/BeamSDK/AppModel.h index cac5c73f..51c41f08 100644 --- a/BeamWallet/BeamSDK/AppModel.h +++ b/BeamWallet/BeamSDK/AppModel.h @@ -104,6 +104,7 @@ typedef void(^ExportCSVBlock)(NSString * _Nonnull data, NSURL * _Nonnull url); @property (nonatomic,assign) BOOL isUpdating; @property (nonatomic,assign) BOOL isConnecting; @property (nonatomic,assign) BOOL isLoggedin; +// Read from background queues during restore; BOOL writes are word-atomic. @property (nonatomic,assign) BOOL isRestoreFlow; @property (nonatomic,assign) BOOL isNodeChanging; @property (nonatomic,assign) BOOL isOwnNode; @@ -153,6 +154,7 @@ typedef void(^ExportCSVBlock)(NSString * _Nonnull data, NSURL * _Nonnull url); -(BOOL)canOpenWallet:(NSString*_Nonnull)pass; -(void)restore:(NSString*_Nonnull)path; -(void)resetWallet:(BOOL)removeDatabase; +-(void)abortCreateAndReset; -(void)resetOnlyWallet; -(void)restartWallet; -(void)start; diff --git a/BeamWallet/BeamSDK/AppModel.mm b/BeamWallet/BeamSDK/AppModel.mm index 1ee7cd67..537c4d91 100644 --- a/BeamWallet/BeamSDK/AppModel.mm +++ b/BeamWallet/BeamSDK/AppModel.mm @@ -55,6 +55,7 @@ #include "build/core/version.h" #include "utility/bridge.h" +#include "utility/logger.h" #include "utility/string_helpers.h" #include "utility/fsutils.h" @@ -69,7 +70,13 @@ #include "wallet/core/common_utils.h" #include "wallet/core/common.h" #include "common.h" +#include "sqlite3.h" #include +#include + +// beam::Rules::s_pInstance is declared thread_local in the header but its +// out-of-class definition is missing from the provided static libraries. +thread_local const beam::Rules* beam::Rules::s_pInstance = nullptr; #import #import "BeamWallet-Swift.h" @@ -206,7 +213,9 @@ -(void)didGenerateVauchers:(ShieldedVoucherList) v { -(id)init{ self = [super init]; - + + [self loadRules]; + [self createLogger]; wallet::g_AssetsEnabled = true; @@ -272,16 +281,44 @@ -(id)init{ [self checkInternetConnection]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didBecomeActiveNotification) name:UIApplicationDidBecomeActiveNotification object:nil]; - - [self loadRules]; - + return self; } +// Raw storage so we can publish s_pInstance before Rules::Rules() runs — +// the constructor calls Rules::get() internally and would throw otherwise. +static unsigned char g_rulesStorage[sizeof(beam::Rules)] __attribute__((aligned(__alignof__(beam::Rules)))); + +// Non-thread-local handle WalletModel.mm uses to install s_pInstance on worker threads. +beam::Rules* g_pConfiguredRules = nullptr; + +static beam::Rules& getConfiguredRules() { + static std::once_flag s_flag; + std::call_once(s_flag, []() { + beam::Rules* pRules = reinterpret_cast(g_rulesStorage); + beam::Rules::s_pInstance = pRules; + new(pRules) beam::Rules(); + + NSString *bundleID = [[NSBundle mainBundle] bundleIdentifier]; + if ([bundleID containsString:@"Masternet"] || [bundleID containsString:@"masternet"]) { + pRules->m_Network = beam::Rules::Network::masternet; + } else if ([bundleID containsString:@"Mainnet"] || [bundleID containsString:@"mainnet"]) { + pRules->m_Network = beam::Rules::Network::mainnet; + } else { + pRules->m_Network = beam::Rules::Network::testnet; + } + pRules->SetNetworkParams(); + pRules->UpdateChecksum(); + g_pConfiguredRules = pRules; + }); + return *reinterpret_cast(g_rulesStorage); +} + -(void)loadRules{ - Rules::get().UpdateChecksum(); - LOG_INFO() << "Rules signature: " << Rules::get().get_SignatureStr(); + beam::Rules& rules = getConfiguredRules(); + beam::Rules::s_pInstance = &rules; // Install on this thread (s_pInstance is thread_local) + BEAM_LOG_INFO() << "Rules signature: " << rules.get_SignatureStr(); } +(NSString*_Nonnull)chooseRandomNodeWithoutNodes:(NSArray*)nodes { @@ -318,6 +355,9 @@ +(NSString*_Nonnull)chooseRandomNodeWithoutNodes:(NSArray*)nodes { } +(NSString*_Nonnull)chooseRandomNode { + // Settings.init calls this class method before AppModel.init runs, so the + // BEAM library hasn't been initialized yet — install Rules first. + beam::Rules::s_pInstance = &getConfiguredRules(); auto peers = getDefaultPeers(); NSMutableArray *array = [NSMutableArray array]; @@ -524,13 +564,17 @@ -(BOOL)isWalletAlreadyAdded { } -(BOOL)openWallet:(NSString*)pass { - if (walletReactor == nil) { - walletReactor = Reactor::create(); - io::Reactor::Scope s(*walletReactor); // do it in main thread - } - + // BEAM 7.5.14432+ rejects WalletDB::open with SQLITE_MISUSE when the + // current reactor has been scoped in/out previously (e.g. the one created + // in AppModel.init). Drop and recreate so open runs against a fresh one. + walletReactor.reset(); + walletReactor = Reactor::create(); + // Scope must outlive WalletDB::open so the reactor is registered as current + // when the DB sets up its internal I/O callbacks (required in 7.5.14432+). + io::Reactor::Scope s(*walletReactor); + string dbFilePath = Settings.sharedManager.walletStoragePath.string; - + if (!walletDb) { try{ walletDb = WalletDB::open(dbFilePath, pass.string); @@ -552,17 +596,19 @@ -(BOOL)openWallet:(NSString*)pass { } -(BOOL)canOpenWallet:(NSString*)pass { - if (walletReactor == nil) { - walletReactor = Reactor::create(); - io::Reactor::Scope s(*walletReactor); // do it in main thread - } - + // See openWallet: BEAM 7.5.14432+ requires a fresh reactor here. + walletReactor.reset(); + walletReactor = Reactor::create(); + // Scope must outlive WalletDB::open so the reactor is registered as current + // when the DB sets up its internal I/O callbacks (required in 7.5.14432+). + io::Reactor::Scope s(*walletReactor); + string dbFilePath = [Settings sharedManager].walletStoragePath.string; - + if (walletDb != nil) { return YES; } - + try{ walletDb = WalletDB::open(dbFilePath, pass.string); } @@ -584,65 +630,98 @@ -(BOOL)isValidPassword:(NSString*_Nonnull)pass { } -(BOOL)createWallet:(NSString*)phrase pass:(NSString*)pass { - if (self.isInternetAvailable == NO) { - return NO; - } - else if (walletDb != nil) + // DB init is purely local — do not gate on reachability. If the device is + // offline the wallet is created locally and sync resumes when reachability + // returns (Reachability already broadcasts onNoInternetConnection). + if (walletDb != nil) { [self onWalledOpened:SecString(pass.string)]; - + return YES; } string dbFilePath = [Settings sharedManager].walletStoragePath.string; - - //already created. restore wallet? - if (WalletDB::isInitialized(dbFilePath)) { - return NO; - } - + //invalid parameters if ((phrase==nil || phrase.length==0) || (pass==nil || pass.length==0)) { return NO; } - + //convert string phrase to mnemonic WordList NSArray *wordsArray = [phrase componentsSeparatedByString:@";"]; - + vector wordList(wordsArray.count); - + for(int i=0; i 0) { + sqlite3_temp_directory = sqlite3_mprintf("%s", [tmpDir UTF8String]); + } + + BEAM_LOG_INFO() << "createWallet preflight" + << " path=" << dbFilePath + << " fileExists=" << ([fm fileExistsAtPath:dbPath] ? 1 : 0) + << " tmpdir=" << ((tmpDir.length > 0) ? [tmpDir UTF8String] : "(null)") + << " rules=" << (beam::Rules::s_pInstance ? 1 : 0) + << " seedSize=" << seed.size() + << " sqliteVersion=" << sqlite3_libversion() + << " sqliteHasCodec=" << (sqlite3_compileoption_used("SQLITE_HAS_CODEC") ? 1 : 0); + + // BEAM 7.5.14432: WalletDB::init must run under a current Reactor::Scope + // so DB I/O callbacks bind to that reactor. Recreate, since the reactor + // from AppModel.init has already been scoped in/out once. + walletReactor.reset(); + walletReactor = Reactor::create(); + io::Reactor::Scope s(*walletReactor); + + try { + walletDb = WalletDB::init(dbFilePath, SecString(pass.string), seed.hash()); + } + catch (const std::exception& e) { + BEAM_LOG_ERROR() << "WalletDB::init failed: " << e.what(); + walletDb.reset(); + return NO; + } + if (!walletDb) { return NO; } - - walletReactor = Reactor::create(); - io::Reactor::Scope s(*walletReactor); // do it in main thread - - // generate default address -// WalletAddress address; -// walletDb->createAddress(address); -// address.m_label = "Default"; -// address.setExpirationStatus(beam::wallet::WalletAddress::ExpirationStatus::Never); -// walletDb->saveAddress(address); - + [self onWalledOpened:SecString(pass.string)]; - + return YES; } +-(void)abortCreateAndReset { + self.isRestoreFlow = NO; + [self resetWallet:YES]; +} + -(void)resetOnlyWallet { isStarted = NO; isRunning = NO; @@ -654,7 +733,7 @@ -(void)resetOnlyWallet { } -(void)restartWallet { - LOG_INFO() << "restart wallet"; + BEAM_LOG_INFO() << "restart wallet"; isStarted = NO; isRunning = NO; @@ -681,40 +760,32 @@ -(void)resetWallet:(BOOL)removeDatabase { if (self.isRestoreFlow) { self.isRestoreFlow = NO; } - + [daoManager destroy]; daoManager = nil; - + isStarted = NO; isRunning = NO; - + wallet.reset(); - + walletDb.reset(); - -// if (wallet!=nil){ -// wallet.reset(); -// } -// -// if (walletReactor!=nil){ -// walletReactor.reset(); -// } -// if (walletDb!=nil){ -// walletDb.reset(); -// } -// -// walletReactor = nil; -// wallet = nil; -// walletDb = nil; - + if(removeDatabase) { - NSString *recoverPath = [[Settings sharedManager].walletStoragePath stringByAppendingString:@"_recover"]; - - fsutils::remove([Settings sharedManager].walletStoragePath.string); + NSString *dbPath = [Settings sharedManager].walletStoragePath; + + NSFileManager *fm = [NSFileManager defaultManager]; + [fm removeItemAtPath:[dbPath stringByAppendingString:@"-wal"] error:nil]; + [fm removeItemAtPath:[dbPath stringByAppendingString:@"-shm"] error:nil]; + [fm removeItemAtPath:[dbPath stringByAppendingString:@"-journal"] error:nil]; - [[NSFileManager defaultManager] removeItemAtPath:[Settings sharedManager].walletStoragePath error:nil]; - [[NSFileManager defaultManager] removeItemAtPath:[Settings sharedManager].localNodeStorage error:nil]; + fsutils::remove(dbPath.string); + [fm removeItemAtPath:dbPath error:nil]; + + [fm removeItemAtPath:[Settings sharedManager].localNodeStorage error:nil]; [[Settings sharedManager] resetDataBase]; + + [[OnboardManager shared] clearWalletInitialized]; } _walletStatus = [BMWalletStatus new]; @@ -825,7 +896,11 @@ -(BOOL)isWalletRunning { -(void)onWalledOpened:(const SecString&) pass { passwordHash = pass.hash(); - + + // Marker that distinguishes a healthy wallet from a DB file orphaned by + // a crash mid-create. AppDelegate checks this on launch. + [[OnboardManager shared] markWalletInitialized]; + if(!self.isRestoreFlow) { [self start]; @@ -838,10 +913,18 @@ -(void)onWalledOpened:(const SecString&) pass { -(void)restore:(NSString*_Nonnull)path{ if ([[NSFileManager defaultManager] fileExistsAtPath:path]) { string recoveryPath = path.string; - + try{ + // Reactor must be current while WalletModel binds to walletDb, + // otherwise the worker thread inherits no current reactor and + // sqlite calls fail with SQLITE_MISUSE. + if (walletReactor == nil) { + walletReactor = Reactor::create(); + } + io::Reactor::Scope reactorScope(*walletReactor); + string nodeAddrStr = [Settings sharedManager].nodeAddress.string; - + auto pushTxCreator = std::make_shared([=]() { return walletDb; }); auto additionalTxCreators = std::make_shared>(); @@ -859,12 +942,21 @@ -(void)restore:(NSString*_Nonnull)path{ } wallet->start(activeNotifications, isSecondCurrencyEnabled, additionalTxCreators); - - daoManager = [[DAOManager alloc] initWithWallet:wallet]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - self->wallet->getAsync()->importRecovery(recoveryPath); + __weak typeof(self) weakSelf = self; + wallet->getAsync()->makeIWTCall([]() -> boost::any { + if (!beam::Rules::s_pInstance && g_pConfiguredRules) { + beam::Rules::s_pInstance = g_pConfiguredRules; + } + return boost::any{}; + }, [weakSelf, recoveryPath](const boost::any&) { + __strong typeof(weakSelf) strongSelf = weakSelf; + if (strongSelf && strongSelf->wallet) { + strongSelf->wallet->getAsync()->importRecovery(recoveryPath); + } }); + + daoManager = [[DAOManager alloc] initWithWallet:wallet]; } catch (const std::exception& e) { NSLog(@"ImportRecovery failed %s",e.what()); @@ -907,35 +999,53 @@ bool OnProgress(uint64_t done, uint64_t total) { -(void)start { if (isStarted == NO && walletDb != nil) { - string nodeAddrStr = [Settings sharedManager].nodeAddress.string; - - auto pushTxCreator = std::make_shared([=]() { return walletDb; }); - auto additionalTxCreators = std::make_shared>(); - additionalTxCreators->emplace(TxType::PushTransaction, pushTxCreator); - - wallet = make_shared(walletDb, nodeAddrStr, walletReactor); - - NSLog(@"NODE ADDRESS: %@", [Settings sharedManager].nodeAddress); + // Reactor must be current while WalletModel constructs and wallet->start() + // runs, so DB callbacks bind to the same reactor walletDb was opened under. + if (walletReactor == nil) { + walletReactor = Reactor::create(); + } + io::Reactor::Scope reactorScope(*walletReactor); - wallet->getAsync()->setNodeAddress(nodeAddrStr); - - wallet->getAsync()->enableBodyRequests([Settings sharedManager].isNodeProtocolEnabled); - - wallet->start(activeNotifications, isSecondCurrencyEnabled, additionalTxCreators); - - isRunning = YES; - isStarted = YES; - - daoManager = [[DAOManager alloc] initWithWallet:wallet]; + try { + string nodeAddrStr = [Settings sharedManager].nodeAddress.string; + + auto pushTxCreator = std::make_shared([=]() { return walletDb; }); + auto additionalTxCreators = std::make_shared>(); + additionalTxCreators->emplace(TxType::PushTransaction, pushTxCreator); + + wallet = make_shared(walletDb, nodeAddrStr, walletReactor); + + NSLog(@"NODE ADDRESS: %@", [Settings sharedManager].nodeAddress); + + wallet->getAsync()->setNodeAddress(nodeAddrStr); + wallet->getAsync()->enableBodyRequests([Settings sharedManager].isNodeProtocolEnabled); + wallet->start(activeNotifications, isSecondCurrencyEnabled, additionalTxCreators); + + // Install Rules::s_pInstance on the reactor's worker thread as the + // first queued op so DB callbacks find a valid Rules pointer. + wallet->getAsync()->makeIWTCall([]() -> boost::any { + if (!beam::Rules::s_pInstance && g_pConfiguredRules) { + beam::Rules::s_pInstance = g_pConfiguredRules; + } + return boost::any{}; + }, [](const boost::any&){}); + + isRunning = YES; + isStarted = YES; + + daoManager = [[DAOManager alloc] initWithWallet:wallet]; + } + catch (const std::exception& e) { + BEAM_LOG_ERROR() << "AppModel.start failed: " << e.what(); + wallet.reset(); + isRunning = NO; + isStarted = NO; + } } else if(self.isConnected && isStarted && walletDb != nil && self.isInternetAvailable) { - NSArray *delegates = [AppModel sharedManager].delegates.allObjects; - for(id delegate in delegates) - { - if ([delegate respondsToSelector:@selector(onSyncProgressUpdated: total:)]) { - [delegate onSyncProgressUpdated:0 total:0]; - } - } + // No-op: previously broadcast onSyncProgressUpdated:0 total:0, which + // progress UIs interpret as "starting over" and reset their bars. + // Callers that need a fresh status should use getWalletStatus. } else if(wallet != nil) { @@ -1160,7 +1270,7 @@ -(void)generateOfflineAddress:(NSString*_Nonnull)walletId assetId:(int)assetId a NSString *sToken = [NSString stringWithUTF8String:token.c_str()]; block(sToken); }; - wallet->getAsync()->generateToken(TokenType::Offline, bAmount, bAsset, std::string(BEAM_LIB_VERSION), func); + wallet->getAsync()->generateToken(TokenType::Offline, bAmount, bAsset, std::string(BEAM_LIB_VERSION), false, func); } // uint32_t bAsset = (uint32_t)assetId; @@ -1211,7 +1321,7 @@ -(void)generateMaxPrivacyAddress:(NSString*_Nonnull)walletId assetId:(int)assetI NSString *sToken = [NSString stringWithUTF8String:token.c_str()]; block(sToken); }; - wallet->getAsync()->generateToken(TokenType::MaxPrivacy, bAmount, bAsset, std::string(BEAM_LIB_VERSION), func); + wallet->getAsync()->generateToken(TokenType::MaxPrivacy, bAmount, bAsset, std::string(BEAM_LIB_VERSION), false, func); } // uint64_t bAmount = round(amount * Rules::Coin); // uint32_t bAsset = (uint32_t)assetId; @@ -1586,7 +1696,7 @@ -(void)generateNewWalletAddressWithBlockAndAmount:(int)assetId amount:(double)am self->wallet->getAsync()->getAddresses(true); }; - wallet->getAsync()->generateToken(TokenType::RegularNewStyle, bAmount, bAsset, std::string(BEAM_LIB_VERSION), func); + wallet->getAsync()->generateToken(TokenType::RegularNewStyle, bAmount, bAsset, std::string(BEAM_LIB_VERSION), false, func); } } @@ -1615,7 +1725,7 @@ -(void)generateNewWalletAddressWithBlock:(NewAddressGeneratedBlock _Nonnull )blo self.generatedNewAddressBlock(address, nil); }; - wallet->getAsync()->generateToken(TokenType::RegularNewStyle, amount, asset, std::string(BEAM_LIB_VERSION), func); + wallet->getAsync()->generateToken(TokenType::RegularNewStyle, amount, asset, std::string(BEAM_LIB_VERSION), false, func); // wallet->getAsync()->generateNewAddress(); } } @@ -1930,16 +2040,16 @@ - (NSUInteger)indexOfDelegate:(id)delegate { -(void)addDelegate:(id_Nullable) delegate { [_delegates compact]; - + void * objPtr = (__bridge void *)delegate; [_delegates addPointer:objPtr]; } -(void)removeDelegate:(id_Nullable) delegate { [_delegates compact]; - + void * objPtr = (__bridge void *)delegate; - + for(NSUInteger i = 0; i < _delegates.count; i++) { void * ptr = [_delegates pointerAtIndex:i]; if (ptr == objPtr) { @@ -2426,7 +2536,7 @@ -(void)createLogger { [self clearLogs]; - static auto logger = beam::Logger::create(LOG_LEVEL_DEBUG,LOG_LEVEL_DEBUG,LOG_LEVEL_DEBUG,@"beam_".string, dataPath.string); + static auto logger = beam::Logger::create(BEAM_LOG_LEVEL_DEBUG,BEAM_LOG_LEVEL_DEBUG,BEAM_LOG_LEVEL_DEBUG,@"beam_".string, dataPath.string); auto path = logger->get_current_file_name(); pathLog = [NSString stringWithUTF8String:path.c_str()]; @@ -2442,12 +2552,12 @@ -(void)createLogger { NSString *appVersion = [NSString stringWithFormat:@"APP VERSION: %@ BUILD %@",version, build]; NSString *langCode = [NSString stringWithFormat:@"LANGUAGE CODE: %@",[[NSLocale currentLocale] languageCode]]; - LOG_INFO() << "Application has started"; - LOG_INFO() << ios.string; - LOG_INFO() << model.string; - LOG_INFO() << modelID.string; - LOG_INFO() << appVersion.string; - LOG_INFO() << langCode.string; + BEAM_LOG_INFO() << "Application has started"; + BEAM_LOG_INFO() << ios.string; + BEAM_LOG_INFO() << model.string; + BEAM_LOG_INFO() << modelID.string; + BEAM_LOG_INFO() << appVersion.string; + BEAM_LOG_INFO() << langCode.string; } @@ -2885,7 +2995,7 @@ bool IsValidTimeStamp(Timestamp currentBlockTime_s) if (currentTime_s > currentBlockTime_s) { - LOG_INFO() << "It seems that node is not up to date"; + BEAM_LOG_INFO() << "It seems that node is not up to date"; return false; } return true; diff --git a/BeamWallet/BeamSDK/DAO/AppsApiUI.mm b/BeamWallet/BeamSDK/DAO/AppsApiUI.mm index 87e79d51..bc5df7e0 100644 --- a/BeamWallet/BeamSDK/DAO/AppsApiUI.mm +++ b/BeamWallet/BeamSDK/DAO/AppsApiUI.mm @@ -37,37 +37,37 @@ void AppsApiUI::sendApproved(const std::string& request) { - LOG_INFO() << "Contract send approved: " << getAppName() << ", " << getAppId() << ", " << request; + BEAM_LOG_INFO() << "Contract send approved: " << getAppName() << ", " << getAppId() << ", " << request; AnyThread_callWalletApiDirectly(request); } void AppsApiUI::sendRejected(const std::string& request) { - LOG_INFO() << "Contract send rejected: " << getAppName() << ", " << getAppId() << ", " << request; + BEAM_LOG_INFO() << "Contract send rejected: " << getAppName() << ", " << getAppId() << ", " << request; AnyThread_sendApiError(request, beam::wallet::ApiError::UserRejected, std::string()); } void AppsApiUI::contractInfoApproved(const std::string& request) { - LOG_INFO() << "Contract tx approved: " << getAppName() << ", " << getAppId() << ", " << request; + BEAM_LOG_INFO() << "Contract tx approved: " << getAppName() << ", " << getAppId() << ", " << request; AnyThread_callWalletApiDirectly(request); } void AppsApiUI::contractInfoRejected(const std::string& request) { - LOG_INFO() << "Contract tx rejected: " << getAppName() << ", " << getAppId() << ", " << request; + BEAM_LOG_INFO() << "Contract tx rejected: " << getAppName() << ", " << getAppId() << ", " << request; AnyThread_sendApiError(request, beam::wallet::ApiError::UserRejected, std::string()); } void AppsApiUI::callWalletApi(const std::string& request) { - LOG_INFO() << "Call Wallet Api: " << getAppName() << ", " << getAppId() << ", " << request; + BEAM_LOG_INFO() << "Call Wallet Api: " << getAppName() << ", " << getAppId() << ", " << request; AnyThread_callWalletApiChecked(request); } void AppsApiUI::AnyThread_sendApiResponse(std::string&& result) { - LOG_INFO() << "Send Api Response: " << getAppName() << ", " << getAppId() << ", " << result; + BEAM_LOG_INFO() << "Send Api Response: " << getAppName() << ", " << getAppId() << ", " << result; NSString *json = [NSString stringWithUTF8String:result.c_str()]; [[AppModel sharedManager] sendDAOApiResult:json]; } @@ -77,7 +77,7 @@ // auto str = result.dump(); // NSString *json = [NSString stringWithUTF8String:str.c_str()]; // -// LOG_INFO() << "Send Api Response: " << getAppName() << ", " << getAppId() << ", " << json; +// BEAM_LOG_INFO() << "Send Api Response: " << getAppName() << ", " << getAppId() << ", " << json; // // [[AppModel sharedManager] sendDAOApiResult:json]; //} diff --git a/BeamWallet/BeamSDK/DAO/WebAPICreator.mm b/BeamWallet/BeamSDK/DAO/WebAPICreator.mm index e289966f..ffe46daf 100644 --- a/BeamWallet/BeamSDK/DAO/WebAPICreator.mm +++ b/BeamWallet/BeamSDK/DAO/WebAPICreator.mm @@ -12,6 +12,7 @@ #include "wallet/api/i_wallet_api.h" #include "wallet/core/common.h" #include "bvm/invoke_data.h" +#include "utility/logger.h" #include "Public.h" @@ -49,11 +50,11 @@ if (guard) { _api = std::move(api); - LOG_INFO() << "API created: " << version << ", " << appName << ", " << appid; + BEAM_LOG_INFO() << "API created: " << version << ", " << appName << ", " << appid; } else { - LOG_INFO() << "WebAPICreator destroyed before api created:" << version << ", " << appName << ", " << appid; + BEAM_LOG_INFO() << "WebAPICreator destroyed before api created:" << version << ", " << appName << ", " << appid; } }); } diff --git a/BeamWallet/BeamSDK/WalletModel.mm b/BeamWallet/BeamSDK/WalletModel.mm index 5dc832b3..9b7fcb21 100644 --- a/BeamWallet/BeamSDK/WalletModel.mm +++ b/BeamWallet/BeamSDK/WalletModel.mm @@ -37,6 +37,16 @@ using namespace beam::wallet; using namespace std; +// Defined in AppModel.mm — the fully-configured Rules singleton. +extern beam::Rules* g_pConfiguredRules; + +// Install s_pInstance on whichever thread calls this first. +// s_pInstance is thread_local; each new thread starts with nullptr. +static void ensureRulesOnCurrentThread() { + if (!beam::Rules::s_pInstance && g_pConfiguredRules) { + beam::Rules::s_pInstance = g_pConfiguredRules; + } +} NSString *const AppErrorDomain = @"beam.mw"; NSTimer *timer; @@ -65,6 +75,7 @@ void WalletModel::onStatus(const WalletStatus& status) { + ensureRulesOnCurrentThread(); NSLog(@"onStatus"); auto beamStatus = status.GetBeamStatus(); @@ -508,6 +519,7 @@ void WalletModel::onSyncProgressUpdated(int done, int total) { + ensureRulesOnCurrentThread(); NSLog(@"onSyncProgressUpdated %d/%d",done, total); [AppModel sharedManager].isUpdating = (done != total); @@ -779,6 +791,7 @@ void WalletModel::onNodeConnectionChanged(bool isNodeConnected) { + ensureRulesOnCurrentThread(); NSLog(@"onNodeConnectionChanged %d",isNodeConnected); if (isNodeConnected) { @@ -879,6 +892,7 @@ void WalletModel::FailedToStartWallet() { + ensureRulesOnCurrentThread(); if([AppModel sharedManager].isLoggedin) { dispatch_async(dispatch_get_main_queue(), ^{ [[AppModel sharedManager] restartWallet]; diff --git a/BeamWallet/Extensions/ViewController.swift b/BeamWallet/Extensions/ViewController.swift index 639b8ca2..451a5287 100644 --- a/BeamWallet/Extensions/ViewController.swift +++ b/BeamWallet/Extensions/ViewController.swift @@ -244,7 +244,7 @@ extension UIViewController { func hideKeyboardWhenTappedAround() { let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.hideKeyboard)) - tapGesture.cancelsTouchesInView = true + tapGesture.cancelsTouchesInView = false view.addGestureRecognizer(tapGesture) } diff --git a/BeamWallet/Manager/BiometricAuthorization.swift b/BeamWallet/Manager/BiometricAuthorization.swift index 9526deef..adfa9987 100644 --- a/BeamWallet/Manager/BiometricAuthorization.swift +++ b/BeamWallet/Manager/BiometricAuthorization.swift @@ -26,28 +26,33 @@ public typealias AuthorizationFailure = (() -> ()) public typealias AuthorizationRetry = (() -> ()) +@objc public enum BiometricFailureReason: Int { + case canceled + case notEnrolled + case lockout + case notAvailable + case authenticationFailed + case other +} + class BiometricAuthorization: NSObject { - + public static let shared = BiometricAuthorization() public var isAuthorizationProccess = false + public private(set) var lastFailureReason: BiometricFailureReason? + /// The LAContext that was just authenticated. Pass this to + /// `KeychainManager.getPassword(context:)` inside the success callback + /// to read the password without triggering a second biometric prompt. + /// Becomes nil on the next authentication attempt. + public private(set) var lastAuthenticatedContext: LAContext? private var mechanism = "" - + public func canAuthenticate() -> Bool { - var isBiometricAuthenticationAvailable = false - var error: NSError? = nil - - if LAContext().canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error) { - isBiometricAuthenticationAvailable = (error == nil) - } - - if error?.code == -8 - { - return true - } - - return isBiometricAuthenticationAvailable + var error: NSError? + let canEvaluate = LAContext().canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) + return canEvaluate && error == nil } - + public func faceIDAvailable() -> Bool { if #available(iOS 11.0, *) { let context = LAContext() @@ -55,36 +60,47 @@ class BiometricAuthorization: NSObject { } return false } - + public func touchIDAvailable() -> Bool { - + let context = LAContext() var error: NSError? - + let canEvaluate = context.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error) if #available(iOS 11.0, *) { return canEvaluate && context.biometryType == .touchID } return canEvaluate } - + + public func failureMessage(for reason: BiometricFailureReason) -> String { + let strings = Localizable.shared.strings + switch reason { + case .lockout: + return strings.auth_bio_locked.replacingOccurrences(of: "(Mechanism)", with: mechanism) + case .notEnrolled: + return strings.auth_bio_not_enrolled.replacingOccurrences(of: "(Mechanism)", with: mechanism) + case .notAvailable: + return strings.auth_bio_unavailable.replacingOccurrences(of: "(Mechanism)", with: mechanism) + case .authenticationFailed, .other: + return strings.auth_bio_failed.replacingOccurrences(of: "(Mechanism)", with: mechanism) + case .canceled: + return "" + } + } + public func authenticateWithBioMetrics(success successBlock: @escaping AuthorizationSuccess, failure failureBlock: @escaping AuthorizationFailure, retry retryBlock: @escaping AuthorizationRetry, reasonText:String? = nil) { - + isAuthorizationProccess = true - + lastFailureReason = nil + lastAuthenticatedContext = nil + if mechanism.isEmpty { mechanism = BiometricAuthorization.shared.faceIDAvailable() ? Localizable.shared.strings.face_id : Localizable.shared.strings.touch_id } - var reason = "" - - if let value = reasonText { - reason = value - } - else{ - reason = faceIDAvailable() ? Localizable.shared.strings.auth_face_confirm : Localizable.shared.strings.auth_touch_confirm - } - + let reason = reasonText ?? (faceIDAvailable() ? Localizable.shared.strings.auth_face_confirm : Localizable.shared.strings.auth_touch_confirm) + let context = LAContext() context.localizedFallbackTitle = "" context.touchIDAuthenticationAllowableReuseDuration = 0 @@ -92,37 +108,37 @@ class BiometricAuthorization: NSObject { context.evaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, localizedReason: reason) { (success, error) in DispatchQueue.main.async { if success { + self.lastFailureReason = nil + self.lastAuthenticatedContext = context successBlock() + } else { + self.lastFailureReason = Self.classify(error) + self.lastAuthenticatedContext = nil + failureBlock() } - else { - if error != nil && (error as NSError?)?.code == -8 - { - let context : LAContext = LAContext(); - - let reason:String = Localizable.shared.strings.auth_bio_failed.replacingOccurrences(of: "(Mechanism)", with: self.mechanism) - - context.evaluatePolicy(LAPolicy.deviceOwnerAuthentication, - localizedReason: reason, - reply: { (success, error) in - - DispatchQueue.main.async { - if (success) { - retryBlock() - } - else{ - failureBlock() - } - - } - }) - } - else{ - failureBlock() - } - } - self.isAuthorizationProccess = false } } } + + private static func classify(_ error: Error?) -> BiometricFailureReason { + guard let nsError = error as NSError? else { return .other } + switch nsError.code { + case LAError.userCancel.rawValue, + LAError.systemCancel.rawValue, + LAError.appCancel.rawValue: + return .canceled + case LAError.biometryNotEnrolled.rawValue: + return .notEnrolled + case LAError.biometryLockout.rawValue: + return .lockout + case LAError.biometryNotAvailable.rawValue, + LAError.passcodeNotSet.rawValue: + return .notAvailable + case LAError.authenticationFailed.rawValue: + return .authenticationFailed + default: + return .other + } + } } diff --git a/BeamWallet/Manager/KeychainManager.swift b/BeamWallet/Manager/KeychainManager.swift index 0be0ef67..49fde338 100644 --- a/BeamWallet/Manager/KeychainManager.swift +++ b/BeamWallet/Manager/KeychainManager.swift @@ -18,6 +18,7 @@ // import Foundation +import LocalAuthentication struct Credentials { var password: String @@ -32,87 +33,121 @@ enum KeychainError: Error { class KeychainManager { private static let passKey = "wallet" private static let seedKey = "seed" - private static let readLock = NSLock() - - public static func addSeed(seed:String) -> Bool { - _ = delete(seedKey) - - let password = seed.data(using: String.Encoding.utf8)! - let query: [String: Any] = [kSecClass as String: kSecClassGenericPassword, - kSecValueData as String: password, - kSecAttrAccount as String : seedKey] - - let status = SecItemAdd(query as CFDictionary, nil) - - return status == errSecSuccess + private static let lock = NSLock() + + public static func addSeed(seed: String) -> Bool { + return write(key: seedKey, value: seed, requireBiometry: false) } - - public static func addPassword(password:String) -> Bool { - _ = delete(passKey) - - let password = password.data(using: String.Encoding.utf8)! - let query: [String: Any] = [kSecClass as String: kSecClassGenericPassword, - kSecValueData as String: password, - kSecAttrAccount as String : passKey] - - let status = SecItemAdd(query as CFDictionary, nil) - - return status == errSecSuccess + + /// Stores the wallet password in the keychain when biometric unlock is on, + /// guarded by a `.biometryCurrentSet` access-control so reading the entry + /// requires fresh biometric authentication. When the toggle is off, any + /// existing entry is removed so the toggle is the single source of truth. + public static func addPassword(password: String) -> Bool { + if !Settings.sharedManager().isEnableBiometric { + _ = delete(passKey) + return true + } + return write(key: passKey, value: password, requireBiometry: true) } - + public static func getPassword() -> String? { - if let data = getData(passKey) { - - if let currentString = String(data: data, encoding: .utf8) { - return currentString - } - } - - return nil + return getPassword(context: nil) } - + + /// Reads the password. If `context` is supplied and already authenticated, + /// the OS skips the biometric prompt; otherwise SecItemCopyMatching shows + /// its own prompt because of the `.biometryCurrentSet` ACL on the entry. + public static func getPassword(context: LAContext?) -> String? { + guard let data = getData(passKey, context: context) else { return nil } + return String(data: data, encoding: .utf8) + } + public static func getSeed() -> String? { - if let data = getData(seedKey) { - - if let currentString = String(data: data, encoding: .utf8) { - return currentString + guard let data = getData(seedKey, context: nil) else { return nil } + return String(data: data, encoding: .utf8) + } + + @discardableResult + public static func deletePassword() -> Bool { + return delete(passKey) + } + + @discardableResult + public static func deleteSeed() -> Bool { + return delete(seedKey) + } + + // MARK: - Private + + private static func write(key: String, value: String, requireBiometry: Bool) -> Bool { + lock.lock() + defer { lock.unlock() } + + _ = deleteLocked(key) + + guard let data = value.data(using: .utf8) else { return false } + + var query: [String: Any] = [ + kSecClass as String: kSecClassGenericPassword, + kSecAttrAccount as String: key, + kSecValueData as String: data, + ] + + if requireBiometry { + guard let access = SecAccessControlCreateWithFlags( + nil, + kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly, + .biometryCurrentSet, + nil) else { + // Refuse to store a password unprotected on a device that can't + // produce a biometry ACL (no biometry / no passcode). + return false } + query[kSecAttrAccessControl as String] = access + } else { + query[kSecAttrAccessible as String] = kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly } - - return nil + + let status = SecItemAdd(query as CFDictionary, nil) + return status == errSecSuccess } - + + @discardableResult private static func delete(_ key: String) -> Bool { + lock.lock() + defer { lock.unlock() } + return deleteLocked(key) + } + + private static func deleteLocked(_ key: String) -> Bool { let query: [String: Any] = [ kSecClass as String: kSecClassGenericPassword, - kSecAttrAccount as String : key + kSecAttrAccount as String: key, ] - - let lastResultCode = SecItemDelete(query as CFDictionary) - - return lastResultCode == noErr + let status = SecItemDelete(query as CFDictionary) + return status == errSecSuccess || status == errSecItemNotFound } - - private static func getData(_ key: String) -> Data? { - readLock.lock() - defer { readLock.unlock() } - - let query: [String: Any] = [ + + private static func getData(_ key: String, context: LAContext?) -> Data? { + lock.lock() + defer { lock.unlock() } + + var query: [String: Any] = [ kSecClass as String: kSecClassGenericPassword, - kSecAttrAccount as String : key, - kSecReturnData as String : kCFBooleanTrue as Any, - kSecMatchLimit as String : kSecMatchLimitOne + kSecAttrAccount as String: key, + kSecReturnData as String: kCFBooleanTrue as Any, + kSecMatchLimit as String: kSecMatchLimitOne, ] - - + if let context = context { + query[kSecUseAuthenticationContext as String] = context + } + var result: AnyObject? - - let lastResultCode = withUnsafeMutablePointer(to: &result) { + let status = withUnsafeMutablePointer(to: &result) { SecItemCopyMatching(query as CFDictionary, UnsafeMutablePointer($0)) } - - if lastResultCode == noErr { return result as? Data } - - return nil + guard status == errSecSuccess else { return nil } + return result as? Data } } diff --git a/BeamWallet/Manager/OnboardManager.swift b/BeamWallet/Manager/OnboardManager.swift index 24215de5..54493375 100644 --- a/BeamWallet/Manager/OnboardManager.swift +++ b/BeamWallet/Manager/OnboardManager.swift @@ -24,8 +24,9 @@ class OnboardManager: NSObject { private let faucetKey = "faucetKey" private let isSkipedSeedKey = "isSkipedSeedKey" - - static var shared = OnboardManager() + private let walletInitializedKey = "walletInitializedKey" + + @objc static var shared = OnboardManager() public var isCloseSecure = false public var isCloseFaucet = false @@ -33,11 +34,28 @@ class OnboardManager: NSObject { public func reset() { isCloseSecure = false isCloseFaucet = false - + UserDefaults.standard.removeObject(forKey: faucetKey) UserDefaults.standard.set(false, forKey: isSkipedSeedKey) + UserDefaults.standard.removeObject(forKey: walletInitializedKey) UserDefaults.standard.synchronize() } + + // MARK: Wallet integrity marker + + // Distinguishes a healthy wallet from a half-built DB file left by a crash + // mid-create; AppDelegate routing branches on this. + @objc public func markWalletInitialized() { + UserDefaults.standard.set(true, forKey: walletInitializedKey) + } + + @objc public func isWalletInitializedFlag() -> Bool { + return UserDefaults.standard.bool(forKey: walletInitializedKey) + } + + @objc public func clearWalletInitialized() { + UserDefaults.standard.removeObject(forKey: walletInitializedKey) + } // MARK: Faucet diff --git a/BeamWallet/Protocols/LocalizableStrings.swift b/BeamWallet/Protocols/LocalizableStrings.swift index 3d9eeba9..40027d6e 100644 --- a/BeamWallet/Protocols/LocalizableStrings.swift +++ b/BeamWallet/Protocols/LocalizableStrings.swift @@ -89,6 +89,9 @@ class LocalizableStrings : NSObject { var error = "error".localized var wallet_not_created = "wallet_not_created".localized var wallet_not_opened = "wallet_not_opened".localized + var wallet_recovery_title = "wallet_recovery_title".localized + var wallet_recovery_message = "wallet_recovery_message".localized + var reset_and_retry = "reset_and_retry".localized var external_link_title = "external_link_title".localized var external_link_text = "external_link_text".localized var open = "open".localized @@ -262,6 +265,9 @@ class LocalizableStrings : NSObject { var auth_face_confirm = "auth_face_confirm".localized var auth_touch_confirm = "auth_touch_confirm".localized var auth_bio_failed = "auth_bio_failed".localized + var auth_bio_locked = "auth_bio_locked".localized + var auth_bio_not_enrolled = "auth_bio_not_enrolled".localized + var auth_bio_unavailable = "auth_bio_unavailable".localized var my_active_addresses = "my_active_addresses".localized var contacts_empty = "contacts_empty".localized var addresses_empty = "addresses_empty".localized diff --git a/BeamWallet/ViewControllers/Login/EnterWalletPasswordViewController.swift b/BeamWallet/ViewControllers/Login/EnterWalletPasswordViewController.swift index 657d8aea..9c6677ca 100644 --- a/BeamWallet/ViewControllers/Login/EnterWalletPasswordViewController.swift +++ b/BeamWallet/ViewControllers/Login/EnterWalletPasswordViewController.swift @@ -118,13 +118,20 @@ class EnterWalletPasswordViewController: BaseWizardViewController { public func biometricAuthorization() { if BiometricAuthorization.shared.canAuthenticate(), Settings.sharedManager().isEnableBiometric { BiometricAuthorization.shared.authenticateWithBioMetrics(success: { - if let password = KeychainManager.getPassword() { + let context = BiometricAuthorization.shared.lastAuthenticatedContext + if let password = KeychainManager.getPassword(context: context) { self.passField.text = password self.onLogin(sender: UIButton()) } - + }, failure: { self.touchIdButton.tintColor = UIColor.white + if let reason = BiometricAuthorization.shared.lastFailureReason, reason != .canceled { + let message = BiometricAuthorization.shared.failureMessage(for: reason) + if !message.isEmpty { + BMToast.show(text: message) + } + } }, retry: { self.touchIdButton.tintColor = UIColor.white }) diff --git a/BeamWallet/ViewControllers/Login/OpenWalletProgressViewController.swift b/BeamWallet/ViewControllers/Login/OpenWalletProgressViewController.swift index 2255572b..5ba72e4e 100644 --- a/BeamWallet/ViewControllers/Login/OpenWalletProgressViewController.swift +++ b/BeamWallet/ViewControllers/Login/OpenWalletProgressViewController.swift @@ -351,6 +351,8 @@ class OpenWalletProgressViewController: BaseViewController { let created = AppModel.sharedManager().createWallet(phrase, pass: password!) if(!created) { + AppModel.sharedManager().abortCreateAndReset() + self.alert(title: Localizable.shared.strings.error, message: Localizable.shared.strings.wallet_not_created) { (_ ) in if AppModel.sharedManager().isInternetAvailable { self.navigationController?.popToRootViewController(animated: true) @@ -370,6 +372,8 @@ class OpenWalletProgressViewController: BaseViewController { let created = AppModel.sharedManager().createWallet(phrase, pass: password!) if(!created) { + AppModel.sharedManager().abortCreateAndReset() + self.alert(title: Localizable.shared.strings.error, message: Localizable.shared.strings.wallet_not_created) { (_ ) in if AppModel.sharedManager().isInternetAvailable { self.navigationController?.popToRootViewController(animated: true) @@ -461,8 +465,12 @@ class OpenWalletProgressViewController: BaseViewController { } @objc private func onTimeOut() { - if Settings.sharedManager().isChangedNode() { - self.openMainPage() + self.openMainPage() + } + + fileprivate func hideErrorIfOnline() { + if AppModel.sharedManager().isInternetAvailable { + errorLabel.isHidden = true } } } @@ -472,23 +480,31 @@ extension OpenWalletProgressViewController : WalletModelDelegate { func onNetwotkStatusChange(_ connected: Bool) { DispatchQueue.main.async { [weak self] in guard let strongSelf = self else { return } - + + if connected { + strongSelf.errorLabel.isHidden = true + } + if !strongSelf.onlyConnect && connected && !AppModel.sharedManager().isRestoreFlow && (strongSelf.phrase != nil && !Settings.sharedManager().isNodeProtocolEnabled){ strongSelf.progressView.progress = 1 - + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { strongSelf.openMainPage() } } } } - + func onNoInternetConnection() { DispatchQueue.main.async { [weak self] in guard let strongSelf = self else { return } - if AppModel.sharedManager().isRestoreFlow && !strongSelf.onlyConnect { + if strongSelf.onlyConnect { + return + } + + if AppModel.sharedManager().isRestoreFlow || strongSelf.isWaitingRestore { strongSelf.errorLabel.isHidden = false strongSelf.errorLabel.text = Localizable.shared.strings.no_internet } @@ -496,12 +512,11 @@ extension OpenWalletProgressViewController : WalletModelDelegate { } func onRecoveryProgressUpdated(_ done: Int32, total: Int32, time: Int32) { - + DispatchQueue.main.async { [weak self] in guard let strongSelf = self else { return } - - - strongSelf.errorLabel.isHidden = true + + strongSelf.hideErrorIfOnline() strongSelf.progressView.progress = Float(Float(done)/Float(total)) let progress_100 = Int32(strongSelf.progressView.progress * 100) @@ -530,25 +545,31 @@ extension OpenWalletProgressViewController : WalletModelDelegate { if done == total || percent >= 99.9 { if !strongSelf.stopRestore { strongSelf.stopRestore = true - strongSelf.isWaitingRestore = false - - let deadlineTime = DispatchTime.now() + .seconds(4) - DispatchQueue.main.asyncAfter(deadline: deadlineTime) { - AppModel.sharedManager().isRestoreFlow = false - RestoreManager.shared.cancelRestore() - - if !AppModel.sharedManager().isInternetAvailable { - strongSelf.alert(title: Localizable.shared.strings.error, message: Localizable.shared.strings.no_internet) { (_ ) in - - AppModel.sharedManager().resetWallet(false) - - strongSelf.navigationController?.setViewControllers( [EnterWalletPasswordViewController()], animated: true) - } - } - else{ - strongSelf.openMainPage() + + AppModel.sharedManager().isRestoreFlow = false + RestoreManager.shared.cancelRestore() + + if !AppModel.sharedManager().isInternetAvailable { + strongSelf.alert(title: Localizable.shared.strings.error, message: Localizable.shared.strings.no_internet) { (_ ) in + + AppModel.sharedManager().resetWallet(false) + + strongSelf.navigationController?.setViewControllers( [EnterWalletPasswordViewController()], animated: true) } } + else { + // Recovery is done; keep the screen up and show node-sync + // progress until it hits 100%. onSyncProgressUpdated will + // call openMainPage() once total == done. + strongSelf.isWaitingRestore = true + strongSelf.progressTitleLabel.text = Localizable.shared.strings.loading_wallet + strongSelf.restotingInfoLabel.isHidden = true + strongSelf.progressView.progress = 0 + strongSelf.oldProgress = 0 + strongSelf.progressValueLabel.text = "\(Localizable.shared.strings.sync_with_node): 0%." + strongSelf.progressTimeValueLabel.text = Localizable.shared.strings.calc_estimate_time + strongSelf.progressTimeValueLabel.isHidden = false + } } } @@ -558,7 +579,7 @@ extension OpenWalletProgressViewController : WalletModelDelegate { func onSyncProgressUpdated(_ done: Int32, total: Int32) { DispatchQueue.main.async { [weak self] in guard let strongSelf = self else { return } - strongSelf.errorLabel.isHidden = true + strongSelf.hideErrorIfOnline() if done > 0 { if (strongSelf.onlyConnect || strongSelf.isRescan || strongSelf.phrase == nil) @@ -579,28 +600,25 @@ extension OpenWalletProgressViewController : WalletModelDelegate { } } - if total == done && !strongSelf.isPresented && !AppModel.sharedManager().isRestoreFlow { - - } - else{ + if total > 0 { strongSelf.progressView.progress = Float(Float(done)/Float(total)) - if strongSelf.isWaitingRestore { - let progress_100 = Int32(strongSelf.progressView.progress * 100) - strongSelf.progressValueLabel.text = "\(Localizable.shared.strings.sync_with_node): \(progress_100)%." + } + if strongSelf.isWaitingRestore { + let progress_100 = Int32(strongSelf.progressView.progress * 100) + strongSelf.progressValueLabel.text = "\(Localizable.shared.strings.sync_with_node): \(progress_100)%." + } + else if strongSelf.onlyConnect || (strongSelf.phrase != nil && (Settings.sharedManager().isNodeProtocolEnabled || !Settings.sharedManager().connectToRandomNode)) { + let progress_100 = Int32(strongSelf.progressView.progress * 100) + + if strongSelf.displayProgress { + strongSelf.progressValueLabel.text = "\(Localizable.shared.strings.syncing_with_blockchain) \(progress_100)%" } - else if strongSelf.onlyConnect || (strongSelf.phrase != nil && (Settings.sharedManager().isNodeProtocolEnabled || !Settings.sharedManager().connectToRandomNode)) { - let progress_100 = Int32(strongSelf.progressView.progress * 100) - - if strongSelf.displayProgress { - strongSelf.progressValueLabel.text = "\(Localizable.shared.strings.syncing_with_blockchain) \(progress_100)%" - } - else { - strongSelf.progressValueLabel.text = "\(Localizable.shared.strings.syncing_with_blockchain): " - } + else { + strongSelf.progressValueLabel.text = "\(Localizable.shared.strings.syncing_with_blockchain): " } } - if total == done && strongSelf.isWaitingRestore { + if strongSelf.isWaitingRestore && (total == done || AppModel.sharedManager().isSynced()) { strongSelf.isWaitingRestore = false strongSelf.openMainPage() } diff --git a/BeamWallet/ViewControllers/Login/PhraseViewController/SeedPhraseViewController.swift b/BeamWallet/ViewControllers/Login/PhraseViewController/SeedPhraseViewController.swift index 3defe4cf..11985408 100644 --- a/BeamWallet/ViewControllers/Login/PhraseViewController/SeedPhraseViewController.swift +++ b/BeamWallet/ViewControllers/Login/PhraseViewController/SeedPhraseViewController.swift @@ -203,6 +203,11 @@ class SeedPhraseViewController: BaseViewController { } } else { + // Terminal "confirm seed" path. Clear any stale skip flag a + // prior session may have left behind so isSkipedSeed reflects + // this final action only. + OnboardManager.shared.onSkipSeed(isSkiped: false) + let vc = CreateWalletPasswordViewController().withPhrase(phrase: words.joined(separator: ";")) pushViewController(vc: vc) } diff --git a/BeamWallet/ViewControllers/Main/DAO/JS/XWVJson.swift b/BeamWallet/ViewControllers/Main/DAO/JS/XWVJson.swift index 68990356..cfe637c8 100644 --- a/BeamWallet/ViewControllers/Main/DAO/JS/XWVJson.swift +++ b/BeamWallet/ViewControllers/Main/DAO/JS/XWVJson.swift @@ -119,6 +119,8 @@ public func jsonify(_ value: Any?) -> String? { return "{" + mirror.children.compactMap(jsonify).joined(separator: ",") + "}" case .enum: return jsonify(String(describing: value)) + @unknown default: + return nil } } } diff --git a/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift b/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift index b2ae7705..3cb1b251 100644 --- a/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift +++ b/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift @@ -69,7 +69,7 @@ class LeftMenuViewController: BaseTableViewController { override func viewDidLoad() { super.viewDidLoad() - + Settings.sharedManager().addDelegate(self) AppModel.sharedManager().addDelegate(self) diff --git a/BeamWallet/ViewControllers/Main/Passwords/CreateWalletPasswordViewController.swift b/BeamWallet/ViewControllers/Main/Passwords/CreateWalletPasswordViewController.swift index 52a041a4..c13e5551 100644 --- a/BeamWallet/ViewControllers/Main/Passwords/CreateWalletPasswordViewController.swift +++ b/BeamWallet/ViewControllers/Main/Passwords/CreateWalletPasswordViewController.swift @@ -84,10 +84,19 @@ class CreateWalletPasswordViewController: BaseWizardViewController { override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) - + NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil) } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + + let target: BMField? = isChangePassword ? oldPassField : passField + DispatchQueue.main.async { [weak target] in + _ = target?.becomeFirstResponder() + } + } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) @@ -197,31 +206,32 @@ class CreateWalletPasswordViewController: BaseWizardViewController { } private func openMainPage() { - if let phrase = phrase, let pass = passField.text { + guard let phrase = phrase, let pass = passField.text else { return } + + // Restore flow opens the wallet immediately because the chosen node is + // already settled. Create flow defers wallet creation to + // SelectNodeViewController so the chosen node is in place before + // wallet->start() runs — the whole DB-init/start sequence then runs + // inside a single io::Reactor::Scope. + if AppModel.sharedManager().isRestoreFlow { let created = AppModel.sharedManager().createWallet(phrase, pass: pass) - if(!created) - { - self.alert(title: Localizable.shared.strings.error, message: Localizable.shared.strings.wallet_not_created) { (_ ) in - - } - } - else { - OnboardManager.shared.saveSeed(seed: phrase) - _ = KeychainManager.addPassword(password: pass) - - if AppModel.sharedManager().isRestoreFlow { - let vc = OpenWalletProgressViewController(password: pass, phrase: phrase) - self.pushViewController(vc: vc) - } - else { - let vc = SelectNodeViewController() - vc.isCreateWallet = true - vc.isNeedDisconnect = false - vc.password = pass - vc.phrase = phrase - self.pushViewController(vc: vc) - } + if !created { + AppModel.sharedManager().abortCreateAndReset() + self.alert(title: Localizable.shared.strings.error, message: Localizable.shared.strings.wallet_not_created) { _ in } + return } + OnboardManager.shared.saveSeed(seed: phrase) + _ = KeychainManager.addPassword(password: pass) + let vc = OpenWalletProgressViewController(password: pass, phrase: phrase) + self.pushViewController(vc: vc) + } + else { + let vc = SelectNodeViewController() + vc.isCreateWallet = true + vc.isNeedDisconnect = false + vc.password = pass + vc.phrase = phrase + self.pushViewController(vc: vc) } } } diff --git a/BeamWallet/ViewControllers/Main/Passwords/UnlockPasswordPopover.swift b/BeamWallet/ViewControllers/Main/Passwords/UnlockPasswordPopover.swift index e3ef878b..747d04c8 100644 --- a/BeamWallet/ViewControllers/Main/Passwords/UnlockPasswordPopover.swift +++ b/BeamWallet/ViewControllers/Main/Passwords/UnlockPasswordPopover.swift @@ -143,7 +143,8 @@ class UnlockPasswordPopover: BaseViewController { public func biometricAuthorization() { if BiometricAuthorization.shared.canAuthenticate(), Settings.sharedManager().isEnableBiometric { BiometricAuthorization.shared.authenticateWithBioMetrics(success: { - if let password = KeychainManager.getPassword() { + let context = BiometricAuthorization.shared.lastAuthenticatedContext + if let password = KeychainManager.getPassword(context: context) { self.passField.text = password self.dismiss(animated: true, completion: { self.completion?(true) diff --git a/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift b/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift index dc0d23f1..1488b242 100644 --- a/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift +++ b/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift @@ -176,16 +176,35 @@ class SelectNodeViewController: BaseTableViewController { BMLockScreen.shared.onTapEvent() } + /// Create-flow only: builds the wallet DB now that the chosen node has been + /// committed to Settings. createWallet → onWalledOpened → start() must run + /// inside the same io::Reactor::Scope, so we defer this to here rather than + /// running it earlier in CreateWalletPasswordViewController. + private func createWalletForCurrentNode() -> Bool { + guard let phrase = phrase, let pass = password else { return false } + let created = AppModel.sharedManager().createWallet(phrase, pass: pass) + if !created { + AppModel.sharedManager().abortCreateAndReset() + self.alert(title: Localizable.shared.strings.error, message: Localizable.shared.strings.wallet_not_created) { _ in + self.navigationController?.popToRootViewController(animated: true) + } + return false + } + OnboardManager.shared.saveSeed(seed: phrase) + _ = KeychainManager.addPassword(password: pass) + return true + } + @objc private func onNext() { isNeedDisconnect = true tableView.tableFooterView = footerView() tableView.reloadData() - + if items[0].selected { if isCreateWallet { Settings.sharedManager().removeCustomNode() } - + if Settings.sharedManager().isNodeProtocolEnabled { Settings.sharedManager().isNodeProtocolEnabled = false AppModel.sharedManager().enableBodyRequests(false) @@ -193,25 +212,30 @@ class SelectNodeViewController: BaseTableViewController { Settings.sharedManager().connectToRandomNode = true Settings.sharedManager().nodeAddress = AppModel.chooseRandomNode(); AppModel.sharedManager().changeNodeAddress() - + if isCreateWallet { - openMain() + if createWalletForCurrentNode() { + let vc = OpenWalletProgressViewController(password: self.password ?? "", phrase: self.phrase) + self.pushViewController(vc: vc) + } } } else if items[1].selected { if isCreateWallet { Settings.sharedManager().removeCustomNode() } - + Settings.sharedManager().connectToRandomNode = true Settings.sharedManager().isNodeProtocolEnabled = true Settings.sharedManager().nodeAddress = AppModel.chooseRandomNode(); AppModel.sharedManager().changeNodeAddress() AppModel.sharedManager().enableBodyRequests(true) - + if isCreateWallet { - let vc = OpenWalletProgressViewController(password: self.password ?? "", phrase: self.phrase) - self.pushViewController(vc: vc) + if createWalletForCurrentNode() { + let vc = OpenWalletProgressViewController(password: self.password ?? "", phrase: self.phrase) + self.pushViewController(vc: vc) + } } else { let vc = OpenWalletProgressViewController(onlyConnect: true) @@ -242,9 +266,11 @@ class SelectNodeViewController: BaseTableViewController { Settings.sharedManager().connectToRandomNode = false Settings.sharedManager().nodeAddress = fullAddress AppModel.sharedManager().changeNodeAddress() - - let vc = OpenWalletProgressViewController(password: self.password ?? "", phrase: self.phrase) - self.pushViewController(vc: vc) + + if createWalletForCurrentNode() { + let vc = OpenWalletProgressViewController(password: self.password ?? "", phrase: self.phrase) + self.pushViewController(vc: vc) + } } else { if oldSelected == 0 { diff --git a/BeamWallet/ViewControllers/Main/Settings/SettingsViewController.swift b/BeamWallet/ViewControllers/Main/Settings/SettingsViewController.swift index 597c8ccc..df507225 100644 --- a/BeamWallet/ViewControllers/Main/Settings/SettingsViewController.swift +++ b/BeamWallet/ViewControllers/Main/Settings/SettingsViewController.swift @@ -316,6 +316,7 @@ extension SettingsViewController : SettingsCellDelegate { } else{ Settings.sharedManager().isEnableBiometric = false + KeychainManager.deletePassword() } } vc.modalPresentationStyle = .overFullScreen diff --git a/BeamWallet/ViewControllers/Main/Wallet/Withdraw/WithdrawViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Withdraw/WithdrawViewController.swift new file mode 100644 index 00000000..536d730b --- /dev/null +++ b/BeamWallet/ViewControllers/Main/Wallet/Withdraw/WithdrawViewController.swift @@ -0,0 +1,112 @@ +// +// WithdrawViewController.swift +// BeamWallet +// +// Copyright 2018 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +class WithdrawViewController: BaseViewController { + + private var viewModel: WithdrawViewModel + + private let amountLabel = UILabel() + private let infoLabel = UILabel() + private let confirmButton = BMButton.defaultButton(frame: .zero, color: UIColor.main.heliotrope) + private let cancelButton = BMButton.defaultButton(frame: .zero, color: UIColor.clear) + + init(amount: String, userId: String) { + self.viewModel = WithdrawViewModel(amount: amount, userId: userId) + super.init(nibName: nil, bundle: nil) + } + + required init?(coder aDecoder: NSCoder) { + fatalError(Localizable.shared.strings.fatalInitCoderError) + } + + override func viewDidLoad() { + super.viewDidLoad() + + setGradientTopBar(mainColor: UIColor.main.heliotrope) + title = Localizable.shared.strings.withdraw.uppercased() + + setupLayout() + } + + private func setupLayout() { + amountLabel.font = UIFont.boldSystemFont(ofSize: 36) + amountLabel.textColor = UIColor.white + amountLabel.textAlignment = .center + amountLabel.text = String.currency(value: viewModel.amountDouble) + " BEAM" + amountLabel.translatesAutoresizingMaskIntoConstraints = false + + infoLabel.font = UIFont.systemFont(ofSize: 14) + infoLabel.textColor = UIColor.main.blueyGrey + infoLabel.textAlignment = .center + infoLabel.numberOfLines = 0 + infoLabel.text = Localizable.shared.strings.withdraw_cofirm + infoLabel.translatesAutoresizingMaskIntoConstraints = false + + confirmButton.setTitle(Localizable.shared.strings.confirm.lowercased(), for: .normal) + confirmButton.setTitleColor(UIColor.main.marineOriginal, for: .normal) + confirmButton.setTitleColor(UIColor.main.marineOriginal.withAlphaComponent(0.5), for: .highlighted) + confirmButton.translatesAutoresizingMaskIntoConstraints = false + confirmButton.addTarget(self, action: #selector(onConfirm), for: .touchUpInside) + + cancelButton.setTitle(Localizable.shared.strings.cancel.lowercased(), for: .normal) + cancelButton.setTitleColor(UIColor.white, for: .normal) + cancelButton.setTitleColor(UIColor.white.withAlphaComponent(0.5), for: .highlighted) + cancelButton.layer.borderColor = UIColor.white.withAlphaComponent(0.3).cgColor + cancelButton.layer.borderWidth = 1 + cancelButton.translatesAutoresizingMaskIntoConstraints = false + cancelButton.addTarget(self, action: #selector(onCancel), for: .touchUpInside) + + view.addSubview(amountLabel) + view.addSubview(infoLabel) + view.addSubview(confirmButton) + view.addSubview(cancelButton) + + NSLayoutConstraint.activate([ + amountLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor), + amountLabel.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 100), + amountLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20), + amountLabel.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20), + + infoLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor), + infoLabel.topAnchor.constraint(equalTo: amountLabel.bottomAnchor, constant: 30), + infoLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 30), + infoLabel.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -30), + + confirmButton.centerXAnchor.constraint(equalTo: view.centerXAnchor), + confirmButton.bottomAnchor.constraint(equalTo: cancelButton.topAnchor, constant: -15), + confirmButton.widthAnchor.constraint(equalToConstant: 180), + confirmButton.heightAnchor.constraint(equalToConstant: 44), + + cancelButton.centerXAnchor.constraint(equalTo: view.centerXAnchor), + cancelButton.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -40), + cancelButton.widthAnchor.constraint(equalToConstant: 180), + cancelButton.heightAnchor.constraint(equalToConstant: 44), + ]) + } + + @objc private func onConfirm() { + navigationController?.popViewController(animated: true) + } + + @objc private func onCancel() { + navigationController?.popViewController(animated: true) + } +} diff --git a/Podfile.lock b/Podfile.lock index 16c0ff78..b82da3cf 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -123,4 +123,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 8d3d860214cabe1cbfdea48a4ebe5f4a1584a521 -COCOAPODS: 1.11.2 +COCOAPODS: 1.16.2 diff --git a/Resources/cs.lproj/Localizable.strings b/Resources/cs.lproj/Localizable.strings index 0b24faed..ff45c344 100644 --- a/Resources/cs.lproj/Localizable.strings +++ b/Resources/cs.lproj/Localizable.strings @@ -46,6 +46,9 @@ "no_internet" = "No internet connection"; "wallet_not_created" = "Wallet not created"; "wallet_not_opened" = "Wallet can not be opened"; +"wallet_recovery_title" = "Wallet recovery needed"; +"wallet_recovery_message" = "A previous setup did not complete. Reset to start fresh."; +"reset_and_retry" = "Reset and retry"; "restor_wallet_warning" = "Restoring the wallet may take a while.\n\nPlease wait till the node is fully synchronized with the blockchain, do not close or minimize the wallet app."; "restor_wallet_info" = "Only the wallet balance (UTXO) can be restored, transaction info is always private and never kept on the blockchain."; diff --git a/Resources/en.lproj/Localizable.strings b/Resources/en.lproj/Localizable.strings index 52e230be..67045610 100644 --- a/Resources/en.lproj/Localizable.strings +++ b/Resources/en.lproj/Localizable.strings @@ -46,6 +46,9 @@ "no_internet" = "No internet connection"; "wallet_not_created" = "Wallet not created"; "wallet_not_opened" = "Wallet can not be opened"; +"wallet_recovery_title" = "Wallet recovery needed"; +"wallet_recovery_message" = "A previous setup did not complete. Reset to start fresh."; +"reset_and_retry" = "Reset and retry"; "restor_wallet_warning" = "Restoring the wallet may take a while.\n\nPlease wait till the node is fully synchronized with the blockchain, do not close or minimize the wallet app."; "restor_wallet_info" = "Only the wallet balance (UTXO) can be restored, transaction info is always private and never kept on the blockchain."; diff --git a/Resources/es.lproj/Localizable.strings b/Resources/es.lproj/Localizable.strings index 8fb2f4b7..859a4c9a 100644 --- a/Resources/es.lproj/Localizable.strings +++ b/Resources/es.lproj/Localizable.strings @@ -47,6 +47,9 @@ "no_internet" = "No internet connection"; "wallet_not_created" = "Wallet not created"; "wallet_not_opened" = "Wallet can not be opened"; +"wallet_recovery_title" = "Wallet recovery needed"; +"wallet_recovery_message" = "A previous setup did not complete. Reset to start fresh."; +"reset_and_retry" = "Reset and retry"; "restor_wallet_warning" = "Restoring the wallet may take a while.\n\nPlease wait till the node is fully synchronized with the blockchain, do not close or minimize the wallet app."; "restor_wallet_info" = "Only the wallet balance (UTXO) can be restored, transaction info is always private and never kept on the blockchain."; diff --git a/Resources/fi-FI.lproj/Localizable.strings b/Resources/fi-FI.lproj/Localizable.strings index 0b24faed..ff45c344 100644 --- a/Resources/fi-FI.lproj/Localizable.strings +++ b/Resources/fi-FI.lproj/Localizable.strings @@ -46,6 +46,9 @@ "no_internet" = "No internet connection"; "wallet_not_created" = "Wallet not created"; "wallet_not_opened" = "Wallet can not be opened"; +"wallet_recovery_title" = "Wallet recovery needed"; +"wallet_recovery_message" = "A previous setup did not complete. Reset to start fresh."; +"reset_and_retry" = "Reset and retry"; "restor_wallet_warning" = "Restoring the wallet may take a while.\n\nPlease wait till the node is fully synchronized with the blockchain, do not close or minimize the wallet app."; "restor_wallet_info" = "Only the wallet balance (UTXO) can be restored, transaction info is always private and never kept on the blockchain."; diff --git a/Resources/fr.lproj/Localizable.strings b/Resources/fr.lproj/Localizable.strings index 0b24faed..ff45c344 100644 --- a/Resources/fr.lproj/Localizable.strings +++ b/Resources/fr.lproj/Localizable.strings @@ -46,6 +46,9 @@ "no_internet" = "No internet connection"; "wallet_not_created" = "Wallet not created"; "wallet_not_opened" = "Wallet can not be opened"; +"wallet_recovery_title" = "Wallet recovery needed"; +"wallet_recovery_message" = "A previous setup did not complete. Reset to start fresh."; +"reset_and_retry" = "Reset and retry"; "restor_wallet_warning" = "Restoring the wallet may take a while.\n\nPlease wait till the node is fully synchronized with the blockchain, do not close or minimize the wallet app."; "restor_wallet_info" = "Only the wallet balance (UTXO) can be restored, transaction info is always private and never kept on the blockchain."; diff --git a/Resources/ko.lproj/Localizable.strings b/Resources/ko.lproj/Localizable.strings index 0b24faed..ff45c344 100644 --- a/Resources/ko.lproj/Localizable.strings +++ b/Resources/ko.lproj/Localizable.strings @@ -46,6 +46,9 @@ "no_internet" = "No internet connection"; "wallet_not_created" = "Wallet not created"; "wallet_not_opened" = "Wallet can not be opened"; +"wallet_recovery_title" = "Wallet recovery needed"; +"wallet_recovery_message" = "A previous setup did not complete. Reset to start fresh."; +"reset_and_retry" = "Reset and retry"; "restor_wallet_warning" = "Restoring the wallet may take a while.\n\nPlease wait till the node is fully synchronized with the blockchain, do not close or minimize the wallet app."; "restor_wallet_info" = "Only the wallet balance (UTXO) can be restored, transaction info is always private and never kept on the blockchain."; diff --git a/Resources/nl.lproj/Localizable.strings b/Resources/nl.lproj/Localizable.strings index 8fb2f4b7..859a4c9a 100644 --- a/Resources/nl.lproj/Localizable.strings +++ b/Resources/nl.lproj/Localizable.strings @@ -47,6 +47,9 @@ "no_internet" = "No internet connection"; "wallet_not_created" = "Wallet not created"; "wallet_not_opened" = "Wallet can not be opened"; +"wallet_recovery_title" = "Wallet recovery needed"; +"wallet_recovery_message" = "A previous setup did not complete. Reset to start fresh."; +"reset_and_retry" = "Reset and retry"; "restor_wallet_warning" = "Restoring the wallet may take a while.\n\nPlease wait till the node is fully synchronized with the blockchain, do not close or minimize the wallet app."; "restor_wallet_info" = "Only the wallet balance (UTXO) can be restored, transaction info is always private and never kept on the blockchain."; diff --git a/Resources/ru.lproj/Localizable.strings b/Resources/ru.lproj/Localizable.strings index 0b24faed..ff45c344 100644 --- a/Resources/ru.lproj/Localizable.strings +++ b/Resources/ru.lproj/Localizable.strings @@ -46,6 +46,9 @@ "no_internet" = "No internet connection"; "wallet_not_created" = "Wallet not created"; "wallet_not_opened" = "Wallet can not be opened"; +"wallet_recovery_title" = "Wallet recovery needed"; +"wallet_recovery_message" = "A previous setup did not complete. Reset to start fresh."; +"reset_and_retry" = "Reset and retry"; "restor_wallet_warning" = "Restoring the wallet may take a while.\n\nPlease wait till the node is fully synchronized with the blockchain, do not close or minimize the wallet app."; "restor_wallet_info" = "Only the wallet balance (UTXO) can be restored, transaction info is always private and never kept on the blockchain."; diff --git a/Resources/sv-SE.lproj/Localizable.strings b/Resources/sv-SE.lproj/Localizable.strings index efe111b4..78a18f8a 100644 --- a/Resources/sv-SE.lproj/Localizable.strings +++ b/Resources/sv-SE.lproj/Localizable.strings @@ -51,6 +51,9 @@ "no_internet" = "Internetåtkomst saknas"; "wallet_not_created" = "Plånbok ej skapad"; "wallet_not_opened" = "Plånbok kan ej öppnas"; +"wallet_recovery_title" = "Återställning av plånbok behövs"; +"wallet_recovery_message" = "En tidigare installation slutfördes inte. Återställ för att börja om."; +"reset_and_retry" = "Återställ och försök igen"; "restor_wallet_warning" = "Att återställa plånboken kan ta ett tag.\n\nVänta tills noden är helt synkroniserad med blockkedjan, stäng inte eller minimera plånboksappen."; "restor_wallet_info" = "Endast plånbokens balans (UTXO) kan återställas, transaktionsinformation är alltid privata och lagras aldrig i block-kedjan."; "receive" = "Ta emot"; diff --git a/Resources/sv.lproj/Localizable.strings b/Resources/sv.lproj/Localizable.strings index 0b24faed..ff45c344 100644 --- a/Resources/sv.lproj/Localizable.strings +++ b/Resources/sv.lproj/Localizable.strings @@ -46,6 +46,9 @@ "no_internet" = "No internet connection"; "wallet_not_created" = "Wallet not created"; "wallet_not_opened" = "Wallet can not be opened"; +"wallet_recovery_title" = "Wallet recovery needed"; +"wallet_recovery_message" = "A previous setup did not complete. Reset to start fresh."; +"reset_and_retry" = "Reset and retry"; "restor_wallet_warning" = "Restoring the wallet may take a while.\n\nPlease wait till the node is fully synchronized with the blockchain, do not close or minimize the wallet app."; "restor_wallet_info" = "Only the wallet balance (UTXO) can be restored, transaction info is always private and never kept on the blockchain."; diff --git a/Resources/th.lproj/Localizable.strings b/Resources/th.lproj/Localizable.strings index 0b24faed..ff45c344 100644 --- a/Resources/th.lproj/Localizable.strings +++ b/Resources/th.lproj/Localizable.strings @@ -46,6 +46,9 @@ "no_internet" = "No internet connection"; "wallet_not_created" = "Wallet not created"; "wallet_not_opened" = "Wallet can not be opened"; +"wallet_recovery_title" = "Wallet recovery needed"; +"wallet_recovery_message" = "A previous setup did not complete. Reset to start fresh."; +"reset_and_retry" = "Reset and retry"; "restor_wallet_warning" = "Restoring the wallet may take a while.\n\nPlease wait till the node is fully synchronized with the blockchain, do not close or minimize the wallet app."; "restor_wallet_info" = "Only the wallet balance (UTXO) can be restored, transaction info is always private and never kept on the blockchain."; diff --git a/Resources/tr.lproj/Localizable.strings b/Resources/tr.lproj/Localizable.strings index 0b24faed..ff45c344 100644 --- a/Resources/tr.lproj/Localizable.strings +++ b/Resources/tr.lproj/Localizable.strings @@ -46,6 +46,9 @@ "no_internet" = "No internet connection"; "wallet_not_created" = "Wallet not created"; "wallet_not_opened" = "Wallet can not be opened"; +"wallet_recovery_title" = "Wallet recovery needed"; +"wallet_recovery_message" = "A previous setup did not complete. Reset to start fresh."; +"reset_and_retry" = "Reset and retry"; "restor_wallet_warning" = "Restoring the wallet may take a while.\n\nPlease wait till the node is fully synchronized with the blockchain, do not close or minimize the wallet app."; "restor_wallet_info" = "Only the wallet balance (UTXO) can be restored, transaction info is always private and never kept on the blockchain."; diff --git a/Resources/vi.lproj/Localizable.strings b/Resources/vi.lproj/Localizable.strings index 0b24faed..ff45c344 100644 --- a/Resources/vi.lproj/Localizable.strings +++ b/Resources/vi.lproj/Localizable.strings @@ -46,6 +46,9 @@ "no_internet" = "No internet connection"; "wallet_not_created" = "Wallet not created"; "wallet_not_opened" = "Wallet can not be opened"; +"wallet_recovery_title" = "Wallet recovery needed"; +"wallet_recovery_message" = "A previous setup did not complete. Reset to start fresh."; +"reset_and_retry" = "Reset and retry"; "restor_wallet_warning" = "Restoring the wallet may take a while.\n\nPlease wait till the node is fully synchronized with the blockchain, do not close or minimize the wallet app."; "restor_wallet_info" = "Only the wallet balance (UTXO) can be restored, transaction info is always private and never kept on the blockchain."; diff --git a/Resources/zh-Hans.lproj/Localizable.strings b/Resources/zh-Hans.lproj/Localizable.strings index cfcb5daf..68893577 100644 --- a/Resources/zh-Hans.lproj/Localizable.strings +++ b/Resources/zh-Hans.lproj/Localizable.strings @@ -46,6 +46,9 @@ "no_internet" = "No internet connection"; "wallet_not_created" = "Wallet not created"; "wallet_not_opened" = "Wallet can not be opened"; +"wallet_recovery_title" = "Wallet recovery needed"; +"wallet_recovery_message" = "A previous setup did not complete. Reset to start fresh."; +"reset_and_retry" = "Reset and retry"; "restor_wallet_warning" = "Restoring the wallet may take a while.\n\nPlease wait till the node is fully synchronized with the blockchain, do not close or minimize the wallet app."; "restor_wallet_info" = "Only the wallet balance (UTXO) can be restored, transaction info is always private and never kept on the blockchain."; From dadd8a83b6f87f520cf69c97a9a215b32f85fd79 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Fri, 8 May 2026 16:46:15 +0200 Subject: [PATCH 02/48] #587: fix faucet crash --- BeamWallet/BeamSDK/AppModel.mm | 16 ++++++++++------ BeamWallet/BeamSDK/Objects/BMAddress.mm | 5 +++-- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/BeamWallet/BeamSDK/AppModel.mm b/BeamWallet/BeamSDK/AppModel.mm index 537c4d91..ca9783aa 100644 --- a/BeamWallet/BeamSDK/AppModel.mm +++ b/BeamWallet/BeamSDK/AppModel.mm @@ -1679,12 +1679,14 @@ -(void)generateNewWalletAddressWithBlockAndAmount:(int)assetId amount:(double)am auto func = NewTokenGeneratedFunc(); func.block = ^(std::string token) { [AppModel sharedManager].addressGeneratedID = @""; - + NSString *sToken = [NSString stringWithUTF8String:token.c_str()]; auto pParams = beam::wallet::ParseParameters(token); - + BMAddress *address = [[BMAddress alloc] init]; address.address = sToken; + address.walletId = @""; + address.label = @""; if (pParams) { beam::wallet::WalletID pid; @@ -1693,7 +1695,7 @@ -(void)generateNewWalletAddressWithBlockAndAmount:(int)assetId amount:(double)am } } self.generatedNewAddressBlock(address, nil); - + self->wallet->getAsync()->getAddresses(true); }; wallet->getAsync()->generateToken(TokenType::RegularNewStyle, bAmount, bAsset, std::string(BEAM_LIB_VERSION), false, func); @@ -1702,7 +1704,7 @@ -(void)generateNewWalletAddressWithBlockAndAmount:(int)assetId amount:(double)am -(void)generateNewWalletAddressWithBlock:(NewAddressGeneratedBlock _Nonnull )block{ self.generatedNewAddressBlock = block; - + if (wallet!=nil) { uint64_t amount = 0; auto asset = beam::Asset::ID(0); @@ -1712,9 +1714,11 @@ -(void)generateNewWalletAddressWithBlock:(NewAddressGeneratedBlock _Nonnull )blo NSString *sToken = [NSString stringWithUTF8String:token.c_str()]; auto pParams = beam::wallet::ParseParameters(token); - + BMAddress *address = [[BMAddress alloc] init]; address.address = sToken; + address.walletId = @""; + address.label = @""; if (pParams) { beam::wallet::WalletID pid; @@ -1724,7 +1728,7 @@ -(void)generateNewWalletAddressWithBlock:(NewAddressGeneratedBlock _Nonnull )blo } self.generatedNewAddressBlock(address, nil); }; - + wallet->getAsync()->generateToken(TokenType::RegularNewStyle, amount, asset, std::string(BEAM_LIB_VERSION), false, func); // wallet->getAsync()->generateNewAddress(); } diff --git a/BeamWallet/BeamSDK/Objects/BMAddress.mm b/BeamWallet/BeamSDK/Objects/BMAddress.mm index 99586602..a9d205a9 100644 --- a/BeamWallet/BeamSDK/Objects/BMAddress.mm +++ b/BeamWallet/BeamSDK/Objects/BMAddress.mm @@ -35,8 +35,9 @@ +(BMAddress*_Nonnull)emptyAddress{ +(BMAddress*_Nonnull)fromAddress:(BMAddress*_Nonnull)address{ BMAddress *copied = [BMAddress new]; - copied.walletId = [NSString stringWithString:address.walletId]; - copied.label = [NSString stringWithString:address.label]; + copied.walletId = address.walletId ? [NSString stringWithString:address.walletId] : @""; + copied.label = address.label ? [NSString stringWithString:address.label] : @""; + copied.address = address.address ? [NSString stringWithString:address.address] : @""; copied.duration = address.duration; copied.createTime = address.createTime; return copied; From 935850b7a1dd6e34aee867ea1f492619bab37020 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Fri, 8 May 2026 18:19:41 +0200 Subject: [PATCH 03/48] #588: receive screen redesign - UI mostly the same - move SBBS to main receive screen - requested amount now allows any asset - update locales --- BeamWallet.xcodeproj/project.pbxproj | 16 +- BeamWallet/BeamSDK/AppModel.h | 1 + BeamWallet/BeamSDK/AppModel.mm | 5 + BeamWallet/BeamSDK/WalletModel.h | 1 + BeamWallet/BeamSDK/WalletModel.mm | 9 + BeamWallet/Controls/Cell/BMAmountCell.swift | 36 +-- BeamWallet/Controls/Cell/BMCellProtocol.swift | 1 + BeamWallet/Protocols/LocalizableStrings.swift | 3 + .../Receive/AssetSearchViewController.swift | 208 ++++++++++++++++++ .../Cells/ReceiveAddressButtonsCell.swift | 32 ++- .../Cells/ReceiveAddressButtonsCell.xib | 41 ---- .../Receive/Cells/ReceiveTokenCell.swift | 208 ++++++++++++++---- .../Wallet/Receive/Cells/ReceiveTokenCell.xib | 147 ------------- .../Receive/ReceiveViewController.swift | 92 +++++--- .../Main/Wallet/Send/SendViewController.swift | 6 - Resources/cs.lproj/Localizable.strings | 4 + Resources/en.lproj/Localizable.strings | 5 +- Resources/es.lproj/Localizable.strings | 4 + Resources/fi-FI.lproj/Localizable.strings | 4 + Resources/fr.lproj/Localizable.strings | 4 + Resources/ko.lproj/Localizable.strings | 4 + Resources/nl.lproj/Localizable.strings | 4 + Resources/ru.lproj/Localizable.strings | 4 + Resources/sv-SE.lproj/Localizable.strings | 4 + Resources/sv.lproj/Localizable.strings | 4 + Resources/th.lproj/Localizable.strings | 4 + Resources/tr.lproj/Localizable.strings | 4 + Resources/vi.lproj/Localizable.strings | 4 + Resources/zh-Hans.lproj/Localizable.strings | 4 + 29 files changed, 567 insertions(+), 296 deletions(-) create mode 100644 BeamWallet/ViewControllers/Main/Wallet/Receive/AssetSearchViewController.swift delete mode 100644 BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveTokenCell.xib diff --git a/BeamWallet.xcodeproj/project.pbxproj b/BeamWallet.xcodeproj/project.pbxproj index e8fe9ffd..758de428 100644 --- a/BeamWallet.xcodeproj/project.pbxproj +++ b/BeamWallet.xcodeproj/project.pbxproj @@ -282,9 +282,6 @@ 922B637C2552F1CA00A2AED2 /* ReceiveTokenCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 922B637A2552F1CA00A2AED2 /* ReceiveTokenCell.swift */; }; 922B637D2552F1CA00A2AED2 /* ReceiveTokenCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 922B637A2552F1CA00A2AED2 /* ReceiveTokenCell.swift */; }; 922B637E2552F1CA00A2AED2 /* ReceiveTokenCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 922B637A2552F1CA00A2AED2 /* ReceiveTokenCell.swift */; }; - 922B637F2552F1CA00A2AED2 /* ReceiveTokenCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 922B637B2552F1CA00A2AED2 /* ReceiveTokenCell.xib */; }; - 922B63802552F1CA00A2AED2 /* ReceiveTokenCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 922B637B2552F1CA00A2AED2 /* ReceiveTokenCell.xib */; }; - 922B63812552F1CA00A2AED2 /* ReceiveTokenCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 922B637B2552F1CA00A2AED2 /* ReceiveTokenCell.xib */; }; 922F2E7122E1F7F6005D3F33 /* BMMultiLineItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 922F2E7022E1F7F6005D3F33 /* BMMultiLineItem.swift */; }; 922F2E7222E1F7F6005D3F33 /* BMMultiLineItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 922F2E7022E1F7F6005D3F33 /* BMMultiLineItem.swift */; }; 922F2E7322E1F7F6005D3F33 /* BMMultiLineItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 922F2E7022E1F7F6005D3F33 /* BMMultiLineItem.swift */; }; @@ -611,6 +608,9 @@ 9265CDCF2292F233003C98B2 /* ReceiveViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9265CDCE2292F233003C98B2 /* ReceiveViewController.swift */; }; 9265CDD02292F233003C98B2 /* ReceiveViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9265CDCE2292F233003C98B2 /* ReceiveViewController.swift */; }; 9265CDD12292F233003C98B2 /* ReceiveViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9265CDCE2292F233003C98B2 /* ReceiveViewController.swift */; }; + F0F0F0F0AAAA0002ABCD0001 /* AssetSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */; }; + F0F0F0F0AAAA0003ABCD0001 /* AssetSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */; }; + F0F0F0F0AAAA0004ABCD0001 /* AssetSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */; }; 926783832456DE29006F3221 /* boost.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 926783822456DE29006F3221 /* boost.framework */; }; 926783842456DE29006F3221 /* boost.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 926783822456DE29006F3221 /* boost.framework */; }; 926783852456DE29006F3221 /* boost.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 926783822456DE29006F3221 /* boost.framework */; }; @@ -1550,7 +1550,6 @@ 9227AEEA2282F6F800FB221F /* BMDuration.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BMDuration.h; sourceTree = ""; }; 9227AEEB2282F6F800FB221F /* BMDuration.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BMDuration.m; sourceTree = ""; }; 922B637A2552F1CA00A2AED2 /* ReceiveTokenCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReceiveTokenCell.swift; sourceTree = ""; }; - 922B637B2552F1CA00A2AED2 /* ReceiveTokenCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ReceiveTokenCell.xib; sourceTree = ""; }; 922EE89222F18C5800BBFDEF /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; 922F2E7022E1F7F6005D3F33 /* BMMultiLineItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BMMultiLineItem.swift; sourceTree = ""; }; 922FB15D22B3E134007AD689 /* BMSearchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BMSearchView.swift; sourceTree = ""; }; @@ -1693,6 +1692,7 @@ 9261C255228BF55800D666E0 /* AddressExpiresCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddressExpiresCell.swift; sourceTree = ""; }; 9261C259228BF55800D666E0 /* AddressesViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddressesViewController.swift; sourceTree = ""; }; 9265CDCE2292F233003C98B2 /* ReceiveViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReceiveViewController.swift; sourceTree = ""; }; + F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetSearchViewController.swift; sourceTree = ""; }; 926783822456DE29006F3221 /* boost.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = boost.framework; sourceTree = ""; }; 9267D05F270DCA6000804314 /* AssetExporerCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetExporerCell.swift; sourceTree = ""; }; 9267D060270DCA6000804314 /* AssetExporerCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AssetExporerCell.xib; sourceTree = ""; }; @@ -2530,7 +2530,6 @@ 9225D556229455CA0067B4EA /* ReceiveAddressButtonsCell.swift */, 9225D557229455CA0067B4EA /* ReceiveAddressButtonsCell.xib */, 922B637A2552F1CA00A2AED2 /* ReceiveTokenCell.swift */, - 922B637B2552F1CA00A2AED2 /* ReceiveTokenCell.xib */, 9223D538261F480E0086D95C /* ReceiveTransactionTypeCell.swift */, 9223D539261F480E0086D95C /* ReceiveTransactionTypeCell.xib */, ); @@ -2855,6 +2854,7 @@ 92480DAC229547180084512A /* Cells */, 9235EB0D2296F6DF00BDC232 /* ReceiveListViewController.swift */, 9265CDCE2292F233003C98B2 /* ReceiveViewController.swift */, + F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */, 92DFD5CA255031FA00B9751C /* OfflineAddressViewController.swift */, 92DFD5CB255031FA00B9751C /* OfflineAddressViewController.xib */, ); @@ -3442,7 +3442,6 @@ 92F68C8F2245070200197D4D /* UTXOTransactionCell.xib in Resources */, 9225D54B229449010067B4EA /* BMFieldCell.xib in Resources */, 927EDE3F22A6B47C005D5CEA /* BMMultiLinesCell.xib in Resources */, - 922B637F2552F1CA00A2AED2 /* ReceiveTokenCell.xib in Resources */, 92AE366D22383D2300E0810B /* QRScannerViewController.xib in Resources */, 925AD60122282C8400DDE66B /* SF-Pro-Display-Bold.otf in Resources */, 92F6B78C22A541040055C3C3 /* SendAllCell.xib in Resources */, @@ -3571,7 +3570,6 @@ 92CC40EC22E1DC7300006E5C /* BMGroupedCell.xib in Resources */, 922393A3235D1579002ADA27 /* RestoreOptionsViewController.xib in Resources */, 92C5EBB7229BFD1100ABFFF7 /* BMDetailCell.xib in Resources */, - 922B63802552F1CA00A2AED2 /* ReceiveTokenCell.xib in Resources */, 9261C269228BF55800D666E0 /* BMPickerCell.xib in Resources */, 9288DD8A223A55410020C501 /* QRViewController.xib in Resources */, 92F78BC024D06D2200489229 /* QRCodeSmallViewController.xib in Resources */, @@ -3630,7 +3628,6 @@ 92E2EB4B226F21C700367928 /* SF-Pro-Display-RegularItalic.otf in Resources */, 926EB47D231E843800D059BC /* WalletTransactionCell.xib in Resources */, 92E2EB4C226F21C700367928 /* InputWordCell.xib in Resources */, - 922B63812552F1CA00A2AED2 /* ReceiveTokenCell.xib in Resources */, 92E4AECC23599D46004062A1 /* CollectionTextHeader.xib in Resources */, 92302055262F23AE001A1883 /* NodeCell.xib in Resources */, 92FE264322A11E4E00102DB4 /* BMExpandCell.xib in Resources */, @@ -4222,6 +4219,7 @@ 928B0AB222425329003CE9E7 /* BMPopoverMenu.swift in Sources */, 92B837492285816D002B385B /* Progress.swift in Sources */, 9265CDCF2292F233003C98B2 /* ReceiveViewController.swift in Sources */, + F0F0F0F0AAAA0002ABCD0001 /* AssetSearchViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4545,6 +4543,7 @@ 928B0AB322425329003CE9E7 /* BMPopoverMenu.swift in Sources */, 92B8374A2285816D002B385B /* Progress.swift in Sources */, 9265CDD02292F233003C98B2 /* ReceiveViewController.swift in Sources */, + F0F0F0F0AAAA0003ABCD0001 /* AssetSearchViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4868,6 +4867,7 @@ 92E2EB2E226F21C700367928 /* BMPopoverMenu.swift in Sources */, 92B8374B2285816D002B385B /* Progress.swift in Sources */, 9265CDD12292F233003C98B2 /* ReceiveViewController.swift in Sources */, + F0F0F0F0AAAA0004ABCD0001 /* AssetSearchViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/BeamWallet/BeamSDK/AppModel.h b/BeamWallet/BeamSDK/AppModel.h index 51c41f08..7797d895 100644 --- a/BeamWallet/BeamSDK/AppModel.h +++ b/BeamWallet/BeamSDK/AppModel.h @@ -325,6 +325,7 @@ typedef void(^ExportCSVBlock)(NSString * _Nonnull data, NSURL * _Nonnull url); -(void)approveContractInfo:(NSString*_Nonnull)json info:(NSString*_Nonnull)info amounts:(NSString*_Nonnull)amounts; -(void)getAssetInfoAsync:(int)assetId; +-(void)loadFullAssetsList; -(BMApp*_Nonnull)DAOBeamXApp; -(BMApp*_Nonnull)daoGalleryApp; diff --git a/BeamWallet/BeamSDK/AppModel.mm b/BeamWallet/BeamSDK/AppModel.mm index ca9783aa..2e8f44e3 100644 --- a/BeamWallet/BeamSDK/AppModel.mm +++ b/BeamWallet/BeamSDK/AppModel.mm @@ -1338,6 +1338,11 @@ -(void)getAssetInfoAsync:(int)assetId { wallet->getAsync()->getAssetInfo((uint)assetId); } +-(void)loadFullAssetsList { + if (wallet == nullptr) return; + wallet->getAsync()->loadFullAssetsList(); +} + #pragma mark - Addresses diff --git a/BeamWallet/BeamSDK/WalletModel.h b/BeamWallet/BeamSDK/WalletModel.h index 34a65975..6f5adc10 100644 --- a/BeamWallet/BeamSDK/WalletModel.h +++ b/BeamWallet/BeamSDK/WalletModel.h @@ -84,5 +84,6 @@ class WalletModel : public beam::wallet::WalletClient void onAddressesChanged(beam::wallet::ChangeAction, const std::vector& addresses) override; void onPublicAddress(const std::string& publicAddr) override; void onAssetInfo(beam::Asset::ID assetId, const beam::wallet::WalletAsset&) override; + void onFullAssetsListLoaded() override; void onCoinsSelected(const beam::wallet::CoinsSelectionInfo&) override; }; diff --git a/BeamWallet/BeamSDK/WalletModel.mm b/BeamWallet/BeamSDK/WalletModel.mm index 9b7fcb21..09ab7aec 100644 --- a/BeamWallet/BeamSDK/WalletModel.mm +++ b/BeamWallet/BeamSDK/WalletModel.mm @@ -1715,6 +1715,15 @@ static void ensureRulesOnCurrentThread() { } } +void WalletModel::onFullAssetsListLoaded() { + NSArray *delegates = [AppModel sharedManager].delegates.allObjects; + for(id delegate in delegates) { + if ([delegate respondsToSelector:@selector(onAssetInfoChange)]) { + [delegate onAssetInfoChange]; + } + } +} + NSString* WalletModel::GetErrorString(beam::wallet::ErrorType type) { switch (type) diff --git a/BeamWallet/Controls/Cell/BMAmountCell.swift b/BeamWallet/Controls/Cell/BMAmountCell.swift index 62cc17a9..7114c4c4 100644 --- a/BeamWallet/Controls/Cell/BMAmountCell.swift +++ b/BeamWallet/Controls/Cell/BMAmountCell.swift @@ -78,37 +78,45 @@ class BMAmountCell: BaseCell { } } + public var allowAllAssets: Bool = false { + didSet { updateCurrencyInteraction() } + } + + private func updateCurrencyInteraction() { + guard selectedAssetId != nil else { return } + if allowAllAssets || AssetsManager.shared().getAssetsWithBalance().count >= 1 { + currencyView.isUserInteractionEnabled = true + currencyArrow.isHidden = false + } else { + currencyView.isUserInteractionEnabled = false + currencyArrow.isHidden = true + } + } + public var selectedAssetId:Int? { didSet{ - + if selectedAssetId != nil { let asset = AssetsManager.shared().getAsset(Int32(selectedAssetId ?? 0)) currencyLabel.letterSpacing = 2 - + let id = "(\(selectedAssetId ?? 0))" let text = asset?.unitName ?? "" let fullString = text + " " + id - + let attributedString = NSMutableAttributedString(string: fullString) let range = (fullString as NSString).range(of: id) attributedString.addAttribute(.foregroundColor, value: UIColor.white.withAlphaComponent(0.5), range: range) - + currencyLabel.attributedText = attributedString - + if let asset = asset { currencyIcon.setAsset(asset) } - - if AssetsManager.shared().getAssetsWithBalance().count >= 1 { - currencyView.isUserInteractionEnabled = true - currencyArrow.isHidden = false - } - else { - currencyView.isUserInteractionEnabled = false - currencyArrow.isHidden = true - } + + updateCurrencyInteraction() } else { currencyView.isUserInteractionEnabled = false diff --git a/BeamWallet/Controls/Cell/BMCellProtocol.swift b/BeamWallet/Controls/Cell/BMCellProtocol.swift index 1265e477..5354149b 100644 --- a/BeamWallet/Controls/Cell/BMCellProtocol.swift +++ b/BeamWallet/Controls/Cell/BMCellProtocol.swift @@ -33,6 +33,7 @@ protocol GeneralInfoCellDelegate: AnyObject { @objc optional func onClickShare() @objc optional func onClickSave() @objc optional func onClickCopy() + @objc optional func onClickCopyAndClose() @objc optional func onRightButton(_ sender: UITableViewCell) diff --git a/BeamWallet/Protocols/LocalizableStrings.swift b/BeamWallet/Protocols/LocalizableStrings.swift index 40027d6e..98912866 100644 --- a/BeamWallet/Protocols/LocalizableStrings.swift +++ b/BeamWallet/Protocols/LocalizableStrings.swift @@ -429,6 +429,7 @@ class LocalizableStrings : NSObject { var regular = "regular".localized var identity = "identity".localized var sbbs_address_new = "sbbs_address_new".localized + var sbbs_address_hint = "sbbs_address_hint".localized var for_pool = "for_pool".localized var withdraw = "withdraw".localized var withdraw_cofirm = "withdraw_cofirm".localized @@ -496,6 +497,8 @@ class LocalizableStrings : NSObject { var regular_offline_only = "regular_offline_only".localized var sender_choice = "sender_choice".localized var assets = "assets".localized + var select_asset = "select_asset".localized + var search_assets = "search_assets".localized var usage_recent_old = "usage_recent_old".localized var usage_old_recent = "usage_old_recent".localized diff --git a/BeamWallet/ViewControllers/Main/Wallet/Receive/AssetSearchViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Receive/AssetSearchViewController.swift new file mode 100644 index 00000000..75f1a458 --- /dev/null +++ b/BeamWallet/ViewControllers/Main/Wallet/Receive/AssetSearchViewController.swift @@ -0,0 +1,208 @@ +// +// AssetSearchViewController.swift +// BeamWallet +// +// Copyright 2018 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// + +import UIKit + +final class AssetSearchViewController: BaseViewController { + + public var completion: ((BMAsset) -> Void)? + + private let searchView = BMSearchView() + private let tableView = UITableView() + + private var allAssets: [BMAsset] = [] + private var filtered: [BMAsset] = [] + private let initialSelectedId: Int + + init(selectedAssetId: Int) { + self.initialSelectedId = selectedAssetId + super.init(nibName: nil, bundle: nil) + } + + required init?(coder: NSCoder) { + fatalError(Localizable.shared.strings.fatalInitCoderError) + } + + deinit { + AppModel.sharedManager().removeDelegate(self) + } + + override func viewDidLoad() { + super.viewDidLoad() + + setGradientTopBar(mainColor: UIColor.main.brightSkyBlue) + title = Localizable.shared.strings.select_asset.uppercased() + addRightButton(title: Localizable.shared.strings.cancel.lowercased(), target: self, selector: #selector(onCancel), enabled: true) + + searchView.searchField.placeholder = Localizable.shared.strings.search_assets + searchView.onSearchTextChanged = { [weak self] text in + self?.applyFilter(text) + } + searchView.onCancelSearch = { [weak self] in + self?.applyFilter("") + } + view.addSubview(searchView) + + tableView.delegate = self + tableView.dataSource = self + tableView.backgroundColor = .clear + tableView.separatorStyle = .none + tableView.rowHeight = 56 + tableView.keyboardDismissMode = .onDrag + view.addSubview(tableView) + + AppModel.sharedManager().addDelegate(self) + + AppModel.sharedManager().loadFullAssetsList() + + reloadAssets() + } + + override func viewDidLayoutSubviews() { + super.viewDidLayoutSubviews() + let top = navigationBarOffset + searchView.frame = CGRect(x: 0, y: top, width: view.bounds.width, height: 46) + let tableY = searchView.frame.maxY + 6 + tableView.frame = CGRect(x: 0, y: tableY, width: view.bounds.width, height: view.bounds.height - tableY) + } + + @objc private func onCancel() { + dismiss(animated: true) + } + + private func reloadAssets() { + let assets = (AssetsManager.shared().assets as? [BMAsset]) ?? [] + let beam = assets.first(where: { $0.isBeam() }) + let others = assets.filter { !$0.isBeam() } + allAssets = (beam.map { [$0] } ?? []) + others + applyFilter(searchView.searchField.text ?? "") + } + + private func applyFilter(_ text: String) { + let q = text.trimmingCharacters(in: .whitespacesAndNewlines).lowercased() + if q.isEmpty { + filtered = allAssets + } else { + filtered = allAssets.filter { asset in + if asset.unitName.lowercased().contains(q) { return true } + if asset.name.lowercased().contains(q) { return true } + if asset.shortName.lowercased().contains(q) { return true } + if String(asset.assetId).contains(q) { return true } + return false + } + } + tableView.reloadData() + } +} + +extension AssetSearchViewController: UITableViewDataSource, UITableViewDelegate { + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return filtered.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let identifier = "AssetSearchCell" + let cell = tableView.dequeueReusableCell(withIdentifier: identifier) as? AssetSearchCell + ?? AssetSearchCell(style: .default, reuseIdentifier: identifier) + let asset = filtered[indexPath.row] + cell.configure(with: asset, isSelected: Int(asset.assetId) == initialSelectedId) + return cell + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + tableView.deselectRow(at: indexPath, animated: true) + let asset = filtered[indexPath.row] + let completion = self.completion + dismiss(animated: true) { completion?(asset) } + } +} + +extension AssetSearchViewController: WalletModelDelegate { + func onAssetInfoChange() { + DispatchQueue.main.async { [weak self] in self?.reloadAssets() } + } +} + +private final class AssetSearchCell: UITableViewCell { + + private let iconView = AssetIconView() + private let unitLabel = UILabel() + private let idLabel = UILabel() + private let checkmark = UIImageView() + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + + backgroundColor = .clear + contentView.backgroundColor = .clear + selectionStyle = .none + + iconView.frame = CGRect(x: 0, y: 0, width: 26, height: 26) + iconView.translatesAutoresizingMaskIntoConstraints = false + contentView.addSubview(iconView) + iconView.awakeFromNib() + + unitLabel.font = BoldFont(size: 16) + unitLabel.textColor = .white + unitLabel.translatesAutoresizingMaskIntoConstraints = false + unitLabel.setContentCompressionResistancePriority(.required, for: .horizontal) + contentView.addSubview(unitLabel) + + idLabel.font = RegularFont(size: 14) + idLabel.textColor = UIColor.white.withAlphaComponent(0.5) + idLabel.translatesAutoresizingMaskIntoConstraints = false + contentView.addSubview(idLabel) + + checkmark.image = UIImage(named: "iconDoneBlue")?.withRenderingMode(.alwaysTemplate) + checkmark.tintColor = UIColor.main.brightSkyBlue + checkmark.contentMode = .scaleAspectFit + checkmark.translatesAutoresizingMaskIntoConstraints = false + contentView.addSubview(checkmark) + + NSLayoutConstraint.activate([ + iconView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 20), + iconView.centerYAnchor.constraint(equalTo: contentView.centerYAnchor), + iconView.widthAnchor.constraint(equalToConstant: 26), + iconView.heightAnchor.constraint(equalToConstant: 26), + + unitLabel.leadingAnchor.constraint(equalTo: iconView.trailingAnchor, constant: 12), + unitLabel.centerYAnchor.constraint(equalTo: contentView.centerYAnchor), + + idLabel.leadingAnchor.constraint(equalTo: unitLabel.trailingAnchor, constant: 8), + idLabel.centerYAnchor.constraint(equalTo: contentView.centerYAnchor), + idLabel.trailingAnchor.constraint(lessThanOrEqualTo: checkmark.leadingAnchor, constant: -8), + + checkmark.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -20), + checkmark.centerYAnchor.constraint(equalTo: contentView.centerYAnchor), + checkmark.widthAnchor.constraint(equalToConstant: 18), + checkmark.heightAnchor.constraint(equalToConstant: 18), + ]) + + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func setHighlighted(_ highlighted: Bool, animated: Bool) { + super.setHighlighted(highlighted, animated: animated) + contentView.backgroundColor = highlighted ? UIColor.white.withAlphaComponent(0.05) : .clear + } + + func configure(with asset: BMAsset, isSelected: Bool) { + iconView.setAsset(asset) + unitLabel.text = asset.unitName + idLabel.text = "(\(asset.assetId))" + checkmark.isHidden = !isSelected + } +} diff --git a/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveAddressButtonsCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveAddressButtonsCell.swift index 7b59b064..d7720710 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveAddressButtonsCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveAddressButtonsCell.swift @@ -24,19 +24,39 @@ class ReceiveAddressButtonsCell: BaseCell { weak var delegate: BMCellProtocol? + private lazy var copyButton: BMButton = { + let button = BMButton.defaultButton(frame: CGRect(x: 0, y: 0, width: 240, height: 44), color: UIColor.main.brightSkyBlue) + button.translatesAutoresizingMaskIntoConstraints = false + button.setImage(IconCopyBlue(), for: .normal) + button.setTitle(Localizable.shared.strings.copy_address_close.lowercased(), for: .normal) + button.setTitleColor(UIColor.main.marineOriginal, for: .normal) + button.setTitleColor(UIColor.main.marineOriginal.withAlphaComponent(0.5), for: .highlighted) + button.addTarget(self, action: #selector(onCopyAndClose), for: .touchUpInside) + return button + }() + override func awakeFromNib() { super.awakeFromNib() - + allowHighlighted = false selectionStyle = .none - + if Settings.sharedManager().isDarkMode { - infoLabel.textColor = UIColor.main.steel; + infoLabel.textColor = UIColor.main.steel } else { infoLabel.textColor = UIColor.main.blueyGrey } + + contentView.addSubview(copyButton) + NSLayoutConstraint.activate([ + copyButton.topAnchor.constraint(equalTo: infoLabel.bottomAnchor, constant: 24), + copyButton.centerXAnchor.constraint(equalTo: contentView.centerXAnchor), + copyButton.widthAnchor.constraint(equalToConstant: 240), + copyButton.heightAnchor.constraint(equalToConstant: 44), + copyButton.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -24), + ]) } @@ -44,9 +64,7 @@ class ReceiveAddressButtonsCell: BaseCell { infoLabel.text = text } - @IBAction func onShare(sender: UIButton) { - delegate?.onClickShare?() + @objc private func onCopyAndClose() { + delegate?.onClickCopyAndClose?() } } - - diff --git a/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveAddressButtonsCell.xib b/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveAddressButtonsCell.xib index 65c811e2..99d95461 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveAddressButtonsCell.xib +++ b/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveAddressButtonsCell.xib @@ -41,47 +41,14 @@ For the transaction to complete, you should get online during the 12 hours after - - - - - - - - - - - - @@ -93,12 +60,4 @@ For the transaction to complete, you should get online during the 12 hours after - - - - - - - - diff --git a/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveTokenCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveTokenCell.swift index a9b8427c..3b11d8ce 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveTokenCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveTokenCell.swift @@ -9,9 +9,9 @@ import UIKit @objc protocol ReceiveAddressTokensCellDelegate: AnyObject { - @objc optional func onShowToken(token:String) - @objc optional func onShowQR(token:String) - @objc optional func onShareToken(token:String) + @objc optional func onShowToken(token: String) + @objc optional func onShowQR(token: String) + @objc optional func onShareToken(token: String) @objc optional func onCopyToken(token: String) } @@ -19,61 +19,185 @@ class ReceiveTokenCell: BaseCell { weak var delegate: ReceiveAddressTokensCellDelegate? - @IBOutlet private var nameLabel: UILabel! - @IBOutlet private var detailLabel: BMCopyLabel! - @IBOutlet private var detailButton: UIButton! - @IBOutlet private var hintLabel: UILabel! - @IBOutlet private var hintLabelTopOffset: NSLayoutConstraint! - - override func awakeFromNib() { - super.awakeFromNib() - - if Settings.sharedManager().isDarkMode { - hintLabel.textColor = UIColor.main.steel; - } - else { - hintLabel.textColor = UIColor.main.blueyGrey - } - + private let nameLabel = UILabel() + private let detailButton = UIButton(type: .system) + private let detailLabel = BMCopyLabel() + private let copyButton = UIButton(type: .system) + private let qrButton = UIButton(type: .system) + private let shareButton = UIButton(type: .system) + private let sbbsContainer = UIStackView() + private let sbbsSeparator = UIView() + private let sbbsTitleLabel = UILabel() + private let sbbsValueLabel = BMCopyLabel() + private let sbbsCopyButton = UIButton(type: .system) + private let sbbsHintLabel = UILabel() + private let hintLabel = UILabel() + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + setup() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + setup() + } + + private func setup() { + backgroundColor = .clear + contentView.backgroundColor = UIColor.main.marineThree selectionStyle = .none allowHighlighted = false - detailButton.setTitle(Localizable.shared.strings.address_details.lowercased(), for: .normal) - + let accent = UIColor.main.brightSkyBlue + let hintColor = Settings.sharedManager().isDarkMode ? UIColor.main.steel : UIColor.main.blueyGrey + nameLabel.text = Localizable.shared.strings.address.uppercased() + nameLabel.textColor = .white + nameLabel.font = BoldFont(size: 14) + nameLabel.numberOfLines = 1 nameLabel.letterSpacing = 2 - + nameLabel.setContentHuggingPriority(.defaultLow, for: .horizontal) + nameLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal) + + detailButton.setTitle(Localizable.shared.strings.address_details.lowercased(), for: .normal) + detailButton.setTitleColor(accent, for: .normal) + detailButton.contentHorizontalAlignment = .right + detailButton.addTarget(self, action: #selector(onShowTokenTap), for: .touchUpInside) + detailButton.setContentHuggingPriority(.required, for: .horizontal) + detailButton.setContentCompressionResistancePriority(.required, for: .horizontal) + + let titleRow = UIStackView(arrangedSubviews: [nameLabel, detailButton]) + titleRow.axis = .horizontal + titleRow.alignment = .center + titleRow.spacing = 8 + + detailLabel.font = RegularFont(size: 16) + detailLabel.textColor = .white + detailLabel.lineBreakMode = .byTruncatingMiddle + detailLabel.adjustsFontSizeToFitWidth = false detailLabel.copiedText = Localizable.shared.strings.address_copied + + configureIconButton(copyButton, image: UIImage(named: "iconCopyWhite24") ?? UIImage(named: "iconCopyWhite"), tint: accent, action: #selector(onCopyTap)) + configureIconButton(qrButton, image: UIImage(named: "iconScanQr"), tint: accent, action: #selector(onQRTap)) + configureIconButton(shareButton, image: UIImage(named: "iconShareNew"), tint: accent, action: #selector(onShareTap)) + + let actionRow = UIStackView(arrangedSubviews: [copyButton, qrButton, shareButton]) + actionRow.axis = .horizontal + actionRow.alignment = .center + actionRow.distribution = .fillEqually + actionRow.spacing = 16 + + sbbsSeparator.backgroundColor = UIColor.white.withAlphaComponent(0.1) + sbbsSeparator.translatesAutoresizingMaskIntoConstraints = false + sbbsSeparator.heightAnchor.constraint(equalToConstant: 1).isActive = true + + sbbsTitleLabel.text = Localizable.shared.strings.sbbs_address.uppercased() + sbbsTitleLabel.textColor = .white + sbbsTitleLabel.font = BoldFont(size: 14) + sbbsTitleLabel.letterSpacing = 2 + + sbbsValueLabel.font = RegularFont(size: 16) + sbbsValueLabel.textColor = .white + sbbsValueLabel.lineBreakMode = .byTruncatingMiddle + sbbsValueLabel.adjustsFontSizeToFitWidth = false + sbbsValueLabel.copiedText = Localizable.shared.strings.address_copied + sbbsValueLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal) + sbbsValueLabel.setContentHuggingPriority(.defaultLow, for: .horizontal) + + configureIconButton(sbbsCopyButton, image: UIImage(named: "iconCopyWhite24") ?? UIImage(named: "iconCopyWhite"), tint: accent, action: #selector(onCopySBBSTap)) + sbbsCopyButton.setContentHuggingPriority(.required, for: .horizontal) + sbbsCopyButton.setContentCompressionResistancePriority(.required, for: .horizontal) + + let sbbsRow = UIStackView(arrangedSubviews: [sbbsValueLabel, sbbsCopyButton]) + sbbsRow.axis = .horizontal + sbbsRow.alignment = .center + sbbsRow.spacing = 8 + + sbbsHintLabel.font = ItalicFont(size: 12) + sbbsHintLabel.textColor = hintColor + sbbsHintLabel.numberOfLines = 0 + sbbsHintLabel.text = Localizable.shared.strings.sbbs_address_hint + + sbbsContainer.axis = .vertical + sbbsContainer.spacing = 8 + sbbsContainer.addArrangedSubview(sbbsSeparator) + sbbsContainer.addArrangedSubview(sbbsTitleLabel) + sbbsContainer.addArrangedSubview(sbbsRow) + sbbsContainer.addArrangedSubview(sbbsHintLabel) + sbbsContainer.isHidden = true + sbbsContainer.setCustomSpacing(14, after: sbbsSeparator) + sbbsContainer.setCustomSpacing(4, after: sbbsRow) + + hintLabel.font = ItalicFont(size: 12) + hintLabel.textColor = hintColor + hintLabel.numberOfLines = 0 + hintLabel.text = Localizable.shared.strings.receive_address_hint + hintLabel.isHidden = true + + let mainStack = UIStackView(arrangedSubviews: [titleRow, detailLabel, actionRow, sbbsContainer, hintLabel]) + mainStack.axis = .vertical + mainStack.spacing = 14 + mainStack.translatesAutoresizingMaskIntoConstraints = false + mainStack.setCustomSpacing(12, after: detailLabel) + + contentView.addSubview(mainStack) + NSLayoutConstraint.activate([ + mainStack.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 15), + mainStack.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -15), + mainStack.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 20), + mainStack.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -20), + ]) } - override func setSelected(_ selected: Bool, animated: Bool) { - super.setSelected(selected, animated: animated) + private func configureIconButton(_ button: UIButton, image: UIImage?, tint: UIColor, action: Selector) { + button.setImage(image?.withRenderingMode(.alwaysTemplate), for: .normal) + button.tintColor = tint + button.imageView?.contentMode = .scaleAspectFit + button.addTarget(self, action: action, for: .touchUpInside) + button.translatesAutoresizingMaskIntoConstraints = false + button.heightAnchor.constraint(equalToConstant: 32).isActive = true } - - @IBAction func onShowToken(sender: UIButton) { - if let token = detailLabel.text { - self.delegate?.onShowToken?(token: token) - } + + @objc private func onShowTokenTap() { + if let token = detailLabel.text { delegate?.onShowToken?(token: token) } } - - @IBAction func onCopyToken(sender: UIButton) { - if let token = detailLabel.text { - self.delegate?.onCopyToken?(token: token) - } + + @objc private func onCopyTap() { + if let token = detailLabel.text { delegate?.onCopyToken?(token: token) } } - - @IBAction func onQRToken(sender: UIButton) { - if let token = detailLabel.text { - self.delegate?.onShowQR?(token: token) - } + + @objc private func onQRTap() { + if let token = detailLabel.text { delegate?.onShowQR?(token: token) } + } + + @objc private func onShareTap() { + if let token = detailLabel.text { delegate?.onShareToken?(token: token) } + } + + @objc private func onCopySBBSTap() { + guard let token = sbbsValueLabel.text, !token.isEmpty else { return } + delegate?.onCopyToken?(token: token) } - - func configure(with value: String, title:String, showHint:Bool) { + + func configure(with value: String, title: String, sbbsAddress: String?, showHint: Bool) { detailLabel.text = value + detailLabel.copyText = value nameLabel.text = title nameLabel.letterSpacing = 2 + + let trimmedSBBS = sbbsAddress?.trimmingCharacters(in: .whitespacesAndNewlines) + if let sbbs = trimmedSBBS, !sbbs.isEmpty, sbbs != value { + sbbsValueLabel.text = sbbs + sbbsValueLabel.copyText = sbbs + sbbsContainer.isHidden = false + } else { + sbbsValueLabel.text = nil + sbbsValueLabel.copyText = nil + sbbsContainer.isHidden = true + } + hintLabel.isHidden = !showHint hintLabel.text = showHint ? Localizable.shared.strings.receive_address_hint : nil - hintLabelTopOffset.constant = showHint ? 10 : 0 } } diff --git a/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveTokenCell.xib b/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveTokenCell.xib deleted file mode 100644 index f4bb2464..00000000 --- a/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveTokenCell.xib +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - - - - - - SFProDisplay-Bold - - - SFProDisplay-Regular - - - SFProDisplay-Italic - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/BeamWallet/ViewControllers/Main/Wallet/Receive/ReceiveViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Receive/ReceiveViewController.swift index c58d09e2..cf58593c 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Receive/ReceiveViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Receive/ReceiveViewController.swift @@ -53,12 +53,15 @@ class ReceiveViewController: BaseTableViewController { override func viewDidLoad() { super.viewDidLoad() - + setGradientTopBar(mainColor: UIColor.main.brightSkyBlue) - + title = Localizable.shared.strings.receive.uppercased() + + AppModel.sharedManager().loadFullAssetsList() - tableView.register([BMFieldCell.self, ReceiveTransactionTypeCell.self, ReceiveTokenCell.self, BMExpandCell.self, BMAmountCell.self, ReceiveAddressButtonsCell.self]) + tableView.register([BMFieldCell.self, ReceiveTransactionTypeCell.self, BMExpandCell.self, BMAmountCell.self, ReceiveAddressButtonsCell.self]) + tableView.register(ReceiveTokenCell.self, forCellReuseIdentifier: ReceiveTokenCell.reuseIdentifier) tableView.register(UINib(nibName: "BMPickerCell3", bundle: nil), forCellReuseIdentifier: "BMPickerCell3") tableView.keyboardDismissMode = .interactive @@ -132,13 +135,16 @@ class ReceiveViewController: BaseTableViewController { let isOwn = AppModel.sharedManager().checkIsOwnNode() if !isOwn { - tokenCell.configure(with: strongSelf.viewModel.address.walletId, title: Localizable.shared.strings.address.uppercased(), showHint: false) + let token = strongSelf.viewModel.address.walletId + tokenCell.configure(with: token, title: Localizable.shared.strings.address.uppercased(), sbbsAddress: nil, showHint: false) } else if strongSelf.viewModel.transaction == .regular { - tokenCell.configure(with: strongSelf.viewModel.address.offlineToken ?? "", title: Localizable.shared.strings.address.uppercased(), showHint: false) + let token = strongSelf.viewModel.address.offlineToken ?? "" + tokenCell.configure(with: token, title: Localizable.shared.strings.address.uppercased(), sbbsAddress: strongSelf.sbbsAddress(for: token), showHint: false) } else { - tokenCell.configure(with: strongSelf.viewModel.address.maxPrivacyToken ?? "", title: "\(Localizable.shared.strings.address.uppercased()) (\(Localizable.shared.strings.maximum_anonymity.lowercased()))", showHint: false) + let token = strongSelf.viewModel.address.maxPrivacyToken ?? "" + tokenCell.configure(with: token, title: "\(Localizable.shared.strings.address.uppercased()) (\(Localizable.shared.strings.maximum_anonymity.lowercased()))", sbbsAddress: strongSelf.sbbsAddress(for: token), showHint: false) } } } @@ -203,6 +209,13 @@ class ReceiveViewController: BaseTableViewController { searchTableView.view.frame = CGRect(x: 0, y: y, width: view.bounds.width, height: view.bounds.size.height - y) } + private func sbbsAddress(for token: String) -> String? { + guard !token.isEmpty, AppModel.sharedManager().isToken(token) else { return nil } + let params = AppModel.sharedManager().getTransactionParameters(token) + let sbbs = params.address ?? "" + return sbbs.isEmpty ? nil : sbbs + } + @objc private func onBack() { let state = viewModel.isNeedAskToSave() if state != .none { @@ -275,14 +288,17 @@ extension ReceiveViewController : UITableViewDataSource { cell.delegate = self if viewModel.transaction == .regular { if !AppModel.sharedManager().checkIsOwnNode() { - cell.configure(with: viewModel.address.walletId, title: Localizable.shared.strings.address.uppercased(), showHint: false) + let token = viewModel.address.walletId + cell.configure(with: token, title: Localizable.shared.strings.address.uppercased(), sbbsAddress: nil, showHint: false) } else { - cell.configure(with: viewModel.address.offlineToken ?? "", title: Localizable.shared.strings.address.uppercased(), showHint: false) + let token = viewModel.address.offlineToken ?? "" + cell.configure(with: token, title: Localizable.shared.strings.address.uppercased(), sbbsAddress: sbbsAddress(for: token), showHint: false) } } else { - cell.configure(with: viewModel.address.maxPrivacyToken ?? "", title: "\(Localizable.shared.strings.address.uppercased()) (\(Localizable.shared.strings.maximum_anonymity.lowercased()))", showHint: false) + let token = viewModel.address.maxPrivacyToken ?? "" + cell.configure(with: token, title: "\(Localizable.shared.strings.address.uppercased()) (\(Localizable.shared.strings.maximum_anonymity.lowercased()))", sbbsAddress: sbbsAddress(for: token), showHint: false) } return cell } @@ -302,6 +318,7 @@ extension ReceiveViewController : UITableViewDataSource { .dequeueReusableCell(withType: BMAmountCell.self, for: indexPath).configured(with: (name: String.empty(), value: viewModel.amount)) cell.delegate = self cell.hideNameLabel = true + cell.allowAllAssets = true cell.selectedAssetId = viewModel.selectedAssetId cell.contentView.backgroundColor = UIColor.main.marineThree cell.setSecondAmount(amount: viewModel.secondAmount ?? "") @@ -459,14 +476,17 @@ extension ReceiveViewController : BMCellProtocol { else if let tokenCell = cell as? ReceiveTokenCell { if viewModel.transaction == .regular { if !AppModel.sharedManager().checkIsOwnNode() { - tokenCell.configure(with: viewModel.address.walletId, title: Localizable.shared.strings.address.uppercased(), showHint: true) + let token = viewModel.address.walletId + tokenCell.configure(with: token, title: Localizable.shared.strings.address.uppercased(), sbbsAddress: nil, showHint: true) } else { - tokenCell.configure(with: viewModel.address.offlineToken ?? "", title: Localizable.shared.strings.address.uppercased(), showHint: true) + let token = viewModel.address.offlineToken ?? "" + tokenCell.configure(with: token, title: Localizable.shared.strings.address.uppercased(), sbbsAddress: sbbsAddress(for: token), showHint: true) } } else { - tokenCell.configure(with: viewModel.address.maxPrivacyToken ?? "", title: "\(Localizable.shared.strings.address.uppercased()) (\(Localizable.shared.strings.maximum_anonymity.lowercased()))", showHint: false) + let token = viewModel.address.maxPrivacyToken ?? "" + tokenCell.configure(with: token, title: "\(Localizable.shared.strings.address.uppercased()) (\(Localizable.shared.strings.maximum_anonymity.lowercased()))", sbbsAddress: sbbsAddress(for: token), showHint: false) } } } @@ -525,25 +545,19 @@ extension ReceiveViewController : BMCellProtocol { func onRightButton(_ sender: UITableViewCell) { - if tableView.indexPath(for: sender) != nil, let cell = sender as? BMAmountCell { - var menu = [BMPopoverMenu.BMPopoverMenuItem]() - - for asset in AssetsManager.shared().getAssetsWithBalanceWithBeam() as! [BMAsset] { - let m = BMPopoverMenu.BMPopoverMenuItem(name: asset.unitName, icon: nil, action: .asset, selected: self.viewModel.selectedAssetId == Int(asset.assetId)) - m.id = Int(asset.assetId) - menu.append(m) - } - - BMPopoverMenu.showForSenderAssets(sender: cell.currencyView, with: menu) { item in - let asset = AssetsManager.shared().getAsset(Int32(item?.id ?? 0)) - self.viewModel.selectedAssetId = Int(asset?.assetId ?? 0) - self.viewModel.amount = nil - self.tableView.reloadData() - - } cancel: { - self.tableView.reloadData() - } + guard tableView.indexPath(for: sender) != nil, sender is BMAmountCell else { return } + view.endEditing(true) + + let picker = AssetSearchViewController(selectedAssetId: viewModel.selectedAssetId ?? 0) + picker.completion = { [weak self] asset in + guard let self = self else { return } + self.viewModel.selectedAssetId = Int(asset.assetId) + self.viewModel.amount = nil + self.tableView.reloadData() } + let nav = BaseNavigationController.navigationController(rootViewController: picker) + nav.modalPresentationStyle = .fullScreen + present(nav, animated: true, completion: nil) } } @@ -609,6 +623,24 @@ extension ReceiveViewController : ReceiveAddressTokensCellDelegate { } } } + + func onClickCopyAndClose() { + let token: String + if viewModel.transaction == .privacy { + token = viewModel.address.maxPrivacyToken ?? "" + } + else if !AppModel.sharedManager().checkIsOwnNode() { + token = viewModel.address.walletId + } + else { + token = viewModel.address.offlineToken ?? "" + } + guard !token.isEmpty else { return } + UIPasteboard.general.string = token + viewModel.isShared = true + ShowCopied(text: Localizable.shared.strings.address_copied) + back() + } } extension ReceiveViewController : ReceiveTransactionTypeCellDelegate, BMPickerCellDelegate { diff --git a/BeamWallet/ViewControllers/Main/Wallet/Send/SendViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Send/SendViewController.swift index 7073a805..9996027e 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Send/SendViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Send/SendViewController.swift @@ -245,12 +245,6 @@ class SendViewController: BaseTableViewController { super.viewDidAppear(animated) self.isAppear = true - - if viewModel.isNeedFocus { - if let cell = tableView.findCell(BMSearchAddressCell.self) as? BMSearchAddressCell { - cell.beginEditing(text: viewModel.copyAddress) - } - } } override func viewWillAppear(_ animated: Bool) { diff --git a/Resources/cs.lproj/Localizable.strings b/Resources/cs.lproj/Localizable.strings index ff45c344..c529d032 100644 --- a/Resources/cs.lproj/Localizable.strings +++ b/Resources/cs.lproj/Localizable.strings @@ -585,3 +585,7 @@ and never kept on the blockchain."; "website" = "Website"; "beam_conf_asset" = "Beam Confidential Asset"; +"sbbs_address_new" = "SBBS ADDRESS\n(use for CEX withdrawals and mining)"; +"sbbs_address_hint" = "use for CEX withdrawals and mining"; +"select_asset" = "Select asset"; +"search_assets" = "Search assets"; diff --git a/Resources/en.lproj/Localizable.strings b/Resources/en.lproj/Localizable.strings index 67045610..221bfa67 100644 --- a/Resources/en.lproj/Localizable.strings +++ b/Resources/en.lproj/Localizable.strings @@ -701,4 +701,7 @@ and never kept on the blockchain."; "sw" = "Switch"; "search_settings" = "Search by section name or parameter"; "beamx_dao_dao_voting" = "BeamX DAO Voting"; -"sbbs_address_new" = "SBBS ADDRESS\n(use for CEX withdrawals)"; +"sbbs_address_new" = "SBBS ADDRESS\n(use for CEX withdrawals and mining)"; +"sbbs_address_hint" = "use for CEX withdrawals and mining"; +"select_asset" = "Select asset"; +"search_assets" = "Search assets"; diff --git a/Resources/es.lproj/Localizable.strings b/Resources/es.lproj/Localizable.strings index 859a4c9a..1ead4de5 100644 --- a/Resources/es.lproj/Localizable.strings +++ b/Resources/es.lproj/Localizable.strings @@ -585,3 +585,7 @@ and never kept on the blockchain."; "desc_paper" = "Description paper"; "website" = "Website"; "beam_conf_asset" = "Beam Confidential Asset"; +"sbbs_address_new" = "SBBS ADDRESS\n(use for CEX withdrawals and mining)"; +"sbbs_address_hint" = "use for CEX withdrawals and mining"; +"select_asset" = "Select asset"; +"search_assets" = "Search assets"; diff --git a/Resources/fi-FI.lproj/Localizable.strings b/Resources/fi-FI.lproj/Localizable.strings index ff45c344..c529d032 100644 --- a/Resources/fi-FI.lproj/Localizable.strings +++ b/Resources/fi-FI.lproj/Localizable.strings @@ -585,3 +585,7 @@ and never kept on the blockchain."; "website" = "Website"; "beam_conf_asset" = "Beam Confidential Asset"; +"sbbs_address_new" = "SBBS ADDRESS\n(use for CEX withdrawals and mining)"; +"sbbs_address_hint" = "use for CEX withdrawals and mining"; +"select_asset" = "Select asset"; +"search_assets" = "Search assets"; diff --git a/Resources/fr.lproj/Localizable.strings b/Resources/fr.lproj/Localizable.strings index ff45c344..c529d032 100644 --- a/Resources/fr.lproj/Localizable.strings +++ b/Resources/fr.lproj/Localizable.strings @@ -585,3 +585,7 @@ and never kept on the blockchain."; "website" = "Website"; "beam_conf_asset" = "Beam Confidential Asset"; +"sbbs_address_new" = "SBBS ADDRESS\n(use for CEX withdrawals and mining)"; +"sbbs_address_hint" = "use for CEX withdrawals and mining"; +"select_asset" = "Select asset"; +"search_assets" = "Search assets"; diff --git a/Resources/ko.lproj/Localizable.strings b/Resources/ko.lproj/Localizable.strings index ff45c344..c529d032 100644 --- a/Resources/ko.lproj/Localizable.strings +++ b/Resources/ko.lproj/Localizable.strings @@ -585,3 +585,7 @@ and never kept on the blockchain."; "website" = "Website"; "beam_conf_asset" = "Beam Confidential Asset"; +"sbbs_address_new" = "SBBS ADDRESS\n(use for CEX withdrawals and mining)"; +"sbbs_address_hint" = "use for CEX withdrawals and mining"; +"select_asset" = "Select asset"; +"search_assets" = "Search assets"; diff --git a/Resources/nl.lproj/Localizable.strings b/Resources/nl.lproj/Localizable.strings index 859a4c9a..1ead4de5 100644 --- a/Resources/nl.lproj/Localizable.strings +++ b/Resources/nl.lproj/Localizable.strings @@ -585,3 +585,7 @@ and never kept on the blockchain."; "desc_paper" = "Description paper"; "website" = "Website"; "beam_conf_asset" = "Beam Confidential Asset"; +"sbbs_address_new" = "SBBS ADDRESS\n(use for CEX withdrawals and mining)"; +"sbbs_address_hint" = "use for CEX withdrawals and mining"; +"select_asset" = "Select asset"; +"search_assets" = "Search assets"; diff --git a/Resources/ru.lproj/Localizable.strings b/Resources/ru.lproj/Localizable.strings index ff45c344..c529d032 100644 --- a/Resources/ru.lproj/Localizable.strings +++ b/Resources/ru.lproj/Localizable.strings @@ -585,3 +585,7 @@ and never kept on the blockchain."; "website" = "Website"; "beam_conf_asset" = "Beam Confidential Asset"; +"sbbs_address_new" = "SBBS ADDRESS\n(use for CEX withdrawals and mining)"; +"sbbs_address_hint" = "use for CEX withdrawals and mining"; +"select_asset" = "Select asset"; +"search_assets" = "Search assets"; diff --git a/Resources/sv-SE.lproj/Localizable.strings b/Resources/sv-SE.lproj/Localizable.strings index 78a18f8a..d9f7488f 100644 --- a/Resources/sv-SE.lproj/Localizable.strings +++ b/Resources/sv-SE.lproj/Localizable.strings @@ -628,3 +628,7 @@ "h60" = "60 timmar"; "h72" = "72 timmar"; "last_unlock_time" = "Latest unlocked time"; +"sbbs_address_new" = "SBBS ADDRESS\n(use for CEX withdrawals and mining)"; +"sbbs_address_hint" = "use for CEX withdrawals and mining"; +"select_asset" = "Select asset"; +"search_assets" = "Search assets"; diff --git a/Resources/sv.lproj/Localizable.strings b/Resources/sv.lproj/Localizable.strings index ff45c344..c529d032 100644 --- a/Resources/sv.lproj/Localizable.strings +++ b/Resources/sv.lproj/Localizable.strings @@ -585,3 +585,7 @@ and never kept on the blockchain."; "website" = "Website"; "beam_conf_asset" = "Beam Confidential Asset"; +"sbbs_address_new" = "SBBS ADDRESS\n(use for CEX withdrawals and mining)"; +"sbbs_address_hint" = "use for CEX withdrawals and mining"; +"select_asset" = "Select asset"; +"search_assets" = "Search assets"; diff --git a/Resources/th.lproj/Localizable.strings b/Resources/th.lproj/Localizable.strings index ff45c344..c529d032 100644 --- a/Resources/th.lproj/Localizable.strings +++ b/Resources/th.lproj/Localizable.strings @@ -585,3 +585,7 @@ and never kept on the blockchain."; "website" = "Website"; "beam_conf_asset" = "Beam Confidential Asset"; +"sbbs_address_new" = "SBBS ADDRESS\n(use for CEX withdrawals and mining)"; +"sbbs_address_hint" = "use for CEX withdrawals and mining"; +"select_asset" = "Select asset"; +"search_assets" = "Search assets"; diff --git a/Resources/tr.lproj/Localizable.strings b/Resources/tr.lproj/Localizable.strings index ff45c344..c529d032 100644 --- a/Resources/tr.lproj/Localizable.strings +++ b/Resources/tr.lproj/Localizable.strings @@ -585,3 +585,7 @@ and never kept on the blockchain."; "website" = "Website"; "beam_conf_asset" = "Beam Confidential Asset"; +"sbbs_address_new" = "SBBS ADDRESS\n(use for CEX withdrawals and mining)"; +"sbbs_address_hint" = "use for CEX withdrawals and mining"; +"select_asset" = "Select asset"; +"search_assets" = "Search assets"; diff --git a/Resources/vi.lproj/Localizable.strings b/Resources/vi.lproj/Localizable.strings index ff45c344..c529d032 100644 --- a/Resources/vi.lproj/Localizable.strings +++ b/Resources/vi.lproj/Localizable.strings @@ -585,3 +585,7 @@ and never kept on the blockchain."; "website" = "Website"; "beam_conf_asset" = "Beam Confidential Asset"; +"sbbs_address_new" = "SBBS ADDRESS\n(use for CEX withdrawals and mining)"; +"sbbs_address_hint" = "use for CEX withdrawals and mining"; +"select_asset" = "Select asset"; +"search_assets" = "Search assets"; diff --git a/Resources/zh-Hans.lproj/Localizable.strings b/Resources/zh-Hans.lproj/Localizable.strings index 68893577..18302e8f 100644 --- a/Resources/zh-Hans.lproj/Localizable.strings +++ b/Resources/zh-Hans.lproj/Localizable.strings @@ -584,3 +584,7 @@ and never kept on the blockchain."; "desc_paper" = "Description paper"; "website" = "Website"; "beam_conf_asset" = "Beam Confidential Asset"; +"sbbs_address_new" = "SBBS ADDRESS\n(use for CEX withdrawals and mining)"; +"sbbs_address_hint" = "use for CEX withdrawals and mining"; +"select_asset" = "Select asset"; +"search_assets" = "Search assets"; From ac35f7a347895d9d228c92ba668ace23fa9c5570 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Fri, 8 May 2026 18:24:27 +0200 Subject: [PATCH 04/48] bump version --- BeamWallet.xcodeproj/project.pbxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/BeamWallet.xcodeproj/project.pbxproj b/BeamWallet.xcodeproj/project.pbxproj index 758de428..5bc9913a 100644 --- a/BeamWallet.xcodeproj/project.pbxproj +++ b/BeamWallet.xcodeproj/project.pbxproj @@ -5116,7 +5116,7 @@ "$(PROJECT_DIR)", "$(PROJECT_DIR)/Frameworks/boost", ); - MARKETING_VERSION = 7.3; + MARKETING_VERSION = 7.4; OTHER_LDFLAGS = ( "$(inherited)", "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14432/lib/libsqlite.a", @@ -5193,7 +5193,7 @@ "$(PROJECT_DIR)", "$(PROJECT_DIR)/Frameworks/boost", ); - MARKETING_VERSION = 7.3; + MARKETING_VERSION = 7.4; OTHER_LDFLAGS = ( "$(inherited)", "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14432/lib/libsqlite.a", @@ -5436,7 +5436,7 @@ "$(PROJECT_DIR)/Frameworks/testnet", "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14432/lib", ); - MARKETING_VERSION = 7.3; + MARKETING_VERSION = 7.4; OTHER_LDFLAGS = ( "$(inherited)", "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14432/lib/libsqlite.a", @@ -5515,7 +5515,7 @@ "$(PROJECT_DIR)/Frameworks/testnet", "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14432/lib", ); - MARKETING_VERSION = 7.3; + MARKETING_VERSION = 7.4; OTHER_LDFLAGS = ( "$(inherited)", "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14432/lib/libsqlite.a", From 4192ddd59d4adf96017684f6eeea504848b520fe Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Fri, 8 May 2026 18:32:38 +0200 Subject: [PATCH 05/48] #593: better explanations on the receive screen --- BeamWallet/Protocols/LocalizableStrings.swift | 1 - Resources/cs.lproj/Localizable.strings | 3 ++- Resources/en.lproj/Localizable.strings | 5 ++--- Resources/es.lproj/Localizable.strings | 3 ++- Resources/fi-FI.lproj/Localizable.strings | 3 ++- Resources/fr.lproj/Localizable.strings | 3 ++- Resources/ko.lproj/Localizable.strings | 3 ++- Resources/nl.lproj/Localizable.strings | 3 ++- Resources/ru.lproj/Localizable.strings | 3 ++- Resources/sv-SE.lproj/Localizable.strings | 2 ++ Resources/sv.lproj/Localizable.strings | 3 ++- Resources/th.lproj/Localizable.strings | 3 ++- Resources/tr.lproj/Localizable.strings | 3 ++- Resources/vi.lproj/Localizable.strings | 3 ++- Resources/zh-Hans.lproj/Localizable.strings | 3 ++- 15 files changed, 28 insertions(+), 16 deletions(-) diff --git a/BeamWallet/Protocols/LocalizableStrings.swift b/BeamWallet/Protocols/LocalizableStrings.swift index 98912866..8f1aec9d 100644 --- a/BeamWallet/Protocols/LocalizableStrings.swift +++ b/BeamWallet/Protocols/LocalizableStrings.swift @@ -495,7 +495,6 @@ class LocalizableStrings : NSObject { var senf_offline_notice = "senf_offline_notice".localized var regular_online_only = "regular_online_only".localized var regular_offline_only = "regular_offline_only".localized - var sender_choice = "sender_choice".localized var assets = "assets".localized var select_asset = "select_asset".localized var search_assets = "search_assets".localized diff --git a/Resources/cs.lproj/Localizable.strings b/Resources/cs.lproj/Localizable.strings index c529d032..f6caffb5 100644 --- a/Resources/cs.lproj/Localizable.strings +++ b/Resources/cs.lproj/Localizable.strings @@ -564,7 +564,8 @@ and never kept on the blockchain."; "senf_offline_notice" = "Min transaction fee to send offline transaction\nis 0.01 BEAM."; "regular_online_only" = "Regular online-only address"; "regular_offline_only" = "Regular offline-only address"; -"sender_choice" = "Sender will be given a choice between\nregular and offline payment."; +"receive_description" = "Sender will be given a choice between online and offline payment.\n\nFor online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; +"receive_description_2" = "For online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; "assets" = "Assets"; "usage_recent_old" = "Usage: recent to oldest"; "usage_old_recent" = "Usage: oldest to recent"; diff --git a/Resources/en.lproj/Localizable.strings b/Resources/en.lproj/Localizable.strings index 221bfa67..7d161fc5 100644 --- a/Resources/en.lproj/Localizable.strings +++ b/Resources/en.lproj/Localizable.strings @@ -575,7 +575,6 @@ and never kept on the blockchain."; "senf_offline_notice" = "Min transaction fee to send offline transaction\nis 0.01 BEAM."; "regular_online_only" = "Regular online-only address"; "regular_offline_only" = "Regular offline-only address"; -"sender_choice" = "Sender will be given a choice between\nregular and offline payment."; "assets" = "Assets"; "usage_recent_old" = "Usage: recent to oldest"; "usage_old_recent" = "Usage: oldest to recent"; @@ -609,14 +608,14 @@ and never kept on the blockchain."; "transaction_indefinitely" = "Transaction can last indefinitely."; "transaction_time" = "Transaction can last at most %@."; "advanced" = "Advanced"; -"receive_description" = "Sender will be given a choice between regular and offline payment.\n\nFor online payment to complete, you should get online during 12 hours after coins are sent."; +"receive_description" = "Sender will be given a choice between online and offline payment.\n\nFor online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; "max_privacy_fee" = "Min transaction fee is 0.01 BEAM."; "offline_left_address" = "Offline address: %d transactions left."; "offline_left_address_warning" = "Offline address: %d transactions left. Ask receiver to come online to support more offline transactions."; "online_new_status" = "online: random node supports online transactions only"; "online_own_not_conifg" = "online: configure your own node with owner key"; "remote_node_hint" = "To support maximum anonymity set and offline\ntransactions please connect to mobile node\nor own node configured with your owner key."; -"receive_description_2" = "For online payment to complete, you should get online during 12 hours after coins are sent."; +"receive_description_2" = "For online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; "only_online_support" = "You are currently connected to the node\nthat supports only online transactions."; "max_funds_error" = "Insufficient funds to complete the transaction. Maximum amount is %@."; "max_funds_hint" = "Maximum amount is %@"; diff --git a/Resources/es.lproj/Localizable.strings b/Resources/es.lproj/Localizable.strings index 1ead4de5..6f0eb143 100644 --- a/Resources/es.lproj/Localizable.strings +++ b/Resources/es.lproj/Localizable.strings @@ -565,7 +565,8 @@ and never kept on the blockchain."; "senf_offline_notice" = "Min transaction fee to send offline transaction\nis 0.01 BEAM."; "regular_online_only" = "Regular online-only address"; "regular_offline_only" = "Regular offline-only address"; -"sender_choice" = "Sender will be given a choice between\nregular and offline payment."; +"receive_description" = "Sender will be given a choice between online and offline payment.\n\nFor online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; +"receive_description_2" = "For online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; "assets" = "Assets"; "usage_recent_old" = "Usage: recent to oldest"; "usage_old_recent" = "Usage: oldest to recent"; diff --git a/Resources/fi-FI.lproj/Localizable.strings b/Resources/fi-FI.lproj/Localizable.strings index c529d032..f6caffb5 100644 --- a/Resources/fi-FI.lproj/Localizable.strings +++ b/Resources/fi-FI.lproj/Localizable.strings @@ -564,7 +564,8 @@ and never kept on the blockchain."; "senf_offline_notice" = "Min transaction fee to send offline transaction\nis 0.01 BEAM."; "regular_online_only" = "Regular online-only address"; "regular_offline_only" = "Regular offline-only address"; -"sender_choice" = "Sender will be given a choice between\nregular and offline payment."; +"receive_description" = "Sender will be given a choice between online and offline payment.\n\nFor online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; +"receive_description_2" = "For online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; "assets" = "Assets"; "usage_recent_old" = "Usage: recent to oldest"; "usage_old_recent" = "Usage: oldest to recent"; diff --git a/Resources/fr.lproj/Localizable.strings b/Resources/fr.lproj/Localizable.strings index c529d032..f6caffb5 100644 --- a/Resources/fr.lproj/Localizable.strings +++ b/Resources/fr.lproj/Localizable.strings @@ -564,7 +564,8 @@ and never kept on the blockchain."; "senf_offline_notice" = "Min transaction fee to send offline transaction\nis 0.01 BEAM."; "regular_online_only" = "Regular online-only address"; "regular_offline_only" = "Regular offline-only address"; -"sender_choice" = "Sender will be given a choice between\nregular and offline payment."; +"receive_description" = "Sender will be given a choice between online and offline payment.\n\nFor online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; +"receive_description_2" = "For online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; "assets" = "Assets"; "usage_recent_old" = "Usage: recent to oldest"; "usage_old_recent" = "Usage: oldest to recent"; diff --git a/Resources/ko.lproj/Localizable.strings b/Resources/ko.lproj/Localizable.strings index c529d032..f6caffb5 100644 --- a/Resources/ko.lproj/Localizable.strings +++ b/Resources/ko.lproj/Localizable.strings @@ -564,7 +564,8 @@ and never kept on the blockchain."; "senf_offline_notice" = "Min transaction fee to send offline transaction\nis 0.01 BEAM."; "regular_online_only" = "Regular online-only address"; "regular_offline_only" = "Regular offline-only address"; -"sender_choice" = "Sender will be given a choice between\nregular and offline payment."; +"receive_description" = "Sender will be given a choice between online and offline payment.\n\nFor online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; +"receive_description_2" = "For online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; "assets" = "Assets"; "usage_recent_old" = "Usage: recent to oldest"; "usage_old_recent" = "Usage: oldest to recent"; diff --git a/Resources/nl.lproj/Localizable.strings b/Resources/nl.lproj/Localizable.strings index 1ead4de5..6f0eb143 100644 --- a/Resources/nl.lproj/Localizable.strings +++ b/Resources/nl.lproj/Localizable.strings @@ -565,7 +565,8 @@ and never kept on the blockchain."; "senf_offline_notice" = "Min transaction fee to send offline transaction\nis 0.01 BEAM."; "regular_online_only" = "Regular online-only address"; "regular_offline_only" = "Regular offline-only address"; -"sender_choice" = "Sender will be given a choice between\nregular and offline payment."; +"receive_description" = "Sender will be given a choice between online and offline payment.\n\nFor online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; +"receive_description_2" = "For online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; "assets" = "Assets"; "usage_recent_old" = "Usage: recent to oldest"; "usage_old_recent" = "Usage: oldest to recent"; diff --git a/Resources/ru.lproj/Localizable.strings b/Resources/ru.lproj/Localizable.strings index c529d032..f6caffb5 100644 --- a/Resources/ru.lproj/Localizable.strings +++ b/Resources/ru.lproj/Localizable.strings @@ -564,7 +564,8 @@ and never kept on the blockchain."; "senf_offline_notice" = "Min transaction fee to send offline transaction\nis 0.01 BEAM."; "regular_online_only" = "Regular online-only address"; "regular_offline_only" = "Regular offline-only address"; -"sender_choice" = "Sender will be given a choice between\nregular and offline payment."; +"receive_description" = "Sender will be given a choice between online and offline payment.\n\nFor online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; +"receive_description_2" = "For online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; "assets" = "Assets"; "usage_recent_old" = "Usage: recent to oldest"; "usage_old_recent" = "Usage: oldest to recent"; diff --git a/Resources/sv-SE.lproj/Localizable.strings b/Resources/sv-SE.lproj/Localizable.strings index d9f7488f..500f693c 100644 --- a/Resources/sv-SE.lproj/Localizable.strings +++ b/Resources/sv-SE.lproj/Localizable.strings @@ -632,3 +632,5 @@ "sbbs_address_hint" = "use for CEX withdrawals and mining"; "select_asset" = "Select asset"; "search_assets" = "Search assets"; +"receive_description" = "Sender will be given a choice between online and offline payment.\n\nFor online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; +"receive_description_2" = "For online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; diff --git a/Resources/sv.lproj/Localizable.strings b/Resources/sv.lproj/Localizable.strings index c529d032..f6caffb5 100644 --- a/Resources/sv.lproj/Localizable.strings +++ b/Resources/sv.lproj/Localizable.strings @@ -564,7 +564,8 @@ and never kept on the blockchain."; "senf_offline_notice" = "Min transaction fee to send offline transaction\nis 0.01 BEAM."; "regular_online_only" = "Regular online-only address"; "regular_offline_only" = "Regular offline-only address"; -"sender_choice" = "Sender will be given a choice between\nregular and offline payment."; +"receive_description" = "Sender will be given a choice between online and offline payment.\n\nFor online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; +"receive_description_2" = "For online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; "assets" = "Assets"; "usage_recent_old" = "Usage: recent to oldest"; "usage_old_recent" = "Usage: oldest to recent"; diff --git a/Resources/th.lproj/Localizable.strings b/Resources/th.lproj/Localizable.strings index c529d032..f6caffb5 100644 --- a/Resources/th.lproj/Localizable.strings +++ b/Resources/th.lproj/Localizable.strings @@ -564,7 +564,8 @@ and never kept on the blockchain."; "senf_offline_notice" = "Min transaction fee to send offline transaction\nis 0.01 BEAM."; "regular_online_only" = "Regular online-only address"; "regular_offline_only" = "Regular offline-only address"; -"sender_choice" = "Sender will be given a choice between\nregular and offline payment."; +"receive_description" = "Sender will be given a choice between online and offline payment.\n\nFor online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; +"receive_description_2" = "For online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; "assets" = "Assets"; "usage_recent_old" = "Usage: recent to oldest"; "usage_old_recent" = "Usage: oldest to recent"; diff --git a/Resources/tr.lproj/Localizable.strings b/Resources/tr.lproj/Localizable.strings index c529d032..f6caffb5 100644 --- a/Resources/tr.lproj/Localizable.strings +++ b/Resources/tr.lproj/Localizable.strings @@ -564,7 +564,8 @@ and never kept on the blockchain."; "senf_offline_notice" = "Min transaction fee to send offline transaction\nis 0.01 BEAM."; "regular_online_only" = "Regular online-only address"; "regular_offline_only" = "Regular offline-only address"; -"sender_choice" = "Sender will be given a choice between\nregular and offline payment."; +"receive_description" = "Sender will be given a choice between online and offline payment.\n\nFor online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; +"receive_description_2" = "For online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; "assets" = "Assets"; "usage_recent_old" = "Usage: recent to oldest"; "usage_old_recent" = "Usage: oldest to recent"; diff --git a/Resources/vi.lproj/Localizable.strings b/Resources/vi.lproj/Localizable.strings index c529d032..f6caffb5 100644 --- a/Resources/vi.lproj/Localizable.strings +++ b/Resources/vi.lproj/Localizable.strings @@ -564,7 +564,8 @@ and never kept on the blockchain."; "senf_offline_notice" = "Min transaction fee to send offline transaction\nis 0.01 BEAM."; "regular_online_only" = "Regular online-only address"; "regular_offline_only" = "Regular offline-only address"; -"sender_choice" = "Sender will be given a choice between\nregular and offline payment."; +"receive_description" = "Sender will be given a choice between online and offline payment.\n\nFor online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; +"receive_description_2" = "For online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; "assets" = "Assets"; "usage_recent_old" = "Usage: recent to oldest"; "usage_old_recent" = "Usage: oldest to recent"; diff --git a/Resources/zh-Hans.lproj/Localizable.strings b/Resources/zh-Hans.lproj/Localizable.strings index 18302e8f..57b2699c 100644 --- a/Resources/zh-Hans.lproj/Localizable.strings +++ b/Resources/zh-Hans.lproj/Localizable.strings @@ -564,7 +564,8 @@ and never kept on the blockchain."; "senf_offline_notice" = "Min transaction fee to send offline transaction\nis 0.01 BEAM."; "regular_online_only" = "Regular online-only address"; "regular_offline_only" = "Regular offline-only address"; -"sender_choice" = "Sender will be given a choice between\nregular and offline payment."; +"receive_description" = "Sender will be given a choice between online and offline payment.\n\nFor online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; +"receive_description_2" = "For online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; "assets" = "Assets"; "usage_recent_old" = "Usage: recent to oldest"; "usage_old_recent" = "Usage: oldest to recent"; From 8e9ab9e6b638ffcf90fbd5fedb424f533a3099b7 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Fri, 8 May 2026 19:24:31 +0200 Subject: [PATCH 06/48] #589: update sync msg --- Resources/cs.lproj/Localizable.strings | 2 +- Resources/en.lproj/Localizable.strings | 2 +- Resources/es.lproj/Localizable.strings | 2 +- Resources/fi-FI.lproj/Localizable.strings | 2 +- Resources/fr.lproj/Localizable.strings | 2 +- Resources/ko.lproj/Localizable.strings | 2 +- Resources/nl.lproj/Localizable.strings | 2 +- Resources/ru.lproj/Localizable.strings | 2 +- Resources/sv.lproj/Localizable.strings | 2 +- Resources/th.lproj/Localizable.strings | 2 +- Resources/tr.lproj/Localizable.strings | 2 +- Resources/vi.lproj/Localizable.strings | 2 +- Resources/zh-Hans.lproj/Localizable.strings | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Resources/cs.lproj/Localizable.strings b/Resources/cs.lproj/Localizable.strings index f6caffb5..c2c37a4b 100644 --- a/Resources/cs.lproj/Localizable.strings +++ b/Resources/cs.lproj/Localizable.strings @@ -555,7 +555,7 @@ and never kept on the blockchain."; "fast_secure_advance" = "Fast and secure, advanced"; "own_node_text" = "For those who run a node configured with the wallet’s Owner Key."; "connect_to_mobilenode" = "Connecting to Mobile node"; -"syncing_with_blockchain" = "Syncing with blockchain"; +"syncing_with_blockchain" = "Syncing with the blockchain"; "please_no_lock" = "Please do not lock your phone and do not close the wallet."; "wallet_connected_to_mobile_node" = "Wallet connected to Mobile node"; "disconnect" = "Disconnect"; diff --git a/Resources/en.lproj/Localizable.strings b/Resources/en.lproj/Localizable.strings index 7d161fc5..fabaf877 100644 --- a/Resources/en.lproj/Localizable.strings +++ b/Resources/en.lproj/Localizable.strings @@ -566,7 +566,7 @@ and never kept on the blockchain."; "fast_secure_advance" = "Fast and secure, advanced"; "own_node_text" = "For those who run a node configured with the wallet’s Owner Key."; "connect_to_mobilenode" = "Connecting to Mobile node"; -"syncing_with_blockchain" = "Syncing with the blockchain: "; +"syncing_with_blockchain" = "Syncing with the blockchain"; "please_no_lock" = "Please do not lock your phone and do not close the wallet."; "wallet_connected_to_mobile_node" = "Wallet connected to Mobile node"; "disconnect" = "Disconnect"; diff --git a/Resources/es.lproj/Localizable.strings b/Resources/es.lproj/Localizable.strings index 6f0eb143..19d13e6f 100644 --- a/Resources/es.lproj/Localizable.strings +++ b/Resources/es.lproj/Localizable.strings @@ -556,7 +556,7 @@ and never kept on the blockchain."; "fast_secure_advance" = "Fast and secure, advanced"; "own_node_text" = "For those who run a node configured with the wallet’s Owner Key."; "connect_to_mobilenode" = "Connecting to Mobile node"; -"syncing_with_blockchain" = "Syncing with blockchain"; +"syncing_with_blockchain" = "Syncing with the blockchain"; "please_no_lock" = "Please do not lock your phone and do not close the wallet."; "wallet_connected_to_mobile_node" = "Wallet connected to Mobile node"; "disconnect" = "Disconnect"; diff --git a/Resources/fi-FI.lproj/Localizable.strings b/Resources/fi-FI.lproj/Localizable.strings index f6caffb5..c2c37a4b 100644 --- a/Resources/fi-FI.lproj/Localizable.strings +++ b/Resources/fi-FI.lproj/Localizable.strings @@ -555,7 +555,7 @@ and never kept on the blockchain."; "fast_secure_advance" = "Fast and secure, advanced"; "own_node_text" = "For those who run a node configured with the wallet’s Owner Key."; "connect_to_mobilenode" = "Connecting to Mobile node"; -"syncing_with_blockchain" = "Syncing with blockchain"; +"syncing_with_blockchain" = "Syncing with the blockchain"; "please_no_lock" = "Please do not lock your phone and do not close the wallet."; "wallet_connected_to_mobile_node" = "Wallet connected to Mobile node"; "disconnect" = "Disconnect"; diff --git a/Resources/fr.lproj/Localizable.strings b/Resources/fr.lproj/Localizable.strings index f6caffb5..c2c37a4b 100644 --- a/Resources/fr.lproj/Localizable.strings +++ b/Resources/fr.lproj/Localizable.strings @@ -555,7 +555,7 @@ and never kept on the blockchain."; "fast_secure_advance" = "Fast and secure, advanced"; "own_node_text" = "For those who run a node configured with the wallet’s Owner Key."; "connect_to_mobilenode" = "Connecting to Mobile node"; -"syncing_with_blockchain" = "Syncing with blockchain"; +"syncing_with_blockchain" = "Syncing with the blockchain"; "please_no_lock" = "Please do not lock your phone and do not close the wallet."; "wallet_connected_to_mobile_node" = "Wallet connected to Mobile node"; "disconnect" = "Disconnect"; diff --git a/Resources/ko.lproj/Localizable.strings b/Resources/ko.lproj/Localizable.strings index f6caffb5..c2c37a4b 100644 --- a/Resources/ko.lproj/Localizable.strings +++ b/Resources/ko.lproj/Localizable.strings @@ -555,7 +555,7 @@ and never kept on the blockchain."; "fast_secure_advance" = "Fast and secure, advanced"; "own_node_text" = "For those who run a node configured with the wallet’s Owner Key."; "connect_to_mobilenode" = "Connecting to Mobile node"; -"syncing_with_blockchain" = "Syncing with blockchain"; +"syncing_with_blockchain" = "Syncing with the blockchain"; "please_no_lock" = "Please do not lock your phone and do not close the wallet."; "wallet_connected_to_mobile_node" = "Wallet connected to Mobile node"; "disconnect" = "Disconnect"; diff --git a/Resources/nl.lproj/Localizable.strings b/Resources/nl.lproj/Localizable.strings index 6f0eb143..19d13e6f 100644 --- a/Resources/nl.lproj/Localizable.strings +++ b/Resources/nl.lproj/Localizable.strings @@ -556,7 +556,7 @@ and never kept on the blockchain."; "fast_secure_advance" = "Fast and secure, advanced"; "own_node_text" = "For those who run a node configured with the wallet’s Owner Key."; "connect_to_mobilenode" = "Connecting to Mobile node"; -"syncing_with_blockchain" = "Syncing with blockchain"; +"syncing_with_blockchain" = "Syncing with the blockchain"; "please_no_lock" = "Please do not lock your phone and do not close the wallet."; "wallet_connected_to_mobile_node" = "Wallet connected to Mobile node"; "disconnect" = "Disconnect"; diff --git a/Resources/ru.lproj/Localizable.strings b/Resources/ru.lproj/Localizable.strings index f6caffb5..c2c37a4b 100644 --- a/Resources/ru.lproj/Localizable.strings +++ b/Resources/ru.lproj/Localizable.strings @@ -555,7 +555,7 @@ and never kept on the blockchain."; "fast_secure_advance" = "Fast and secure, advanced"; "own_node_text" = "For those who run a node configured with the wallet’s Owner Key."; "connect_to_mobilenode" = "Connecting to Mobile node"; -"syncing_with_blockchain" = "Syncing with blockchain"; +"syncing_with_blockchain" = "Syncing with the blockchain"; "please_no_lock" = "Please do not lock your phone and do not close the wallet."; "wallet_connected_to_mobile_node" = "Wallet connected to Mobile node"; "disconnect" = "Disconnect"; diff --git a/Resources/sv.lproj/Localizable.strings b/Resources/sv.lproj/Localizable.strings index f6caffb5..c2c37a4b 100644 --- a/Resources/sv.lproj/Localizable.strings +++ b/Resources/sv.lproj/Localizable.strings @@ -555,7 +555,7 @@ and never kept on the blockchain."; "fast_secure_advance" = "Fast and secure, advanced"; "own_node_text" = "For those who run a node configured with the wallet’s Owner Key."; "connect_to_mobilenode" = "Connecting to Mobile node"; -"syncing_with_blockchain" = "Syncing with blockchain"; +"syncing_with_blockchain" = "Syncing with the blockchain"; "please_no_lock" = "Please do not lock your phone and do not close the wallet."; "wallet_connected_to_mobile_node" = "Wallet connected to Mobile node"; "disconnect" = "Disconnect"; diff --git a/Resources/th.lproj/Localizable.strings b/Resources/th.lproj/Localizable.strings index f6caffb5..c2c37a4b 100644 --- a/Resources/th.lproj/Localizable.strings +++ b/Resources/th.lproj/Localizable.strings @@ -555,7 +555,7 @@ and never kept on the blockchain."; "fast_secure_advance" = "Fast and secure, advanced"; "own_node_text" = "For those who run a node configured with the wallet’s Owner Key."; "connect_to_mobilenode" = "Connecting to Mobile node"; -"syncing_with_blockchain" = "Syncing with blockchain"; +"syncing_with_blockchain" = "Syncing with the blockchain"; "please_no_lock" = "Please do not lock your phone and do not close the wallet."; "wallet_connected_to_mobile_node" = "Wallet connected to Mobile node"; "disconnect" = "Disconnect"; diff --git a/Resources/tr.lproj/Localizable.strings b/Resources/tr.lproj/Localizable.strings index f6caffb5..c2c37a4b 100644 --- a/Resources/tr.lproj/Localizable.strings +++ b/Resources/tr.lproj/Localizable.strings @@ -555,7 +555,7 @@ and never kept on the blockchain."; "fast_secure_advance" = "Fast and secure, advanced"; "own_node_text" = "For those who run a node configured with the wallet’s Owner Key."; "connect_to_mobilenode" = "Connecting to Mobile node"; -"syncing_with_blockchain" = "Syncing with blockchain"; +"syncing_with_blockchain" = "Syncing with the blockchain"; "please_no_lock" = "Please do not lock your phone and do not close the wallet."; "wallet_connected_to_mobile_node" = "Wallet connected to Mobile node"; "disconnect" = "Disconnect"; diff --git a/Resources/vi.lproj/Localizable.strings b/Resources/vi.lproj/Localizable.strings index f6caffb5..c2c37a4b 100644 --- a/Resources/vi.lproj/Localizable.strings +++ b/Resources/vi.lproj/Localizable.strings @@ -555,7 +555,7 @@ and never kept on the blockchain."; "fast_secure_advance" = "Fast and secure, advanced"; "own_node_text" = "For those who run a node configured with the wallet’s Owner Key."; "connect_to_mobilenode" = "Connecting to Mobile node"; -"syncing_with_blockchain" = "Syncing with blockchain"; +"syncing_with_blockchain" = "Syncing with the blockchain"; "please_no_lock" = "Please do not lock your phone and do not close the wallet."; "wallet_connected_to_mobile_node" = "Wallet connected to Mobile node"; "disconnect" = "Disconnect"; diff --git a/Resources/zh-Hans.lproj/Localizable.strings b/Resources/zh-Hans.lproj/Localizable.strings index 57b2699c..824995c4 100644 --- a/Resources/zh-Hans.lproj/Localizable.strings +++ b/Resources/zh-Hans.lproj/Localizable.strings @@ -555,7 +555,7 @@ and never kept on the blockchain."; "fast_secure_advance" = "Fast and secure, advanced"; "own_node_text" = "For those who run a node configured with the wallet’s Owner Key."; "connect_to_mobilenode" = "Connecting to Mobile node"; -"syncing_with_blockchain" = "Syncing with blockchain"; +"syncing_with_blockchain" = "Syncing with the blockchain"; "please_no_lock" = "Please do not lock your phone and do not close the wallet."; "wallet_connected_to_mobile_node" = "Wallet connected to Mobile node"; "disconnect" = "Disconnect"; From f7c3e5e495ee96728b76ab972104c761dc828931 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sat, 9 May 2026 00:15:20 +0200 Subject: [PATCH 07/48] fix deprecation notice --- BeamWallet/BeamSDK/Objects/BMAsset.m | 44 ++++++++++----------- BeamWallet/BeamSDK/Objects/BMWalletStatus.m | 30 +++++++------- BeamWallet/Controls/BMField.swift | 3 ++ 3 files changed, 39 insertions(+), 38 deletions(-) diff --git a/BeamWallet/BeamSDK/Objects/BMAsset.m b/BeamWallet/BeamSDK/Objects/BMAsset.m index d4c9654d..4a3f5647 100644 --- a/BeamWallet/BeamSDK/Objects/BMAsset.m +++ b/BeamWallet/BeamSDK/Objects/BMAsset.m @@ -79,32 +79,30 @@ -(id)initWithCoder:(NSCoder *)decoder self = [super init]; if(self) { - self.unitName = [decoder decodeObjectForKey: @"unitName"]; - self.nthUnitName = [decoder decodeObjectForKey: @"nthUnitName"]; - self.shortName = [decoder decodeObjectForKey: @"shortName"]; - self.shortDesc = [decoder decodeObjectForKey: @"shortDesc"]; - self.longDesc = [decoder decodeObjectForKey: @"longDesc"]; - self.name = [decoder decodeObjectForKey: @"name"]; - self.color = [decoder decodeObjectForKey: @"color"]; -// self.site = [decoder decodeObjectForKey: @"site"]; - // self.paper = [decoder decodeObjectForKey: @"paper"]; + self.unitName = [decoder decodeObjectOfClass:[NSString class] forKey: @"unitName"]; + self.nthUnitName = [decoder decodeObjectOfClass:[NSString class] forKey: @"nthUnitName"]; + self.shortName = [decoder decodeObjectOfClass:[NSString class] forKey: @"shortName"]; + self.shortDesc = [decoder decodeObjectOfClass:[NSString class] forKey: @"shortDesc"]; + self.longDesc = [decoder decodeObjectOfClass:[NSString class] forKey: @"longDesc"]; + self.name = [decoder decodeObjectOfClass:[NSString class] forKey: @"name"]; + self.color = [decoder decodeObjectOfClass:[NSString class] forKey: @"color"]; self.site = @""; self.paper = @""; - self.available = [[decoder decodeObjectForKey: @"available"] longLongValue]; - self.receiving = [[decoder decodeObjectForKey: @"receiving"] longLongValue]; - self.sending = [[decoder decodeObjectForKey: @"sending"] longLongValue]; - self.assetId = [[decoder decodeObjectForKey: @"assetId"] longLongValue]; - self.shielded = [[decoder decodeObjectForKey: @"shielded"] longLongValue]; - self.maturing = [[decoder decodeObjectForKey: @"maturing"] longLongValue]; - self.maxPrivacy = [[decoder decodeObjectForKey: @"maxPrivacy"] longLongValue]; - - self.realAmount = [[decoder decodeObjectForKey: @"realAmount"] doubleValue]; - self.realReceiving = [[decoder decodeObjectForKey: @"realReceiving"] doubleValue]; - self.realSending = [[decoder decodeObjectForKey: @"realSending"] doubleValue]; - self.realMaturing = [[decoder decodeObjectForKey: @"realMaturing"] doubleValue]; - self.realShielded = [[decoder decodeObjectForKey: @"realShielded"] doubleValue]; - self.realMaxPrivacy = [[decoder decodeObjectForKey: @"realMaxPrivacy"] doubleValue]; + self.available = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"available"] longLongValue]; + self.receiving = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"receiving"] longLongValue]; + self.sending = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"sending"] longLongValue]; + self.assetId = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"assetId"] longLongValue]; + self.shielded = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"shielded"] longLongValue]; + self.maturing = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"maturing"] longLongValue]; + self.maxPrivacy = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"maxPrivacy"] longLongValue]; + + self.realAmount = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"realAmount"] doubleValue]; + self.realReceiving = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"realReceiving"] doubleValue]; + self.realSending = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"realSending"] doubleValue]; + self.realMaturing = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"realMaturing"] doubleValue]; + self.realShielded = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"realShielded"] doubleValue]; + self.realMaxPrivacy = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"realMaxPrivacy"] doubleValue]; } return self; } diff --git a/BeamWallet/BeamSDK/Objects/BMWalletStatus.m b/BeamWallet/BeamSDK/Objects/BMWalletStatus.m index a9135ed7..a4fbfd57 100644 --- a/BeamWallet/BeamSDK/Objects/BMWalletStatus.m +++ b/BeamWallet/BeamSDK/Objects/BMWalletStatus.m @@ -70,23 +70,23 @@ -(id)initWithCoder:(NSCoder *)decoder self = [super init]; if(self) { - self.currentHeight = [decoder decodeObjectForKey: @"currentHeight"]; - self.currentStateHash = [decoder decodeObjectForKey: @"currentStateHash"]; - self.currentStateFullHash = [decoder decodeObjectForKey: @"currentStateFullHash"]; + self.currentHeight = [decoder decodeObjectOfClass:[NSString class] forKey: @"currentHeight"]; + self.currentStateHash = [decoder decodeObjectOfClass:[NSString class] forKey: @"currentStateHash"]; + self.currentStateFullHash = [decoder decodeObjectOfClass:[NSString class] forKey: @"currentStateFullHash"]; - self.available = [[decoder decodeObjectForKey: @"available"] longLongValue]; - self.receiving = [[decoder decodeObjectForKey: @"receiving"] longLongValue]; - self.sending = [[decoder decodeObjectForKey: @"sending"] longLongValue]; - self.maturing = [[decoder decodeObjectForKey: @"maturing"] longLongValue]; - self.shielded = [[decoder decodeObjectForKey: @"shielded"] longLongValue]; - self.maxPrivacy = [[decoder decodeObjectForKey: @"maxPrivacy"] longValue]; + self.available = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"available"] longLongValue]; + self.receiving = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"receiving"] longLongValue]; + self.sending = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"sending"] longLongValue]; + self.maturing = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"maturing"] longLongValue]; + self.shielded = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"shielded"] longLongValue]; + self.maxPrivacy = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"maxPrivacy"] longValue]; - self.realAmount = [[decoder decodeObjectForKey: @"realAmount"] doubleValue]; - self.realReceiving = [[decoder decodeObjectForKey: @"realReceiving"] doubleValue]; - self.realSending = [[decoder decodeObjectForKey: @"realSending"] doubleValue]; - self.realMaturing = [[decoder decodeObjectForKey: @"realMaturing"] doubleValue]; - self.realShielded = [[decoder decodeObjectForKey: @"realShielded"] doubleValue]; - self.realMaxPrivacy = [[decoder decodeObjectForKey: @"realMaxPrivacy"] doubleValue]; + self.realAmount = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"realAmount"] doubleValue]; + self.realReceiving = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"realReceiving"] doubleValue]; + self.realSending = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"realSending"] doubleValue]; + self.realMaturing = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"realMaturing"] doubleValue]; + self.realShielded = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"realShielded"] doubleValue]; + self.realMaxPrivacy = [[decoder decodeObjectOfClass:[NSNumber class] forKey: @"realMaxPrivacy"] doubleValue]; } return self; } diff --git a/BeamWallet/Controls/BMField.swift b/BeamWallet/Controls/BMField.swift index 27303e6a..91507fb2 100644 --- a/BeamWallet/Controls/BMField.swift +++ b/BeamWallet/Controls/BMField.swift @@ -107,6 +107,9 @@ class BMField: BMClearField { _defaultHeight = newValue } } + + @IBInspectable var lineColor: UIColor? + @IBInspectable var lineHeight: CGFloat = 0 private var isInFocus = false { didSet { From 665f0e3fe3d4189561e2e780f73b4562af4838a2 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sat, 9 May 2026 00:15:52 +0200 Subject: [PATCH 08/48] dont set dark mode based on device default the "light" theme is dark enough --- BeamWallet/AppDelegate.swift | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/BeamWallet/AppDelegate.swift b/BeamWallet/AppDelegate.swift index 050049f3..06779c75 100644 --- a/BeamWallet/AppDelegate.swift +++ b/BeamWallet/AppDelegate.swift @@ -105,13 +105,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { } } - if #available(iOS 12.0, *) { - let isDark = self.window?.rootViewController?.traitCollection.userInterfaceStyle == .dark - Settings.sharedManager().setDefaultDarkMode(isDark) - } - else { - Settings.sharedManager().setDefaultDarkMode(false) - } + Settings.sharedManager().setDefaultDarkMode(false) ShortcutManager.launchWithOptions(launchOptions: launchOptions) From 82d2d14b486b7b27ee1735388220cb6cd07173f0 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sat, 9 May 2026 00:16:12 +0200 Subject: [PATCH 09/48] fix wallet crash on dapp store page --- .../Main/DAO/Cell/DAOAppCell.swift | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/BeamWallet/ViewControllers/Main/DAO/Cell/DAOAppCell.swift b/BeamWallet/ViewControllers/Main/DAO/Cell/DAOAppCell.swift index 951e76c5..4fdfcf61 100644 --- a/BeamWallet/ViewControllers/Main/DAO/Cell/DAOAppCell.swift +++ b/BeamWallet/ViewControllers/Main/DAO/Cell/DAOAppCell.swift @@ -19,24 +19,43 @@ class DAOAppCell: RippleCell { override func awakeFromNib() { super.awakeFromNib() - + selectionStyle = .none } + + override func prepareForReuse() { + super.prepareForReuse() + iconView.sd_cancelCurrentImageLoad() + iconView.image = nil + } } extension DAOAppCell: Configurable { - + func configure(with options: (row: Int, app:BMApp)) { - + iconMainView.backgroundColor = UIColor.main.marineThree mainView.backgroundColor = UIColor.white.withAlphaComponent(0.1) - + nameLabel.text = options.app.name + iconView.sd_cancelCurrentImageLoad() if options.app.name.lowercased() == "beamx dao" { iconView.image = UIImage(named: "dao_app_icon") } else { - iconView.sd_setImage(with: URL(string: options.app.icon), completed: nil) + // Force the SVG coder onto its bitmap path. The default vector path + // returns a UIImage backed by a live CGSVGDocumentRef, which CoreSVG + // re-renders on every draw — that crashes when scrolling on iOS 17+. + let pixelSize = CGSize(width: 96, height: 96) // 32pt @3x + let context: [SDWebImageContextOption: Any] = [ + .imageThumbnailPixelSize: NSValue(cgSize: pixelSize), + .imagePreserveAspectRatio: true, + ] + iconView.sd_setImage( + with: URL(string: options.app.icon), + placeholderImage: nil, + context: context + ) } if options.app.isSupported { From 09fcf8bcc0476bf017fdc5031b4c5425b21f1f67 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sat, 9 May 2026 01:58:56 +0200 Subject: [PATCH 10/48] Beam Messenger --- BeamWallet.xcodeproj/project.pbxproj | 106 +++++- BeamWallet/BeamSDK/AppModel.h | 21 ++ BeamWallet/BeamSDK/AppModel.mm | 161 ++++++++- BeamWallet/BeamSDK/Objects/BMChat.h | 33 ++ BeamWallet/BeamSDK/Objects/BMChat.mm | 44 +++ BeamWallet/BeamSDK/Objects/BMInstantMessage.h | 33 ++ .../BeamSDK/Objects/BMInstantMessage.mm | 42 +++ BeamWallet/BeamSDK/WalletModel.h | 4 + BeamWallet/BeamSDK/WalletModel.mm | 186 +++++++++- .../MessengerChatListViewModel.swift | 68 ++++ .../MessengerConversationViewModel.swift | 92 +++++ BeamWallet/Protocols/LocalizableStrings.swift | 9 + BeamWallet/Protocols/Resources.swift | 4 + .../Main/Menu/LeftMenuViewController.swift | 4 + .../Main/Messenger/MessengerBubbleCell.swift | 107 ++++++ .../Main/Messenger/MessengerChatCell.swift | 157 ++++++++ .../MessengerChatListViewController.swift | 120 +++++++ .../MessengerChatViewController.swift | 339 ++++++++++++++++++ .../MessengerNewChatViewController.swift | 243 +++++++++++++ .../iconMessenger.imageset/Contents.json | 23 ++ .../iconMessenger.imageset/iconMessenger.png | Bin 0 -> 1491 bytes .../iconMessenger@2x.png | Bin 0 -> 3269 bytes .../iconMessenger@3x.png | Bin 0 -> 5122 bytes Resources/cs.lproj/Localizable.strings | 10 + Resources/en.lproj/Localizable.strings | 10 + Resources/es.lproj/Localizable.strings | 10 + Resources/fi-FI.lproj/Localizable.strings | 10 + Resources/fr.lproj/Localizable.strings | 10 + Resources/ko.lproj/Localizable.strings | 10 + Resources/nl.lproj/Localizable.strings | 10 + Resources/ru.lproj/Localizable.strings | 10 + Resources/sv-SE.lproj/Localizable.strings | 10 + Resources/sv.lproj/Localizable.strings | 10 + Resources/th.lproj/Localizable.strings | 10 + Resources/tr.lproj/Localizable.strings | 10 + Resources/vi.lproj/Localizable.strings | 10 + Resources/zh-Hans.lproj/Localizable.strings | 10 + 37 files changed, 1927 insertions(+), 9 deletions(-) create mode 100644 BeamWallet/BeamSDK/Objects/BMChat.h create mode 100644 BeamWallet/BeamSDK/Objects/BMChat.mm create mode 100644 BeamWallet/BeamSDK/Objects/BMInstantMessage.h create mode 100644 BeamWallet/BeamSDK/Objects/BMInstantMessage.mm create mode 100644 BeamWallet/Model/Messenger/MessengerChatListViewModel.swift create mode 100644 BeamWallet/Model/Messenger/MessengerConversationViewModel.swift create mode 100644 BeamWallet/ViewControllers/Main/Messenger/MessengerBubbleCell.swift create mode 100644 BeamWallet/ViewControllers/Main/Messenger/MessengerChatCell.swift create mode 100644 BeamWallet/ViewControllers/Main/Messenger/MessengerChatListViewController.swift create mode 100644 BeamWallet/ViewControllers/Main/Messenger/MessengerChatViewController.swift create mode 100644 BeamWallet/ViewControllers/Main/Messenger/MessengerNewChatViewController.swift create mode 100644 Resources/Assets.xcassets/iconMessenger.imageset/Contents.json create mode 100644 Resources/Assets.xcassets/iconMessenger.imageset/iconMessenger.png create mode 100644 Resources/Assets.xcassets/iconMessenger.imageset/iconMessenger@2x.png create mode 100644 Resources/Assets.xcassets/iconMessenger.imageset/iconMessenger@3x.png diff --git a/BeamWallet.xcodeproj/project.pbxproj b/BeamWallet.xcodeproj/project.pbxproj index 5bc9913a..2229df62 100644 --- a/BeamWallet.xcodeproj/project.pbxproj +++ b/BeamWallet.xcodeproj/project.pbxproj @@ -7,9 +7,27 @@ objects = { /* Begin PBXBuildFile section */ + 00947887B27F2F825E1E67CC /* MessengerNewChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13CF5C205DC060CADA96F025 /* MessengerNewChatViewController.swift */; }; + 05548629568C6211F87DA630 /* MessengerChatListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DFF1052A687C5F2265E618F /* MessengerChatListViewController.swift */; }; + 066620C96ABA1816759B7AE3 /* MessengerConversationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A439F6A64EB61AD3DF6945B /* MessengerConversationViewModel.swift */; }; 09BB8194C318850B9C687050 /* Pods_BeamWallet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B5894AC3136298FE0B7E8E3 /* Pods_BeamWallet.framework */; }; 0E952497DFB46C7621546999 /* Pods_BeamWalletTestNet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 36A85446EDA45DA6335930C5 /* Pods_BeamWalletTestNet.framework */; }; + 14458CA45E1281FAF80D496D /* MessengerNewChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13CF5C205DC060CADA96F025 /* MessengerNewChatViewController.swift */; }; + 215454B3AA22BD789F53A90C /* BMChat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8C5EB5519EB54866BA8DB9A4 /* BMChat.mm */; }; + 2361D1F909D78EC50B8C5D5C /* MessengerConversationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A439F6A64EB61AD3DF6945B /* MessengerConversationViewModel.swift */; }; + 30BE993E2DFFA6452A536125 /* BMInstantMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = 20B7F5341703980CD2D3941F /* BMInstantMessage.mm */; }; + 35726BA6BFE79F50A19E7054 /* MessengerChatCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390F813D5F08AC3C0F47183F /* MessengerChatCell.swift */; }; + 434CC206E4AD461CECAD5DFB /* BMInstantMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = 20B7F5341703980CD2D3941F /* BMInstantMessage.mm */; }; + 492305E92FA7A41129BF7346 /* MessengerBubbleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E08B41CEDA5A06EBFD775E76 /* MessengerBubbleCell.swift */; }; + 4D7C86E3D4DAAAD7DDFE22E7 /* MessengerChatListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DFF1052A687C5F2265E618F /* MessengerChatListViewController.swift */; }; 53E3D6F8F19BD21A69380CBA /* Pods_BeamWalletMasterNet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18CF009621EA8E5970DA1D87 /* Pods_BeamWalletMasterNet.framework */; }; + 5A1A647678A2061222332D16 /* MessengerChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E4020D11686B93F29A46DA /* MessengerChatViewController.swift */; }; + 5A4A0ACB5C6CA50F1E5FCBE8 /* MessengerChatListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFF464435B3D65DCFC432FA3 /* MessengerChatListViewModel.swift */; }; + 69B13BFFB153BF4611F30888 /* MessengerNewChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13CF5C205DC060CADA96F025 /* MessengerNewChatViewController.swift */; }; + 75516585C510BB694A1B9AED /* MessengerBubbleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E08B41CEDA5A06EBFD775E76 /* MessengerBubbleCell.swift */; }; + 75B069A9EC9A517ABCACFC1E /* MessengerChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E4020D11686B93F29A46DA /* MessengerChatViewController.swift */; }; + 87B508D6F91B6BCDE6EC712F /* BMInstantMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = 20B7F5341703980CD2D3941F /* BMInstantMessage.mm */; }; + 8E6EABD786898410576636A4 /* BMChat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8C5EB5519EB54866BA8DB9A4 /* BMChat.mm */; }; 9207DD8726778DF900250E80 /* AssetsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9207DD8626778DF900250E80 /* AssetsViewController.swift */; }; 9207DD8826778DF900250E80 /* AssetsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9207DD8626778DF900250E80 /* AssetsViewController.swift */; }; 9207DD8926778DF900250E80 /* AssetsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9207DD8626778DF900250E80 /* AssetsViewController.swift */; }; @@ -608,9 +626,6 @@ 9265CDCF2292F233003C98B2 /* ReceiveViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9265CDCE2292F233003C98B2 /* ReceiveViewController.swift */; }; 9265CDD02292F233003C98B2 /* ReceiveViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9265CDCE2292F233003C98B2 /* ReceiveViewController.swift */; }; 9265CDD12292F233003C98B2 /* ReceiveViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9265CDCE2292F233003C98B2 /* ReceiveViewController.swift */; }; - F0F0F0F0AAAA0002ABCD0001 /* AssetSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */; }; - F0F0F0F0AAAA0003ABCD0001 /* AssetSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */; }; - F0F0F0F0AAAA0004ABCD0001 /* AssetSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */; }; 926783832456DE29006F3221 /* boost.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 926783822456DE29006F3221 /* boost.framework */; }; 926783842456DE29006F3221 /* boost.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 926783822456DE29006F3221 /* boost.framework */; }; 926783852456DE29006F3221 /* boost.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 926783822456DE29006F3221 /* boost.framework */; }; @@ -1354,6 +1369,18 @@ 92FE264122A11E4E00102DB4 /* BMExpandCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 92FE263A22A11E4D00102DB4 /* BMExpandCell.xib */; }; 92FE264222A11E4E00102DB4 /* BMExpandCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 92FE263A22A11E4D00102DB4 /* BMExpandCell.xib */; }; 92FE264322A11E4E00102DB4 /* BMExpandCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 92FE263A22A11E4D00102DB4 /* BMExpandCell.xib */; }; + 984E5950BBB86D093251AB57 /* MessengerChatCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390F813D5F08AC3C0F47183F /* MessengerChatCell.swift */; }; + 9C3478CC0AB10D577E97E53E /* MessengerChatListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFF464435B3D65DCFC432FA3 /* MessengerChatListViewModel.swift */; }; + 9E75E31529DE385C7D153631 /* MessengerChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E4020D11686B93F29A46DA /* MessengerChatViewController.swift */; }; + A04389E8E8EE7AB9E4D87007 /* BMChat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8C5EB5519EB54866BA8DB9A4 /* BMChat.mm */; }; + B5E7CC16D70E7D12DD9315FC /* MessengerConversationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A439F6A64EB61AD3DF6945B /* MessengerConversationViewModel.swift */; }; + DFC07B98C98F293C31F86A8C /* MessengerChatListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DFF1052A687C5F2265E618F /* MessengerChatListViewController.swift */; }; + E6218D6C7C5BE83B9707F158 /* MessengerChatCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390F813D5F08AC3C0F47183F /* MessengerChatCell.swift */; }; + EEE47E74C114A85B33A3A618 /* MessengerChatListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFF464435B3D65DCFC432FA3 /* MessengerChatListViewModel.swift */; }; + F0F0F0F0AAAA0002ABCD0001 /* AssetSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */; }; + F0F0F0F0AAAA0003ABCD0001 /* AssetSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */; }; + F0F0F0F0AAAA0004ABCD0001 /* AssetSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */; }; + FD87FA1DDA9C27F19451AB4B /* MessengerBubbleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E08B41CEDA5A06EBFD775E76 /* MessengerBubbleCell.swift */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -1434,10 +1461,18 @@ /* Begin PBXFileReference section */ 024109A68A03B9C8D11B9895 /* Pods-BeamWallet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeamWallet.release.xcconfig"; path = "Target Support Files/Pods-BeamWallet/Pods-BeamWallet.release.xcconfig"; sourceTree = ""; }; + 13CF5C205DC060CADA96F025 /* MessengerNewChatViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerNewChatViewController.swift; sourceTree = ""; }; 18CF009621EA8E5970DA1D87 /* Pods_BeamWalletMasterNet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_BeamWalletMasterNet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 20B7F5341703980CD2D3941F /* BMInstantMessage.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = BMInstantMessage.mm; sourceTree = ""; }; + 35296D58A729F092AFF0C821 /* BMChat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BMChat.h; sourceTree = ""; }; 36A85446EDA45DA6335930C5 /* Pods_BeamWalletTestNet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_BeamWalletTestNet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 390F813D5F08AC3C0F47183F /* MessengerChatCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerChatCell.swift; sourceTree = ""; }; 3B5894AC3136298FE0B7E8E3 /* Pods_BeamWallet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_BeamWallet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 456B838BA83C92E05D36B091 /* Pods-BeamWalletTestNet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeamWalletTestNet.release.xcconfig"; path = "Target Support Files/Pods-BeamWalletTestNet/Pods-BeamWalletTestNet.release.xcconfig"; sourceTree = ""; }; + 46CAE6BC4C48E30E26AE304F /* BMInstantMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BMInstantMessage.h; sourceTree = ""; }; + 7A439F6A64EB61AD3DF6945B /* MessengerConversationViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerConversationViewModel.swift; sourceTree = ""; }; + 8C5EB5519EB54866BA8DB9A4 /* BMChat.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = BMChat.mm; sourceTree = ""; }; + 8DFF1052A687C5F2265E618F /* MessengerChatListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerChatListViewController.swift; sourceTree = ""; }; 9205284E237B11F1001F8E31 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = ""; }; 9205284F237B11F1001F8E31 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/InfoPlist.strings; sourceTree = ""; }; 9207DD8626778DF900250E80 /* AssetsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetsViewController.swift; sourceTree = ""; }; @@ -1692,7 +1727,6 @@ 9261C255228BF55800D666E0 /* AddressExpiresCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddressExpiresCell.swift; sourceTree = ""; }; 9261C259228BF55800D666E0 /* AddressesViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddressesViewController.swift; sourceTree = ""; }; 9265CDCE2292F233003C98B2 /* ReceiveViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReceiveViewController.swift; sourceTree = ""; }; - F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetSearchViewController.swift; sourceTree = ""; }; 926783822456DE29006F3221 /* boost.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = boost.framework; sourceTree = ""; }; 9267D05F270DCA6000804314 /* AssetExporerCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetExporerCell.swift; sourceTree = ""; }; 9267D060270DCA6000804314 /* AssetExporerCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AssetExporerCell.xib; sourceTree = ""; }; @@ -1975,10 +2009,14 @@ 92FE263822A11E4900102DB4 /* BMPickedAddressCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = BMPickedAddressCell.xib; sourceTree = ""; }; 92FE263922A11E4B00102DB4 /* BMExpandCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BMExpandCell.swift; sourceTree = ""; }; 92FE263A22A11E4D00102DB4 /* BMExpandCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = BMExpandCell.xib; sourceTree = ""; }; + AFF464435B3D65DCFC432FA3 /* MessengerChatListViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerChatListViewModel.swift; sourceTree = ""; }; BA659A4953BE271B118EB5D6 /* Pods-BeamWalletMasterNet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeamWalletMasterNet.debug.xcconfig"; path = "Target Support Files/Pods-BeamWalletMasterNet/Pods-BeamWalletMasterNet.debug.xcconfig"; sourceTree = ""; }; D303009FB5F0DA4093A89DFB /* Pods-BeamWalletTestNet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeamWalletTestNet.debug.xcconfig"; path = "Target Support Files/Pods-BeamWalletTestNet/Pods-BeamWalletTestNet.debug.xcconfig"; sourceTree = ""; }; D601ED375D9C9B9FAB70DE0B /* Pods-BeamWallet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeamWallet.debug.xcconfig"; path = "Target Support Files/Pods-BeamWallet/Pods-BeamWallet.debug.xcconfig"; sourceTree = ""; }; + E08B41CEDA5A06EBFD775E76 /* MessengerBubbleCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerBubbleCell.swift; sourceTree = ""; }; EAEED72AAED404575AB9A6E5 /* Pods-BeamWalletMasterNet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeamWalletMasterNet.release.xcconfig"; path = "Target Support Files/Pods-BeamWalletMasterNet/Pods-BeamWalletMasterNet.release.xcconfig"; sourceTree = ""; }; + F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetSearchViewController.swift; sourceTree = ""; }; + F9E4020D11686B93F29A46DA /* MessengerChatViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerChatViewController.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -2111,6 +2149,19 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 8110C1340F23638CECA5A0CA /* Messenger */ = { + isa = PBXGroup; + children = ( + 8DFF1052A687C5F2265E618F /* MessengerChatListViewController.swift */, + F9E4020D11686B93F29A46DA /* MessengerChatViewController.swift */, + 13CF5C205DC060CADA96F025 /* MessengerNewChatViewController.swift */, + E08B41CEDA5A06EBFD775E76 /* MessengerBubbleCell.swift */, + 390F813D5F08AC3C0F47183F /* MessengerChatCell.swift */, + ); + name = Messenger; + path = Messenger; + sourceTree = ""; + }; 9207DD8526778DD500250E80 /* Assets */ = { isa = PBXGroup; children = ( @@ -2361,7 +2412,7 @@ 9253A76F25A5C6A500E456A2 /* openssl.framework */, 92E2EB8D226F24C200367928 /* masternet */, 92D3CBF02264B56D007E3C55 /* testnet */, - 92D3CBD32264B562007E3C55 /* beam-ios-7.5.14432/lib */, + 92D3CBD32264B562007E3C55 /* lib */, 927367212277AB330060CB67 /* UserNotifications.framework */, 927367232277AB340060CB67 /* UserNotificationsUI.framework */, 3B5894AC3136298FE0B7E8E3 /* Pods_BeamWallet.framework */, @@ -2452,6 +2503,10 @@ 92FA196C266F893D002780DC /* BMAsset.m */, 926DB36F26DFC91A00E85F0B /* BMApp.h */, 926DB37026DFC91A00E85F0B /* BMApp.m */, + 46CAE6BC4C48E30E26AE304F /* BMInstantMessage.h */, + 20B7F5341703980CD2D3941F /* BMInstantMessage.mm */, + 35296D58A729F092AFF0C821 /* BMChat.h */, + 8C5EB5519EB54866BA8DB9A4 /* BMChat.mm */, ); path = Objects; sourceTree = ""; @@ -2469,6 +2524,7 @@ 92554D1622896BE600FE6041 /* Addresses */, 92F6B79C22A5B6C60055C3C3 /* QRCode */, 923A45D5235DE4000084C368 /* Passwords */, + 8110C1340F23638CECA5A0CA /* Messenger */, ); path = Main; sourceTree = ""; @@ -2952,7 +3008,7 @@ path = Images; sourceTree = ""; }; - 92D3CBD32264B562007E3C55 /* beam-ios-7.5.14432/lib */ = { + 92D3CBD32264B562007E3C55 /* lib */ = { isa = PBXGroup; children = ( 9244A4F12A014658007B03D0 /* libassets.a */, @@ -3192,6 +3248,7 @@ 92B7E4E822AFD71B001708E4 /* Transaction */, 92B7E4E622AFD70D001708E4 /* UTXO */, 92B7E4E922AFD748001708E4 /* Settings */, + CD37C67AA40FF44BBFFD57B4 /* Messenger */, ); path = Model; sourceTree = ""; @@ -3239,6 +3296,16 @@ path = Pods; sourceTree = ""; }; + CD37C67AA40FF44BBFFD57B4 /* Messenger */ = { + isa = PBXGroup; + children = ( + AFF464435B3D65DCFC432FA3 /* MessengerChatListViewModel.swift */, + 7A439F6A64EB61AD3DF6945B /* MessengerConversationViewModel.swift */, + ); + name = Messenger; + path = Messenger; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -4220,6 +4287,15 @@ 92B837492285816D002B385B /* Progress.swift in Sources */, 9265CDCF2292F233003C98B2 /* ReceiveViewController.swift in Sources */, F0F0F0F0AAAA0002ABCD0001 /* AssetSearchViewController.swift in Sources */, + 30BE993E2DFFA6452A536125 /* BMInstantMessage.mm in Sources */, + 8E6EABD786898410576636A4 /* BMChat.mm in Sources */, + 5A4A0ACB5C6CA50F1E5FCBE8 /* MessengerChatListViewModel.swift in Sources */, + 066620C96ABA1816759B7AE3 /* MessengerConversationViewModel.swift in Sources */, + 4D7C86E3D4DAAAD7DDFE22E7 /* MessengerChatListViewController.swift in Sources */, + 75B069A9EC9A517ABCACFC1E /* MessengerChatViewController.swift in Sources */, + 14458CA45E1281FAF80D496D /* MessengerNewChatViewController.swift in Sources */, + 75516585C510BB694A1B9AED /* MessengerBubbleCell.swift in Sources */, + 35726BA6BFE79F50A19E7054 /* MessengerChatCell.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4544,6 +4620,15 @@ 92B8374A2285816D002B385B /* Progress.swift in Sources */, 9265CDD02292F233003C98B2 /* ReceiveViewController.swift in Sources */, F0F0F0F0AAAA0003ABCD0001 /* AssetSearchViewController.swift in Sources */, + 87B508D6F91B6BCDE6EC712F /* BMInstantMessage.mm in Sources */, + A04389E8E8EE7AB9E4D87007 /* BMChat.mm in Sources */, + 9C3478CC0AB10D577E97E53E /* MessengerChatListViewModel.swift in Sources */, + 2361D1F909D78EC50B8C5D5C /* MessengerConversationViewModel.swift in Sources */, + DFC07B98C98F293C31F86A8C /* MessengerChatListViewController.swift in Sources */, + 9E75E31529DE385C7D153631 /* MessengerChatViewController.swift in Sources */, + 00947887B27F2F825E1E67CC /* MessengerNewChatViewController.swift in Sources */, + 492305E92FA7A41129BF7346 /* MessengerBubbleCell.swift in Sources */, + 984E5950BBB86D093251AB57 /* MessengerChatCell.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4868,6 +4953,15 @@ 92B8374B2285816D002B385B /* Progress.swift in Sources */, 9265CDD12292F233003C98B2 /* ReceiveViewController.swift in Sources */, F0F0F0F0AAAA0004ABCD0001 /* AssetSearchViewController.swift in Sources */, + 434CC206E4AD461CECAD5DFB /* BMInstantMessage.mm in Sources */, + 215454B3AA22BD789F53A90C /* BMChat.mm in Sources */, + EEE47E74C114A85B33A3A618 /* MessengerChatListViewModel.swift in Sources */, + B5E7CC16D70E7D12DD9315FC /* MessengerConversationViewModel.swift in Sources */, + 05548629568C6211F87DA630 /* MessengerChatListViewController.swift in Sources */, + 5A1A647678A2061222332D16 /* MessengerChatViewController.swift in Sources */, + 69B13BFFB153BF4611F30888 /* MessengerNewChatViewController.swift in Sources */, + FD87FA1DDA9C27F19451AB4B /* MessengerBubbleCell.swift in Sources */, + E6218D6C7C5BE83B9707F158 /* MessengerChatCell.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/BeamWallet/BeamSDK/AppModel.h b/BeamWallet/BeamSDK/AppModel.h index 7797d895..a15e2baf 100644 --- a/BeamWallet/BeamSDK/AppModel.h +++ b/BeamWallet/BeamSDK/AppModel.h @@ -44,6 +44,8 @@ #import "AssetsManager.h" #import "StringManager.h" #import "BMApp.h" +#import "BMInstantMessage.h" +#import "BMChat.h" enum { BMRestoreManual = 0, @@ -81,6 +83,10 @@ typedef int BMRestoreType; -(void)onMaxPrivacyTokensLeft:(int)tokens; -(void)onAssetInfoChange; -(void)onDAPPsLoaded; +-(void)onChatListChanged; +-(void)onChatMessagesLoaded:(NSString*_Nonnull)peerWalletId messages:(NSArray*_Nonnull)messages; +-(void)onInstantMessageReceived:(BMInstantMessage*_Nonnull)message; +-(void)onChatRemoved:(NSString*_Nonnull)peerWalletId; @end typedef void(^NewAddressGeneratedBlock)(BMAddress* _Nullable address, NSError* _Nullable error); @@ -126,6 +132,8 @@ typedef void(^ExportCSVBlock)(NSString * _Nonnull data, NSURL * _Nonnull url); @property (nonatomic,strong) NSMutableDictionary*_Nonnull deletedNotifications; @property (nonatomic,strong) NSMutableArray*_Nonnull apps; @property (nonatomic,strong) NSMutableDictionary*_Nonnull needSaveContacts; +@property (nonatomic,strong) NSMutableArray*_Nonnull chats; +@property (nonatomic,strong) NSMutableDictionary*>*_Nonnull messagesByPeer; @property (nonatomic, strong) NSTimer * _Nullable connectionTimer; @property (nonatomic, strong) NSTimer * _Nullable connectionAfterOnlineTimer; @@ -332,4 +340,17 @@ typedef void(^ExportCSVBlock)(NSString * _Nonnull data, NSURL * _Nonnull url); -(BMApp*_Nonnull)daoFaucetApp; -(BMApp*_Nonnull)votingApp; +// Messenger +-(void)requestChats; +-(void)requestMessagesForPeer:(NSString*_Nonnull)peerWalletId; +-(void)sendInstantMessage:(NSString*_Nonnull)peerWalletId + fromAddress:(NSString*_Nonnull)myWalletId + message:(NSString*_Nonnull)message; +-(void)markChatAsRead:(NSString*_Nonnull)peerWalletId; +-(void)removeChat:(NSString*_Nonnull)peerWalletId; +-(void)addChatStub:(NSString*_Nonnull)peerWalletId contactName:(NSString*_Nullable)contactName myWalletId:(NSString*_Nullable)myWalletId; +-(NSArray*_Nonnull)cachedMessagesForPeer:(NSString*_Nonnull)peerWalletId; +-(NSString*_Nullable)lastMyAddressForPeer:(NSString*_Nonnull)peerWalletId; +-(NSString*_Nonnull)resolvedPeerWalletId:(NSString*_Nonnull)peerWalletId; + @end diff --git a/BeamWallet/BeamSDK/AppModel.mm b/BeamWallet/BeamSDK/AppModel.mm index 2e8f44e3..5082817f 100644 --- a/BeamWallet/BeamSDK/AppModel.mm +++ b/BeamWallet/BeamSDK/AppModel.mm @@ -243,6 +243,8 @@ -(id)init{ _isRestoreFlow = [[NSUserDefaults standardUserDefaults] boolForKey:restoreFlowKey]; _apps = [[NSMutableArray alloc] init]; + _chats = [[NSMutableArray alloc] init]; + _messagesByPeer = [[NSMutableDictionary alloc] init]; NSData *dataStatus = [[NSUserDefaults standardUserDefaults] objectForKey:walletStatusKey]; if(dataStatus != nil) { @@ -3499,11 +3501,11 @@ -(BMApp*_Nonnull)daoGalleryApp { return bApp; } } - + BMApp *app = [BMApp new]; app.name = @"NFT Gallery"; app.api_version = @"current"; - + if ([Settings sharedManager].target == Testnet) { app.url = @"https://apps-testnet.beam.mw/app/dao-core-app/index.html"; } @@ -3517,4 +3519,159 @@ -(BMApp*_Nonnull)daoGalleryApp { return app; } +#pragma mark - Messenger + +static bool parseMessengerWalletID(NSString *input, beam::wallet::WalletID &out) { + if (input == nil || input.length == 0) return false; + std::string s = input.string; + if (out.FromHex(s)) return true; + auto params = beam::wallet::ParseParameters(s); + if (params) { + beam::wallet::WalletID parsed; + if (params->GetParameter(beam::wallet::TxParameterID::PeerAddr, parsed)) { + out = parsed; + return true; + } + } + return false; +} + +-(NSString*_Nonnull)resolvedPeerWalletId:(NSString*_Nonnull)peerWalletId { + WalletID peerID; + if (parseMessengerWalletID(peerWalletId, peerID)) { + return [NSString stringWithUTF8String:to_string(peerID).c_str()]; + } + return peerWalletId; +} + +-(void)addChatStub:(NSString*_Nonnull)peerWalletId contactName:(NSString*_Nullable)contactName myWalletId:(NSString*_Nullable)myWalletId { + NSString *resolved = [self resolvedPeerWalletId:peerWalletId]; + BOOL changed = NO; + BMChat *existing = nil; + for (BMChat *chat in self.chats) { + if ([chat.peerWalletId isEqualToString:resolved]) { + existing = chat; + break; + } + } + if (existing != nil) { + if (contactName.length > 0 && existing.contactName.length == 0) { + existing.contactName = contactName; + changed = YES; + } + if (myWalletId.length > 0 && existing.myWalletId.length == 0) { + existing.myWalletId = myWalletId; + changed = YES; + } + } else { + BMChat *chat = [[BMChat alloc] init]; + chat.peerWalletId = resolved; + chat.contactName = contactName; + chat.myWalletId = myWalletId; + chat.hasUnread = NO; + chat.lastMessagePreview = @""; + chat.lastMessageTimestamp = (UInt64)[[NSDate date] timeIntervalSince1970]; + [self.chats insertObject:chat atIndex:0]; + changed = YES; + } + if (changed) { + NSArray *delegates = self.delegates.allObjects; + for (id delegate in delegates) { + if ([delegate respondsToSelector:@selector(onChatListChanged)]) { + [delegate onChatListChanged]; + } + } + } +} + +-(void)requestChats { + if (wallet == nil) return; + wallet->getAsync()->getChats(); +} + +-(void)requestMessagesForPeer:(NSString*_Nonnull)peerWalletId { + if (wallet == nil) return; + WalletID peerID; + if (!parseMessengerWalletID(peerWalletId, peerID)) return; + wallet->getAsync()->getInstantMessages(peerID); +} + +-(void)sendInstantMessage:(NSString*_Nonnull)peerWalletId + fromAddress:(NSString*_Nonnull)myWalletId + message:(NSString*_Nonnull)message { + if (wallet == nil) { + NSLog(@"[Messenger] sendInstantMessage skipped — wallet not running"); + return; + } + WalletID peerID; + WalletID myID; + if (!parseMessengerWalletID(peerWalletId, peerID)) { + NSLog(@"[Messenger] sendInstantMessage failed to parse peer=%@", peerWalletId); + return; + } + if (!parseMessengerWalletID(myWalletId, myID)) { + NSLog(@"[Messenger] sendInstantMessage failed to parse my=%@", myWalletId); + return; + } + + std::string text = message.string; + ByteBuffer buffer(text.begin(), text.end()); + NSLog(@"[Messenger] sendInstantMessage peer=%@ from=%@ len=%lu", peerWalletId, myWalletId, (unsigned long)text.length()); + wallet->getAsync()->sendInstantMessage(peerID, myID, std::move(buffer)); +} + +-(void)markChatAsRead:(NSString*_Nonnull)peerWalletId { + if (wallet == nil) return; + WalletID peerID; + if (!parseMessengerWalletID(peerWalletId, peerID)) return; + + NSString *resolved = [NSString stringWithUTF8String:to_string(peerID).c_str()]; + std::vector> ims; + NSArray *cached = self.messagesByPeer[resolved]; + for (BMInstantMessage *msg in cached) { + if (msg.isIncome && !msg.isRead) { + ims.push_back(std::make_pair((Timestamp)msg.timestamp, peerID)); + msg.isRead = YES; + } + } + if (!ims.empty()) { + wallet->getAsync()->markIMsasRead(std::move(ims)); + } + + for (BMChat *chat in self.chats) { + if ([chat.peerWalletId isEqualToString:resolved]) { + chat.hasUnread = NO; + } + } +} + +-(void)removeChat:(NSString*_Nonnull)peerWalletId { + if (wallet == nil) return; + WalletID peerID; + if (!parseMessengerWalletID(peerWalletId, peerID)) return; + wallet->getAsync()->removeChat(peerID); +} + +-(NSArray*_Nonnull)cachedMessagesForPeer:(NSString*_Nonnull)peerWalletId { + NSString *resolved = [self resolvedPeerWalletId:peerWalletId]; + NSArray *messages = self.messagesByPeer[resolved]; + return messages ?: @[]; +} + +-(NSString*_Nullable)lastMyAddressForPeer:(NSString*_Nonnull)peerWalletId { + NSString *resolved = [self resolvedPeerWalletId:peerWalletId]; + NSArray *messages = self.messagesByPeer[resolved]; + for (BMInstantMessage *msg in messages.reverseObjectEnumerator) { + if (!msg.isIncome && msg.myWalletId.length > 0) { + return msg.myWalletId; + } + } + for (BMInstantMessage *msg in messages) { + if (msg.myWalletId.length > 0) { + return msg.myWalletId; + } + } + return nil; +} + @end diff --git a/BeamWallet/BeamSDK/Objects/BMChat.h b/BeamWallet/BeamSDK/Objects/BMChat.h new file mode 100644 index 00000000..8b500cc0 --- /dev/null +++ b/BeamWallet/BeamSDK/Objects/BMChat.h @@ -0,0 +1,33 @@ +// +// BMChat.h +// BeamWallet +// +// Copyright 2018 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +@interface BMChat : NSObject + +@property (nonatomic, strong) NSString * _Nonnull peerWalletId; +@property (nonatomic, strong) NSString * _Nullable contactName; +@property (nonatomic, strong) NSString * _Nullable myWalletId; +@property (nonatomic, assign) BOOL hasUnread; +@property (nonatomic, strong) NSString * _Nullable lastMessagePreview; +@property (nonatomic, assign) UInt64 lastMessageTimestamp; + +-(NSString * _Nonnull)displayName; + +@end diff --git a/BeamWallet/BeamSDK/Objects/BMChat.mm b/BeamWallet/BeamSDK/Objects/BMChat.mm new file mode 100644 index 00000000..a4756567 --- /dev/null +++ b/BeamWallet/BeamSDK/Objects/BMChat.mm @@ -0,0 +1,44 @@ +// +// BMChat.mm +// BeamWallet +// +// Copyright 2018 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "BMChat.h" + +@implementation BMChat + +-(instancetype)init { + self = [super init]; + if (self) { + _peerWalletId = @""; + } + return self; +} + +-(NSString * _Nonnull)displayName { + if (self.contactName.length > 0) { + return self.contactName; + } + if (self.peerWalletId.length > 12) { + return [NSString stringWithFormat:@"%@…%@", + [self.peerWalletId substringToIndex:6], + [self.peerWalletId substringFromIndex:self.peerWalletId.length - 6]]; + } + return self.peerWalletId; +} + +@end diff --git a/BeamWallet/BeamSDK/Objects/BMInstantMessage.h b/BeamWallet/BeamSDK/Objects/BMInstantMessage.h new file mode 100644 index 00000000..c30135f7 --- /dev/null +++ b/BeamWallet/BeamSDK/Objects/BMInstantMessage.h @@ -0,0 +1,33 @@ +// +// BMInstantMessage.h +// BeamWallet +// +// Copyright 2018 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +@interface BMInstantMessage : NSObject + +@property (nonatomic, assign) UInt64 timestamp; +@property (nonatomic, strong) NSString * _Nonnull peerWalletId; +@property (nonatomic, strong) NSString * _Nonnull myWalletId; +@property (nonatomic, strong) NSString * _Nonnull message; +@property (nonatomic, assign) BOOL isIncome; +@property (nonatomic, assign) BOOL isRead; + +-(NSString * _Nonnull)formattedTime; + +@end diff --git a/BeamWallet/BeamSDK/Objects/BMInstantMessage.mm b/BeamWallet/BeamSDK/Objects/BMInstantMessage.mm new file mode 100644 index 00000000..0f67eb3d --- /dev/null +++ b/BeamWallet/BeamSDK/Objects/BMInstantMessage.mm @@ -0,0 +1,42 @@ +// +// BMInstantMessage.mm +// BeamWallet +// +// Copyright 2018 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "BMInstantMessage.h" + +@implementation BMInstantMessage + +-(instancetype)init { + self = [super init]; + if (self) { + _peerWalletId = @""; + _myWalletId = @""; + _message = @""; + } + return self; +} + +-(NSString * _Nonnull)formattedTime { + NSDate *date = [NSDate dateWithTimeIntervalSince1970:self.timestamp]; + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + formatter.dateStyle = NSDateFormatterNoStyle; + formatter.timeStyle = NSDateFormatterShortStyle; + return [formatter stringFromDate:date]; +} + +@end diff --git a/BeamWallet/BeamSDK/WalletModel.h b/BeamWallet/BeamSDK/WalletModel.h index 6f5adc10..8a173afa 100644 --- a/BeamWallet/BeamSDK/WalletModel.h +++ b/BeamWallet/BeamSDK/WalletModel.h @@ -86,4 +86,8 @@ class WalletModel : public beam::wallet::WalletClient void onAssetInfo(beam::Asset::ID assetId, const beam::wallet::WalletAsset&) override; void onFullAssetsListLoaded() override; void onCoinsSelected(const beam::wallet::CoinsSelectionInfo&) override; + void onInstantMessage(beam::Timestamp time, const beam::wallet::WalletID& counterpart, const std::string& message, bool isIncome) override; + void onGetChatList(const std::vector>& chats) override; + void onGetChatMessages(const std::vector& messages) override; + void onChatRemoved(const beam::wallet::WalletID& counterpart) override; }; diff --git a/BeamWallet/BeamSDK/WalletModel.mm b/BeamWallet/BeamSDK/WalletModel.mm index 09ab7aec..b10b0b76 100644 --- a/BeamWallet/BeamSDK/WalletModel.mm +++ b/BeamWallet/BeamSDK/WalletModel.mm @@ -988,10 +988,194 @@ static void ensureRulesOnCurrentThread() { void WalletModel::onPostFunctionToClientContext(MessageFunction&& func) { NSLog(@"onPostFunctionToClientContext"); - + doFunction(func); } +#pragma mark - Messenger callbacks + +void WalletModel::onInstantMessage(beam::Timestamp time, const beam::wallet::WalletID& counterpart, const std::string& message, bool isIncome) { + NSString *peer = [NSString stringWithUTF8String:to_string(counterpart).c_str()]; + NSString *text = [[NSString alloc] initWithBytes:message.data() length:message.size() encoding:NSUTF8StringEncoding]; + if (text == nil) { + text = [[NSString alloc] initWithBytes:message.data() length:message.size() encoding:NSISOLatin1StringEncoding] ?: @""; + } + NSLog(@"[Messenger] onInstantMessage peer=%@ income=%d len=%lu", peer, isIncome ? 1 : 0, (unsigned long)text.length); + + BMInstantMessage *bmMessage = [[BMInstantMessage alloc] init]; + bmMessage.timestamp = (UInt64)time; + bmMessage.peerWalletId = peer; + bmMessage.message = text; + bmMessage.isIncome = isIncome ? YES : NO; + bmMessage.isRead = isIncome ? NO : YES; + bmMessage.myWalletId = @""; + + NSMutableDictionary *byPeer = [AppModel sharedManager].messagesByPeer; + NSMutableArray *list = byPeer[peer]; + if (list == nil) { + list = [NSMutableArray new]; + byPeer[peer] = list; + } + [list addObject:bmMessage]; + + NSMutableArray *chats = [AppModel sharedManager].chats; + BMChat *existing = nil; + for (BMChat *c in chats) { + if ([c.peerWalletId isEqualToString:peer]) { + existing = c; + break; + } + } + if (existing == nil) { + existing = [[BMChat alloc] init]; + existing.peerWalletId = peer; + BMContact *contact = [[AppModel sharedManager] getContactFromId:peer]; + if (contact != nil) { + existing.contactName = contact.name; + } + [chats addObject:existing]; + } + existing.lastMessagePreview = text; + existing.lastMessageTimestamp = (UInt64)time; + if (isIncome) { + existing.hasUnread = YES; + } + + NSArray *delegates = [AppModel sharedManager].delegates.allObjects; + for (id delegate in delegates) { + if ([delegate respondsToSelector:@selector(onInstantMessageReceived:)]) { + [delegate onInstantMessageReceived:bmMessage]; + } + if ([delegate respondsToSelector:@selector(onChatListChanged)]) { + [delegate onChatListChanged]; + } + } +} + +void WalletModel::onGetChatList(const std::vector>& chats) { + NSMutableDictionary*> *byPeer = [AppModel sharedManager].messagesByPeer; + + NSArray *previousChats = [[AppModel sharedManager].chats copy]; + NSMutableSet *peersFromDB = [NSMutableSet new]; + + NSMutableArray *result = [NSMutableArray new]; + + for (const auto& entry : chats) { + NSString *peer = [NSString stringWithUTF8String:to_string(entry.first).c_str()]; + [peersFromDB addObject:peer]; + + BMChat *chat = [[BMChat alloc] init]; + chat.peerWalletId = peer; + chat.hasUnread = entry.second ? YES : NO; + + BMContact *contact = [[AppModel sharedManager] getContactFromId:peer]; + if (contact != nil) { + chat.contactName = contact.name; + } + for (BMChat *prev in previousChats) { + if ([prev.peerWalletId isEqualToString:peer]) { + if (prev.contactName.length > 0 && chat.contactName.length == 0) { + chat.contactName = prev.contactName; + } + if (prev.myWalletId.length > 0) { + chat.myWalletId = prev.myWalletId; + } + break; + } + } + + NSArray *cached = byPeer[peer]; + BMInstantMessage *latest = cached.lastObject; + if (latest != nil) { + chat.lastMessagePreview = latest.message; + chat.lastMessageTimestamp = latest.timestamp; + } + + [result addObject:chat]; + } + + for (BMChat *prev in previousChats) { + if (![peersFromDB containsObject:prev.peerWalletId]) { + [result addObject:prev]; + } + } + + [result sortUsingComparator:^NSComparisonResult(BMChat *a, BMChat *b) { + if (a.lastMessageTimestamp == b.lastMessageTimestamp) return NSOrderedSame; + return a.lastMessageTimestamp < b.lastMessageTimestamp ? NSOrderedDescending : NSOrderedAscending; + }]; + + [[AppModel sharedManager].chats removeAllObjects]; + [[AppModel sharedManager].chats addObjectsFromArray:result]; + + NSArray *delegates = [AppModel sharedManager].delegates.allObjects; + for (id delegate in delegates) { + if ([delegate respondsToSelector:@selector(onChatListChanged)]) { + [delegate onChatListChanged]; + } + } +} + +void WalletModel::onGetChatMessages(const std::vector& messages) { + if (messages.empty()) return; + + NSString *peer = [NSString stringWithUTF8String:to_string(messages.front().m_counterpart).c_str()]; + + NSMutableArray *result = [NSMutableArray new]; + for (const auto& im : messages) { + BMInstantMessage *bmMessage = [[BMInstantMessage alloc] init]; + bmMessage.timestamp = (UInt64)im.m_timestamp; + bmMessage.peerWalletId = [NSString stringWithUTF8String:to_string(im.m_counterpart).c_str()]; + bmMessage.myWalletId = [NSString stringWithUTF8String:to_string(im.m_mySbbs).c_str()]; + NSString *body = [[NSString alloc] initWithBytes:im.m_message.data() length:im.m_message.size() encoding:NSUTF8StringEncoding]; + if (body == nil) { + body = [[NSString alloc] initWithBytes:im.m_message.data() length:im.m_message.size() encoding:NSISOLatin1StringEncoding] ?: @""; + } + bmMessage.message = body; + bmMessage.isIncome = im.m_is_income ? YES : NO; + bmMessage.isRead = im.m_is_read ? YES : NO; + [result addObject:bmMessage]; + } + + [result sortUsingComparator:^NSComparisonResult(BMInstantMessage *a, BMInstantMessage *b) { + if (a.timestamp == b.timestamp) return NSOrderedSame; + return a.timestamp < b.timestamp ? NSOrderedAscending : NSOrderedDescending; + }]; + + [AppModel sharedManager].messagesByPeer[peer] = result; + + NSArray *delegates = [AppModel sharedManager].delegates.allObjects; + for (id delegate in delegates) { + if ([delegate respondsToSelector:@selector(onChatMessagesLoaded:messages:)]) { + [delegate onChatMessagesLoaded:peer messages:result]; + } + } +} + +void WalletModel::onChatRemoved(const beam::wallet::WalletID& counterpart) { + NSString *peer = [NSString stringWithUTF8String:to_string(counterpart).c_str()]; + + NSMutableArray *chats = [AppModel sharedManager].chats; + NSMutableIndexSet *indexes = [NSMutableIndexSet new]; + for (NSUInteger i = 0; i < chats.count; i++) { + if ([chats[i].peerWalletId isEqualToString:peer]) { + [indexes addIndex:i]; + } + } + [chats removeObjectsAtIndexes:indexes]; + [[AppModel sharedManager].messagesByPeer removeObjectForKey:peer]; + + NSArray *delegates = [AppModel sharedManager].delegates.allObjects; + for (id delegate in delegates) { + if ([delegate respondsToSelector:@selector(onChatRemoved:)]) { + [delegate onChatRemoved:peer]; + } + if ([delegate respondsToSelector:@selector(onChatListChanged)]) { + [delegate onChatListChanged]; + } + } +} + void WalletModel::onExportTxHistoryToCsv(const std::string& data) { NSString *csv = [NSString stringWithUTF8String:data.c_str()]; diff --git a/BeamWallet/Model/Messenger/MessengerChatListViewModel.swift b/BeamWallet/Model/Messenger/MessengerChatListViewModel.swift new file mode 100644 index 00000000..a3e5c1d4 --- /dev/null +++ b/BeamWallet/Model/Messenger/MessengerChatListViewModel.swift @@ -0,0 +1,68 @@ +// +// MessengerChatListViewModel.swift +// BeamWallet +// +// Copyright 2018 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +class MessengerChatListViewModel: NSObject { + + public var onDataChanged: (() -> Void)? + + public var chats: [BMChat] { + return AppModel.sharedManager().chats as? [BMChat] ?? [] + } + + override init() { + super.init() + AppModel.sharedManager().addDelegate(self) + } + + deinit { + AppModel.sharedManager().removeDelegate(self) + } + + func reload() { + AppModel.sharedManager().requestChats() + } + + func remove(at index: Int) { + guard index >= 0, index < chats.count else { return } + let peer = chats[index].peerWalletId + AppModel.sharedManager().removeChat(peer) + } +} + +extension MessengerChatListViewModel: WalletModelDelegate { + func onChatListChanged() { + DispatchQueue.main.async { [weak self] in + self?.onDataChanged?() + } + } + + func onInstantMessageReceived(_ message: BMInstantMessage) { + DispatchQueue.main.async { [weak self] in + self?.onDataChanged?() + } + } + + func onChatRemoved(_ peerWalletId: String) { + DispatchQueue.main.async { [weak self] in + self?.onDataChanged?() + } + } +} diff --git a/BeamWallet/Model/Messenger/MessengerConversationViewModel.swift b/BeamWallet/Model/Messenger/MessengerConversationViewModel.swift new file mode 100644 index 00000000..a13c953c --- /dev/null +++ b/BeamWallet/Model/Messenger/MessengerConversationViewModel.swift @@ -0,0 +1,92 @@ +// +// MessengerConversationViewModel.swift +// BeamWallet +// +// Copyright 2018 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +class MessengerConversationViewModel: NSObject { + + public var onDataChanged: (() -> Void)? + + public let peerWalletId: String + public var myWalletId: String? + public private(set) var messages: [BMInstantMessage] = [] + + init(peerWalletId: String, myWalletId: String? = nil) { + self.peerWalletId = peerWalletId + let resolvedMyId = myWalletId + ?? AppModel.sharedManager().lastMyAddress(forPeer: peerWalletId) + ?? (AppModel.sharedManager().chats as? [BMChat])?.first { $0.peerWalletId == peerWalletId }?.myWalletId + ?? (AppModel.sharedManager().walletAddresses as? [BMAddress])?.first { !$0.isExpired() }?.walletId + self.myWalletId = resolvedMyId + super.init() + + let cached = AppModel.sharedManager().cachedMessages(forPeer: peerWalletId) as? [BMInstantMessage] ?? [] + messages = cached.sorted { $0.timestamp < $1.timestamp } + + AppModel.sharedManager().addDelegate(self) + } + + deinit { + AppModel.sharedManager().removeDelegate(self) + } + + func load() { + AppModel.sharedManager().requestMessages(forPeer: peerWalletId) + } + + func send(_ text: String) { + let trimmed = text.trimmingCharacters(in: .whitespacesAndNewlines) + guard !trimmed.isEmpty else { return } + guard let myId = myWalletId, !myId.isEmpty else { return } + AppModel.sharedManager().sendInstantMessage(peerWalletId, fromAddress: myId, message: trimmed) + } + + func markAsRead() { + AppModel.sharedManager().markChat(asRead: peerWalletId) + } + + func remove() { + AppModel.sharedManager().removeChat(peerWalletId) + } +} + +extension MessengerConversationViewModel: WalletModelDelegate { + + func onChatMessagesLoaded(_ peerWalletId: String, messages: [BMInstantMessage]) { + guard peerWalletId == self.peerWalletId else { return } + DispatchQueue.main.async { [weak self] in + guard let self = self else { return } + self.messages = messages.sorted { $0.timestamp < $1.timestamp } + if self.myWalletId == nil || self.myWalletId?.isEmpty == true { + self.myWalletId = AppModel.sharedManager().lastMyAddress(forPeer: peerWalletId) + } + self.onDataChanged?() + } + } + + func onInstantMessageReceived(_ message: BMInstantMessage) { + guard message.peerWalletId == peerWalletId else { return } + DispatchQueue.main.async { [weak self] in + guard let self = self else { return } + let cached = AppModel.sharedManager().cachedMessages(forPeer: self.peerWalletId) as? [BMInstantMessage] ?? [] + self.messages = cached.sorted { $0.timestamp < $1.timestamp } + self.onDataChanged?() + } + } +} diff --git a/BeamWallet/Protocols/LocalizableStrings.swift b/BeamWallet/Protocols/LocalizableStrings.swift index 8f1aec9d..ff3430d4 100644 --- a/BeamWallet/Protocols/LocalizableStrings.swift +++ b/BeamWallet/Protocols/LocalizableStrings.swift @@ -63,6 +63,15 @@ class LocalizableStrings : NSObject { var incorrect_password = "incorrect_password".localized var create_new_wallet = "create_new_wallet".localized var wallet = "wallet".localized + var messenger = "messenger".localized + var messenger_new_chat = "messenger_new_chat".localized + var messenger_no_chats = "messenger_no_chats".localized + var messenger_send_placeholder = "messenger_send_placeholder".localized + var messenger_delete_chat = "messenger_delete_chat".localized + var messenger_my_address = "messenger_my_address".localized + var messenger_peer_address = "messenger_peer_address".localized + var messenger_contact_name = "messenger_contact_name".localized + var messenger_start = "messenger_start".localized var transactions = "transactions".localized var export = "export".localized var activate = "activate".localized diff --git a/BeamWallet/Protocols/Resources.swift b/BeamWallet/Protocols/Resources.swift index 19880592..65e23705 100644 --- a/BeamWallet/Protocols/Resources.swift +++ b/BeamWallet/Protocols/Resources.swift @@ -105,6 +105,10 @@ func IconDappStore() -> UIImage? { return UIImage(named: "iconDapps") } +func IconMessenger() -> UIImage? { + return UIImage(named: "iconMessenger") +} + func IconBeamXDAO() -> UIImage? { return UIImage(named: "iconDao") } diff --git a/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift b/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift index 3cb1b251..cca9d794 100644 --- a/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift +++ b/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift @@ -56,6 +56,7 @@ class LeftMenuViewController: BaseTableViewController { private var sections_0 = [ MenuItem(name: Localizable.shared.strings.wallet, icon: IconWallet(), selected: true, type: WalletViewController.self), + MenuItem(name: Localizable.shared.strings.messenger, icon: IconMessenger(), selected: false, type: MessengerChatListViewController.self), MenuItem(name: Localizable.shared.strings.dAppStore, icon: IconDappStore(), selected: false, type: DAOViewController.self), MenuItem(name: Localizable.shared.strings.beamx_dao, icon: IconBeamXDAO(), selected: false, type: DAOViewController.self), MenuItem(name: Localizable.shared.strings.beamx_dao_dao_voting, icon: IconBeamXDAOVoting(), selected: false, type: DAOViewController.self)] @@ -290,6 +291,8 @@ extension LeftMenuViewController: UITableViewDelegate, UITableViewDataSource { navigationController.setViewControllers([SettingsViewController(type: .main)], animated: false) case Localizable.shared.strings.dAppStore : navigationController.setViewControllers([DAOAppsViewController()], animated: false) + case Localizable.shared.strings.messenger : + navigationController.setViewControllers([MessengerChatListViewController()], animated: false) case Localizable.shared.strings.beam_faucet : AppModel.sharedManager().startBeamXDaoApp(navigationController, app: AppModel.sharedManager().daoFaucetApp()) case Localizable.shared.strings.beam_gallery : @@ -327,6 +330,7 @@ extension LeftMenuViewController : SettingsModelDelegate { addBackgroundView() sections_0 = [MenuItem(name: Localizable.shared.strings.wallet, icon: IconWallet(), selected: true, type: WalletViewController.self), + MenuItem(name: Localizable.shared.strings.messenger, icon: IconMessenger(), selected: false, type: MessengerChatListViewController.self), MenuItem(name: Localizable.shared.strings.dAppStore, icon: IconDappStore(), selected: false, type: DAOViewController.self), MenuItem(name: Localizable.shared.strings.beamx_dao, icon: IconBeamXDAO(), selected: false, type: DAOViewController.self), MenuItem(name: Localizable.shared.strings.beamx_dao_dao_voting, icon: IconBeamXDAOVoting(), selected: false, type: DAOViewController.self)] diff --git a/BeamWallet/ViewControllers/Main/Messenger/MessengerBubbleCell.swift b/BeamWallet/ViewControllers/Main/Messenger/MessengerBubbleCell.swift new file mode 100644 index 00000000..685bbacb --- /dev/null +++ b/BeamWallet/ViewControllers/Main/Messenger/MessengerBubbleCell.swift @@ -0,0 +1,107 @@ +// +// MessengerBubbleCell.swift +// BeamWallet +// +// Copyright 2018 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +class MessengerBubbleCell: RippleCell { + + private let bubble = UIView() + private let stack = UIStackView() + private let label = UILabel() + private let timeLabel = UILabel() + private var leadingConstraint: NSLayoutConstraint? + private var trailingConstraint: NSLayoutConstraint? + + private static let maxBubbleRatio: CGFloat = 0.75 + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + + backgroundColor = .clear + contentView.backgroundColor = .clear + selectionStyle = .none + + bubble.translatesAutoresizingMaskIntoConstraints = false + bubble.layer.cornerRadius = 12 + contentView.addSubview(bubble) + + label.translatesAutoresizingMaskIntoConstraints = false + label.font = RegularFont(size: 15) + label.numberOfLines = 0 + label.lineBreakMode = .byWordWrapping + label.textAlignment = .left + + timeLabel.translatesAutoresizingMaskIntoConstraints = false + timeLabel.font = RegularFont(size: 11) + timeLabel.textAlignment = .right + timeLabel.setContentHuggingPriority(.required, for: .horizontal) + timeLabel.setContentCompressionResistancePriority(.required, for: .horizontal) + + stack.translatesAutoresizingMaskIntoConstraints = false + stack.axis = .vertical + stack.alignment = .fill + stack.spacing = 2 + stack.addArrangedSubview(label) + stack.addArrangedSubview(timeLabel) + bubble.addSubview(stack) + + let leading = bubble.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 16) + let trailing = bubble.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -16) + leadingConstraint = leading + trailingConstraint = trailing + + let maxLabelWidth = UIScreen.main.bounds.width * MessengerBubbleCell.maxBubbleRatio - 24 + + NSLayoutConstraint.activate([ + bubble.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 4), + bubble.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -4), + bubble.widthAnchor.constraint(lessThanOrEqualTo: contentView.widthAnchor, multiplier: MessengerBubbleCell.maxBubbleRatio), + + stack.leadingAnchor.constraint(equalTo: bubble.leadingAnchor, constant: 12), + stack.trailingAnchor.constraint(equalTo: bubble.trailingAnchor, constant: -12), + stack.topAnchor.constraint(equalTo: bubble.topAnchor, constant: 8), + stack.bottomAnchor.constraint(equalTo: bubble.bottomAnchor, constant: -8), + + label.widthAnchor.constraint(lessThanOrEqualToConstant: maxLabelWidth), + ]) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) is not supported") + } + + func configure(with message: BMInstantMessage) { + label.text = message.message + timeLabel.text = message.formattedTime() + + if message.isIncome { + bubble.backgroundColor = UIColor.main.brightSkyBlue + label.textColor = UIColor.main.marineOriginal + timeLabel.textColor = UIColor.main.marineOriginal.withAlphaComponent(0.6) + leadingConstraint?.isActive = true + trailingConstraint?.isActive = false + } else { + bubble.backgroundColor = UIColor.main.heliotrope + label.textColor = UIColor.main.marineOriginal + timeLabel.textColor = UIColor.main.marineOriginal.withAlphaComponent(0.6) + leadingConstraint?.isActive = false + trailingConstraint?.isActive = true + } + } +} diff --git a/BeamWallet/ViewControllers/Main/Messenger/MessengerChatCell.swift b/BeamWallet/ViewControllers/Main/Messenger/MessengerChatCell.swift new file mode 100644 index 00000000..2bd98865 --- /dev/null +++ b/BeamWallet/ViewControllers/Main/Messenger/MessengerChatCell.swift @@ -0,0 +1,157 @@ +// +// MessengerChatCell.swift +// BeamWallet +// +// Copyright 2018 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +class MessengerChatCell: RippleCell { + + private let mainView = UIView() + private let avatarView = UIView() + private let avatarLabel = UILabel() + private let nameLabel = UILabel() + private let previewLabel = UILabel() + private let dateLabel = UILabel() + private let unreadDot = UIView() + + private var topConstraint: NSLayoutConstraint! + private var bottomConstraint: NSLayoutConstraint! + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + + backgroundColor = .clear + contentView.backgroundColor = .clear + selectionStyle = .none + + mainView.translatesAutoresizingMaskIntoConstraints = false + mainView.layer.cornerRadius = 0 + contentView.addSubview(mainView) + + avatarView.translatesAutoresizingMaskIntoConstraints = false + avatarView.backgroundColor = UIColor.main.brightTeal.withAlphaComponent(0.18) + avatarView.layer.cornerRadius = 20 + mainView.addSubview(avatarView) + + avatarLabel.translatesAutoresizingMaskIntoConstraints = false + avatarLabel.font = BoldFont(size: 16) + avatarLabel.textColor = UIColor.main.brightTeal + avatarLabel.textAlignment = .center + avatarView.addSubview(avatarLabel) + + nameLabel.translatesAutoresizingMaskIntoConstraints = false + nameLabel.font = BoldFont(size: 15) + nameLabel.textColor = UIColor.white + mainView.addSubview(nameLabel) + + previewLabel.translatesAutoresizingMaskIntoConstraints = false + previewLabel.font = RegularFont(size: 13) + previewLabel.textColor = UIColor.main.steelGrey + previewLabel.numberOfLines = 1 + previewLabel.lineBreakMode = .byTruncatingTail + mainView.addSubview(previewLabel) + + dateLabel.translatesAutoresizingMaskIntoConstraints = false + dateLabel.font = RegularFont(size: 12) + dateLabel.textColor = UIColor.main.steelGrey + dateLabel.textAlignment = .right + mainView.addSubview(dateLabel) + + unreadDot.translatesAutoresizingMaskIntoConstraints = false + unreadDot.backgroundColor = UIColor.main.brightTeal + unreadDot.layer.cornerRadius = 4 + unreadDot.isHidden = true + mainView.addSubview(unreadDot) + + topConstraint = mainView.topAnchor.constraint(equalTo: contentView.topAnchor) + bottomConstraint = mainView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor) + + NSLayoutConstraint.activate([ + mainView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor), + mainView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor), + topConstraint, + bottomConstraint, + + avatarView.leadingAnchor.constraint(equalTo: mainView.leadingAnchor, constant: defaultX), + avatarView.centerYAnchor.constraint(equalTo: mainView.centerYAnchor), + avatarView.widthAnchor.constraint(equalToConstant: 40), + avatarView.heightAnchor.constraint(equalToConstant: 40), + + avatarLabel.centerXAnchor.constraint(equalTo: avatarView.centerXAnchor), + avatarLabel.centerYAnchor.constraint(equalTo: avatarView.centerYAnchor), + + nameLabel.leadingAnchor.constraint(equalTo: avatarView.trailingAnchor, constant: 12), + nameLabel.topAnchor.constraint(equalTo: mainView.topAnchor, constant: 12), + nameLabel.trailingAnchor.constraint(lessThanOrEqualTo: dateLabel.leadingAnchor, constant: -8), + + dateLabel.trailingAnchor.constraint(equalTo: mainView.trailingAnchor, constant: -defaultX), + dateLabel.centerYAnchor.constraint(equalTo: nameLabel.centerYAnchor), + dateLabel.widthAnchor.constraint(lessThanOrEqualToConstant: 80), + + previewLabel.leadingAnchor.constraint(equalTo: nameLabel.leadingAnchor), + previewLabel.topAnchor.constraint(equalTo: nameLabel.bottomAnchor, constant: 4), + previewLabel.trailingAnchor.constraint(lessThanOrEqualTo: unreadDot.leadingAnchor, constant: -8), + previewLabel.bottomAnchor.constraint(lessThanOrEqualTo: mainView.bottomAnchor, constant: -12), + + unreadDot.trailingAnchor.constraint(equalTo: mainView.trailingAnchor, constant: -defaultX), + unreadDot.centerYAnchor.constraint(equalTo: previewLabel.centerYAnchor), + unreadDot.widthAnchor.constraint(equalToConstant: 8), + unreadDot.heightAnchor.constraint(equalToConstant: 8), + ]) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) is not supported") + } + + func configure(with chat: BMChat, row: Int) { + nameLabel.text = chat.displayName() + previewLabel.text = chat.lastMessagePreview ?? "" + dateLabel.text = chat.lastMessageTimestamp > 0 + ? formatRelativeDate(timestamp: chat.lastMessageTimestamp) + : "" + + let initial = chat.displayName().trimmingCharacters(in: .whitespaces).first.map { String($0).uppercased() } ?? "?" + avatarLabel.text = initial + + unreadDot.isHidden = !chat.hasUnread + + if chat.hasUnread { + mainView.backgroundColor = UIColor.main.marineThree + topConstraint.constant = 5 + bottomConstraint.constant = -5 + } else { + mainView.backgroundColor = (row % 2 == 0) ? UIColor.main.cellBackgroundColor : UIColor.main.marine + topConstraint.constant = 0 + bottomConstraint.constant = 0 + } + } + + private func formatRelativeDate(timestamp: UInt64) -> String { + let date = Date(timeIntervalSince1970: TimeInterval(timestamp)) + let formatter = DateFormatter() + if Calendar.current.isDateInToday(date) { + formatter.dateStyle = .none + formatter.timeStyle = .short + } else { + formatter.dateStyle = .short + formatter.timeStyle = .none + } + return formatter.string(from: date) + } +} diff --git a/BeamWallet/ViewControllers/Main/Messenger/MessengerChatListViewController.swift b/BeamWallet/ViewControllers/Main/Messenger/MessengerChatListViewController.swift new file mode 100644 index 00000000..6f8af0e4 --- /dev/null +++ b/BeamWallet/ViewControllers/Main/Messenger/MessengerChatListViewController.swift @@ -0,0 +1,120 @@ +// +// MessengerChatListViewController.swift +// BeamWallet +// +// Copyright 2018 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +class MessengerChatListViewController: BaseTableViewController { + + private let viewModel = MessengerChatListViewModel() + private let emptyLabel = UILabel() + + override func viewDidLoad() { + super.viewDidLoad() + + setGradientTopBar(mainColor: UIColor.main.peacockBlue, addedStatusView: true, menu: self.navigationController?.viewControllers.count == 1) + + title = Localizable.shared.strings.messenger + + addRightButton(image: IconAdd(), target: self, selector: #selector(onNewChat)) + + tableView.delegate = self + tableView.dataSource = self + tableView.separatorStyle = .none + tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: 10)) + tableView.register(MessengerChatCell.self, forCellReuseIdentifier: "MessengerChatCell") + tableView.addPullToRefresh(target: self, handler: #selector(refresh(_:))) + + emptyLabel.text = Localizable.shared.strings.messenger_no_chats + emptyLabel.textAlignment = .center + emptyLabel.numberOfLines = 0 + emptyLabel.font = RegularFont(size: 16) + emptyLabel.textColor = Settings.sharedManager().isDarkMode ? UIColor.main.steel : UIColor.main.blueyGrey + view.addSubview(emptyLabel) + + viewModel.onDataChanged = { [weak self] in + self?.tableView.stopRefreshing() + self?.tableView.reloadData() + self?.updateEmptyState() + } + + viewModel.reload() + updateEmptyState() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + viewModel.reload() + } + + override func viewDidLayoutSubviews() { + super.viewDidLayoutSubviews() + emptyLabel.frame = CGRect(x: 20, y: navigationBarOffset + 80, width: view.bounds.width - 40, height: 60) + } + + private func updateEmptyState() { + emptyLabel.isHidden = !viewModel.chats.isEmpty + } + + @objc private func onNewChat() { + pushViewController(vc: MessengerNewChatViewController()) + } + + @objc private func refresh(_ sender: Any) { + viewModel.reload() + } +} + +extension MessengerChatListViewController: UITableViewDelegate, UITableViewDataSource { + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return viewModel.chats.count + } + + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + return viewModel.chats[indexPath.row].hasUnread ? 80 : 70 + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "MessengerChatCell", for: indexPath) as! MessengerChatCell + cell.configure(with: viewModel.chats[indexPath.row], row: indexPath.row) + return cell + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + tableView.deselectRow(at: indexPath, animated: true) + let chat = viewModel.chats[indexPath.row] + let vc = MessengerChatViewController(peerWalletId: chat.peerWalletId, contactName: chat.contactName) + if let myId = chat.myWalletId, !myId.isEmpty { + vc.setMyAddress(myId) + } + pushViewController(vc: vc) + } + + func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { + return true + } + + func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { + let action = UIContextualAction(style: .destructive, title: Localizable.shared.strings.delete) { [weak self] _, _, completion in + self?.viewModel.remove(at: indexPath.row) + completion(true) + } + return UISwipeActionsConfiguration(actions: [action]) + } +} diff --git a/BeamWallet/ViewControllers/Main/Messenger/MessengerChatViewController.swift b/BeamWallet/ViewControllers/Main/Messenger/MessengerChatViewController.swift new file mode 100644 index 00000000..e5bef4e8 --- /dev/null +++ b/BeamWallet/ViewControllers/Main/Messenger/MessengerChatViewController.swift @@ -0,0 +1,339 @@ +// +// MessengerChatViewController.swift +// BeamWallet +// +// Copyright 2018 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +class MessengerChatViewController: BaseViewController { + + private let viewModel: MessengerConversationViewModel + private let contactName: String? + + private let tableView = UITableView(frame: .zero, style: .plain) + private let inputBar = UIView() + private let inputContainer = UIView() + private let textView = UITextView() + private let sendButton = UIButton(type: .custom) + private let placeholderLabel = UILabel() + + private var inputBarBottomConstraint: NSLayoutConstraint? + private let inputBarHeight: CGFloat = 64 + + init(peerWalletId: String, contactName: String? = nil) { + self.viewModel = MessengerConversationViewModel(peerWalletId: peerWalletId) + self.contactName = contactName + super.init(nibName: nil, bundle: nil) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) is not supported") + } + + func setMyAddress(_ walletId: String) { + viewModel.myWalletId = walletId + } + + override func viewDidLoad() { + super.viewDidLoad() + + setGradientTopBar(mainColor: UIColor.main.peacockBlue, addedStatusView: true) + + if let name = contactName, !name.isEmpty { + title = name + } else { + let peer = viewModel.peerWalletId + if peer.count > 12 { + title = "\(peer.prefix(6))…\(peer.suffix(6))" + } else { + title = peer + } + } + + addRightButton(image: IconCancel(), target: self, selector: #selector(onDeleteChat)) + + setupTable() + setupInputBar() + + viewModel.onDataChanged = { [weak self] in + guard let self = self else { return } + self.tableView.reloadData() + self.scrollToBottom(animated: true) + } + + viewModel.load() + + NotificationCenter.default.addObserver(self, selector: #selector(onKeyboard(_:)), name: UIResponder.keyboardWillChangeFrameNotification, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(onKeyboard(_:)), name: UIResponder.keyboardWillHideNotification, object: nil) + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + viewModel.markAsRead() + scrollToBottom(animated: false) + } + + deinit { + NotificationCenter.default.removeObserver(self) + } + + private func setupTable() { + tableView.translatesAutoresizingMaskIntoConstraints = false + tableView.dataSource = self + tableView.delegate = self + tableView.separatorStyle = .none + tableView.backgroundColor = .clear + tableView.allowsSelection = false + tableView.estimatedRowHeight = 60 + tableView.rowHeight = UITableView.automaticDimension + tableView.keyboardDismissMode = .interactive + tableView.register(MessengerBubbleCell.self, forCellReuseIdentifier: "MessengerBubbleCell") + view.addSubview(tableView) + } + + private func setupInputBar() { + inputBar.translatesAutoresizingMaskIntoConstraints = false + inputBar.backgroundColor = UIColor.main.marine + view.addSubview(inputBar) + + let topDivider = UIView() + topDivider.translatesAutoresizingMaskIntoConstraints = false + topDivider.backgroundColor = UIColor.white.withAlphaComponent(0.05) + inputBar.addSubview(topDivider) + + inputContainer.translatesAutoresizingMaskIntoConstraints = false + inputContainer.backgroundColor = UIColor.white.withAlphaComponent(0.05) + inputContainer.layer.cornerRadius = 18 + inputBar.addSubview(inputContainer) + + textView.translatesAutoresizingMaskIntoConstraints = false + textView.font = RegularFont(size: 15) + textView.textColor = UIColor.white + textView.tintColor = UIColor.white + textView.backgroundColor = .clear + textView.isScrollEnabled = false + textView.delegate = self + textView.returnKeyType = .default + textView.textContainerInset = UIEdgeInsets(top: 11, left: 4, bottom: 11, right: 4) + textView.textContainer.lineFragmentPadding = 0 + inputContainer.addSubview(textView) + + placeholderLabel.translatesAutoresizingMaskIntoConstraints = false + placeholderLabel.text = Localizable.shared.strings.messenger_send_placeholder + placeholderLabel.font = ItalicFont(size: 15) + placeholderLabel.textColor = UIColor.white.withAlphaComponent(0.4) + textView.addSubview(placeholderLabel) + + sendButton.translatesAutoresizingMaskIntoConstraints = false + sendButton.backgroundColor = UIColor.main.brightTeal + sendButton.layer.cornerRadius = 22 + sendButton.setImage(IconNextBlue(), for: .normal) + sendButton.imageView?.contentMode = .scaleAspectFit + sendButton.tintColor = UIColor.main.marineOriginal + sendButton.isEnabled = false + sendButton.alpha = 0.4 + sendButton.addTarget(self, action: #selector(onSend), for: .touchUpInside) + inputBar.addSubview(sendButton) + + let bottom = inputBar.bottomAnchor.constraint(equalTo: view.bottomAnchor) + inputBarBottomConstraint = bottom + + NSLayoutConstraint.activate([ + inputBar.leadingAnchor.constraint(equalTo: view.leadingAnchor), + inputBar.trailingAnchor.constraint(equalTo: view.trailingAnchor), + bottom, + + topDivider.leadingAnchor.constraint(equalTo: inputBar.leadingAnchor), + topDivider.trailingAnchor.constraint(equalTo: inputBar.trailingAnchor), + topDivider.topAnchor.constraint(equalTo: inputBar.topAnchor), + topDivider.heightAnchor.constraint(equalToConstant: 1), + + inputContainer.leadingAnchor.constraint(equalTo: inputBar.leadingAnchor, constant: defaultX), + inputContainer.topAnchor.constraint(equalTo: inputBar.topAnchor, constant: 10), + inputContainer.bottomAnchor.constraint(equalTo: inputBar.safeAreaLayoutGuide.bottomAnchor, constant: -10), + inputContainer.trailingAnchor.constraint(equalTo: sendButton.leadingAnchor, constant: -10), + inputContainer.heightAnchor.constraint(greaterThanOrEqualToConstant: 44), + + textView.leadingAnchor.constraint(equalTo: inputContainer.leadingAnchor, constant: 12), + textView.trailingAnchor.constraint(equalTo: inputContainer.trailingAnchor, constant: -12), + textView.topAnchor.constraint(equalTo: inputContainer.topAnchor), + textView.bottomAnchor.constraint(equalTo: inputContainer.bottomAnchor), + + placeholderLabel.leadingAnchor.constraint(equalTo: textView.leadingAnchor), + placeholderLabel.centerYAnchor.constraint(equalTo: textView.centerYAnchor), + + sendButton.trailingAnchor.constraint(equalTo: inputBar.trailingAnchor, constant: -defaultX), + sendButton.bottomAnchor.constraint(equalTo: inputContainer.bottomAnchor), + sendButton.widthAnchor.constraint(equalToConstant: 44), + sendButton.heightAnchor.constraint(equalToConstant: 44), + ]) + + NSLayoutConstraint.activate([ + tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor), + tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor), + tableView.topAnchor.constraint(equalTo: view.topAnchor, constant: navigationBarOffset), + tableView.bottomAnchor.constraint(equalTo: inputBar.topAnchor), + ]) + } + + private func scrollToBottom(animated: Bool) { + let groups = sections + guard let last = groups.last, !last.messages.isEmpty else { return } + let indexPath = IndexPath(row: last.messages.count - 1, section: groups.count - 1) + tableView.scrollToRow(at: indexPath, at: .bottom, animated: animated) + } + + @objc private func onSend() { + let text = textView.text ?? "" + viewModel.send(text) + textView.text = "" + placeholderLabel.isHidden = false + sendButton.isEnabled = false + sendButton.alpha = 0.4 + } + + @objc private func onDeleteChat() { + let alert = UIAlertController(title: Localizable.shared.strings.messenger_delete_chat, message: nil, preferredStyle: .alert) + alert.addAction(UIAlertAction(title: Localizable.shared.strings.cancel, style: .cancel)) + alert.addAction(UIAlertAction(title: Localizable.shared.strings.delete, style: .destructive) { [weak self] _ in + self?.viewModel.remove() + self?.navigationController?.popViewController(animated: true) + }) + present(alert, animated: true) + } + + @objc private func onKeyboard(_ note: Notification) { + guard let frameEnd = (note.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue, + let duration = note.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double else { return } + + let isHiding = note.name == UIResponder.keyboardWillHideNotification + let frameInView = view.convert(frameEnd, from: nil) + let bottomInset = isHiding ? 0 : max(0, view.bounds.height - frameInView.origin.y) + inputBarBottomConstraint?.constant = -bottomInset + + UIView.animate(withDuration: duration) { + self.view.layoutIfNeeded() + } completion: { _ in + self.scrollToBottom(animated: true) + } + } +} + +private struct MessengerSection { + let day: Date + let title: String + let messages: [BMInstantMessage] +} + +extension MessengerChatViewController { + + fileprivate var sections: [MessengerSection] { + let calendar = Calendar.current + let formatter = DateFormatter() + formatter.doesRelativeDateFormatting = true + formatter.dateStyle = .medium + formatter.timeStyle = .none + + var result: [MessengerSection] = [] + var currentDay: Date? + var bucket: [BMInstantMessage] = [] + + func flush() { + if let day = currentDay, !bucket.isEmpty { + result.append(MessengerSection(day: day, title: formatter.string(from: day), messages: bucket)) + } + } + + for msg in viewModel.messages { + let date = Date(timeIntervalSince1970: TimeInterval(msg.timestamp)) + let day = calendar.startOfDay(for: date) + if currentDay == day { + bucket.append(msg) + } else { + flush() + currentDay = day + bucket = [msg] + } + } + flush() + return result + } +} + +extension MessengerChatViewController: UITableViewDataSource, UITableViewDelegate { + func numberOfSections(in tableView: UITableView) -> Int { + return sections.count + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return sections[section].messages.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "MessengerBubbleCell", for: indexPath) as! MessengerBubbleCell + cell.configure(with: sections[indexPath.section].messages[indexPath.row]) + return cell + } + + func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { + let container = UIView() + container.backgroundColor = .clear + + let pill = UIView() + pill.translatesAutoresizingMaskIntoConstraints = false + pill.backgroundColor = Settings.sharedManager().isDarkMode + ? UIColor.white.withAlphaComponent(0.08) + : UIColor.black.withAlphaComponent(0.06) + pill.layer.cornerRadius = 11 + container.addSubview(pill) + + let label = UILabel() + label.translatesAutoresizingMaskIntoConstraints = false + label.text = sections[section].title + label.font = BoldFont(size: 11) + label.textColor = Settings.sharedManager().isDarkMode ? UIColor.main.steel : UIColor.main.blueyGrey + label.textAlignment = .center + pill.addSubview(label) + + NSLayoutConstraint.activate([ + pill.centerXAnchor.constraint(equalTo: container.centerXAnchor), + pill.centerYAnchor.constraint(equalTo: container.centerYAnchor), + pill.heightAnchor.constraint(equalToConstant: 22), + + label.leadingAnchor.constraint(equalTo: pill.leadingAnchor, constant: 12), + label.trailingAnchor.constraint(equalTo: pill.trailingAnchor, constant: -12), + label.topAnchor.constraint(equalTo: pill.topAnchor), + label.bottomAnchor.constraint(equalTo: pill.bottomAnchor), + ]) + + return container + } + + func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { + return 36 + } +} + +extension MessengerChatViewController: UITextViewDelegate { + func textViewDidChange(_ textView: UITextView) { + let trimmed = textView.text.trimmingCharacters(in: .whitespacesAndNewlines) + let canSend = !trimmed.isEmpty && (viewModel.myWalletId?.isEmpty == false) + sendButton.isEnabled = canSend + sendButton.alpha = canSend ? 1.0 : 0.4 + placeholderLabel.isHidden = !textView.text.isEmpty + } +} diff --git a/BeamWallet/ViewControllers/Main/Messenger/MessengerNewChatViewController.swift b/BeamWallet/ViewControllers/Main/Messenger/MessengerNewChatViewController.swift new file mode 100644 index 00000000..79d331e3 --- /dev/null +++ b/BeamWallet/ViewControllers/Main/Messenger/MessengerNewChatViewController.swift @@ -0,0 +1,243 @@ +// +// MessengerNewChatViewController.swift +// BeamWallet +// +// Copyright 2018 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +class MessengerNewChatViewController: BaseViewController { + + private let scrollView = UIScrollView() + private let contentView = UIView() + + private let myAddressLabel = sectionLabel() + private let myAddressField = BMField() + + private let peerLabel = sectionLabel() + private let peerField = BMField() + + private let nameLabel = sectionLabel() + private let nameField = BMField() + + private lazy var startButton: BMButton = { + let button = BMButton.defaultButton(frame: CGRect(x: 0, y: 0, width: 220, height: 44), color: UIColor.main.brightTeal) + button.setTitle(Localizable.shared.strings.messenger_start.lowercased(), for: .normal) + button.setTitleColor(UIColor.main.marineOriginal, for: .normal) + button.setTitleColor(UIColor.main.marineOriginal.withAlphaComponent(0.5), for: .highlighted) + button.titleLabel?.font = BoldFont(size: 14) + button.addTarget(self, action: #selector(onStart), for: .touchUpInside) + return button + }() + + private var ownAddresses: [BMAddress] = [] + private var selectedMyAddress: BMAddress? + + override func viewDidLoad() { + super.viewDidLoad() + + setGradientTopBar(mainColor: UIColor.main.peacockBlue, addedStatusView: true) + title = Localizable.shared.strings.messenger_new_chat + + ownAddresses = (AppModel.sharedManager().walletAddresses as? [BMAddress] ?? []) + .filter { !$0.isExpired() } + selectedMyAddress = ownAddresses.first + + configureLabels() + configureFields() + layoutForm() + + refreshMyAddressField() + validate() + } + + private static func sectionLabel() -> UILabel { + let label = UILabel() + label.font = BoldFont(size: 14) + label.textColor = UIColor.main.blueyGrey + label.letterSpacing = 2 + label.adjustFontSize = true + return label + } + + private func configureLabels() { + myAddressLabel.text = Localizable.shared.strings.messenger_my_address.uppercased() + peerLabel.text = Localizable.shared.strings.messenger_peer_address.uppercased() + nameLabel.text = Localizable.shared.strings.messenger_contact_name.uppercased() + } + + private func configureFields() { + for field in [myAddressField, peerField, nameField] { + field.font = RegularFont(size: 16) + field.tintColor = UIColor.white + field.textColor = UIColor.white + field.adjustFontSize = true + field.spellCheckingType = .no + field.autocorrectionType = .no + } + + myAddressField.placeholder = Localizable.shared.strings.messenger_my_address + myAddressField.delegate = self + myAddressField.clearButtonMode = .never + myAddressField.awakeFromNib() + + peerField.placeholder = Localizable.shared.strings.messenger_peer_address + peerField.autocapitalizationType = .none + peerField.addTarget(self, action: #selector(onPeerChanged), for: .editingChanged) + peerField.awakeFromNib() + + nameField.placeholder = Localizable.shared.strings.messenger_contact_name + nameField.autocapitalizationType = .words + nameField.awakeFromNib() + } + + private func layoutForm() { + scrollView.translatesAutoresizingMaskIntoConstraints = false + scrollView.keyboardDismissMode = .interactive + view.addSubview(scrollView) + + contentView.translatesAutoresizingMaskIntoConstraints = false + scrollView.addSubview(contentView) + + NSLayoutConstraint.activate([ + scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor), + scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor), + scrollView.topAnchor.constraint(equalTo: view.topAnchor, constant: navigationBarOffset), + scrollView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor), + + contentView.leadingAnchor.constraint(equalTo: scrollView.contentLayoutGuide.leadingAnchor), + contentView.trailingAnchor.constraint(equalTo: scrollView.contentLayoutGuide.trailingAnchor), + contentView.topAnchor.constraint(equalTo: scrollView.contentLayoutGuide.topAnchor), + contentView.bottomAnchor.constraint(equalTo: scrollView.contentLayoutGuide.bottomAnchor), + contentView.widthAnchor.constraint(equalTo: scrollView.frameLayoutGuide.widthAnchor), + ]) + + let topInset: CGFloat = 16 + let labelToFieldSpacing: CGFloat = 8 + let fieldHeight: CGFloat = 45 + let groupSpacing: CGFloat = 26 + let labelHeight: CGFloat = 20 + + var previousAnchor: NSLayoutYAxisAnchor = contentView.topAnchor + var topConstant: CGFloat = topInset + + for (label, field) in [(myAddressLabel, myAddressField), (peerLabel, peerField), (nameLabel, nameField)] { + label.translatesAutoresizingMaskIntoConstraints = false + field.translatesAutoresizingMaskIntoConstraints = false + contentView.addSubview(label) + contentView.addSubview(field) + + NSLayoutConstraint.activate([ + label.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: defaultX), + label.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -defaultX), + label.topAnchor.constraint(equalTo: previousAnchor, constant: topConstant), + label.heightAnchor.constraint(equalToConstant: labelHeight), + + field.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: defaultX), + field.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -defaultX), + field.topAnchor.constraint(equalTo: label.bottomAnchor, constant: labelToFieldSpacing), + field.heightAnchor.constraint(equalToConstant: fieldHeight), + ]) + + previousAnchor = field.bottomAnchor + topConstant = groupSpacing + } + + startButton.translatesAutoresizingMaskIntoConstraints = false + contentView.addSubview(startButton) + + NSLayoutConstraint.activate([ + startButton.centerXAnchor.constraint(equalTo: contentView.centerXAnchor), + startButton.topAnchor.constraint(equalTo: previousAnchor, constant: 30), + startButton.widthAnchor.constraint(equalToConstant: 220), + startButton.heightAnchor.constraint(equalToConstant: 44), + startButton.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -30), + ]) + } + + private func refreshMyAddressField() { + myAddressField.text = selectedMyAddress.map(addressTitle(for:)) ?? "" + validate() + } + + private func addressTitle(for addr: BMAddress) -> String { + let label = addr.label.isEmpty ? "" : "\(addr.label) — " + let id = addr.walletId + let short = id.count > 12 ? "\(id.prefix(6))…\(id.suffix(6))" : id + return "\(label)\(short)" + } + + private func validate() { + let peer = (peerField.text ?? "").trimmingCharacters(in: .whitespacesAndNewlines) + let valid = !peer.isEmpty && AppModel.sharedManager().isAddress(peer) && selectedMyAddress != nil + startButton.isEnabled = valid + startButton.alpha = valid ? 1.0 : 0.5 + } + + @objc private func onPickMyAddress() { + guard !ownAddresses.isEmpty else { return } + let alert = UIAlertController(title: Localizable.shared.strings.messenger_my_address, message: nil, preferredStyle: .actionSheet) + for addr in ownAddresses { + alert.addAction(UIAlertAction(title: addressTitle(for: addr), style: .default) { [weak self] _ in + self?.selectedMyAddress = addr + self?.refreshMyAddressField() + }) + } + alert.addAction(UIAlertAction(title: Localizable.shared.strings.cancel, style: .cancel)) + present(alert, animated: true) + } + + @objc private func onPeerChanged() { + validate() + } + + @objc private func onStart() { + let peer = (peerField.text ?? "").trimmingCharacters(in: .whitespacesAndNewlines) + guard !peer.isEmpty, + AppModel.sharedManager().isAddress(peer), + let myAddress = selectedMyAddress else { return } + + let name = (nameField.text ?? "").trimmingCharacters(in: .whitespacesAndNewlines) + let resolvedPeer = AppModel.sharedManager().resolvedPeerWalletId(peer) + + if !name.isEmpty { + AppModel.sharedManager().addContact(resolvedPeer, address: resolvedPeer, name: name, identidy: nil) + } + + AppModel.sharedManager().addChatStub(resolvedPeer, contactName: name.isEmpty ? nil : name, myWalletId: myAddress.walletId) + + let chatVC = MessengerChatViewController(peerWalletId: resolvedPeer, contactName: name.isEmpty ? nil : name) + chatVC.setMyAddress(myAddress.walletId) + + if var stack = navigationController?.viewControllers { + stack.removeLast() + stack.append(chatVC) + navigationController?.setViewControllers(stack, animated: true) + } else { + pushViewController(vc: chatVC) + } + } +} + +extension MessengerNewChatViewController: UITextFieldDelegate { + func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { + if textField === myAddressField { + onPickMyAddress() + return false + } + return true + } +} diff --git a/Resources/Assets.xcassets/iconMessenger.imageset/Contents.json b/Resources/Assets.xcassets/iconMessenger.imageset/Contents.json new file mode 100644 index 00000000..845c0141 --- /dev/null +++ b/Resources/Assets.xcassets/iconMessenger.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "iconMessenger.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "iconMessenger@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "iconMessenger@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/Resources/Assets.xcassets/iconMessenger.imageset/iconMessenger.png b/Resources/Assets.xcassets/iconMessenger.imageset/iconMessenger.png new file mode 100644 index 0000000000000000000000000000000000000000..9f51fd66f954a1a07f69f32f9a6b005ee6a64acb GIT binary patch literal 1491 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 D6T~k| literal 0 HcmV?d00001 diff --git a/Resources/Assets.xcassets/iconMessenger.imageset/iconMessenger@3x.png b/Resources/Assets.xcassets/iconMessenger.imageset/iconMessenger@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..d8bbf5aeb2ffa27e5ba0c884806d734b39c7eac5 GIT binary patch literal 5122 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 literal 0 HcmV?d00001 diff --git a/Resources/cs.lproj/Localizable.strings b/Resources/cs.lproj/Localizable.strings index c2c37a4b..f4492e55 100644 --- a/Resources/cs.lproj/Localizable.strings +++ b/Resources/cs.lproj/Localizable.strings @@ -590,3 +590,13 @@ and never kept on the blockchain."; "sbbs_address_hint" = "use for CEX withdrawals and mining"; "select_asset" = "Select asset"; "search_assets" = "Search assets"; + +"messenger" = "Messenger"; +"messenger_new_chat" = "New chat"; +"messenger_no_chats" = "No chats yet. Tap + to start a new conversation."; +"messenger_send_placeholder" = "Type your message…"; +"messenger_delete_chat" = "Delete this chat?"; +"messenger_my_address" = "My address"; +"messenger_peer_address" = "Recipient address"; +"messenger_contact_name" = "Contact name (optional)"; +"messenger_start" = "Start chat"; diff --git a/Resources/en.lproj/Localizable.strings b/Resources/en.lproj/Localizable.strings index fabaf877..614f8776 100644 --- a/Resources/en.lproj/Localizable.strings +++ b/Resources/en.lproj/Localizable.strings @@ -704,3 +704,13 @@ and never kept on the blockchain."; "sbbs_address_hint" = "use for CEX withdrawals and mining"; "select_asset" = "Select asset"; "search_assets" = "Search assets"; + +"messenger" = "Messenger"; +"messenger_new_chat" = "New chat"; +"messenger_no_chats" = "No chats yet. Tap + to start a new conversation."; +"messenger_send_placeholder" = "Type your message…"; +"messenger_delete_chat" = "Delete this chat?"; +"messenger_my_address" = "My address"; +"messenger_peer_address" = "Recipient address"; +"messenger_contact_name" = "Contact name (optional)"; +"messenger_start" = "Start chat"; diff --git a/Resources/es.lproj/Localizable.strings b/Resources/es.lproj/Localizable.strings index 19d13e6f..b0a39dbf 100644 --- a/Resources/es.lproj/Localizable.strings +++ b/Resources/es.lproj/Localizable.strings @@ -590,3 +590,13 @@ and never kept on the blockchain."; "sbbs_address_hint" = "use for CEX withdrawals and mining"; "select_asset" = "Select asset"; "search_assets" = "Search assets"; + +"messenger" = "Messenger"; +"messenger_new_chat" = "New chat"; +"messenger_no_chats" = "No chats yet. Tap + to start a new conversation."; +"messenger_send_placeholder" = "Type your message…"; +"messenger_delete_chat" = "Delete this chat?"; +"messenger_my_address" = "My address"; +"messenger_peer_address" = "Recipient address"; +"messenger_contact_name" = "Contact name (optional)"; +"messenger_start" = "Start chat"; diff --git a/Resources/fi-FI.lproj/Localizable.strings b/Resources/fi-FI.lproj/Localizable.strings index c2c37a4b..f4492e55 100644 --- a/Resources/fi-FI.lproj/Localizable.strings +++ b/Resources/fi-FI.lproj/Localizable.strings @@ -590,3 +590,13 @@ and never kept on the blockchain."; "sbbs_address_hint" = "use for CEX withdrawals and mining"; "select_asset" = "Select asset"; "search_assets" = "Search assets"; + +"messenger" = "Messenger"; +"messenger_new_chat" = "New chat"; +"messenger_no_chats" = "No chats yet. Tap + to start a new conversation."; +"messenger_send_placeholder" = "Type your message…"; +"messenger_delete_chat" = "Delete this chat?"; +"messenger_my_address" = "My address"; +"messenger_peer_address" = "Recipient address"; +"messenger_contact_name" = "Contact name (optional)"; +"messenger_start" = "Start chat"; diff --git a/Resources/fr.lproj/Localizable.strings b/Resources/fr.lproj/Localizable.strings index c2c37a4b..f4492e55 100644 --- a/Resources/fr.lproj/Localizable.strings +++ b/Resources/fr.lproj/Localizable.strings @@ -590,3 +590,13 @@ and never kept on the blockchain."; "sbbs_address_hint" = "use for CEX withdrawals and mining"; "select_asset" = "Select asset"; "search_assets" = "Search assets"; + +"messenger" = "Messenger"; +"messenger_new_chat" = "New chat"; +"messenger_no_chats" = "No chats yet. Tap + to start a new conversation."; +"messenger_send_placeholder" = "Type your message…"; +"messenger_delete_chat" = "Delete this chat?"; +"messenger_my_address" = "My address"; +"messenger_peer_address" = "Recipient address"; +"messenger_contact_name" = "Contact name (optional)"; +"messenger_start" = "Start chat"; diff --git a/Resources/ko.lproj/Localizable.strings b/Resources/ko.lproj/Localizable.strings index c2c37a4b..f4492e55 100644 --- a/Resources/ko.lproj/Localizable.strings +++ b/Resources/ko.lproj/Localizable.strings @@ -590,3 +590,13 @@ and never kept on the blockchain."; "sbbs_address_hint" = "use for CEX withdrawals and mining"; "select_asset" = "Select asset"; "search_assets" = "Search assets"; + +"messenger" = "Messenger"; +"messenger_new_chat" = "New chat"; +"messenger_no_chats" = "No chats yet. Tap + to start a new conversation."; +"messenger_send_placeholder" = "Type your message…"; +"messenger_delete_chat" = "Delete this chat?"; +"messenger_my_address" = "My address"; +"messenger_peer_address" = "Recipient address"; +"messenger_contact_name" = "Contact name (optional)"; +"messenger_start" = "Start chat"; diff --git a/Resources/nl.lproj/Localizable.strings b/Resources/nl.lproj/Localizable.strings index 19d13e6f..b0a39dbf 100644 --- a/Resources/nl.lproj/Localizable.strings +++ b/Resources/nl.lproj/Localizable.strings @@ -590,3 +590,13 @@ and never kept on the blockchain."; "sbbs_address_hint" = "use for CEX withdrawals and mining"; "select_asset" = "Select asset"; "search_assets" = "Search assets"; + +"messenger" = "Messenger"; +"messenger_new_chat" = "New chat"; +"messenger_no_chats" = "No chats yet. Tap + to start a new conversation."; +"messenger_send_placeholder" = "Type your message…"; +"messenger_delete_chat" = "Delete this chat?"; +"messenger_my_address" = "My address"; +"messenger_peer_address" = "Recipient address"; +"messenger_contact_name" = "Contact name (optional)"; +"messenger_start" = "Start chat"; diff --git a/Resources/ru.lproj/Localizable.strings b/Resources/ru.lproj/Localizable.strings index c2c37a4b..f4492e55 100644 --- a/Resources/ru.lproj/Localizable.strings +++ b/Resources/ru.lproj/Localizable.strings @@ -590,3 +590,13 @@ and never kept on the blockchain."; "sbbs_address_hint" = "use for CEX withdrawals and mining"; "select_asset" = "Select asset"; "search_assets" = "Search assets"; + +"messenger" = "Messenger"; +"messenger_new_chat" = "New chat"; +"messenger_no_chats" = "No chats yet. Tap + to start a new conversation."; +"messenger_send_placeholder" = "Type your message…"; +"messenger_delete_chat" = "Delete this chat?"; +"messenger_my_address" = "My address"; +"messenger_peer_address" = "Recipient address"; +"messenger_contact_name" = "Contact name (optional)"; +"messenger_start" = "Start chat"; diff --git a/Resources/sv-SE.lproj/Localizable.strings b/Resources/sv-SE.lproj/Localizable.strings index 500f693c..d88c5dea 100644 --- a/Resources/sv-SE.lproj/Localizable.strings +++ b/Resources/sv-SE.lproj/Localizable.strings @@ -634,3 +634,13 @@ "search_assets" = "Search assets"; "receive_description" = "Sender will be given a choice between online and offline payment.\n\nFor online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; "receive_description_2" = "For online payment to complete, you will need to open and connect your wallet sometime within 12 hours after the coins are sent."; + +"messenger" = "Messenger"; +"messenger_new_chat" = "New chat"; +"messenger_no_chats" = "No chats yet. Tap + to start a new conversation."; +"messenger_send_placeholder" = "Type your message…"; +"messenger_delete_chat" = "Delete this chat?"; +"messenger_my_address" = "My address"; +"messenger_peer_address" = "Recipient address"; +"messenger_contact_name" = "Contact name (optional)"; +"messenger_start" = "Start chat"; diff --git a/Resources/sv.lproj/Localizable.strings b/Resources/sv.lproj/Localizable.strings index c2c37a4b..f4492e55 100644 --- a/Resources/sv.lproj/Localizable.strings +++ b/Resources/sv.lproj/Localizable.strings @@ -590,3 +590,13 @@ and never kept on the blockchain."; "sbbs_address_hint" = "use for CEX withdrawals and mining"; "select_asset" = "Select asset"; "search_assets" = "Search assets"; + +"messenger" = "Messenger"; +"messenger_new_chat" = "New chat"; +"messenger_no_chats" = "No chats yet. Tap + to start a new conversation."; +"messenger_send_placeholder" = "Type your message…"; +"messenger_delete_chat" = "Delete this chat?"; +"messenger_my_address" = "My address"; +"messenger_peer_address" = "Recipient address"; +"messenger_contact_name" = "Contact name (optional)"; +"messenger_start" = "Start chat"; diff --git a/Resources/th.lproj/Localizable.strings b/Resources/th.lproj/Localizable.strings index c2c37a4b..f4492e55 100644 --- a/Resources/th.lproj/Localizable.strings +++ b/Resources/th.lproj/Localizable.strings @@ -590,3 +590,13 @@ and never kept on the blockchain."; "sbbs_address_hint" = "use for CEX withdrawals and mining"; "select_asset" = "Select asset"; "search_assets" = "Search assets"; + +"messenger" = "Messenger"; +"messenger_new_chat" = "New chat"; +"messenger_no_chats" = "No chats yet. Tap + to start a new conversation."; +"messenger_send_placeholder" = "Type your message…"; +"messenger_delete_chat" = "Delete this chat?"; +"messenger_my_address" = "My address"; +"messenger_peer_address" = "Recipient address"; +"messenger_contact_name" = "Contact name (optional)"; +"messenger_start" = "Start chat"; diff --git a/Resources/tr.lproj/Localizable.strings b/Resources/tr.lproj/Localizable.strings index c2c37a4b..f4492e55 100644 --- a/Resources/tr.lproj/Localizable.strings +++ b/Resources/tr.lproj/Localizable.strings @@ -590,3 +590,13 @@ and never kept on the blockchain."; "sbbs_address_hint" = "use for CEX withdrawals and mining"; "select_asset" = "Select asset"; "search_assets" = "Search assets"; + +"messenger" = "Messenger"; +"messenger_new_chat" = "New chat"; +"messenger_no_chats" = "No chats yet. Tap + to start a new conversation."; +"messenger_send_placeholder" = "Type your message…"; +"messenger_delete_chat" = "Delete this chat?"; +"messenger_my_address" = "My address"; +"messenger_peer_address" = "Recipient address"; +"messenger_contact_name" = "Contact name (optional)"; +"messenger_start" = "Start chat"; diff --git a/Resources/vi.lproj/Localizable.strings b/Resources/vi.lproj/Localizable.strings index c2c37a4b..f4492e55 100644 --- a/Resources/vi.lproj/Localizable.strings +++ b/Resources/vi.lproj/Localizable.strings @@ -590,3 +590,13 @@ and never kept on the blockchain."; "sbbs_address_hint" = "use for CEX withdrawals and mining"; "select_asset" = "Select asset"; "search_assets" = "Search assets"; + +"messenger" = "Messenger"; +"messenger_new_chat" = "New chat"; +"messenger_no_chats" = "No chats yet. Tap + to start a new conversation."; +"messenger_send_placeholder" = "Type your message…"; +"messenger_delete_chat" = "Delete this chat?"; +"messenger_my_address" = "My address"; +"messenger_peer_address" = "Recipient address"; +"messenger_contact_name" = "Contact name (optional)"; +"messenger_start" = "Start chat"; diff --git a/Resources/zh-Hans.lproj/Localizable.strings b/Resources/zh-Hans.lproj/Localizable.strings index 824995c4..e41952e6 100644 --- a/Resources/zh-Hans.lproj/Localizable.strings +++ b/Resources/zh-Hans.lproj/Localizable.strings @@ -589,3 +589,13 @@ and never kept on the blockchain."; "sbbs_address_hint" = "use for CEX withdrawals and mining"; "select_asset" = "Select asset"; "search_assets" = "Search assets"; + +"messenger" = "Messenger"; +"messenger_new_chat" = "New chat"; +"messenger_no_chats" = "No chats yet. Tap + to start a new conversation."; +"messenger_send_placeholder" = "Type your message…"; +"messenger_delete_chat" = "Delete this chat?"; +"messenger_my_address" = "My address"; +"messenger_peer_address" = "Recipient address"; +"messenger_contact_name" = "Contact name (optional)"; +"messenger_start" = "Start chat"; From d94dd924515bce0a8b0c26bc5f1bfb254d7ead49 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sat, 9 May 2026 03:46:34 +0200 Subject: [PATCH 11/48] Asset Swaps --- BeamWallet.xcodeproj/project.pbxproj | 257 ++++++++++---- BeamWallet/BeamSDK/AppModel.h | 13 + BeamWallet/BeamSDK/AppModel.mm | 93 +++++ BeamWallet/BeamSDK/Objects/BMDexOrder.h | 54 +++ BeamWallet/BeamSDK/Objects/BMDexOrder.mm | 105 ++++++ BeamWallet/BeamSDK/WalletModel.h | 4 + BeamWallet/BeamSDK/WalletModel.mm | 106 +++++- .../AssetSwaps/AssetSwapCreateViewModel.swift | 95 ++++++ .../AssetSwapDetailsViewModel.swift | 46 +++ .../AssetSwaps/AssetSwapsViewModel.swift | 70 ++++ .../Model/Settings/SettingsViewModel.swift | 40 ++- BeamWallet/Protocols/LocalizableStrings.swift | 29 +- BeamWallet/Protocols/Resources.swift | 8 +- .../AssetSwapCreateViewController.swift | 322 ++++++++++++++++++ .../AssetSwapDetailsViewController.swift | 163 +++++++++ .../AssetSwaps/AssetSwapsViewController.swift | 129 +++++++ .../AssetSwaps/Cells/AssetSwapOrderCell.swift | 118 +++++++ .../Main/Menu/LeftMenuViewController.swift | 12 +- .../Contents.json | 9 +- .../iconAssetSwap.imageset/iconAssetSwap.png | Bin 0 -> 1127 bytes .../iconAssetSwap@2x.png | Bin 0 -> 2404 bytes .../iconAssetSwap@3x.png | Bin 0 -> 3572 bytes .../iconDaoVote.imageset/iconDaoVote@2x.png | Bin 1237 -> 0 bytes .../iconDaoVote.imageset/iconDaoVote@3x.png | Bin 1730 -> 0 bytes Resources/cs.lproj/Localizable.strings | 28 ++ Resources/en.lproj/Localizable.strings | 31 +- Resources/es.lproj/Localizable.strings | 28 ++ Resources/fi-FI.lproj/Localizable.strings | 28 ++ Resources/fr.lproj/Localizable.strings | 28 ++ Resources/ko.lproj/Localizable.strings | 28 ++ Resources/nl.lproj/Localizable.strings | 28 ++ Resources/ru.lproj/Localizable.strings | 28 ++ Resources/sv-SE.lproj/Localizable.strings | 28 ++ Resources/sv.lproj/Localizable.strings | 28 ++ Resources/th.lproj/Localizable.strings | 28 ++ Resources/tr.lproj/Localizable.strings | 28 ++ Resources/vi.lproj/Localizable.strings | 28 ++ Resources/zh-Hans.lproj/Localizable.strings | 28 ++ 38 files changed, 1966 insertions(+), 102 deletions(-) create mode 100644 BeamWallet/BeamSDK/Objects/BMDexOrder.h create mode 100644 BeamWallet/BeamSDK/Objects/BMDexOrder.mm create mode 100644 BeamWallet/Model/AssetSwaps/AssetSwapCreateViewModel.swift create mode 100644 BeamWallet/Model/AssetSwaps/AssetSwapDetailsViewModel.swift create mode 100644 BeamWallet/Model/AssetSwaps/AssetSwapsViewModel.swift create mode 100644 BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapCreateViewController.swift create mode 100644 BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapDetailsViewController.swift create mode 100644 BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapsViewController.swift create mode 100644 BeamWallet/ViewControllers/Main/AssetSwaps/Cells/AssetSwapOrderCell.swift rename Resources/Assets.xcassets/{iconDaoVote.imageset => iconAssetSwap.imageset}/Contents.json (57%) create mode 100644 Resources/Assets.xcassets/iconAssetSwap.imageset/iconAssetSwap.png create mode 100644 Resources/Assets.xcassets/iconAssetSwap.imageset/iconAssetSwap@2x.png create mode 100644 Resources/Assets.xcassets/iconAssetSwap.imageset/iconAssetSwap@3x.png delete mode 100644 Resources/Assets.xcassets/iconDaoVote.imageset/iconDaoVote@2x.png delete mode 100644 Resources/Assets.xcassets/iconDaoVote.imageset/iconDaoVote@3x.png diff --git a/BeamWallet.xcodeproj/project.pbxproj b/BeamWallet.xcodeproj/project.pbxproj index 2229df62..11c7b6b8 100644 --- a/BeamWallet.xcodeproj/project.pbxproj +++ b/BeamWallet.xcodeproj/project.pbxproj @@ -13,9 +13,12 @@ 09BB8194C318850B9C687050 /* Pods_BeamWallet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B5894AC3136298FE0B7E8E3 /* Pods_BeamWallet.framework */; }; 0E952497DFB46C7621546999 /* Pods_BeamWalletTestNet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 36A85446EDA45DA6335930C5 /* Pods_BeamWalletTestNet.framework */; }; 14458CA45E1281FAF80D496D /* MessengerNewChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13CF5C205DC060CADA96F025 /* MessengerNewChatViewController.swift */; }; + 15A094B1963EAE81E9B86B33 /* BMDexOrder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 46577647151F6240CBA9CE2D /* BMDexOrder.mm */; }; 215454B3AA22BD789F53A90C /* BMChat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8C5EB5519EB54866BA8DB9A4 /* BMChat.mm */; }; 2361D1F909D78EC50B8C5D5C /* MessengerConversationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A439F6A64EB61AD3DF6945B /* MessengerConversationViewModel.swift */; }; + 2C2D70373756666705D14FDE /* AssetSwapCreateViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5B1E2B05648164FC49C46F7 /* AssetSwapCreateViewModel.swift */; }; 30BE993E2DFFA6452A536125 /* BMInstantMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = 20B7F5341703980CD2D3941F /* BMInstantMessage.mm */; }; + 31509E4F991BC56BF7F10098 /* AssetSwapDetailsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92C9307A797CCA7FEAABBFD8 /* AssetSwapDetailsViewModel.swift */; }; 35726BA6BFE79F50A19E7054 /* MessengerChatCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390F813D5F08AC3C0F47183F /* MessengerChatCell.swift */; }; 434CC206E4AD461CECAD5DFB /* BMInstantMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = 20B7F5341703980CD2D3941F /* BMInstantMessage.mm */; }; 492305E92FA7A41129BF7346 /* MessengerBubbleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E08B41CEDA5A06EBFD775E76 /* MessengerBubbleCell.swift */; }; @@ -23,10 +26,19 @@ 53E3D6F8F19BD21A69380CBA /* Pods_BeamWalletMasterNet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18CF009621EA8E5970DA1D87 /* Pods_BeamWalletMasterNet.framework */; }; 5A1A647678A2061222332D16 /* MessengerChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E4020D11686B93F29A46DA /* MessengerChatViewController.swift */; }; 5A4A0ACB5C6CA50F1E5FCBE8 /* MessengerChatListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFF464435B3D65DCFC432FA3 /* MessengerChatListViewModel.swift */; }; + 5DAA3CCCB00AECEACD182FBF /* AssetSwapOrderCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CDD341D6CFC3AD26C3F4374 /* AssetSwapOrderCell.swift */; }; + 610B9971C155D841609ACE0F /* libdex.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D7E7F685327E2CAB9E7C69 /* libdex.a */; }; + 62D6B4FFAD6FCD00C5206630 /* AssetSwapsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21968CB26C3B977852247761 /* AssetSwapsViewController.swift */; }; + 6315A76D06343C9CEDE2EF77 /* AssetSwapsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21968CB26C3B977852247761 /* AssetSwapsViewController.swift */; }; 69B13BFFB153BF4611F30888 /* MessengerNewChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13CF5C205DC060CADA96F025 /* MessengerNewChatViewController.swift */; }; 75516585C510BB694A1B9AED /* MessengerBubbleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E08B41CEDA5A06EBFD775E76 /* MessengerBubbleCell.swift */; }; 75B069A9EC9A517ABCACFC1E /* MessengerChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E4020D11686B93F29A46DA /* MessengerChatViewController.swift */; }; + 77CF51BBE36DCCD780857772 /* AssetSwapCreateViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A6A43055CFB5C5820B099A1 /* AssetSwapCreateViewController.swift */; }; + 7ED2D2980F560C573C46D8CC /* AssetSwapsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFDAF01730E8C754AA8C5175 /* AssetSwapsViewModel.swift */; }; + 83EC213430E0CFD381D45A13 /* AssetSwapDetailsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92C9307A797CCA7FEAABBFD8 /* AssetSwapDetailsViewModel.swift */; }; + 84D2719B950F43294039957A /* AssetSwapOrderCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CDD341D6CFC3AD26C3F4374 /* AssetSwapOrderCell.swift */; }; 87B508D6F91B6BCDE6EC712F /* BMInstantMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = 20B7F5341703980CD2D3941F /* BMInstantMessage.mm */; }; + 88D6972926A283D03D289A48 /* AssetSwapsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFDAF01730E8C754AA8C5175 /* AssetSwapsViewModel.swift */; }; 8E6EABD786898410576636A4 /* BMChat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8C5EB5519EB54866BA8DB9A4 /* BMChat.mm */; }; 9207DD8726778DF900250E80 /* AssetsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9207DD8626778DF900250E80 /* AssetsViewController.swift */; }; 9207DD8826778DF900250E80 /* AssetsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9207DD8626778DF900250E80 /* AssetsViewController.swift */; }; @@ -1369,17 +1381,35 @@ 92FE264122A11E4E00102DB4 /* BMExpandCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 92FE263A22A11E4D00102DB4 /* BMExpandCell.xib */; }; 92FE264222A11E4E00102DB4 /* BMExpandCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 92FE263A22A11E4D00102DB4 /* BMExpandCell.xib */; }; 92FE264322A11E4E00102DB4 /* BMExpandCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 92FE263A22A11E4D00102DB4 /* BMExpandCell.xib */; }; + 94E405DB59B47772F0662861 /* AssetSwapCreateViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A6A43055CFB5C5820B099A1 /* AssetSwapCreateViewController.swift */; }; 984E5950BBB86D093251AB57 /* MessengerChatCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390F813D5F08AC3C0F47183F /* MessengerChatCell.swift */; }; + 9A1790F44DE275FD9644A9F7 /* AssetSwapCreateViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A6A43055CFB5C5820B099A1 /* AssetSwapCreateViewController.swift */; }; 9C3478CC0AB10D577E97E53E /* MessengerChatListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFF464435B3D65DCFC432FA3 /* MessengerChatListViewModel.swift */; }; + 9D8BAACCF64EA977E69273F0 /* libdex.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D7E7F685327E2CAB9E7C69 /* libdex.a */; }; 9E75E31529DE385C7D153631 /* MessengerChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E4020D11686B93F29A46DA /* MessengerChatViewController.swift */; }; A04389E8E8EE7AB9E4D87007 /* BMChat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8C5EB5519EB54866BA8DB9A4 /* BMChat.mm */; }; + A522EB1A22FF64A990518431 /* AssetSwapDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A467070BE6633F1B715DAD /* AssetSwapDetailsViewController.swift */; }; + AB6BA79FF389E013065D35C9 /* libdex_board.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F426BB6F15C2E08A3E81B87D /* libdex_board.a */; }; + B4FE33729385D12603589437 /* AssetSwapDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A467070BE6633F1B715DAD /* AssetSwapDetailsViewController.swift */; }; B5E7CC16D70E7D12DD9315FC /* MessengerConversationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A439F6A64EB61AD3DF6945B /* MessengerConversationViewModel.swift */; }; + B6037162941C5AB71A356FF3 /* AssetSwapDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A467070BE6633F1B715DAD /* AssetSwapDetailsViewController.swift */; }; + BCB254DF739D2FA8FF92C672 /* AssetSwapDetailsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92C9307A797CCA7FEAABBFD8 /* AssetSwapDetailsViewModel.swift */; }; + BE96C4A71A3D47721D003ACF /* AssetSwapOrderCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CDD341D6CFC3AD26C3F4374 /* AssetSwapOrderCell.swift */; }; + C07BD2850E0E4E55AC706985 /* AssetSwapsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21968CB26C3B977852247761 /* AssetSwapsViewController.swift */; }; + CCB34673E007AADB0D649F2C /* libdex_board.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F426BB6F15C2E08A3E81B87D /* libdex_board.a */; }; + DEF279257A2A5B949FBA8B01 /* libdex.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D7E7F685327E2CAB9E7C69 /* libdex.a */; }; DFC07B98C98F293C31F86A8C /* MessengerChatListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DFF1052A687C5F2265E618F /* MessengerChatListViewController.swift */; }; + E153DCA098F777EAFAA1D91A /* AssetSwapCreateViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5B1E2B05648164FC49C46F7 /* AssetSwapCreateViewModel.swift */; }; + E167B53AA2D8218D0710AA3E /* BMDexOrder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 46577647151F6240CBA9CE2D /* BMDexOrder.mm */; }; + E545F78761926F0D8A51E9B2 /* BMDexOrder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 46577647151F6240CBA9CE2D /* BMDexOrder.mm */; }; E6218D6C7C5BE83B9707F158 /* MessengerChatCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390F813D5F08AC3C0F47183F /* MessengerChatCell.swift */; }; + E7EA1E52231681BDE3D26C73 /* AssetSwapsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFDAF01730E8C754AA8C5175 /* AssetSwapsViewModel.swift */; }; EEE47E74C114A85B33A3A618 /* MessengerChatListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFF464435B3D65DCFC432FA3 /* MessengerChatListViewModel.swift */; }; + F00F7FD991CEA0402E131CFF /* AssetSwapCreateViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5B1E2B05648164FC49C46F7 /* AssetSwapCreateViewModel.swift */; }; F0F0F0F0AAAA0002ABCD0001 /* AssetSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */; }; F0F0F0F0AAAA0003ABCD0001 /* AssetSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */; }; F0F0F0F0AAAA0004ABCD0001 /* AssetSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */; }; + F9C79FBC040297C8E235C660 /* libdex_board.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F426BB6F15C2E08A3E81B87D /* libdex_board.a */; }; FD87FA1DDA9C27F19451AB4B /* MessengerBubbleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E08B41CEDA5A06EBFD775E76 /* MessengerBubbleCell.swift */; }; /* End PBXBuildFile section */ @@ -1464,13 +1494,19 @@ 13CF5C205DC060CADA96F025 /* MessengerNewChatViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerNewChatViewController.swift; sourceTree = ""; }; 18CF009621EA8E5970DA1D87 /* Pods_BeamWalletMasterNet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_BeamWalletMasterNet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 20B7F5341703980CD2D3941F /* BMInstantMessage.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = BMInstantMessage.mm; sourceTree = ""; }; + 21968CB26C3B977852247761 /* AssetSwapsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSwapsViewController.swift; sourceTree = ""; }; 35296D58A729F092AFF0C821 /* BMChat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BMChat.h; sourceTree = ""; }; 36A85446EDA45DA6335930C5 /* Pods_BeamWalletTestNet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_BeamWalletTestNet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 390F813D5F08AC3C0F47183F /* MessengerChatCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerChatCell.swift; sourceTree = ""; }; 3B5894AC3136298FE0B7E8E3 /* Pods_BeamWallet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_BeamWallet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 456B838BA83C92E05D36B091 /* Pods-BeamWalletTestNet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeamWalletTestNet.release.xcconfig"; path = "Target Support Files/Pods-BeamWalletTestNet/Pods-BeamWalletTestNet.release.xcconfig"; sourceTree = ""; }; + 46577647151F6240CBA9CE2D /* BMDexOrder.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = BMDexOrder.mm; sourceTree = ""; }; 46CAE6BC4C48E30E26AE304F /* BMInstantMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BMInstantMessage.h; sourceTree = ""; }; + 4A6A43055CFB5C5820B099A1 /* AssetSwapCreateViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSwapCreateViewController.swift; sourceTree = ""; }; + 57D7E7F685327E2CAB9E7C69 /* libdex.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; path = libdex.a; sourceTree = ""; }; + 75A467070BE6633F1B715DAD /* AssetSwapDetailsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSwapDetailsViewController.swift; sourceTree = ""; }; 7A439F6A64EB61AD3DF6945B /* MessengerConversationViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerConversationViewModel.swift; sourceTree = ""; }; + 7CDD341D6CFC3AD26C3F4374 /* AssetSwapOrderCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSwapOrderCell.swift; sourceTree = ""; }; 8C5EB5519EB54866BA8DB9A4 /* BMChat.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = BMChat.mm; sourceTree = ""; }; 8DFF1052A687C5F2265E618F /* MessengerChatListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerChatListViewController.swift; sourceTree = ""; }; 9205284E237B11F1001F8E31 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = ""; }; @@ -1892,6 +1928,7 @@ 92C5EBA1229BE48E00ABFFF7 /* PreviewQRViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreviewQRViewController.swift; sourceTree = ""; }; 92C5EBB1229BFD1100ABFFF7 /* BMDetailCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BMDetailCell.swift; sourceTree = ""; }; 92C5EBB2229BFD1100ABFFF7 /* BMDetailCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BMDetailCell.xib; sourceTree = ""; }; + 92C9307A797CCA7FEAABBFD8 /* AssetSwapDetailsViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSwapDetailsViewModel.swift; sourceTree = ""; }; 92CC40E622E1DC7300006E5C /* BMGroupedCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BMGroupedCell.swift; sourceTree = ""; }; 92CC40E722E1DC7300006E5C /* BMGroupedCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BMGroupedCell.xib; sourceTree = ""; }; 92CF065822E112570021B9CF /* SearchTableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchTableView.swift; sourceTree = ""; }; @@ -2010,13 +2047,17 @@ 92FE263922A11E4B00102DB4 /* BMExpandCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BMExpandCell.swift; sourceTree = ""; }; 92FE263A22A11E4D00102DB4 /* BMExpandCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = BMExpandCell.xib; sourceTree = ""; }; AFF464435B3D65DCFC432FA3 /* MessengerChatListViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerChatListViewModel.swift; sourceTree = ""; }; + B5B1E2B05648164FC49C46F7 /* AssetSwapCreateViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSwapCreateViewModel.swift; sourceTree = ""; }; BA659A4953BE271B118EB5D6 /* Pods-BeamWalletMasterNet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeamWalletMasterNet.debug.xcconfig"; path = "Target Support Files/Pods-BeamWalletMasterNet/Pods-BeamWalletMasterNet.debug.xcconfig"; sourceTree = ""; }; D303009FB5F0DA4093A89DFB /* Pods-BeamWalletTestNet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeamWalletTestNet.debug.xcconfig"; path = "Target Support Files/Pods-BeamWalletTestNet/Pods-BeamWalletTestNet.debug.xcconfig"; sourceTree = ""; }; D601ED375D9C9B9FAB70DE0B /* Pods-BeamWallet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeamWallet.debug.xcconfig"; path = "Target Support Files/Pods-BeamWallet/Pods-BeamWallet.debug.xcconfig"; sourceTree = ""; }; E08B41CEDA5A06EBFD775E76 /* MessengerBubbleCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerBubbleCell.swift; sourceTree = ""; }; EAEED72AAED404575AB9A6E5 /* Pods-BeamWalletMasterNet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeamWalletMasterNet.release.xcconfig"; path = "Target Support Files/Pods-BeamWalletMasterNet/Pods-BeamWalletMasterNet.release.xcconfig"; sourceTree = ""; }; F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetSearchViewController.swift; sourceTree = ""; }; + F426BB6F15C2E08A3E81B87D /* libdex_board.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; path = libdex_board.a; sourceTree = ""; }; F9E4020D11686B93F29A46DA /* MessengerChatViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerChatViewController.swift; sourceTree = ""; }; + FECECF4C7F96F708C05AAF05 /* BMDexOrder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BMDexOrder.h; sourceTree = ""; }; + FFDAF01730E8C754AA8C5175 /* AssetSwapsViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSwapsViewModel.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -2059,6 +2100,8 @@ 9244A5042A01465E007B03D0 /* libwallet_api.a in Frameworks */, 9244A50D2A01465E007B03D0 /* libwallet_client.a in Frameworks */, 9244A51C2A01465E007B03D0 /* libhw_crypto.a in Frameworks */, + 610B9971C155D841609ACE0F /* libdex.a in Frameworks */, + CCB34673E007AADB0D649F2C /* libdex_board.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2101,6 +2144,8 @@ 9244A5052A01465E007B03D0 /* libwallet_api.a in Frameworks */, 9244A50E2A01465E007B03D0 /* libwallet_client.a in Frameworks */, 9244A51D2A01465E007B03D0 /* libhw_crypto.a in Frameworks */, + DEF279257A2A5B949FBA8B01 /* libdex.a in Frameworks */, + F9C79FBC040297C8E235C660 /* libdex_board.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2143,12 +2188,26 @@ 9244A5062A01465E007B03D0 /* libwallet_api.a in Frameworks */, 9244A50F2A01465E007B03D0 /* libwallet_client.a in Frameworks */, 9244A51E2A01465E007B03D0 /* libhw_crypto.a in Frameworks */, + 9D8BAACCF64EA977E69273F0 /* libdex.a in Frameworks */, + AB6BA79FF389E013065D35C9 /* libdex_board.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 78028519D7C340186F689742 /* AssetSwaps */ = { + isa = PBXGroup; + children = ( + ECB36A016D50624397AFFA33 /* Cells */, + 21968CB26C3B977852247761 /* AssetSwapsViewController.swift */, + 4A6A43055CFB5C5820B099A1 /* AssetSwapCreateViewController.swift */, + 75A467070BE6633F1B715DAD /* AssetSwapDetailsViewController.swift */, + ); + name = AssetSwaps; + path = AssetSwaps; + sourceTree = ""; + }; 8110C1340F23638CECA5A0CA /* Messenger */ = { isa = PBXGroup; children = ( @@ -2162,6 +2221,17 @@ path = Messenger; sourceTree = ""; }; + 838B90CD5474E2AC0F70CB0D /* AssetSwaps */ = { + isa = PBXGroup; + children = ( + FFDAF01730E8C754AA8C5175 /* AssetSwapsViewModel.swift */, + B5B1E2B05648164FC49C46F7 /* AssetSwapCreateViewModel.swift */, + 92C9307A797CCA7FEAABBFD8 /* AssetSwapDetailsViewModel.swift */, + ); + name = AssetSwaps; + path = AssetSwaps; + sourceTree = ""; + }; 9207DD8526778DD500250E80 /* Assets */ = { isa = PBXGroup; children = ( @@ -2507,6 +2577,8 @@ 20B7F5341703980CD2D3941F /* BMInstantMessage.mm */, 35296D58A729F092AFF0C821 /* BMChat.h */, 8C5EB5519EB54866BA8DB9A4 /* BMChat.mm */, + FECECF4C7F96F708C05AAF05 /* BMDexOrder.h */, + 46577647151F6240CBA9CE2D /* BMDexOrder.mm */, ); path = Objects; sourceTree = ""; @@ -2525,6 +2597,7 @@ 92F6B79C22A5B6C60055C3C3 /* QRCode */, 923A45D5235DE4000084C368 /* Passwords */, 8110C1340F23638CECA5A0CA /* Messenger */, + 78028519D7C340186F689742 /* AssetSwaps */, ); path = Main; sourceTree = ""; @@ -3043,8 +3116,10 @@ 9244A5032A01465E007B03D0 /* libwallet_client_no_ipfs.a */, 9244A4E72A014656007B03D0 /* libwallet_client.a */, 9244A4E62A014655007B03D0 /* libwallet_core.a */, + 57D7E7F685327E2CAB9E7C69 /* libdex.a */, + F426BB6F15C2E08A3E81B87D /* libdex_board.a */, ); - path = "beam-ios-7.5.14432/lib"; + path = "beam-ios-7.5.14459/lib"; sourceTree = ""; }; 92D3CBF02264B56D007E3C55 /* testnet */ = { @@ -3249,6 +3324,7 @@ 92B7E4E622AFD70D001708E4 /* UTXO */, 92B7E4E922AFD748001708E4 /* Settings */, CD37C67AA40FF44BBFFD57B4 /* Messenger */, + 838B90CD5474E2AC0F70CB0D /* AssetSwaps */, ); path = Model; sourceTree = ""; @@ -3306,6 +3382,15 @@ path = Messenger; sourceTree = ""; }; + ECB36A016D50624397AFFA33 /* Cells */ = { + isa = PBXGroup; + children = ( + 7CDD341D6CFC3AD26C3F4374 /* AssetSwapOrderCell.swift */, + ); + name = Cells; + path = Cells; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -4296,6 +4381,14 @@ 14458CA45E1281FAF80D496D /* MessengerNewChatViewController.swift in Sources */, 75516585C510BB694A1B9AED /* MessengerBubbleCell.swift in Sources */, 35726BA6BFE79F50A19E7054 /* MessengerChatCell.swift in Sources */, + 15A094B1963EAE81E9B86B33 /* BMDexOrder.mm in Sources */, + 7ED2D2980F560C573C46D8CC /* AssetSwapsViewModel.swift in Sources */, + 2C2D70373756666705D14FDE /* AssetSwapCreateViewModel.swift in Sources */, + 31509E4F991BC56BF7F10098 /* AssetSwapDetailsViewModel.swift in Sources */, + 62D6B4FFAD6FCD00C5206630 /* AssetSwapsViewController.swift in Sources */, + 94E405DB59B47772F0662861 /* AssetSwapCreateViewController.swift in Sources */, + B4FE33729385D12603589437 /* AssetSwapDetailsViewController.swift in Sources */, + 5DAA3CCCB00AECEACD182FBF /* AssetSwapOrderCell.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4629,6 +4722,14 @@ 00947887B27F2F825E1E67CC /* MessengerNewChatViewController.swift in Sources */, 492305E92FA7A41129BF7346 /* MessengerBubbleCell.swift in Sources */, 984E5950BBB86D093251AB57 /* MessengerChatCell.swift in Sources */, + E545F78761926F0D8A51E9B2 /* BMDexOrder.mm in Sources */, + E7EA1E52231681BDE3D26C73 /* AssetSwapsViewModel.swift in Sources */, + E153DCA098F777EAFAA1D91A /* AssetSwapCreateViewModel.swift in Sources */, + BCB254DF739D2FA8FF92C672 /* AssetSwapDetailsViewModel.swift in Sources */, + C07BD2850E0E4E55AC706985 /* AssetSwapsViewController.swift in Sources */, + 9A1790F44DE275FD9644A9F7 /* AssetSwapCreateViewController.swift in Sources */, + A522EB1A22FF64A990518431 /* AssetSwapDetailsViewController.swift in Sources */, + BE96C4A71A3D47721D003ACF /* AssetSwapOrderCell.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4962,6 +5063,14 @@ 69B13BFFB153BF4611F30888 /* MessengerNewChatViewController.swift in Sources */, FD87FA1DDA9C27F19451AB4B /* MessengerBubbleCell.swift in Sources */, E6218D6C7C5BE83B9707F158 /* MessengerChatCell.swift in Sources */, + E167B53AA2D8218D0710AA3E /* BMDexOrder.mm in Sources */, + 88D6972926A283D03D289A48 /* AssetSwapsViewModel.swift in Sources */, + F00F7FD991CEA0402E131CFF /* AssetSwapCreateViewModel.swift in Sources */, + 83EC213430E0CFD381D45A13 /* AssetSwapDetailsViewModel.swift in Sources */, + 6315A76D06343C9CEDE2EF77 /* AssetSwapsViewController.swift in Sources */, + 77CF51BBE36DCCD780857772 /* AssetSwapCreateViewController.swift in Sources */, + B6037162941C5AB71A356FF3 /* AssetSwapDetailsViewController.swift in Sources */, + 84D2719B950F43294039957A /* AssetSwapOrderCell.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5084,6 +5193,7 @@ GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", + "BEAM_ASSET_SWAP_SUPPORT=1", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; @@ -5147,6 +5257,10 @@ ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "BEAM_ASSET_SWAP_SUPPORT=1", + ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; @@ -5186,15 +5300,19 @@ "$(PROJECT_DIR)/Frameworks", "$(PROJECT_DIR)/Frameworks/boost", ); + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "BEAM_ASSET_SWAP_SUPPORT=1", + ); HEADER_SEARCH_PATHS = ( - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty/libuv/include\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/core\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/utility\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/wallet\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty/sqlite\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/keykeeper\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty/libuv/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/core\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/utility\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/wallet\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty/sqlite\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/keykeeper\"", ); INFOPLIST_FILE = "$(SRCROOT)/Resources/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; @@ -5206,14 +5324,14 @@ "$(inherited)", "$(PROJECT_DIR)/BeamWallet/BeamSDK", "$(PROJECT_DIR)/Frameworks", - "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14432/lib", + "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14459/lib", "$(PROJECT_DIR)", "$(PROJECT_DIR)/Frameworks/boost", ); MARKETING_VERSION = 7.4; OTHER_LDFLAGS = ( "$(inherited)", - "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14432/lib/libsqlite.a", + "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14459/lib/libsqlite.a", "-ObjC", "-l\"c++\"", "-l\"z\"", @@ -5263,15 +5381,19 @@ "$(PROJECT_DIR)/Frameworks", "$(PROJECT_DIR)/Frameworks/boost", ); + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "BEAM_ASSET_SWAP_SUPPORT=1", + ); HEADER_SEARCH_PATHS = ( - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty/libuv/include\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/core\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/utility\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/wallet\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty/sqlite\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/keykeeper\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty/libuv/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/core\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/utility\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/wallet\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty/sqlite\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/keykeeper\"", ); INFOPLIST_FILE = "$(SRCROOT)/Resources/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; @@ -5283,14 +5405,14 @@ "$(inherited)", "$(PROJECT_DIR)/BeamWallet/BeamSDK", "$(PROJECT_DIR)/Frameworks", - "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14432/lib", + "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14459/lib", "$(PROJECT_DIR)", "$(PROJECT_DIR)/Frameworks/boost", ); MARKETING_VERSION = 7.4; OTHER_LDFLAGS = ( "$(inherited)", - "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14432/lib/libsqlite.a", + "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14459/lib/libsqlite.a", "-ObjC", "-l\"c++\"", "-l\"z\"", @@ -5340,15 +5462,19 @@ "$(PROJECT_DIR)/Frameworks", "$(PROJECT_DIR)/Frameworks/boost", ); + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "BEAM_ASSET_SWAP_SUPPORT=1", + ); HEADER_SEARCH_PATHS = ( - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty/libuv/include\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/core\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/utility\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/wallet\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty/sqlite\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/keykeeper\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty/libuv/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/core\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/utility\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/wallet\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty/sqlite\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/keykeeper\"", ); INFOPLIST_FILE = "$(SRCROOT)/Resources/InfoTestnet.plist"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; @@ -5360,14 +5486,14 @@ "$(inherited)", "$(PROJECT_DIR)/BeamWallet/BeamSDK", "$(PROJECT_DIR)/Frameworks", - "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14432/lib", + "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14459/lib", "$(PROJECT_DIR)", "$(PROJECT_DIR)/Frameworks/boost", ); MARKETING_VERSION = 7.1; OTHER_LDFLAGS = ( "$(inherited)", - "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14432/lib/libsqlite.a", + "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14459/lib/libsqlite.a", "-ObjC", "-l\"c++\"", "-l\"z\"", @@ -5426,16 +5552,17 @@ "PB_FIELD_32BIT=1", "PB_NO_PACKED_STRUCTS=1", "PB_ENABLE_MALLOC=1", + "BEAM_ASSET_SWAP_SUPPORT=1", ); HEADER_SEARCH_PATHS = ( - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty/libuv/include\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/core\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/utility\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/wallet\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty/sqlite\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/keykeeper\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty/libuv/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/core\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/utility\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/wallet\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty/sqlite\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/keykeeper\"", ); INFOPLIST_FILE = "$(SRCROOT)/Resources/InfoTestnet.plist"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; @@ -5447,14 +5574,14 @@ "$(inherited)", "$(PROJECT_DIR)/BeamWallet/BeamSDK", "$(PROJECT_DIR)/Frameworks", - "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14432/lib", + "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14459/lib", "$(PROJECT_DIR)", "$(PROJECT_DIR)/Frameworks/boost", ); MARKETING_VERSION = 7.1; OTHER_LDFLAGS = ( "$(inherited)", - "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14432/lib/libsqlite.a", + "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14459/lib/libsqlite.a", "-ObjC", "-l\"c++\"", "-l\"z\"", @@ -5504,15 +5631,19 @@ "$(PROJECT_DIR)/Frameworks", "$(PROJECT_DIR)/Frameworks/boost", ); + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "BEAM_ASSET_SWAP_SUPPORT=1", + ); HEADER_SEARCH_PATHS = ( - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty/libuv/include\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/core\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/utility\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/wallet\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty/sqlite\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/keykeeper\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty/libuv/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/core\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/utility\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/wallet\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty/sqlite\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/keykeeper\"", ); INFOPLIST_FILE = "$(SRCROOT)/Resources/InfoMasternet.plist"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; @@ -5528,12 +5659,12 @@ "$(PROJECT_DIR)", "$(PROJECT_DIR)/Frameworks/boost", "$(PROJECT_DIR)/Frameworks/testnet", - "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14432/lib", + "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14459/lib", ); MARKETING_VERSION = 7.4; OTHER_LDFLAGS = ( "$(inherited)", - "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14432/lib/libsqlite.a", + "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14459/lib/libsqlite.a", "-ObjC", "-l\"c++\"", "-l\"z\"", @@ -5583,15 +5714,19 @@ "$(PROJECT_DIR)/Frameworks", "$(PROJECT_DIR)/Frameworks/boost", ); + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "BEAM_ASSET_SWAP_SUPPORT=1", + ); HEADER_SEARCH_PATHS = ( - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty/libuv/include\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/core\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/utility\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/wallet\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/3rdparty/sqlite\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14432/include/keykeeper\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty/libuv/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/core\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/utility\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/wallet\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty/sqlite\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/keykeeper\"", ); INFOPLIST_FILE = "$(SRCROOT)/Resources/InfoMasternet.plist"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; @@ -5607,12 +5742,12 @@ "$(PROJECT_DIR)", "$(PROJECT_DIR)/Frameworks/boost", "$(PROJECT_DIR)/Frameworks/testnet", - "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14432/lib", + "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14459/lib", ); MARKETING_VERSION = 7.4; OTHER_LDFLAGS = ( "$(inherited)", - "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14432/lib/libsqlite.a", + "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14459/lib/libsqlite.a", "-ObjC", "-l\"c++\"", "-l\"z\"", diff --git a/BeamWallet/BeamSDK/AppModel.h b/BeamWallet/BeamSDK/AppModel.h index a15e2baf..8d3335e1 100644 --- a/BeamWallet/BeamSDK/AppModel.h +++ b/BeamWallet/BeamSDK/AppModel.h @@ -46,6 +46,7 @@ #import "BMApp.h" #import "BMInstantMessage.h" #import "BMChat.h" +#import "BMDexOrder.h" enum { BMRestoreManual = 0, @@ -87,6 +88,7 @@ typedef int BMRestoreType; -(void)onChatMessagesLoaded:(NSString*_Nonnull)peerWalletId messages:(NSArray*_Nonnull)messages; -(void)onInstantMessageReceived:(BMInstantMessage*_Nonnull)message; -(void)onChatRemoved:(NSString*_Nonnull)peerWalletId; +-(void)onDexOrdersChanged:(NSArray*_Nonnull)orders; @end typedef void(^NewAddressGeneratedBlock)(BMAddress* _Nullable address, NSError* _Nullable error); @@ -134,6 +136,7 @@ typedef void(^ExportCSVBlock)(NSString * _Nonnull data, NSURL * _Nonnull url); @property (nonatomic,strong) NSMutableDictionary*_Nonnull needSaveContacts; @property (nonatomic,strong) NSMutableArray*_Nonnull chats; @property (nonatomic,strong) NSMutableDictionary*>*_Nonnull messagesByPeer; +@property (nonatomic,strong) NSMutableArray*_Nonnull dexOrders; @property (nonatomic, strong) NSTimer * _Nullable connectionTimer; @property (nonatomic, strong) NSTimer * _Nullable connectionAfterOnlineTimer; @@ -353,4 +356,14 @@ typedef void(^ExportCSVBlock)(NSString * _Nonnull data, NSURL * _Nonnull url); -(NSString*_Nullable)lastMyAddressForPeer:(NSString*_Nonnull)peerWalletId; -(NSString*_Nonnull)resolvedPeerWalletId:(NSString*_Nonnull)peerWalletId; +// Asset Swaps (DEX) +-(void)requestDexOrders; +-(BOOL)publishDexOrderWithSendAsset:(UInt32)sendAssetId + sendAmount:(UInt64)sendAmount + receiveAsset:(UInt32)receiveAssetId + receiveAmount:(UInt64)receiveAmount + expirationMinutes:(UInt32)expirationMinutes; +-(void)cancelDexOrderWithID:(NSString*_Nonnull)hexOrderID; +-(BOOL)acceptDexOrder:(BMDexOrder*_Nonnull)order; + @end diff --git a/BeamWallet/BeamSDK/AppModel.mm b/BeamWallet/BeamSDK/AppModel.mm index 5082817f..f994ae66 100644 --- a/BeamWallet/BeamSDK/AppModel.mm +++ b/BeamWallet/BeamSDK/AppModel.mm @@ -245,6 +245,7 @@ -(id)init{ _apps = [[NSMutableArray alloc] init]; _chats = [[NSMutableArray alloc] init]; _messagesByPeer = [[NSMutableDictionary alloc] init]; + _dexOrders = [[NSMutableArray alloc] init]; NSData *dataStatus = [[NSUserDefaults standardUserDefaults] objectForKey:walletStatusKey]; if(dataStatus != nil) { @@ -3674,4 +3675,96 @@ -(NSString*_Nullable)lastMyAddressForPeer:(NSString*_Nonnull)peerWalletId { return nil; } +#pragma mark - Asset Swaps (DEX) + +-(void)requestDexOrders { +#ifdef BEAM_ASSET_SWAP_SUPPORT + if (wallet == nil) return; + wallet->getAsync()->getDexOrders(); +#endif +} + +-(BOOL)publishDexOrderWithSendAsset:(UInt32)sendAssetId + sendAmount:(UInt64)sendAmount + receiveAsset:(UInt32)receiveAssetId + receiveAmount:(UInt64)receiveAmount + expirationMinutes:(UInt32)expirationMinutes { +#ifdef BEAM_ASSET_SWAP_SUPPORT + if (wallet == nil || walletDb == nil) { + NSLog(@"[AssetSwap] publishDexOrder skipped — wallet not running"); + return NO; + } + if (sendAmount == 0 || receiveAmount == 0 || sendAssetId == receiveAssetId) { + return NO; + } + + BMAsset *sendAsset = [[AssetsManager sharedManager] getAsset:(int)sendAssetId]; + BMAsset *receiveAsset = [[AssetsManager sharedManager] getAsset:(int)receiveAssetId]; + std::string sendSname = sendAsset.unitName.length > 0 ? sendAsset.unitName.string : ""; + std::string receiveSname = receiveAsset.unitName.length > 0 ? receiveAsset.unitName.string : ""; + + WalletAddress sbbsAddress; + sbbsAddress.m_label = "asset_swap"; + walletDb->createAddress(sbbsAddress); + sbbsAddress.m_duration = WalletAddress::AddressExpiration24h; + walletDb->saveAddress(sbbsAddress); + + DexOrder order(DexOrderID::generate(), + sbbsAddress.m_BbsAddr, + sbbsAddress.m_OwnID, + (Asset::ID)sendAssetId, + (Amount)sendAmount, + sendSname, + (Asset::ID)receiveAssetId, + (Amount)receiveAmount, + receiveSname, + expirationMinutes * 60); + + wallet->getAsync()->publishDexOrder(order); + return YES; +#else + return NO; +#endif +} + +-(void)cancelDexOrderWithID:(NSString*_Nonnull)hexOrderID { +#ifdef BEAM_ASSET_SWAP_SUPPORT + if (wallet == nil) return; + DexOrderID orderId; + if (!orderId.FromHex(hexOrderID.string)) return; + wallet->getAsync()->cancelDexOrder(orderId); +#endif +} + +-(BOOL)acceptDexOrder:(BMDexOrder*_Nonnull)order { +#ifdef BEAM_ASSET_SWAP_SUPPORT + if (wallet == nil) return NO; + + WalletID peerID(Zero); + if (!peerID.FromHex(order.sbbsID.string)) { + return NO; + } + DexOrderID orderId; + if (!orderId.FromHex(order.orderID.string)) { + return NO; + } + + Amount fee = (Amount)[self getDefaultFeeInGroth]; + + auto params = CreateDexTransactionParams( + orderId, + peerID, + (Asset::ID)order.receiveAssetId, + (Amount)order.receiveAmount, + (Asset::ID)order.sendAssetId, + (Amount)order.sendAmount, + fee); + + wallet->getAsync()->startTransaction(std::move(params)); + return YES; +#else + return NO; +#endif +} + @end diff --git a/BeamWallet/BeamSDK/Objects/BMDexOrder.h b/BeamWallet/BeamSDK/Objects/BMDexOrder.h new file mode 100644 index 00000000..f8e7242a --- /dev/null +++ b/BeamWallet/BeamSDK/Objects/BMDexOrder.h @@ -0,0 +1,54 @@ +// +// BMDexOrder.h +// BeamWallet +// +// Copyright 2018 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +@interface BMDexOrder : NSObject + +@property (nonatomic, strong) NSString * _Nonnull orderID; +@property (nonatomic, strong) NSString * _Nonnull sbbsID; + +@property (nonatomic, assign) UInt32 sendAssetId; +@property (nonatomic, assign) UInt32 receiveAssetId; + +@property (nonatomic, strong) NSString * _Nonnull sendAssetSName; +@property (nonatomic, strong) NSString * _Nonnull receiveAssetSName; + +@property (nonatomic, assign) UInt64 sendAmount; +@property (nonatomic, assign) UInt64 receiveAmount; + +@property (nonatomic, assign) UInt64 createTimestamp; +@property (nonatomic, assign) UInt64 expireTimestamp; + +@property (nonatomic, assign) BOOL isMine; +@property (nonatomic, assign) BOOL isAccepted; +@property (nonatomic, assign) BOOL isCanceled; +@property (nonatomic, assign) BOOL isCompleted; + +-(BOOL)isExpired; +-(BOOL)isActive; + +-(NSString * _Nonnull)displayCreatedDate; +-(NSString * _Nonnull)displayExpiresIn; +-(NSString * _Nonnull)displaySendAmount; +-(NSString * _Nonnull)displayReceiveAmount; +-(NSString * _Nonnull)displayRate; +-(NSString * _Nonnull)displayStatus; + +@end diff --git a/BeamWallet/BeamSDK/Objects/BMDexOrder.mm b/BeamWallet/BeamSDK/Objects/BMDexOrder.mm new file mode 100644 index 00000000..83a1a9a0 --- /dev/null +++ b/BeamWallet/BeamSDK/Objects/BMDexOrder.mm @@ -0,0 +1,105 @@ +// +// BMDexOrder.mm +// BeamWallet +// +// Copyright 2018 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "BMDexOrder.h" + +static NSString *FormatGroth(UInt64 amount) { + double beam = (double)amount / 100000000.0; + NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; + formatter.numberStyle = NSNumberFormatterDecimalStyle; + formatter.minimumFractionDigits = 0; + formatter.maximumFractionDigits = 8; + return [formatter stringFromNumber:@(beam)] ?: @"0"; +} + +@implementation BMDexOrder + +-(instancetype)init { + self = [super init]; + if (self) { + _orderID = @""; + _sbbsID = @""; + _sendAssetSName = @""; + _receiveAssetSName = @""; + } + return self; +} + +-(BOOL)isExpired { + if (self.expireTimestamp == 0) return NO; + return self.expireTimestamp < (UInt64)[[NSDate date] timeIntervalSince1970]; +} + +-(BOOL)isActive { + return !self.isExpired && !self.isCanceled && !self.isCompleted && !self.isAccepted; +} + +-(NSString * _Nonnull)displayCreatedDate { + if (self.createTimestamp == 0) return @""; + NSDate *date = [NSDate dateWithTimeIntervalSince1970:self.createTimestamp]; + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + formatter.dateStyle = NSDateFormatterMediumStyle; + formatter.timeStyle = NSDateFormatterShortStyle; + return [formatter stringFromDate:date]; +} + +-(NSString * _Nonnull)displayExpiresIn { + if (self.expireTimestamp == 0) return @"—"; + NSDate *expire = [NSDate dateWithTimeIntervalSince1970:self.expireTimestamp]; + NSTimeInterval delta = [expire timeIntervalSinceDate:[NSDate date]]; + if (delta <= 0) return @"expired"; + + NSInteger seconds = (NSInteger)delta; + NSInteger days = seconds / 86400; + NSInteger hours = (seconds % 86400) / 3600; + NSInteger minutes = (seconds % 3600) / 60; + + if (days > 0) return [NSString stringWithFormat:@"%ldd %ldh", (long)days, (long)hours]; + if (hours > 0) return [NSString stringWithFormat:@"%ldh %ldm", (long)hours, (long)minutes]; + return [NSString stringWithFormat:@"%ldm", (long)minutes]; +} + +-(NSString * _Nonnull)displaySendAmount { + return [NSString stringWithFormat:@"%@ %@", FormatGroth(self.sendAmount), self.sendAssetSName]; +} + +-(NSString * _Nonnull)displayReceiveAmount { + return [NSString stringWithFormat:@"%@ %@", FormatGroth(self.receiveAmount), self.receiveAssetSName]; +} + +-(NSString * _Nonnull)displayRate { + if (self.sendAmount == 0) return @"—"; + double rate = (double)self.receiveAmount / (double)self.sendAmount; + NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; + formatter.numberStyle = NSNumberFormatterDecimalStyle; + formatter.maximumFractionDigits = 8; + formatter.minimumFractionDigits = 0; + NSString *rateString = [formatter stringFromNumber:@(rate)] ?: @"0"; + return [NSString stringWithFormat:@"1 %@ = %@ %@", self.sendAssetSName, rateString, self.receiveAssetSName]; +} + +-(NSString * _Nonnull)displayStatus { + if (self.isCompleted) return @"completed"; + if (self.isCanceled) return @"canceled"; + if (self.isAccepted) return @"accepted"; + if ([self isExpired]) return @"expired"; + return @"open"; +} + +@end diff --git a/BeamWallet/BeamSDK/WalletModel.h b/BeamWallet/BeamSDK/WalletModel.h index 8a173afa..bef26214 100644 --- a/BeamWallet/BeamSDK/WalletModel.h +++ b/BeamWallet/BeamSDK/WalletModel.h @@ -90,4 +90,8 @@ class WalletModel : public beam::wallet::WalletClient void onGetChatList(const std::vector>& chats) override; void onGetChatMessages(const std::vector& messages) override; void onChatRemoved(const beam::wallet::WalletID& counterpart) override; +#ifdef BEAM_ASSET_SWAP_SUPPORT + void onDexOrdersChanged(beam::wallet::ChangeAction action, const std::vector& orders) override; + void onFindDexOrder(const beam::wallet::DexOrder& order) override; +#endif }; diff --git a/BeamWallet/BeamSDK/WalletModel.mm b/BeamWallet/BeamSDK/WalletModel.mm index b10b0b76..3948e652 100644 --- a/BeamWallet/BeamSDK/WalletModel.mm +++ b/BeamWallet/BeamSDK/WalletModel.mm @@ -29,6 +29,11 @@ #include "utility/helpers.h" #include "utility/common.h" #include "wallet/core/strings_resources.h" +#ifdef BEAM_ASSET_SWAP_SUPPORT +#include "wallet/client/extensions/dex_board/dex_board.h" +#include "wallet/client/extensions/dex_board/dex_order.h" +#endif +#import "BMDexOrder.h" #import "StringStd.h" @@ -422,7 +427,15 @@ static void ensureRulesOnCurrentThread() { } } } - +#ifdef BEAM_ASSET_SWAP_SUPPORT + else if(item.m_txType == wallet::TxType::DexSimpleSwap) { + NSString *swapPrefix = NSLocalizedString(@"asset_swaps", nil); + transaction.status = [NSString stringWithFormat:@"%@ — %@", + swapPrefix, + [GetTransactionStatusString(item, transaction.isIncome) lowercaseString]]; + } +#endif + auto rate = item.getExchangeRate(currenCurrency, transaction.assetId); transaction.realRate = int64_t(rate); @@ -1176,6 +1189,97 @@ static void ensureRulesOnCurrentThread() { } } +#ifdef BEAM_ASSET_SWAP_SUPPORT +static BMDexOrder *MakeBMDexOrder(const beam::wallet::DexOrder& order) { + BMDexOrder *bmo = [[BMDexOrder alloc] init]; + bmo.orderID = [NSString stringWithUTF8String:order.getID().to_string().c_str()]; + bmo.sbbsID = [NSString stringWithUTF8String:to_string(order.getSBBSID()).c_str()]; + bmo.sendAssetId = (UInt32)order.getSendAssetId(); + bmo.receiveAssetId = (UInt32)order.getReceiveAssetId(); + bmo.sendAssetSName = [NSString stringWithUTF8String:order.getSendAssetSName().c_str()]; + bmo.receiveAssetSName = [NSString stringWithUTF8String:order.getReceiveAssetSName().c_str()]; + bmo.sendAmount = (UInt64)order.getSendAmount(); + bmo.receiveAmount = (UInt64)order.getReceiveAmount(); + bmo.createTimestamp = (UInt64)order.getCreation(); + bmo.expireTimestamp = (UInt64)order.getExpiration(); + bmo.isMine = order.isMine(); + bmo.isAccepted = order.isAccepted(); + bmo.isCanceled = order.isCanceled(); + return bmo; +} + +void WalletModel::onDexOrdersChanged(beam::wallet::ChangeAction action, const std::vector& orders) { + NSMutableArray *cache = [AppModel sharedManager].dexOrders; + + if (action == beam::wallet::ChangeAction::Reset) { + [cache removeAllObjects]; + } + + for (const auto& order : orders) { + NSString *orderID = [NSString stringWithUTF8String:order.getID().to_string().c_str()]; + + NSUInteger existingIdx = NSNotFound; + for (NSUInteger i = 0; i < cache.count; i++) { + if ([cache[i].orderID isEqualToString:orderID]) { + existingIdx = i; + break; + } + } + + if (action == beam::wallet::ChangeAction::Removed) { + if (existingIdx != NSNotFound) { + [cache removeObjectAtIndex:existingIdx]; + } + continue; + } + + BMDexOrder *bmo = MakeBMDexOrder(order); + if (existingIdx != NSNotFound) { + [cache replaceObjectAtIndex:existingIdx withObject:bmo]; + } else { + [cache addObject:bmo]; + } + } + + NSArray *delegates = [AppModel sharedManager].delegates.allObjects; + NSArray *snapshot = [cache copy]; + dispatch_async(dispatch_get_main_queue(), ^{ + for (id delegate in delegates) { + if ([delegate respondsToSelector:@selector(onDexOrdersChanged:)]) { + [delegate onDexOrdersChanged:snapshot]; + } + } + }); +} + +void WalletModel::onFindDexOrder(const beam::wallet::DexOrder& order) { + BMDexOrder *bmo = MakeBMDexOrder(order); + NSMutableArray *cache = [AppModel sharedManager].dexOrders; + NSUInteger existingIdx = NSNotFound; + for (NSUInteger i = 0; i < cache.count; i++) { + if ([cache[i].orderID isEqualToString:bmo.orderID]) { + existingIdx = i; + break; + } + } + if (existingIdx != NSNotFound) { + [cache replaceObjectAtIndex:existingIdx withObject:bmo]; + } else { + [cache addObject:bmo]; + } + + NSArray *delegates = [AppModel sharedManager].delegates.allObjects; + NSArray *snapshot = [cache copy]; + dispatch_async(dispatch_get_main_queue(), ^{ + for (id delegate in delegates) { + if ([delegate respondsToSelector:@selector(onDexOrdersChanged:)]) { + [delegate onDexOrdersChanged:snapshot]; + } + } + }); +} +#endif + void WalletModel::onExportTxHistoryToCsv(const std::string& data) { NSString *csv = [NSString stringWithUTF8String:data.c_str()]; diff --git a/BeamWallet/Model/AssetSwaps/AssetSwapCreateViewModel.swift b/BeamWallet/Model/AssetSwaps/AssetSwapCreateViewModel.swift new file mode 100644 index 00000000..0665fa1e --- /dev/null +++ b/BeamWallet/Model/AssetSwaps/AssetSwapCreateViewModel.swift @@ -0,0 +1,95 @@ +// +// AssetSwapCreateViewModel.swift +// BeamWallet +// +// Copyright 2018 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +class AssetSwapCreateViewModel: NSObject { + + public var sendAsset: BMAsset? + public var receiveAsset: BMAsset? + public var sendAmountString: String = "" + public var receiveAmountString: String = "" + public var expirationMinutes: UInt32 = 360 // 6 hours + + public var onDataChanged: (() -> Void)? + + override init() { + super.init() + AppModel.sharedManager().loadFullAssetsList() + } + + public var validationError: String? { + guard let send = sendAsset else { + return Localizable.shared.strings.asset_swap_pick_send_asset + } + guard let receive = receiveAsset else { + return Localizable.shared.strings.asset_swap_pick_receive_asset + } + if send.assetId == receive.assetId { + return Localizable.shared.strings.asset_swap_same_asset_error + } + let sendGroth = grothFrom(sendAmountString) + let receiveGroth = grothFrom(receiveAmountString) + if sendGroth == 0 || receiveGroth == 0 { + return Localizable.shared.strings.amount_zero + } + if sendGroth > send.available { + return Localizable.shared.strings.asset_swap_insufficient_funds + } + return nil + } + + public var canSubmit: Bool { + return validationError == nil + } + + public func displayRate() -> String { + let s = grothFrom(sendAmountString) + let r = grothFrom(receiveAmountString) + guard s > 0, r > 0, + let sendName = sendAsset?.unitName, sendName.count > 0, + let receiveName = receiveAsset?.unitName, receiveName.count > 0 else { + return "—" + } + let rate = Double(r) / Double(s) + let formatter = NumberFormatter() + formatter.numberStyle = .decimal + formatter.maximumFractionDigits = 8 + let rateString = formatter.string(from: NSNumber(value: rate)) ?? "0" + return "1 \(sendName) = \(rateString) \(receiveName)" + } + + public func submit() -> Bool { + guard canSubmit, let send = sendAsset, let receive = receiveAsset else { + return false + } + return AppModel.sharedManager().publishDexOrder( + withSendAsset: UInt32(send.assetId), + sendAmount: grothFrom(sendAmountString), + receiveAsset: UInt32(receive.assetId), + receiveAmount: grothFrom(receiveAmountString), + expirationMinutes: expirationMinutes) + } + + private func grothFrom(_ string: String) -> UInt64 { + let normalized = string.replacingOccurrences(of: ",", with: ".") + guard let beam = Double(normalized), beam > 0 else { return 0 } + return UInt64(beam * 100_000_000.0) + } +} diff --git a/BeamWallet/Model/AssetSwaps/AssetSwapDetailsViewModel.swift b/BeamWallet/Model/AssetSwaps/AssetSwapDetailsViewModel.swift new file mode 100644 index 00000000..8e6b2dfc --- /dev/null +++ b/BeamWallet/Model/AssetSwaps/AssetSwapDetailsViewModel.swift @@ -0,0 +1,46 @@ +// +// AssetSwapDetailsViewModel.swift +// BeamWallet +// +// Copyright 2018 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +class AssetSwapDetailsViewModel: NSObject { + + public let order: BMDexOrder + + init(order: BMDexOrder) { + self.order = order + super.init() + } + + public var canCancel: Bool { + return order.isMine && order.isActive() + } + + public var canAccept: Bool { + return !order.isMine && order.isActive() + } + + public func cancel() { + AppModel.sharedManager().cancelDexOrder(withID: order.orderID) + } + + public func accept() -> Bool { + return AppModel.sharedManager().acceptDexOrder(order) + } +} diff --git a/BeamWallet/Model/AssetSwaps/AssetSwapsViewModel.swift b/BeamWallet/Model/AssetSwaps/AssetSwapsViewModel.swift new file mode 100644 index 00000000..168a24c7 --- /dev/null +++ b/BeamWallet/Model/AssetSwaps/AssetSwapsViewModel.swift @@ -0,0 +1,70 @@ +// +// AssetSwapsViewModel.swift +// BeamWallet +// +// Copyright 2018 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +enum AssetSwapsTab: Int { + case open = 0 + case mine = 1 + case history = 2 +} + +class AssetSwapsViewModel: NSObject { + + public var onDataChanged: (() -> Void)? + public var selectedTab: AssetSwapsTab = .open + + private var allOrders: [BMDexOrder] { + return AppModel.sharedManager().dexOrders as? [BMDexOrder] ?? [] + } + + public var ordersForActiveTab: [BMDexOrder] { + switch selectedTab { + case .open: + return allOrders.filter { !$0.isMine && $0.isActive() } + case .mine: + return allOrders.filter { $0.isMine && $0.isActive() } + case .history: + return allOrders.filter { !$0.isActive() } + .sorted { $0.createTimestamp > $1.createTimestamp } + } + } + + override init() { + super.init() + AppModel.sharedManager().addDelegate(self) + AppModel.sharedManager().requestDexOrders() + } + + deinit { + AppModel.sharedManager().removeDelegate(self) + } + + func reload() { + AppModel.sharedManager().requestDexOrders() + } +} + +extension AssetSwapsViewModel: WalletModelDelegate { + func onDexOrdersChanged(_ orders: [BMDexOrder]) { + DispatchQueue.main.async { [weak self] in + self?.onDataChanged?() + } + } +} diff --git a/BeamWallet/Model/Settings/SettingsViewModel.swift b/BeamWallet/Model/Settings/SettingsViewModel.swift index 42ac0ea6..59c087b0 100644 --- a/BeamWallet/Model/Settings/SettingsViewModel.swift +++ b/BeamWallet/Model/Settings/SettingsViewModel.swift @@ -67,6 +67,8 @@ class SettingsViewModel: NSObject { case utxo = 35 case blockchain = 36 case confirmations = 37 + case sign_message = 38 + case verify_message = 39 } class SettingsItem { @@ -201,18 +203,22 @@ class SettingsViewModel: NSObject { allItems.append(SettingsItem(title: Localizable.shared.strings.change_password, detail: nil, isSwitch: nil, type: .change_password, hasArrow: true)) allItems.append(SettingsItem(title: Localizable.shared.strings.blockchain_height, detail: "\(AppModel.sharedManager().walletStatus?.currentHeight ?? "")", isSwitch: nil, type: .blockchain, hasArrow: false)) - allItems.append(SettingsItem(title: Localizable.shared.strings.export_wallet_data, detail: nil, isSwitch: nil, type: .export, hasArrow: true)) - allItems.append(SettingsItem(title: Localizable.shared.strings.import_wallet_data, detail: nil, isSwitch: nil, type: .imprt, hasArrow: true)) allItems.append(SettingsItem(title: Localizable.shared.strings.show_utxo, detail: nil, isSwitch: nil, type: .utxo, hasArrow: true)) - + if AppModel.sharedManager().checkIsOwnNode() { allItems.append(SettingsItem(title: Localizable.shared.strings.rescan, detail: nil, isSwitch: nil, type: .rescan, hasArrow: false)) } - - allItems.append(SettingsItem(title: Localizable.shared.strings.clear_wallet.capitalizingFirstLetter(), detail: nil, isSwitch: nil, type: .remove_wallet, hasArrow: false)) + allItems.append(SettingsItem(title: Localizable.shared.strings.payment_proof, detail: nil, isSwitch: nil, type: .payment_proof, hasArrow: true)) allItems.append(SettingsItem(title: Localizable.shared.strings.show_public_offline, detail: nil, isSwitch: nil, type: .offline_address, hasArrow: false)) allItems.append(SettingsItem(title: Localizable.shared.strings.get_beam_faucet, detail: nil, isSwitch: nil, type: .faucet, hasArrow: false)) + + allItems.append(SettingsItem(title: Localizable.shared.strings.sign_message, detail: nil, isSwitch: nil, type: .sign_message, hasArrow: true)) + allItems.append(SettingsItem(title: Localizable.shared.strings.verify_message, detail: nil, isSwitch: nil, type: .verify_message, hasArrow: true)) + + allItems.append(SettingsItem(title: Localizable.shared.strings.export_wallet_data, detail: nil, isSwitch: nil, type: .export, hasArrow: true)) + allItems.append(SettingsItem(title: Localizable.shared.strings.import_wallet_data, detail: nil, isSwitch: nil, type: .imprt, hasArrow: true)) + allItems.append(SettingsItem(title: Localizable.shared.strings.clear_wallet.capitalizingFirstLetter(), detail: nil, isSwitch: nil, type: .remove_wallet, hasArrow: false)) } private func initItems() { @@ -289,29 +295,27 @@ class SettingsViewModel: NSObject { section_0.append(SettingsItem(title: Localizable.shared.strings.change_password, detail: nil, isSwitch: nil, type: .change_password, hasArrow: true)) items.append(section_0) case .utilites: - -// var section_0 = [SettingsItem]() -// section_0.append(SettingsItem(title: Localizable.shared.strings.blockchain_height, detail: "\(AppModel.sharedManager().walletStatus?.currentHeight ?? "")", isSwitch: nil, type: .blockchain, hasArrow: false)) - var section_1 = [SettingsItem]() - section_1.append(SettingsItem(title: Localizable.shared.strings.export_wallet_data, detail: nil, isSwitch: nil, type: .export, hasArrow: true)) - section_1.append(SettingsItem(title: Localizable.shared.strings.import_wallet_data, detail: nil, isSwitch: nil, type: .imprt, hasArrow: true)) section_1.append(SettingsItem(title: Localizable.shared.strings.show_utxo, detail: nil, isSwitch: nil, type: .utxo, hasArrow: true)) if AppModel.sharedManager().checkIsOwnNode() { section_1.append(SettingsItem(title: Localizable.shared.strings.rescan, detail: nil, isSwitch: nil, type: .rescan, hasArrow: false)) } - section_1.append(SettingsItem(title: Localizable.shared.strings.clear_wallet.capitalizingFirstLetter(), detail: nil, isSwitch: nil, type: .remove_wallet, hasArrow: false)) + section_1.append(SettingsItem(title: Localizable.shared.strings.payment_proof, detail: nil, isSwitch: nil, type: .payment_proof, hasArrow: true)) + section_1.append(SettingsItem(title: Localizable.shared.strings.show_public_offline, detail: nil, isSwitch: nil, type: .offline_address, hasArrow: false)) + section_1.append(SettingsItem(title: Localizable.shared.strings.get_beam_faucet, detail: nil, isSwitch: nil, type: .faucet, hasArrow: false)) - var section_2 = [SettingsItem]() - section_2.append(SettingsItem(title: Localizable.shared.strings.payment_proof, detail: nil, isSwitch: nil, type: .payment_proof, hasArrow: true)) - section_2.append(SettingsItem(title: Localizable.shared.strings.show_public_offline, detail: nil, isSwitch: nil, type: .offline_address, hasArrow: false)) - section_2.append(SettingsItem(title: Localizable.shared.strings.get_beam_faucet, detail: nil, isSwitch: nil, type: .faucet, hasArrow: false)) - + section_2.append(SettingsItem(title: Localizable.shared.strings.sign_message, detail: nil, isSwitch: nil, type: .sign_message, hasArrow: true)) + section_2.append(SettingsItem(title: Localizable.shared.strings.verify_message, detail: nil, isSwitch: nil, type: .verify_message, hasArrow: true)) + + var section_3 = [SettingsItem]() + section_3.append(SettingsItem(title: Localizable.shared.strings.export_wallet_data, detail: nil, isSwitch: nil, type: .export, hasArrow: true)) + section_3.append(SettingsItem(title: Localizable.shared.strings.import_wallet_data, detail: nil, isSwitch: nil, type: .imprt, hasArrow: true)) + section_3.append(SettingsItem(title: Localizable.shared.strings.clear_wallet.capitalizingFirstLetter(), detail: nil, isSwitch: nil, type: .remove_wallet, hasArrow: false)) - // items.append(section_0) items.append(section_1) items.append(section_2) + items.append(section_3) default: break diff --git a/BeamWallet/Protocols/LocalizableStrings.swift b/BeamWallet/Protocols/LocalizableStrings.swift index ff3430d4..2fa78867 100644 --- a/BeamWallet/Protocols/LocalizableStrings.swift +++ b/BeamWallet/Protocols/LocalizableStrings.swift @@ -72,6 +72,31 @@ class LocalizableStrings : NSObject { var messenger_peer_address = "messenger_peer_address".localized var messenger_contact_name = "messenger_contact_name".localized var messenger_start = "messenger_start".localized + var asset_swaps = "asset_swaps".localized + var asset_swap_new = "asset_swap_new".localized + var asset_swap_open_orders = "asset_swap_open_orders".localized + var asset_swap_my_orders = "asset_swap_my_orders".localized + var asset_swap_history = "asset_swap_history".localized + var asset_swap_send = "asset_swap_send".localized + var asset_swap_receive = "asset_swap_receive".localized + var asset_swap_send_amount = "asset_swap_send_amount".localized + var asset_swap_receive_amount = "asset_swap_receive_amount".localized + var asset_swap_expiration = "asset_swap_expiration".localized + var asset_swap_publish = "asset_swap_publish".localized + var asset_swap_accept = "asset_swap_accept".localized + var asset_swap_cancel_order = "asset_swap_cancel_order".localized + var asset_swap_no_orders = "asset_swap_no_orders".localized + var asset_swap_expired = "asset_swap_expired".localized + var asset_swap_completed = "asset_swap_completed".localized + var asset_swap_canceled = "asset_swap_canceled".localized + var asset_swap_details = "asset_swap_details".localized + var asset_swap_rate = "asset_swap_rate".localized + var asset_swap_status = "asset_swap_status".localized + var asset_swap_pick_send_asset = "asset_swap_pick_send_asset".localized + var asset_swap_pick_receive_asset = "asset_swap_pick_receive_asset".localized + var asset_swap_insufficient_funds = "asset_swap_insufficient_funds".localized + var asset_swap_same_asset_error = "asset_swap_same_asset_error".localized + var asset_swap_confirm_cancel = "asset_swap_confirm_cancel".localized var transactions = "transactions".localized var export = "export".localized var activate = "activate".localized @@ -449,6 +474,8 @@ class LocalizableStrings : NSObject { var min_fee_error_offline = "min_fee_error_offline".localized var maturity = "maturity".localized var show_public_offline = "show_public_offline".localized + var sign_message = "sign_message".localized + var verify_message = "verify_message".localized var offline_address = "offline_address".localized var public_offline_address_info = "public_offline_address_info".localized var public_offline = "public_offline".localized @@ -565,7 +592,6 @@ class LocalizableStrings : NSObject { var dapp_anme = "dapp_anme".localized var app_shader_id = "app_shader_id".localized - var beamx_dao = "beamx_dao".localized var beam_faucet = "beam_faucet".localized var beam_gallery = "beam_gallery".localized @@ -639,7 +665,6 @@ class LocalizableStrings : NSObject { var search_settings = "search_settings".localized var no_search_settings = "no_search_settings".localized var online_own_not_conifg = "online_own_not_conifg".localized - var beamx_dao_dao_voting = "beamx_dao_dao_voting".localized public func new_version_available_title(version: String) -> String { diff --git a/BeamWallet/Protocols/Resources.swift b/BeamWallet/Protocols/Resources.swift index 65e23705..1ccb278d 100644 --- a/BeamWallet/Protocols/Resources.swift +++ b/BeamWallet/Protocols/Resources.swift @@ -109,18 +109,14 @@ func IconMessenger() -> UIImage? { return UIImage(named: "iconMessenger") } -func IconBeamXDAO() -> UIImage? { - return UIImage(named: "iconDao") +func IconAssetSwap() -> UIImage? { + return UIImage(named: "iconAssetSwap") } func IconBeamFaucet() -> UIImage? { return UIImage(named: "icon_faucet") } -func IconBeamXDAOVoting() -> UIImage? { - return UIImage(named: "iconDaoVote") -} - func IconBeamGallery() -> UIImage? { return UIImage(named: "ic_gallery") } diff --git a/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapCreateViewController.swift b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapCreateViewController.swift new file mode 100644 index 00000000..bc5cc626 --- /dev/null +++ b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapCreateViewController.swift @@ -0,0 +1,322 @@ +// +// AssetSwapCreateViewController.swift +// BeamWallet +// +// Copyright 2018 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +class AssetSwapCreateViewController: BaseViewController { + + private let viewModel = AssetSwapCreateViewModel() + + private let scrollView = UIScrollView() + private let contentView = UIView() + + private let sendLabel = sectionLabel() + private let sendAssetField = BMField() + private let sendAmountField = BMField() + + private let receiveLabel = sectionLabel() + private let receiveAssetField = BMField() + private let receiveAmountField = BMField() + + private let expirationLabel = sectionLabel() + private let expirationField = BMField() + + private let rateValueLabel = UILabel() + private let errorLabel = UILabel() + + private lazy var publishButton: BMButton = { + let button = BMButton.defaultButton(frame: CGRect(x: 0, y: 0, width: 240, height: 44), color: UIColor.main.brightTeal) + button.setTitle(Localizable.shared.strings.asset_swap_publish.lowercased(), for: .normal) + button.setTitleColor(UIColor.main.marineOriginal, for: .normal) + button.setTitleColor(UIColor.main.marineOriginal.withAlphaComponent(0.5), for: .highlighted) + button.titleLabel?.font = BoldFont(size: 14) + button.addTarget(self, action: #selector(onPublish), for: .touchUpInside) + return button + }() + + override func viewDidLoad() { + super.viewDidLoad() + + setGradientTopBar(mainColor: UIColor.main.peacockBlue, addedStatusView: true) + title = Localizable.shared.strings.asset_swap_new + + configureLabels() + configureFields() + layoutForm() + + AppModel.sharedManager().addDelegate(self) + refresh() + } + + deinit { + AppModel.sharedManager().removeDelegate(self) + } + + private static func sectionLabel() -> UILabel { + let label = UILabel() + label.font = BoldFont(size: 14) + label.textColor = UIColor.main.blueyGrey + label.letterSpacing = 2 + label.adjustFontSize = true + return label + } + + private func configureLabels() { + sendLabel.text = Localizable.shared.strings.asset_swap_send.uppercased() + receiveLabel.text = Localizable.shared.strings.asset_swap_receive.uppercased() + expirationLabel.text = Localizable.shared.strings.asset_swap_expiration.uppercased() + + rateValueLabel.font = RegularFont(size: 14) + rateValueLabel.textColor = UIColor.main.steelGrey + rateValueLabel.textAlignment = .center + rateValueLabel.numberOfLines = 0 + + errorLabel.font = RegularFont(size: 12) + errorLabel.textColor = UIColor.main.red + errorLabel.textAlignment = .center + errorLabel.numberOfLines = 0 + } + + private func configureFields() { + for field in [sendAssetField, sendAmountField, receiveAssetField, receiveAmountField, expirationField] { + field.font = RegularFont(size: 16) + field.tintColor = UIColor.white + field.textColor = UIColor.white + field.adjustFontSize = true + field.spellCheckingType = .no + field.autocorrectionType = .no + field.awakeFromNib() + } + + sendAssetField.placeholder = Localizable.shared.strings.asset_swap_pick_send_asset + sendAssetField.delegate = self + sendAssetField.clearButtonMode = .never + + sendAmountField.placeholder = Localizable.shared.strings.asset_swap_send_amount + sendAmountField.keyboardType = .decimalPad + sendAmountField.addTarget(self, action: #selector(onAmountChanged), for: .editingChanged) + + receiveAssetField.placeholder = Localizable.shared.strings.asset_swap_pick_receive_asset + receiveAssetField.delegate = self + receiveAssetField.clearButtonMode = .never + + receiveAmountField.placeholder = Localizable.shared.strings.asset_swap_receive_amount + receiveAmountField.keyboardType = .decimalPad + receiveAmountField.addTarget(self, action: #selector(onAmountChanged), for: .editingChanged) + + expirationField.delegate = self + expirationField.clearButtonMode = .never + expirationField.text = expirationDisplayString(viewModel.expirationMinutes) + } + + private func layoutForm() { + scrollView.translatesAutoresizingMaskIntoConstraints = false + scrollView.keyboardDismissMode = .interactive + view.addSubview(scrollView) + + contentView.translatesAutoresizingMaskIntoConstraints = false + scrollView.addSubview(contentView) + + NSLayoutConstraint.activate([ + scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor), + scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor), + scrollView.topAnchor.constraint(equalTo: view.topAnchor, constant: navigationBarOffset), + scrollView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor), + + contentView.leadingAnchor.constraint(equalTo: scrollView.contentLayoutGuide.leadingAnchor), + contentView.trailingAnchor.constraint(equalTo: scrollView.contentLayoutGuide.trailingAnchor), + contentView.topAnchor.constraint(equalTo: scrollView.contentLayoutGuide.topAnchor), + contentView.bottomAnchor.constraint(equalTo: scrollView.contentLayoutGuide.bottomAnchor), + contentView.widthAnchor.constraint(equalTo: scrollView.frameLayoutGuide.widthAnchor), + ]) + + let topInset: CGFloat = 16 + let labelToFieldSpacing: CGFloat = 8 + let fieldHeight: CGFloat = 45 + let groupSpacing: CGFloat = 14 + let sectionSpacing: CGFloat = 26 + let labelHeight: CGFloat = 20 + + var previousAnchor: NSLayoutYAxisAnchor = contentView.topAnchor + var topConstant: CGFloat = topInset + + let sections: [(UILabel, [BMField])] = [ + (sendLabel, [sendAssetField, sendAmountField]), + (receiveLabel, [receiveAssetField, receiveAmountField]), + (expirationLabel, [expirationField]), + ] + + for (label, fields) in sections { + label.translatesAutoresizingMaskIntoConstraints = false + contentView.addSubview(label) + NSLayoutConstraint.activate([ + label.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: defaultX), + label.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -defaultX), + label.topAnchor.constraint(equalTo: previousAnchor, constant: topConstant), + label.heightAnchor.constraint(equalToConstant: labelHeight), + ]) + previousAnchor = label.bottomAnchor + topConstant = labelToFieldSpacing + + for field in fields { + field.translatesAutoresizingMaskIntoConstraints = false + contentView.addSubview(field) + NSLayoutConstraint.activate([ + field.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: defaultX), + field.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -defaultX), + field.topAnchor.constraint(equalTo: previousAnchor, constant: topConstant), + field.heightAnchor.constraint(equalToConstant: fieldHeight), + ]) + previousAnchor = field.bottomAnchor + topConstant = groupSpacing + } + + topConstant = sectionSpacing + } + + rateValueLabel.translatesAutoresizingMaskIntoConstraints = false + contentView.addSubview(rateValueLabel) + NSLayoutConstraint.activate([ + rateValueLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: defaultX), + rateValueLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -defaultX), + rateValueLabel.topAnchor.constraint(equalTo: previousAnchor, constant: 18), + ]) + + errorLabel.translatesAutoresizingMaskIntoConstraints = false + contentView.addSubview(errorLabel) + NSLayoutConstraint.activate([ + errorLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: defaultX), + errorLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -defaultX), + errorLabel.topAnchor.constraint(equalTo: rateValueLabel.bottomAnchor, constant: 6), + ]) + + publishButton.translatesAutoresizingMaskIntoConstraints = false + contentView.addSubview(publishButton) + NSLayoutConstraint.activate([ + publishButton.centerXAnchor.constraint(equalTo: contentView.centerXAnchor), + publishButton.topAnchor.constraint(equalTo: errorLabel.bottomAnchor, constant: 30), + publishButton.widthAnchor.constraint(equalToConstant: 240), + publishButton.heightAnchor.constraint(equalToConstant: 44), + publishButton.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -30), + ]) + } + + private func refresh() { + sendAssetField.text = viewModel.sendAsset.map { "\($0.unitName)" } ?? "" + receiveAssetField.text = viewModel.receiveAsset.map { "\($0.unitName)" } ?? "" + expirationField.text = expirationDisplayString(viewModel.expirationMinutes) + rateValueLabel.text = "\(Localizable.shared.strings.asset_swap_rate): \(viewModel.displayRate())" + errorLabel.text = viewModel.validationError ?? "" + publishButton.isEnabled = viewModel.canSubmit + publishButton.alpha = viewModel.canSubmit ? 1.0 : 0.5 + } + + private func expirationDisplayString(_ minutes: UInt32) -> String { + switch minutes { + case 60: return "1h" + case 360: return "6h" + case 720: return "12h" + case 1440: return "24h" + case 10080: return "7d" + default: + if minutes >= 1440 { return "\(minutes / 1440)d" } + if minutes >= 60 { return "\(minutes / 60)h" } + return "\(minutes)m" + } + } + + @objc private func onAmountChanged() { + viewModel.sendAmountString = sendAmountField.text ?? "" + viewModel.receiveAmountString = receiveAmountField.text ?? "" + rateValueLabel.text = "\(Localizable.shared.strings.asset_swap_rate): \(viewModel.displayRate())" + errorLabel.text = viewModel.validationError ?? "" + publishButton.isEnabled = viewModel.canSubmit + publishButton.alpha = viewModel.canSubmit ? 1.0 : 0.5 + } + + private func presentAssetPicker(currentId: Int, completion: @escaping (BMAsset) -> Void) { + let picker = AssetSearchViewController(selectedAssetId: currentId) + picker.completion = completion + let nav = BaseNavigationController.navigationController(rootViewController: picker) + nav.modalPresentationStyle = .fullScreen + present(nav, animated: true) + } + + @objc private func onPickSendAsset() { + let currentId = Int(viewModel.sendAsset?.assetId ?? 0) + presentAssetPicker(currentId: currentId) { [weak self] asset in + self?.viewModel.sendAsset = asset + self?.refresh() + } + } + + @objc private func onPickReceiveAsset() { + let currentId = Int(viewModel.receiveAsset?.assetId ?? 0) + presentAssetPicker(currentId: currentId) { [weak self] asset in + self?.viewModel.receiveAsset = asset + self?.refresh() + } + } + + @objc private func onPickExpiration() { + let alert = UIAlertController(title: Localizable.shared.strings.asset_swap_expiration, message: nil, preferredStyle: .actionSheet) + let options: [(String, UInt32)] = [("1 hour", 60), ("6 hours", 360), ("12 hours", 720), ("24 hours", 1440), ("7 days", 10080)] + for (title, minutes) in options { + alert.addAction(UIAlertAction(title: title, style: .default) { [weak self] _ in + self?.viewModel.expirationMinutes = minutes + self?.refresh() + }) + } + alert.addAction(UIAlertAction(title: Localizable.shared.strings.cancel, style: .cancel)) + present(alert, animated: true) + } + + @objc private func onPublish() { + guard viewModel.canSubmit else { return } + if viewModel.submit() { + navigationController?.popViewController(animated: true) + } else { + errorLabel.text = Localizable.shared.strings.error + } + } +} + +extension AssetSwapCreateViewController: UITextFieldDelegate { + func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { + if textField === sendAssetField { + onPickSendAsset() + return false + } + if textField === receiveAssetField { + onPickReceiveAsset() + return false + } + if textField === expirationField { + onPickExpiration() + return false + } + return true + } +} + +extension AssetSwapCreateViewController: WalletModelDelegate { + func onAssetInfoChange() { + refresh() + } +} diff --git a/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapDetailsViewController.swift b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapDetailsViewController.swift new file mode 100644 index 00000000..d74f0378 --- /dev/null +++ b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapDetailsViewController.swift @@ -0,0 +1,163 @@ +// +// AssetSwapDetailsViewController.swift +// BeamWallet +// +// Copyright 2018 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +class AssetSwapDetailsViewController: BaseViewController { + + private let viewModel: AssetSwapDetailsViewModel + + private let scrollView = UIScrollView() + private let contentView = UIView() + + private let amountsLabel = UILabel() + private let rateLabel = UILabel() + private let statusValueLabel = UILabel() + private let createdValueLabel = UILabel() + private let expiresValueLabel = UILabel() + private let peerValueLabel = UILabel() + + private let actionButton = BMButton.defaultButton(frame: CGRect(x: 0, y: 0, width: 240, height: 44), color: UIColor.main.brightTeal) + + init(order: BMDexOrder) { + self.viewModel = AssetSwapDetailsViewModel(order: order) + super.init(nibName: nil, bundle: nil) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) is not supported") + } + + override func viewDidLoad() { + super.viewDidLoad() + + setGradientTopBar(mainColor: UIColor.main.peacockBlue, addedStatusView: true) + title = Localizable.shared.strings.asset_swap_details + + configureLabels() + layoutContent() + configureActionButton() + } + + private func configureLabels() { + amountsLabel.font = BoldFont(size: 18) + amountsLabel.textColor = UIColor.white + amountsLabel.textAlignment = .center + amountsLabel.numberOfLines = 0 + amountsLabel.text = "\(viewModel.order.displaySendAmount())\n→\n\(viewModel.order.displayReceiveAmount())" + + rateLabel.font = RegularFont(size: 14) + rateLabel.textColor = UIColor.main.steelGrey + rateLabel.textAlignment = .center + rateLabel.text = viewModel.order.displayRate() + + statusValueLabel.font = SemiboldFont(size: 14) + statusValueLabel.textColor = UIColor.main.brightTeal + statusValueLabel.text = "\(Localizable.shared.strings.asset_swap_status): \(viewModel.order.displayStatus())" + + createdValueLabel.font = RegularFont(size: 14) + createdValueLabel.textColor = UIColor.main.steelGrey + createdValueLabel.text = viewModel.order.displayCreatedDate() + + expiresValueLabel.font = RegularFont(size: 14) + expiresValueLabel.textColor = UIColor.main.steelGrey + expiresValueLabel.text = "\(Localizable.shared.strings.asset_swap_expiration): \(viewModel.order.displayExpiresIn())" + + peerValueLabel.font = RegularFont(size: 12) + peerValueLabel.textColor = UIColor.main.steelGrey + peerValueLabel.numberOfLines = 0 + peerValueLabel.lineBreakMode = .byCharWrapping + peerValueLabel.text = viewModel.order.sbbsID + } + + private func layoutContent() { + scrollView.translatesAutoresizingMaskIntoConstraints = false + view.addSubview(scrollView) + + contentView.translatesAutoresizingMaskIntoConstraints = false + scrollView.addSubview(contentView) + + let stack = UIStackView(arrangedSubviews: [amountsLabel, rateLabel, statusValueLabel, createdValueLabel, expiresValueLabel, peerValueLabel]) + stack.translatesAutoresizingMaskIntoConstraints = false + stack.axis = .vertical + stack.spacing = 14 + stack.alignment = .center + contentView.addSubview(stack) + + NSLayoutConstraint.activate([ + scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor), + scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor), + scrollView.topAnchor.constraint(equalTo: view.topAnchor, constant: navigationBarOffset), + scrollView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor), + + contentView.leadingAnchor.constraint(equalTo: scrollView.contentLayoutGuide.leadingAnchor), + contentView.trailingAnchor.constraint(equalTo: scrollView.contentLayoutGuide.trailingAnchor), + contentView.topAnchor.constraint(equalTo: scrollView.contentLayoutGuide.topAnchor), + contentView.bottomAnchor.constraint(equalTo: scrollView.contentLayoutGuide.bottomAnchor), + contentView.widthAnchor.constraint(equalTo: scrollView.frameLayoutGuide.widthAnchor), + + stack.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: defaultX), + stack.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -defaultX), + stack.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 28), + ]) + + actionButton.translatesAutoresizingMaskIntoConstraints = false + contentView.addSubview(actionButton) + NSLayoutConstraint.activate([ + actionButton.centerXAnchor.constraint(equalTo: contentView.centerXAnchor), + actionButton.topAnchor.constraint(equalTo: stack.bottomAnchor, constant: 36), + actionButton.widthAnchor.constraint(equalToConstant: 240), + actionButton.heightAnchor.constraint(equalToConstant: 44), + actionButton.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -30), + ]) + } + + private func configureActionButton() { + actionButton.titleLabel?.font = BoldFont(size: 14) + actionButton.setTitleColor(UIColor.main.marineOriginal, for: .normal) + actionButton.setTitleColor(UIColor.main.marineOriginal.withAlphaComponent(0.5), for: .highlighted) + + if viewModel.canCancel { + actionButton.backgroundColor = UIColor.main.red + actionButton.setTitle(Localizable.shared.strings.asset_swap_cancel_order.lowercased(), for: .normal) + actionButton.addTarget(self, action: #selector(onCancel), for: .touchUpInside) + } else if viewModel.canAccept { + actionButton.setTitle(Localizable.shared.strings.asset_swap_accept.lowercased(), for: .normal) + actionButton.addTarget(self, action: #selector(onAccept), for: .touchUpInside) + } else { + actionButton.isHidden = true + } + } + + @objc private func onCancel() { + let confirm = UIAlertController(title: Localizable.shared.strings.asset_swap_confirm_cancel, message: nil, preferredStyle: .alert) + confirm.addAction(UIAlertAction(title: Localizable.shared.strings.cancel, style: .cancel)) + confirm.addAction(UIAlertAction(title: Localizable.shared.strings.asset_swap_cancel_order, style: .destructive) { [weak self] _ in + self?.viewModel.cancel() + self?.navigationController?.popViewController(animated: true) + }) + present(confirm, animated: true) + } + + @objc private func onAccept() { + if viewModel.accept() { + navigationController?.popViewController(animated: true) + } + } +} diff --git a/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapsViewController.swift b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapsViewController.swift new file mode 100644 index 00000000..72d37f8e --- /dev/null +++ b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapsViewController.swift @@ -0,0 +1,129 @@ +// +// AssetSwapsViewController.swift +// BeamWallet +// +// Copyright 2018 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +class AssetSwapsViewController: BaseTableViewController { + + private let viewModel = AssetSwapsViewModel() + private let segmented = UISegmentedControl(items: [ + Localizable.shared.strings.asset_swap_open_orders, + Localizable.shared.strings.asset_swap_my_orders, + Localizable.shared.strings.asset_swap_history, + ]) + private let emptyLabel = UILabel() + + override func viewDidLoad() { + super.viewDidLoad() + + setGradientTopBar(mainColor: UIColor.main.peacockBlue, addedStatusView: true, menu: self.navigationController?.viewControllers.count == 1) + + title = Localizable.shared.strings.asset_swaps + + addRightButton(image: IconAdd(), target: self, selector: #selector(onNewSwap)) + + segmented.selectedSegmentIndex = 0 + segmented.addTarget(self, action: #selector(onSegmentChange), for: .valueChanged) + if #available(iOS 13.0, *) { + segmented.selectedSegmentTintColor = UIColor.main.brightTeal + segmented.setTitleTextAttributes([.foregroundColor: UIColor.white], for: .normal) + segmented.setTitleTextAttributes([.foregroundColor: UIColor.main.marineOriginal], for: .selected) + } + + let header = UIView(frame: CGRect(x: 0, y: 0, width: view.bounds.width, height: 60)) + segmented.frame = CGRect(x: defaultX, y: 12, width: view.bounds.width - 2 * defaultX, height: 36) + segmented.autoresizingMask = [.flexibleWidth] + header.addSubview(segmented) + + tableView.delegate = self + tableView.dataSource = self + tableView.separatorStyle = .none + tableView.tableHeaderView = header + tableView.register(AssetSwapOrderCell.self, forCellReuseIdentifier: "AssetSwapOrderCell") + tableView.addPullToRefresh(target: self, handler: #selector(refresh(_:))) + + emptyLabel.text = Localizable.shared.strings.asset_swap_no_orders + emptyLabel.textAlignment = .center + emptyLabel.numberOfLines = 0 + emptyLabel.font = RegularFont(size: 16) + emptyLabel.textColor = Settings.sharedManager().isDarkMode ? UIColor.main.steel : UIColor.main.blueyGrey + view.addSubview(emptyLabel) + + viewModel.onDataChanged = { [weak self] in + self?.tableView.stopRefreshing() + self?.tableView.reloadData() + self?.updateEmptyState() + } + + viewModel.reload() + updateEmptyState() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + viewModel.reload() + } + + override func viewDidLayoutSubviews() { + super.viewDidLayoutSubviews() + emptyLabel.frame = CGRect(x: 20, y: navigationBarOffset + 120, width: view.bounds.width - 40, height: 60) + } + + private func updateEmptyState() { + emptyLabel.isHidden = !viewModel.ordersForActiveTab.isEmpty + } + + @objc private func onNewSwap() { + pushViewController(vc: AssetSwapCreateViewController()) + } + + @objc private func onSegmentChange() { + viewModel.selectedTab = AssetSwapsTab(rawValue: segmented.selectedSegmentIndex) ?? .open + tableView.reloadData() + updateEmptyState() + } + + @objc private func refresh(_ sender: Any) { + viewModel.reload() + } +} + +extension AssetSwapsViewController: UITableViewDelegate, UITableViewDataSource { + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return viewModel.ordersForActiveTab.count + } + + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + return 80 + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "AssetSwapOrderCell", for: indexPath) as! AssetSwapOrderCell + cell.configure(with: viewModel.ordersForActiveTab[indexPath.row], row: indexPath.row) + return cell + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + tableView.deselectRow(at: indexPath, animated: true) + let order = viewModel.ordersForActiveTab[indexPath.row] + let vc = AssetSwapDetailsViewController(order: order) + pushViewController(vc: vc) + } +} diff --git a/BeamWallet/ViewControllers/Main/AssetSwaps/Cells/AssetSwapOrderCell.swift b/BeamWallet/ViewControllers/Main/AssetSwaps/Cells/AssetSwapOrderCell.swift new file mode 100644 index 00000000..c2bc5f3f --- /dev/null +++ b/BeamWallet/ViewControllers/Main/AssetSwaps/Cells/AssetSwapOrderCell.swift @@ -0,0 +1,118 @@ +// +// AssetSwapOrderCell.swift +// BeamWallet +// +// Copyright 2018 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +class AssetSwapOrderCell: RippleCell { + + private let mainView = UIView() + private let amountsLabel = UILabel() + private let rateLabel = UILabel() + private let statusLabel = UILabel() + private let expiryLabel = UILabel() + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + + backgroundColor = .clear + contentView.backgroundColor = .clear + selectionStyle = .none + + mainView.translatesAutoresizingMaskIntoConstraints = false + contentView.addSubview(mainView) + + amountsLabel.translatesAutoresizingMaskIntoConstraints = false + amountsLabel.font = BoldFont(size: 15) + amountsLabel.textColor = UIColor.white + amountsLabel.numberOfLines = 0 + mainView.addSubview(amountsLabel) + + rateLabel.translatesAutoresizingMaskIntoConstraints = false + rateLabel.font = RegularFont(size: 13) + rateLabel.textColor = UIColor.main.steelGrey + mainView.addSubview(rateLabel) + + statusLabel.translatesAutoresizingMaskIntoConstraints = false + statusLabel.font = SemiboldFont(size: 12) + statusLabel.textColor = UIColor.main.brightTeal + statusLabel.textAlignment = .right + mainView.addSubview(statusLabel) + + expiryLabel.translatesAutoresizingMaskIntoConstraints = false + expiryLabel.font = RegularFont(size: 12) + expiryLabel.textColor = UIColor.main.steelGrey + expiryLabel.textAlignment = .right + mainView.addSubview(expiryLabel) + + NSLayoutConstraint.activate([ + mainView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor), + mainView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor), + mainView.topAnchor.constraint(equalTo: contentView.topAnchor), + mainView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor), + + amountsLabel.leadingAnchor.constraint(equalTo: mainView.leadingAnchor, constant: defaultX), + amountsLabel.topAnchor.constraint(equalTo: mainView.topAnchor, constant: 14), + amountsLabel.trailingAnchor.constraint(lessThanOrEqualTo: statusLabel.leadingAnchor, constant: -8), + + statusLabel.trailingAnchor.constraint(equalTo: mainView.trailingAnchor, constant: -defaultX), + statusLabel.centerYAnchor.constraint(equalTo: amountsLabel.centerYAnchor), + statusLabel.widthAnchor.constraint(lessThanOrEqualToConstant: 100), + + rateLabel.leadingAnchor.constraint(equalTo: amountsLabel.leadingAnchor), + rateLabel.topAnchor.constraint(equalTo: amountsLabel.bottomAnchor, constant: 6), + rateLabel.bottomAnchor.constraint(lessThanOrEqualTo: mainView.bottomAnchor, constant: -14), + + expiryLabel.trailingAnchor.constraint(equalTo: statusLabel.trailingAnchor), + expiryLabel.centerYAnchor.constraint(equalTo: rateLabel.centerYAnchor), + ]) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) is not supported") + } + + func configure(with order: BMDexOrder, row: Int) { + amountsLabel.text = "\(order.displaySendAmount()) → \(order.displayReceiveAmount())" + rateLabel.text = order.displayRate() + + if order.isCompleted { + statusLabel.text = Localizable.shared.strings.asset_swap_completed + statusLabel.textColor = UIColor.main.steelGrey + expiryLabel.text = "" + } else if order.isCanceled { + statusLabel.text = Localizable.shared.strings.asset_swap_canceled + statusLabel.textColor = UIColor.main.steelGrey + expiryLabel.text = "" + } else if order.isExpired() { + statusLabel.text = Localizable.shared.strings.asset_swap_expired + statusLabel.textColor = UIColor.main.steelGrey + expiryLabel.text = "" + } else if order.isAccepted { + statusLabel.text = Localizable.shared.strings.in_progress + statusLabel.textColor = UIColor.main.brightTeal + expiryLabel.text = order.displayExpiresIn() + } else { + statusLabel.text = order.isMine ? Localizable.shared.strings.asset_swap_my_orders : Localizable.shared.strings.asset_swap_open_orders + statusLabel.textColor = UIColor.main.brightTeal + expiryLabel.text = order.displayExpiresIn() + } + + mainView.backgroundColor = (row % 2 == 0) ? UIColor.main.cellBackgroundColor : UIColor.main.marine + } +} diff --git a/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift b/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift index cca9d794..655b6d28 100644 --- a/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift +++ b/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift @@ -58,8 +58,7 @@ class LeftMenuViewController: BaseTableViewController { MenuItem(name: Localizable.shared.strings.wallet, icon: IconWallet(), selected: true, type: WalletViewController.self), MenuItem(name: Localizable.shared.strings.messenger, icon: IconMessenger(), selected: false, type: MessengerChatListViewController.self), MenuItem(name: Localizable.shared.strings.dAppStore, icon: IconDappStore(), selected: false, type: DAOViewController.self), - MenuItem(name: Localizable.shared.strings.beamx_dao, icon: IconBeamXDAO(), selected: false, type: DAOViewController.self), - MenuItem(name: Localizable.shared.strings.beamx_dao_dao_voting, icon: IconBeamXDAOVoting(), selected: false, type: DAOViewController.self)] + MenuItem(name: Localizable.shared.strings.asset_swaps, icon: IconAssetSwap(), selected: false, type: AssetSwapsViewController.self)] private var sections_1 = [ MenuItem(name: Localizable.shared.strings.addresses, icon: IconAddresses(), selected: false, type: AddressesViewController.self), @@ -297,10 +296,8 @@ extension LeftMenuViewController: UITableViewDelegate, UITableViewDataSource { AppModel.sharedManager().startBeamXDaoApp(navigationController, app: AppModel.sharedManager().daoFaucetApp()) case Localizable.shared.strings.beam_gallery : AppModel.sharedManager().startBeamXDaoApp(navigationController, app: AppModel.sharedManager().daoGalleryApp()) - case Localizable.shared.strings.beamx_dao: - AppModel.sharedManager().startBeamXDaoApp(navigationController, app: AppModel.sharedManager().daoBeamXApp()) - case Localizable.shared.strings.beamx_dao_dao_voting: - AppModel.sharedManager().startBeamXDaoApp(navigationController, app: AppModel.sharedManager().votingApp()) + case Localizable.shared.strings.asset_swaps : + navigationController.setViewControllers([AssetSwapsViewController()], animated: false) default : break } @@ -332,8 +329,7 @@ extension LeftMenuViewController : SettingsModelDelegate { sections_0 = [MenuItem(name: Localizable.shared.strings.wallet, icon: IconWallet(), selected: true, type: WalletViewController.self), MenuItem(name: Localizable.shared.strings.messenger, icon: IconMessenger(), selected: false, type: MessengerChatListViewController.self), MenuItem(name: Localizable.shared.strings.dAppStore, icon: IconDappStore(), selected: false, type: DAOViewController.self), - MenuItem(name: Localizable.shared.strings.beamx_dao, icon: IconBeamXDAO(), selected: false, type: DAOViewController.self), - MenuItem(name: Localizable.shared.strings.beamx_dao_dao_voting, icon: IconBeamXDAOVoting(), selected: false, type: DAOViewController.self)] + MenuItem(name: Localizable.shared.strings.asset_swaps, icon: IconAssetSwap(), selected: false, type: AssetSwapsViewController.self)] sections_1 = [ MenuItem(name: Localizable.shared.strings.addresses, icon: IconAddresses(), selected: false, type: AddressesViewController.self), diff --git a/Resources/Assets.xcassets/iconDaoVote.imageset/Contents.json b/Resources/Assets.xcassets/iconAssetSwap.imageset/Contents.json similarity index 57% rename from Resources/Assets.xcassets/iconDaoVote.imageset/Contents.json rename to Resources/Assets.xcassets/iconAssetSwap.imageset/Contents.json index 3f95f556..edc00515 100644 --- a/Resources/Assets.xcassets/iconDaoVote.imageset/Contents.json +++ b/Resources/Assets.xcassets/iconAssetSwap.imageset/Contents.json @@ -2,21 +2,22 @@ "images" : [ { "idiom" : "universal", + "filename" : "iconAssetSwap.png", "scale" : "1x" }, { - "filename" : "iconDaoVote@2x.png", "idiom" : "universal", + "filename" : "iconAssetSwap@2x.png", "scale" : "2x" }, { - "filename" : "iconDaoVote@3x.png", "idiom" : "universal", + "filename" : "iconAssetSwap@3x.png", "scale" : "3x" } ], "info" : { - "author" : "xcode", - "version" : 1 + "version" : 1, + "author" : "xcode" } } diff --git a/Resources/Assets.xcassets/iconAssetSwap.imageset/iconAssetSwap.png b/Resources/Assets.xcassets/iconAssetSwap.imageset/iconAssetSwap.png new file mode 100644 index 0000000000000000000000000000000000000000..e8766205950afdb61d2d4ddd246fcb6dc9c759bd GIT binary patch literal 1127 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 WdB2ftO47Ih0000PfEv literal 0 HcmV?d00001 diff --git a/Resources/Assets.xcassets/iconAssetSwap.imageset/iconAssetSwap@3x.png b/Resources/Assets.xcassets/iconAssetSwap.imageset/iconAssetSwap@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..29262d2b4e8a42343c79cb40006ed714be7505ac GIT binary patch literal 3572 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 YJv%IY`;CU{zb}-vxt&?LsW;*O00w}XU;qFB literal 0 HcmV?d00001 diff --git a/Resources/Assets.xcassets/iconDaoVote.imageset/iconDaoVote@2x.png b/Resources/Assets.xcassets/iconDaoVote.imageset/iconDaoVote@2x.png deleted file mode 100644 index e2205cadbf1220aa855bfc1d51edb0deb9bba657..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1237 zcmV;`1SNL4Q`q~FbPS9`y=m~%m04E@v05}2Z37{t+oFF0aPI>||1(H%~tGjkW zZTTaTEhVAT{|qycB5eJv)$VE?fPYvF=1q^?9k5{=IMng4k3ARg%Q=E_tp|#lFSy~& zA#mP^`KAZY&W0-B{J>bVAi5N76<0?0|4F=dMi-0FX6sj0SV0> z&Su+@J{NXjb^QdGyO9TQ_Hdk6g!U1vt~I^SOK5&M0A~mHa8rlJ>wR?hrBFY^l?+Zg z2jKJ^3c)b9ie|WpW>>{Kmr_PY9mfzMxOItBu1p*|k~z4?+bV!l2aA370&+S`oN@!| zg}ZN;V6m_V+}*-US0TT00qTQ$>TcoHj)C@qtT^xB|6IXuw*~K@1Fm(Bdro{PnE~~{ z4Y~xiFEO%*MBl(=9awQLfYth;Z)xQhaMGFp^TR#eo}r`IN%*#x3KJ)NfVF&Z$t%_Z z2Q&HiwH9QN4nUWmW{0D+$%3;`A01H`2H|DQF7k>1i&k68GsXkCEIuZP+UJ)>zb zl6Mb@wHSfXM|C*cS`W2deg)GIoz^F1KLIdO0aPWPzZ{nCMCdeN^G$DJlst1vv)~$D zFsPR$f;x#Dhv+c;u+txzX$!CU6%V-0;1G21YrX<~^N^-L=D$?Mg#Q;zJxVfQjJ2ZgW`zjE)a{i%YH zO2rSM_TXkOG6zX>94j79y(ExNn85@4^!>H%rBz%oRW!$CS1E6ueQD2k;bD-t+|_Y+ zrOtx^NrnP?vT9E)B-f^D*Lk#`z}9v`eST>@+()@%$xNJkaU0(2 zsWce|BbkAt)mvGwc>vM<)Iu}-Vj7HOCWw#a12o_fQ!#q6U%(3SG-{k9nS~om_d5hh z&Hk`zQ2*iHs{Zad?`IaH)QPijC5mBtDEDKsOcL+MdFl0jKQZGetJO}%^6QpUN@TN( zA7puB>%%>D@26hQQxn#3*2iI}0_j00000NkvXXu0mjfLyk2a diff --git a/Resources/Assets.xcassets/iconDaoVote.imageset/iconDaoVote@3x.png b/Resources/Assets.xcassets/iconDaoVote.imageset/iconDaoVote@3x.png deleted file mode 100644 index 2896b9bb84ab4a53b792a4f04940e945e15c8c92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1730 zcmV;z20i(SP)xB)uI0fW7s>8e(dhd{C5t3xmYBi$@+Y`2Cdcx1ad3>f*8WXbO3L<6JS-fKtc!4%eQI32_Wdzn%c2nhEm$`Y3{ElY&01tnUMpng=oq#6*lRn*}lt#6(Om zn**{4#6%1*189OWK~!Vokbph79sLd^H2X91^JNR00G>}be~Xru+%x#j@@IRVhTY1f_w^2 z!iKhP&Y}un`UR4fs*oEHik(v6baD){UXV2FUWGjfVV518P7Yz#1Cju~ZXJMB@14VY zDn~G@kJ?nuEnp>L@(S}x!6Zs`q&fsKeT(1M?lUUUcM;92n~_l|*E+)&xdCMqgBu{Y zKOmH!qBs9kw^#T}684IRd1h7vl7dK}&I--I$KXH?V6{8UbYI0V-GjXUa~G8CXTClL zH$-sfxxndEAxyU*Z$~|Za+Z2s1W%p96qo8x-2rea3(VML5MElB zGXVtk5tii#5d0^5-;@q>0uo`GW`8=&i5rlV-Yg3u?~Js~Mk!9bfk?_a zGw(*frRKr--gsx^-H2vm`}qLQ#^ugi@KHBceLVNsg`)bp=kv|Tcu#3-$7nYCs@2Y( zDH5mZQQ%};+M(HupfhD(MQ&6f58%h_gAt^`)gi;7%6u`8C^!~rbJ3)5d?3T1qy73+ zT|pU9MM0I43%w5WHv<^*;1+O6;_}dit^mf6M`XE$Y6t(<1KM*H{<{bi$l}>OMOWxQ zG&kOqoaHy8J@ZK<8M|T_jmOJ=9R2Js(^HeV!56hn5&LPkgGmIirH(Qmvyy%FFg+;* zG|qRiZZ-wSjIa5T{AduM4L?*DnIV$M@+TN^Nt#a!RxeBJ@({12|T_GjbuNYt0Ig+DI~ZnNs}?6{ud2wuCzsVvcs|3RE9RTW1E)KE9b5Q9q5-b9io5J~ld zj2^jA#Vjq4Ad>2j+RIqJshlu9gGllt{UIn+$=IHgj)db1-uVWRJzbJ?#aR7{pK?+kdW~0>xM#Uhd9Kef{8UmwYkkoW3)kk Date: Sat, 9 May 2026 03:47:46 +0200 Subject: [PATCH 12/48] Beam Messenger UI improvement - chat bubbles - better msg length handling - only time in msg, date like other messaging services --- .../Main/Messenger/MessengerBubbleCell.swift | 60 +++++++++---------- 1 file changed, 29 insertions(+), 31 deletions(-) diff --git a/BeamWallet/ViewControllers/Main/Messenger/MessengerBubbleCell.swift b/BeamWallet/ViewControllers/Main/Messenger/MessengerBubbleCell.swift index 685bbacb..7226cf61 100644 --- a/BeamWallet/ViewControllers/Main/Messenger/MessengerBubbleCell.swift +++ b/BeamWallet/ViewControllers/Main/Messenger/MessengerBubbleCell.swift @@ -22,13 +22,13 @@ import UIKit class MessengerBubbleCell: RippleCell { private let bubble = UIView() - private let stack = UIStackView() private let label = UILabel() - private let timeLabel = UILabel() private var leadingConstraint: NSLayoutConstraint? private var trailingConstraint: NSLayoutConstraint? private static let maxBubbleRatio: CGFloat = 0.75 + private static let messageFont: UIFont = RegularFont(size: 15) + private static let timeFont: UIFont = RegularFont(size: 11) override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) @@ -42,24 +42,9 @@ class MessengerBubbleCell: RippleCell { contentView.addSubview(bubble) label.translatesAutoresizingMaskIntoConstraints = false - label.font = RegularFont(size: 15) label.numberOfLines = 0 label.lineBreakMode = .byWordWrapping - label.textAlignment = .left - - timeLabel.translatesAutoresizingMaskIntoConstraints = false - timeLabel.font = RegularFont(size: 11) - timeLabel.textAlignment = .right - timeLabel.setContentHuggingPriority(.required, for: .horizontal) - timeLabel.setContentCompressionResistancePriority(.required, for: .horizontal) - - stack.translatesAutoresizingMaskIntoConstraints = false - stack.axis = .vertical - stack.alignment = .fill - stack.spacing = 2 - stack.addArrangedSubview(label) - stack.addArrangedSubview(timeLabel) - bubble.addSubview(stack) + bubble.addSubview(label) let leading = bubble.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 16) let trailing = bubble.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -16) @@ -71,13 +56,11 @@ class MessengerBubbleCell: RippleCell { NSLayoutConstraint.activate([ bubble.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 4), bubble.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -4), - bubble.widthAnchor.constraint(lessThanOrEqualTo: contentView.widthAnchor, multiplier: MessengerBubbleCell.maxBubbleRatio), - - stack.leadingAnchor.constraint(equalTo: bubble.leadingAnchor, constant: 12), - stack.trailingAnchor.constraint(equalTo: bubble.trailingAnchor, constant: -12), - stack.topAnchor.constraint(equalTo: bubble.topAnchor, constant: 8), - stack.bottomAnchor.constraint(equalTo: bubble.bottomAnchor, constant: -8), + label.leadingAnchor.constraint(equalTo: bubble.leadingAnchor, constant: 12), + label.trailingAnchor.constraint(equalTo: bubble.trailingAnchor, constant: -12), + label.topAnchor.constraint(equalTo: bubble.topAnchor, constant: 8), + label.bottomAnchor.constraint(equalTo: bubble.bottomAnchor, constant: -8), label.widthAnchor.constraint(lessThanOrEqualToConstant: maxLabelWidth), ]) } @@ -87,21 +70,36 @@ class MessengerBubbleCell: RippleCell { } func configure(with message: BMInstantMessage) { - label.text = message.message - timeLabel.text = message.formattedTime() - + let textColor: UIColor if message.isIncome { bubble.backgroundColor = UIColor.main.brightSkyBlue - label.textColor = UIColor.main.marineOriginal - timeLabel.textColor = UIColor.main.marineOriginal.withAlphaComponent(0.6) + textColor = UIColor.main.marineOriginal leadingConstraint?.isActive = true trailingConstraint?.isActive = false } else { bubble.backgroundColor = UIColor.main.heliotrope - label.textColor = UIColor.main.marineOriginal - timeLabel.textColor = UIColor.main.marineOriginal.withAlphaComponent(0.6) + textColor = UIColor.main.marineOriginal leadingConstraint?.isActive = false trailingConstraint?.isActive = true } + + let attributed = NSMutableAttributedString() + attributed.append(NSAttributedString( + string: message.message, + attributes: [ + .font: MessengerBubbleCell.messageFont, + .foregroundColor: textColor, + ] + )) + attributed.append(NSAttributedString( + string: " \(message.formattedTime())", + attributes: [ + .font: MessengerBubbleCell.timeFont, + .foregroundColor: textColor.withAlphaComponent(0.55), + .baselineOffset: -1, + ] + )) + + label.attributedText = attributed } } From 36c59c69cc941673d31fcd4be891de299f50ca94 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sat, 9 May 2026 15:14:39 +0200 Subject: [PATCH 13/48] fix(restore): install Rules on the dispatch thread before WalletModel ctor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `Rules::s_pInstance` is `thread_local`. `OpenWalletProgressViewController` dispatches `restore:` onto a background queue, which doesn't go through `init`/`start`/`chooseRandomNode` where Rules is currently installed, so the first BEAM call inside `restore:` (`make_shared` / `wallet->start`) threw "no rules" and bounced the user back to Welcome at the end of snapshot download. Call `[self loadRules]` upfront in `-restore:`. `loadRules` is idempotent — the underlying singleton is `std::call_once`-guarded — so this just assigns `s_pInstance` on the current thread, mirroring the pattern already used in `+chooseRandomNode`. --- BeamWallet/BeamSDK/AppModel.mm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/BeamWallet/BeamSDK/AppModel.mm b/BeamWallet/BeamSDK/AppModel.mm index f994ae66..189fa0db 100644 --- a/BeamWallet/BeamSDK/AppModel.mm +++ b/BeamWallet/BeamSDK/AppModel.mm @@ -917,6 +917,11 @@ -(void)restore:(NSString*_Nonnull)path{ if ([[NSFileManager defaultManager] fileExistsAtPath:path]) { string recoveryPath = path.string; + // Caller dispatches us onto a background queue, so Rules::s_pInstance + // (thread_local) isn't set on this thread yet — install it before any + // BEAM API runs, otherwise WalletModel ctor / wallet->start() throw. + [self loadRules]; + try{ // Reactor must be current while WalletModel binds to walletDb, // otherwise the worker thread inherits no current reactor and From 5965b0d25966e9afb51c270e71c41f005507ea17 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sat, 9 May 2026 15:14:50 +0200 Subject: [PATCH 14/48] fix(restore): throttle RecoveryProgress::OnProgress to integer-percent ticks BEAM core fires OnProgress thousands of times per second on sub-1KB granularity. Each callback dispatches onto the main queue to update the restore-progress UI, and the blocks accumulate faster than UIKit can drain them, blowing past the highwater limit and stalling the screen. Drop everything unless integer percent advanced or done >= total. Tracks the last reported percent on the RecoveryProgress instance and updates the NSLog line to include the percent for easier observability. --- BeamWallet/BeamSDK/RecoveryProgress.h | 5 +++++ BeamWallet/BeamSDK/RecoveryProgress.mm | 27 ++++++++++++++++++-------- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/BeamWallet/BeamSDK/RecoveryProgress.h b/BeamWallet/BeamSDK/RecoveryProgress.h index fe21e74f..720e28e4 100644 --- a/BeamWallet/BeamSDK/RecoveryProgress.h +++ b/BeamWallet/BeamSDK/RecoveryProgress.h @@ -64,6 +64,11 @@ private: std::unique_ptr m_estimateFilter; private: long avgTime = 0; private: long start = 0; +// BEAM core fires OnProgress thousands of times per second (sub-1KB granularity). +// Forward to delegates only when integer percent advances or recovery completes, +// so the iOS side doesn't drown the main queue with redundant UI updates. +private: int m_lastReportedPercent = -1; + private: double getWindowedBps(); double getWholeTimeBps(); diff --git a/BeamWallet/BeamSDK/RecoveryProgress.mm b/BeamWallet/BeamSDK/RecoveryProgress.mm index 2c6da47f..5af3b5a3 100644 --- a/BeamWallet/BeamSDK/RecoveryProgress.mm +++ b/BeamWallet/BeamSDK/RecoveryProgress.mm @@ -183,27 +183,38 @@ } bool RecoveryProgress::OnProgress(uint64_t done, uint64_t total) { - NSLog(@"RecoveryProgress %llu - %llu",done, total); - + // Throttle: BEAM fires this thousands of times per second. Skip everything + // unless integer percent advanced or we just hit completion — otherwise the + // dispatch_async-per-callback on the iOS side accumulates blocks on the main + // queue faster than UIKit can drain them, blowing past the highwater limit. + int percent = (total > 0) ? (int)((done * 100) / total) : 0; + bool atCompletion = (total > 0 && done >= total); + if (percent == m_lastReportedPercent && !atCompletion) { + return [AppModel sharedManager].isRestoreFlow; + } + m_lastReportedPercent = percent; + + NSLog(@"RecoveryProgress %llu / %llu (%d%%)", done, total, percent); + if (!m_isStart) { m_isStart = true; - + m_bpsWholeTimeFilter = std::make_unique(kFilterRange); m_bpsWindowedFilter = std::make_unique(kFilterRange*3); m_estimateFilter = std::make_unique(kFilterRange); - + m_startTimestamp = beam::getTimestamp(); } - + m_previousUpdateTimestamp = m_lastUpdateTimestamp; m_lastUpdateTimestamp = beam::getTimestamp(); m_lastDone = m_done; m_done = done; m_total = total; - + auto wbps = getWindowedBps(); auto bps = (getWholeTimeBps() + wbps) / 2; - + if (fabs(bps) < std::numeric_limits::epsilon()) { m_estimate = 0; @@ -218,7 +229,7 @@ [delegate onRecoveryProgressUpdated:(int)done total:(int)total time:(int)m_estimate]; } } - + return [AppModel sharedManager].isRestoreFlow; } From 8a5e30f3e84aeb91cae6dae78a8c572747ff8e97 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sat, 9 May 2026 15:21:49 +0200 Subject: [PATCH 15/48] feat(swap): cap order expiration at 12h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Order expiration was offered up to 7 days, but DEX orders ride on SBBS which expires bulletins after ~12 hours — anything beyond that is unreachable on the bulletin board even though the order still claims to be active. Cap the publish path defensively in AppModel and drop the 24h / 7d options from the create-order picker. Also swaps the action-sheet picker for a new BMOptionPickerViewController and inlines the placeholder assignments into configureFields setup so they're not overridden by the per-field initialization that follows. --- BeamWallet.xcodeproj/project.pbxproj | 8 + BeamWallet/BeamSDK/AppModel.mm | 5 + .../BMOptionPickerViewController.swift | 210 ++++++++++++++++++ .../AssetSwaps/AssetSwapCreateViewModel.swift | 2 +- .../AssetSwapCreateViewController.swift | 34 +-- .../AssetSwaps/Cells/AssetSwapOrderCell.swift | 3 +- 6 files changed, 243 insertions(+), 19 deletions(-) create mode 100644 BeamWallet/Controls/BMOptionPickerViewController.swift diff --git a/BeamWallet.xcodeproj/project.pbxproj b/BeamWallet.xcodeproj/project.pbxproj index 11c7b6b8..3dc4f405 100644 --- a/BeamWallet.xcodeproj/project.pbxproj +++ b/BeamWallet.xcodeproj/project.pbxproj @@ -20,10 +20,12 @@ 30BE993E2DFFA6452A536125 /* BMInstantMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = 20B7F5341703980CD2D3941F /* BMInstantMessage.mm */; }; 31509E4F991BC56BF7F10098 /* AssetSwapDetailsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92C9307A797CCA7FEAABBFD8 /* AssetSwapDetailsViewModel.swift */; }; 35726BA6BFE79F50A19E7054 /* MessengerChatCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390F813D5F08AC3C0F47183F /* MessengerChatCell.swift */; }; + 3C4B4023BBF6C6624DDC279E /* BMOptionPickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53ECF740A61C5F0D941B8B36 /* BMOptionPickerViewController.swift */; }; 434CC206E4AD461CECAD5DFB /* BMInstantMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = 20B7F5341703980CD2D3941F /* BMInstantMessage.mm */; }; 492305E92FA7A41129BF7346 /* MessengerBubbleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E08B41CEDA5A06EBFD775E76 /* MessengerBubbleCell.swift */; }; 4D7C86E3D4DAAAD7DDFE22E7 /* MessengerChatListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DFF1052A687C5F2265E618F /* MessengerChatListViewController.swift */; }; 53E3D6F8F19BD21A69380CBA /* Pods_BeamWalletMasterNet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18CF009621EA8E5970DA1D87 /* Pods_BeamWalletMasterNet.framework */; }; + 59D5C848EC6C80442BC6A8A3 /* BMOptionPickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53ECF740A61C5F0D941B8B36 /* BMOptionPickerViewController.swift */; }; 5A1A647678A2061222332D16 /* MessengerChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E4020D11686B93F29A46DA /* MessengerChatViewController.swift */; }; 5A4A0ACB5C6CA50F1E5FCBE8 /* MessengerChatListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFF464435B3D65DCFC432FA3 /* MessengerChatListViewModel.swift */; }; 5DAA3CCCB00AECEACD182FBF /* AssetSwapOrderCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CDD341D6CFC3AD26C3F4374 /* AssetSwapOrderCell.swift */; }; @@ -31,6 +33,7 @@ 62D6B4FFAD6FCD00C5206630 /* AssetSwapsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21968CB26C3B977852247761 /* AssetSwapsViewController.swift */; }; 6315A76D06343C9CEDE2EF77 /* AssetSwapsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21968CB26C3B977852247761 /* AssetSwapsViewController.swift */; }; 69B13BFFB153BF4611F30888 /* MessengerNewChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13CF5C205DC060CADA96F025 /* MessengerNewChatViewController.swift */; }; + 705F9944DC83B6CC6816678F /* BMOptionPickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53ECF740A61C5F0D941B8B36 /* BMOptionPickerViewController.swift */; }; 75516585C510BB694A1B9AED /* MessengerBubbleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E08B41CEDA5A06EBFD775E76 /* MessengerBubbleCell.swift */; }; 75B069A9EC9A517ABCACFC1E /* MessengerChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E4020D11686B93F29A46DA /* MessengerChatViewController.swift */; }; 77CF51BBE36DCCD780857772 /* AssetSwapCreateViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A6A43055CFB5C5820B099A1 /* AssetSwapCreateViewController.swift */; }; @@ -1503,6 +1506,7 @@ 46577647151F6240CBA9CE2D /* BMDexOrder.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = BMDexOrder.mm; sourceTree = ""; }; 46CAE6BC4C48E30E26AE304F /* BMInstantMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BMInstantMessage.h; sourceTree = ""; }; 4A6A43055CFB5C5820B099A1 /* AssetSwapCreateViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSwapCreateViewController.swift; sourceTree = ""; }; + 53ECF740A61C5F0D941B8B36 /* BMOptionPickerViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BMOptionPickerViewController.swift; sourceTree = ""; }; 57D7E7F685327E2CAB9E7C69 /* libdex.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; path = libdex.a; sourceTree = ""; }; 75A467070BE6633F1B715DAD /* AssetSwapDetailsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSwapDetailsViewController.swift; sourceTree = ""; }; 7A439F6A64EB61AD3DF6945B /* MessengerConversationViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerConversationViewModel.swift; sourceTree = ""; }; @@ -2824,6 +2828,7 @@ 92D9F7A5266FAB55006FB555 /* BMGradientView.swift */, 92B340AA2670E68C00936168 /* AssetIconView.swift */, 9249A5112694584900FF6C00 /* BMRippleCell.swift */, + 53ECF740A61C5F0D941B8B36 /* BMOptionPickerViewController.swift */, ); path = Controls; sourceTree = ""; @@ -4389,6 +4394,7 @@ 94E405DB59B47772F0662861 /* AssetSwapCreateViewController.swift in Sources */, B4FE33729385D12603589437 /* AssetSwapDetailsViewController.swift in Sources */, 5DAA3CCCB00AECEACD182FBF /* AssetSwapOrderCell.swift in Sources */, + 59D5C848EC6C80442BC6A8A3 /* BMOptionPickerViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4730,6 +4736,7 @@ 9A1790F44DE275FD9644A9F7 /* AssetSwapCreateViewController.swift in Sources */, A522EB1A22FF64A990518431 /* AssetSwapDetailsViewController.swift in Sources */, BE96C4A71A3D47721D003ACF /* AssetSwapOrderCell.swift in Sources */, + 705F9944DC83B6CC6816678F /* BMOptionPickerViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5071,6 +5078,7 @@ 77CF51BBE36DCCD780857772 /* AssetSwapCreateViewController.swift in Sources */, B6037162941C5AB71A356FF3 /* AssetSwapDetailsViewController.swift in Sources */, 84D2719B950F43294039957A /* AssetSwapOrderCell.swift in Sources */, + 3C4B4023BBF6C6624DDC279E /* BMOptionPickerViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/BeamWallet/BeamSDK/AppModel.mm b/BeamWallet/BeamSDK/AppModel.mm index 189fa0db..8f3e3c22 100644 --- a/BeamWallet/BeamSDK/AppModel.mm +++ b/BeamWallet/BeamSDK/AppModel.mm @@ -3703,6 +3703,11 @@ -(BOOL)publishDexOrderWithSendAsset:(UInt32)sendAssetId return NO; } + static const UInt32 kMaxExpirationMinutes = 720; // 12h — SBBS message TTL + if (expirationMinutes == 0 || expirationMinutes > kMaxExpirationMinutes) { + expirationMinutes = kMaxExpirationMinutes; + } + BMAsset *sendAsset = [[AssetsManager sharedManager] getAsset:(int)sendAssetId]; BMAsset *receiveAsset = [[AssetsManager sharedManager] getAsset:(int)receiveAssetId]; std::string sendSname = sendAsset.unitName.length > 0 ? sendAsset.unitName.string : ""; diff --git a/BeamWallet/Controls/BMOptionPickerViewController.swift b/BeamWallet/Controls/BMOptionPickerViewController.swift new file mode 100644 index 00000000..57f2d0eb --- /dev/null +++ b/BeamWallet/Controls/BMOptionPickerViewController.swift @@ -0,0 +1,210 @@ +// +// BMOptionPickerViewController.swift +// BeamWallet +// +// Copyright 2018 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +class BMOptionPickerViewController: UIViewController { + + struct Option { + let title: String + let value: Int + } + + private let titleText: String + private let options: [Option] + private let selectedValue: Int? + private let onSelect: (Option) -> Void + + private let backdrop = UIView() + private let card = UIView() + private let titleLabel = UILabel() + private let stack = UIStackView() + private let cancelButton = UIButton(type: .system) + private var cardBottomConstraint: NSLayoutConstraint! + + private let rowHeight: CGFloat = 56 + private let horizontalInset: CGFloat = 16 + private let cardCornerRadius: CGFloat = 16 + + init(title: String, options: [Option], selectedValue: Int?, onSelect: @escaping (Option) -> Void) { + self.titleText = title + self.options = options + self.selectedValue = selectedValue + self.onSelect = onSelect + super.init(nibName: nil, bundle: nil) + self.modalPresentationStyle = .overFullScreen + self.modalTransitionStyle = .crossDissolve + } + + required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } + + override func viewDidLoad() { + super.viewDidLoad() + view.backgroundColor = .clear + + backdrop.backgroundColor = UIColor.black.withAlphaComponent(0.55) + backdrop.alpha = 0 + backdrop.translatesAutoresizingMaskIntoConstraints = false + view.addSubview(backdrop) + + let tap = UITapGestureRecognizer(target: self, action: #selector(onCancel)) + backdrop.addGestureRecognizer(tap) + + card.backgroundColor = UIColor.main.peacockBlue + card.layer.cornerRadius = cardCornerRadius + card.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner] + card.translatesAutoresizingMaskIntoConstraints = false + view.addSubview(card) + + titleLabel.text = titleText.uppercased() + titleLabel.font = BoldFont(size: 14) + titleLabel.textColor = UIColor.main.blueyGrey + titleLabel.letterSpacing = 2 + titleLabel.textAlignment = .center + titleLabel.translatesAutoresizingMaskIntoConstraints = false + card.addSubview(titleLabel) + + stack.axis = .vertical + stack.spacing = 0 + stack.translatesAutoresizingMaskIntoConstraints = false + card.addSubview(stack) + + for (index, option) in options.enumerated() { + stack.addArrangedSubview(makeRow(for: option, index: index)) + if index < options.count - 1 { + stack.addArrangedSubview(makeSeparator()) + } + } + + cancelButton.setTitle(Localizable.shared.strings.cancel.lowercased(), for: .normal) + cancelButton.titleLabel?.font = BoldFont(size: 14) + cancelButton.setTitleColor(UIColor.white, for: .normal) + cancelButton.setTitleColor(UIColor.white.withAlphaComponent(0.5), for: .highlighted) + cancelButton.backgroundColor = UIColor.white.withAlphaComponent(0.08) + cancelButton.layer.cornerRadius = 12 + cancelButton.translatesAutoresizingMaskIntoConstraints = false + cancelButton.addTarget(self, action: #selector(onCancel), for: .touchUpInside) + card.addSubview(cancelButton) + + cardBottomConstraint = card.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 600) + + NSLayoutConstraint.activate([ + backdrop.topAnchor.constraint(equalTo: view.topAnchor), + backdrop.bottomAnchor.constraint(equalTo: view.bottomAnchor), + backdrop.leadingAnchor.constraint(equalTo: view.leadingAnchor), + backdrop.trailingAnchor.constraint(equalTo: view.trailingAnchor), + + card.leadingAnchor.constraint(equalTo: view.leadingAnchor), + card.trailingAnchor.constraint(equalTo: view.trailingAnchor), + cardBottomConstraint, + + titleLabel.topAnchor.constraint(equalTo: card.topAnchor, constant: 20), + titleLabel.leadingAnchor.constraint(equalTo: card.leadingAnchor, constant: horizontalInset), + titleLabel.trailingAnchor.constraint(equalTo: card.trailingAnchor, constant: -horizontalInset), + + stack.topAnchor.constraint(equalTo: titleLabel.bottomAnchor, constant: 14), + stack.leadingAnchor.constraint(equalTo: card.leadingAnchor), + stack.trailingAnchor.constraint(equalTo: card.trailingAnchor), + + cancelButton.topAnchor.constraint(equalTo: stack.bottomAnchor, constant: 16), + cancelButton.leadingAnchor.constraint(equalTo: card.leadingAnchor, constant: horizontalInset), + cancelButton.trailingAnchor.constraint(equalTo: card.trailingAnchor, constant: -horizontalInset), + cancelButton.heightAnchor.constraint(equalToConstant: 50), + cancelButton.bottomAnchor.constraint(equalTo: card.safeAreaLayoutGuide.bottomAnchor, constant: -16), + ]) + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + view.layoutIfNeeded() + cardBottomConstraint.constant = 0 + UIView.animate(withDuration: 0.28, delay: 0, options: [.curveEaseOut], animations: { + self.backdrop.alpha = 1 + self.view.layoutIfNeeded() + }) + } + + private func makeRow(for option: Option, index: Int) -> UIControl { + let row = OptionRow() + row.translatesAutoresizingMaskIntoConstraints = false + row.heightAnchor.constraint(equalToConstant: rowHeight).isActive = true + row.tag = index + + let isSelected = (selectedValue != nil && option.value == selectedValue) + let label = UILabel() + label.text = option.title + label.font = isSelected ? BoldFont(size: 16) : RegularFont(size: 16) + label.textColor = isSelected ? UIColor.main.brightTeal : UIColor.white + label.textAlignment = .center + label.translatesAutoresizingMaskIntoConstraints = false + row.addSubview(label) + + NSLayoutConstraint.activate([ + label.centerYAnchor.constraint(equalTo: row.centerYAnchor), + label.leadingAnchor.constraint(equalTo: row.leadingAnchor, constant: horizontalInset), + label.trailingAnchor.constraint(equalTo: row.trailingAnchor, constant: -horizontalInset), + ]) + + row.addTarget(self, action: #selector(onRowTapped(_:)), for: .touchUpInside) + return row + } + + private func makeSeparator() -> UIView { + let line = UIView() + line.backgroundColor = UIColor.white.withAlphaComponent(0.08) + line.translatesAutoresizingMaskIntoConstraints = false + line.heightAnchor.constraint(equalToConstant: 1.0 / UIScreen.main.scale).isActive = true + return line + } + + @objc private func onRowTapped(_ sender: UIControl) { + let option = options[sender.tag] + dismissAnimated { [weak self] in + self?.onSelect(option) + } + } + + @objc private func onCancel() { + dismissAnimated(completion: nil) + } + + private func dismissAnimated(completion: (() -> Void)?) { + cardBottomConstraint.constant = card.bounds.height + UIView.animate(withDuration: 0.22, delay: 0, options: [.curveEaseIn], animations: { + self.backdrop.alpha = 0 + self.view.layoutIfNeeded() + }, completion: { _ in + self.dismiss(animated: false, completion: completion) + }) + } +} + +private class OptionRow: UIControl { + override init(frame: CGRect) { + super.init(frame: frame) + backgroundColor = .clear + } + required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } + + override var isHighlighted: Bool { + didSet { + backgroundColor = isHighlighted ? UIColor.white.withAlphaComponent(0.06) : .clear + } + } +} diff --git a/BeamWallet/Model/AssetSwaps/AssetSwapCreateViewModel.swift b/BeamWallet/Model/AssetSwaps/AssetSwapCreateViewModel.swift index 0665fa1e..d3059144 100644 --- a/BeamWallet/Model/AssetSwaps/AssetSwapCreateViewModel.swift +++ b/BeamWallet/Model/AssetSwaps/AssetSwapCreateViewModel.swift @@ -25,7 +25,7 @@ class AssetSwapCreateViewModel: NSObject { public var receiveAsset: BMAsset? public var sendAmountString: String = "" public var receiveAmountString: String = "" - public var expirationMinutes: UInt32 = 360 // 6 hours + public var expirationMinutes: UInt32 = 720 // 12 hours — SBBS message TTL cap public var onDataChanged: (() -> Void)? diff --git a/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapCreateViewController.swift b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapCreateViewController.swift index bc5cc626..f49391dd 100644 --- a/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapCreateViewController.swift +++ b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapCreateViewController.swift @@ -94,6 +94,11 @@ class AssetSwapCreateViewController: BaseViewController { } private func configureFields() { + sendAssetField.placeholder = Localizable.shared.strings.asset_swap_pick_send_asset + sendAmountField.placeholder = Localizable.shared.strings.asset_swap_send_amount + receiveAssetField.placeholder = Localizable.shared.strings.asset_swap_pick_receive_asset + receiveAmountField.placeholder = Localizable.shared.strings.asset_swap_receive_amount + for field in [sendAssetField, sendAmountField, receiveAssetField, receiveAmountField, expirationField] { field.font = RegularFont(size: 16) field.tintColor = UIColor.white @@ -104,19 +109,15 @@ class AssetSwapCreateViewController: BaseViewController { field.awakeFromNib() } - sendAssetField.placeholder = Localizable.shared.strings.asset_swap_pick_send_asset sendAssetField.delegate = self sendAssetField.clearButtonMode = .never - sendAmountField.placeholder = Localizable.shared.strings.asset_swap_send_amount sendAmountField.keyboardType = .decimalPad sendAmountField.addTarget(self, action: #selector(onAmountChanged), for: .editingChanged) - receiveAssetField.placeholder = Localizable.shared.strings.asset_swap_pick_receive_asset receiveAssetField.delegate = self receiveAssetField.clearButtonMode = .never - receiveAmountField.placeholder = Localizable.shared.strings.asset_swap_receive_amount receiveAmountField.keyboardType = .decimalPad receiveAmountField.addTarget(self, action: #selector(onAmountChanged), for: .editingChanged) @@ -232,10 +233,7 @@ class AssetSwapCreateViewController: BaseViewController { case 60: return "1h" case 360: return "6h" case 720: return "12h" - case 1440: return "24h" - case 10080: return "7d" default: - if minutes >= 1440 { return "\(minutes / 1440)d" } if minutes >= 60 { return "\(minutes / 60)h" } return "\(minutes)m" } @@ -275,16 +273,20 @@ class AssetSwapCreateViewController: BaseViewController { } @objc private func onPickExpiration() { - let alert = UIAlertController(title: Localizable.shared.strings.asset_swap_expiration, message: nil, preferredStyle: .actionSheet) - let options: [(String, UInt32)] = [("1 hour", 60), ("6 hours", 360), ("12 hours", 720), ("24 hours", 1440), ("7 days", 10080)] - for (title, minutes) in options { - alert.addAction(UIAlertAction(title: title, style: .default) { [weak self] _ in - self?.viewModel.expirationMinutes = minutes - self?.refresh() - }) + let options: [BMOptionPickerViewController.Option] = [ + .init(title: "1 hour", value: 60), + .init(title: "6 hours", value: 360), + .init(title: "12 hours", value: 720), + ] + let picker = BMOptionPickerViewController( + title: Localizable.shared.strings.asset_swap_expiration, + options: options, + selectedValue: Int(viewModel.expirationMinutes) + ) { [weak self] selected in + self?.viewModel.expirationMinutes = UInt32(selected.value) + self?.refresh() } - alert.addAction(UIAlertAction(title: Localizable.shared.strings.cancel, style: .cancel)) - present(alert, animated: true) + present(picker, animated: true) } @objc private func onPublish() { diff --git a/BeamWallet/ViewControllers/Main/AssetSwaps/Cells/AssetSwapOrderCell.swift b/BeamWallet/ViewControllers/Main/AssetSwaps/Cells/AssetSwapOrderCell.swift index c2bc5f3f..099dd6de 100644 --- a/BeamWallet/ViewControllers/Main/AssetSwaps/Cells/AssetSwapOrderCell.swift +++ b/BeamWallet/ViewControllers/Main/AssetSwaps/Cells/AssetSwapOrderCell.swift @@ -108,8 +108,7 @@ class AssetSwapOrderCell: RippleCell { statusLabel.textColor = UIColor.main.brightTeal expiryLabel.text = order.displayExpiresIn() } else { - statusLabel.text = order.isMine ? Localizable.shared.strings.asset_swap_my_orders : Localizable.shared.strings.asset_swap_open_orders - statusLabel.textColor = UIColor.main.brightTeal + statusLabel.text = "" expiryLabel.text = order.displayExpiresIn() } From bd56aa569c81ae0d3d19c4508305d0574f735467 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sat, 9 May 2026 15:23:10 +0200 Subject: [PATCH 16/48] refactor(settings): move "Clear local data" out of preferences into the data section Clear local data was sitting in section_0 next to lock screen / currency / min confirmations, which is preferences territory. It belongs with the other destructive data actions (export, import, clear wallet) in section_3. Also tidies a few closure formatting nits in the same file. --- .../Model/Settings/SettingsViewModel.swift | 46 +++++++++---------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/BeamWallet/Model/Settings/SettingsViewModel.swift b/BeamWallet/Model/Settings/SettingsViewModel.swift index 59c087b0..e733b9a4 100644 --- a/BeamWallet/Model/Settings/SettingsViewModel.swift +++ b/BeamWallet/Model/Settings/SettingsViewModel.swift @@ -244,9 +244,7 @@ class SettingsViewModel: NSObject { section_0.append(SettingsItem(title: Localizable.shared.strings.lock_screen, detail: Settings.sharedManager().currentLocedValue().shortName, isSwitch: nil, type: .lock_screen, hasArrow: true)) section_0.append(SettingsItem(title: Localizable.shared.strings.show_amounts_in, detail: Settings.sharedManager().currencyName(), isSwitch: nil, type: .currency, hasArrow: true)) section_0.append(SettingsItem(title: Localizable.shared.strings.min_confirmations, detail: "\(Settings.sharedManager().minConfirmations)", isSwitch: nil, type: .confirmations, hasArrow: true)) - - section_0.append(SettingsItem(title: Localizable.shared.strings.clear_local_data, detail: nil, isSwitch: nil, type: .clear_data, hasArrow: true)) - + var section_1 = [SettingsItem]() if ENALBE_LANG == true { section_1.append(SettingsItem(title: Localizable.shared.strings.language, detail: Settings.sharedManager().languageName(), isSwitch: nil, type: .language, hasArrow: true)) @@ -311,6 +309,7 @@ class SettingsViewModel: NSObject { var section_3 = [SettingsItem]() section_3.append(SettingsItem(title: Localizable.shared.strings.export_wallet_data, detail: nil, isSwitch: nil, type: .export, hasArrow: true)) section_3.append(SettingsItem(title: Localizable.shared.strings.import_wallet_data, detail: nil, isSwitch: nil, type: .imprt, hasArrow: true)) + section_3.append(SettingsItem(title: Localizable.shared.strings.clear_local_data, detail: nil, isSwitch: nil, type: .clear_data, hasArrow: true)) section_3.append(SettingsItem(title: Localizable.shared.strings.clear_wallet.capitalizingFirstLetter(), detail: nil, isSwitch: nil, type: .remove_wallet, hasArrow: false)) items.append(section_1) @@ -493,8 +492,7 @@ extension SettingsViewModel { func onLockLimit() { if let top = UIApplication.getTopMostViewController() { let vc = BMDataPickerViewController(type: .max_privacy_lock) - vc.completion = { [weak self] - _ in + vc.completion = { [weak self] _ in self?.items.removeAll() self?.initItems() self?.onDataChanged?() @@ -506,8 +504,7 @@ extension SettingsViewModel { func onConfirmationsScreen() { if let top = UIApplication.getTopMostViewController() { let vc = BMDataPickerViewController(type: .confirmations) - vc.completion = { [weak self] - value in + vc.completion = { [weak self] value in AppModel.sharedManager().setMinConfirmations(value as! UInt32) self?.items.removeAll() self?.initItems() @@ -520,16 +517,16 @@ extension SettingsViewModel { func onRescan() { if let top = UIApplication.getTopMostViewController() { top.confirmAlert(title: Localizable.shared.strings.rescan, message: Localizable.shared.strings.rescan_text, cancelTitle: Localizable.shared.strings.cancel, confirmTitle: Localizable.shared.strings.rescan, cancelHandler: { _ in - - }) { _ in + + }, confirmHandler: { _ in AppModel.sharedManager().rescan() - + let vc = OpenWalletProgressViewController(onlyConnect: true) vc.isRescan = true vc.cancelCallback = { } top.pushViewController(vc: vc) - } + }) } } @@ -539,8 +536,7 @@ extension SettingsViewModel { modalViewController.completion = { [weak self] obj in if obj { let vc = TrustedNodeViewController(event: .change) - vc.completion = { [weak self] - obj in + vc.completion = { [weak self] obj in if obj == true { self?.items[0][1].detail = Settings.sharedManager().nodeAddress } @@ -648,14 +644,14 @@ extension SettingsViewModel { } func showSeed() { - if let _ = OnboardManager.shared.getSeed(), let top = UIApplication.getTopMostViewController() { + if OnboardManager.shared.getSeed() != nil, let top = UIApplication.getTopMostViewController() { let vc = BMDoubleAuthViewController(event: .seed) top.pushViewController(vc: vc) } } - + func makeSecure() { - if let _ = OnboardManager.shared.getSeed(), let top = UIApplication.getTopMostViewController() { + if OnboardManager.shared.getSeed() != nil, let top = UIApplication.getTopMostViewController() { let vc = BMDoubleAuthViewController(event: .verification) top.pushViewController(vc: vc) } @@ -673,10 +669,10 @@ extension SettingsViewModel { } else { top.confirmAlert(title: Localizable.shared.strings.external_link_title, message: Localizable.shared.strings.external_link_text, cancelTitle: Localizable.shared.strings.cancel, confirmTitle: Localizable.shared.strings.open, cancelHandler: { _ in - - }) { _ in + + }, confirmHandler: { _ in BMOverlayTimerView.show(text: Localizable.shared.strings.faucet_redirect_text, link: result) - } + }) } } } @@ -690,8 +686,8 @@ extension SettingsViewModel { } else { top.confirmAlert(title: Localizable.shared.strings.clear_wallet, message: Localizable.shared.strings.clear_wallet_text, cancelTitle: Localizable.shared.strings.cancel, confirmTitle: Localizable.shared.strings.remove_wallet, cancelHandler: { _ in - - }) { _ in + + }, confirmHandler: { _ in let modalViewController = UnlockPasswordPopover(event: .clear_wallet, allowBiometric: false) modalViewController.completion = { obj in if obj { @@ -702,7 +698,7 @@ extension SettingsViewModel { modalViewController.modalPresentationStyle = .overFullScreen modalViewController.modalTransitionStyle = .crossDissolve top.present(modalViewController, animated: true, completion: nil) - } + }) } } } @@ -741,8 +737,8 @@ extension SettingsViewModel: UIDocumentPickerDelegate, UINavigationControllerDel func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) { if let topVC = UIApplication.getTopMostViewController() { topVC.confirmAlert(title: Localizable.shared.strings.import_data_title, message: Localizable.shared.strings.import_data_text, cancelTitle: Localizable.shared.strings.cancel, confirmTitle: Localizable.shared.strings.imprt, cancelHandler: { _ in - - }) { _ in + + }, confirmHandler: { _ in if let url = urls.first { do { let data = try String(contentsOf: url) @@ -760,7 +756,7 @@ extension SettingsViewModel: UIDocumentPickerDelegate, UINavigationControllerDel topVC.alert(title: Localizable.shared.strings.incorrect_file_title, message: Localizable.shared.strings.incorrect_file_text, handler: nil) } } - } + }) } } From 85a561c88b1c3c6526345455a236ee2655eb12f2 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sat, 9 May 2026 15:23:49 +0200 Subject: [PATCH 17/48] chore: delete orphaned Receive/b.swift MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stale on-disk copy of an older ReceiveViewController. Verified absent from BeamWallet.xcodeproj/project.pbxproj (no build-phase or file-ref entry), so it has not been compiled — the active ReceiveViewController.swift declares the same class without a duplicate-symbol error precisely because b.swift was an orphan. --- .../Main/Wallet/Receive/b.swift | 356 ------------------ 1 file changed, 356 deletions(-) delete mode 100644 BeamWallet/ViewControllers/Main/Wallet/Receive/b.swift diff --git a/BeamWallet/ViewControllers/Main/Wallet/Receive/b.swift b/BeamWallet/ViewControllers/Main/Wallet/Receive/b.swift deleted file mode 100644 index b7b5f266..00000000 --- a/BeamWallet/ViewControllers/Main/Wallet/Receive/b.swift +++ /dev/null @@ -1,356 +0,0 @@ -// -// ReceiveViewController.swift -// BeamWallet -// -// Copyright 2018 Beam Development -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit - -class ReceiveViewController: BaseTableViewController { - - private var address:BMAddress! - private var amount:String? - private var showAdvanced = false - private var showEdit = false - - init(address:BMAddress) { - super.init(nibName: nil, bundle: nil) - - self.address = address - } - - required init?(coder aDecoder: NSCoder) { - fatalError(LocalizableStrings.fatalInitCoderError) - } - - override func viewDidLoad() { - super.viewDidLoad() - - setGradientTopBar(image: GradientBlue()) - attributedTitle = LocalizableStrings.receive.uppercased() - - tableView.register([ReceiveFieldCell.self, ReceiveAddressButtonsCell.self, ReceiveAmountCell.self, ReceiveExpandCell.self, ReceiveAddressCell.self, ReceiveDetailCell.self]) - - tableView.delegate = self - tableView.dataSource = self - tableView.keyboardDismissMode = .interactive - - self.sideMenuController?.isLeftViewSwipeGestureEnabled = false - } - - override func viewDidLayoutSubviews() { - - tableView.frame = CGRect(x: 0, y: 150, width: self.view.bounds.width, height: self.view.bounds.size.height - 150) - } - - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - - self.navigationController?.isNavigationBarHidden = true - - NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil) - } - - override func viewWillDisappear(_ animated: Bool) { - super.viewWillDisappear(animated) - - if isMovingFromParent { - self.navigationController?.isNavigationBarHidden = false - } - - NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification , object: nil) - NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification , object: nil) - } - - private func onExpire() { - let vc = AddressExpiresPickerViewController(duration: -1) - vc.completion = { - obj in - - self.address.duration = obj == 24 ? 86400 : 0 - - AppModel.sharedManager().setExpires(Int32(obj), toAddress: self.address.walletId) - - self.tableView.reloadRows(at: [IndexPath(row: 0, section: 2)], with: .fade) - } - vc.isGradient = true - pushViewController(vc: vc) - } - - private func onCategory() { - if AppModel.sharedManager().categories.count == 0 { - self.alert(title: LocalizableStrings.categories_empty_title, message: LocalizableStrings.categories_empty_text, handler: nil) - } - else{ - let vc = CategoryPickerViewController(category: AppModel.sharedManager().findCategory(byId: self.address.category)) - vc.completion = { - obj in - if let category = obj { - self.didSelectCategory(category: category) - } - } - vc.isGradient = true - pushViewController(vc: vc) - } - } - - private func didSelectCategory(category:BMCategory) { - address.category = String(category.id) - - AppModel.sharedManager().setWalletCategory(self.address.category, toAddress: address.walletId) - - tableView.reloadRows(at: [IndexPath(row: 0, section: 3)], with: .fade) - } -} - -extension ReceiveViewController : UITableViewDelegate { - - func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { - switch section { - case 0: - return 0 - case 2: - return showEdit ? 20 : 0 - case 3: - return showEdit ? 20 : 0 - case 4: - return showEdit ? 20 : 0 - case 6: - return showAdvanced ? 20 : 0 - default: - return 30 - } - } - - func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { - return UITableView.automaticDimension - } - - func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - tableView.deselectRow(at: indexPath, animated: true) - - switch indexPath.section { - case 2: - self.onExpire() - case 3: - self.onCategory() - default: - return - } - } -} - -extension ReceiveViewController : UITableViewDataSource { - - func numberOfSections(in tableView: UITableView) -> Int { - return 8 - } - - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - if section == 2 || section == 3 || section == 4 { - return showEdit ? 1 : 0 - } - else if section == 6 { - return showAdvanced ? 1 : 0 - } - return 1 - } - - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - - switch indexPath.section { - case 0: - let cell = tableView - .dequeueReusableCell(withType: ReceiveAddressCell.self, for: indexPath) - .configured(with: (hideLine: true, address: address, title: nil)) - cell.delegate = self - return cell - case 1: - let cell = tableView - .dequeueReusableCell(withType: ReceiveExpandCell.self, for: indexPath) - .configured(with: (expand: showEdit, title: LocalizableStrings.edit_address.uppercased())) - cell.delegate = self - return cell - case 2: - let cell = tableView - .dequeueReusableCell(withType: ReceiveDetailCell.self, for: indexPath) - .configured(with: (title: LocalizableStrings.expires.uppercased(), value: (address.duration > 0 ? LocalizableStrings.hours_24 : LocalizableStrings.never), valueColor: UIColor.white)) - return cell - case 3: - var name = LocalizableStrings.none - var color = UIColor.main.steelGrey - - if let category = AppModel.sharedManager().findCategory(byId: address.category) { - name = category.name - color = UIColor.init(hexString: category.color) - } - - let cell = tableView - .dequeueReusableCell(withType: ReceiveDetailCell.self, for: indexPath) - .configured(with: (title: LocalizableStrings.category.uppercased(), value: name, valueColor: color)) - return cell - case 4: - let cell = tableView - .dequeueReusableCell(withType: ReceiveFieldCell.self, for: indexPath) - .configured(with: (name: LocalizableStrings.local_annotation_not_shared, value: address.label)) - cell.delegate = self - return cell - case 5: - let cell = tableView - .dequeueReusableCell(withType: ReceiveExpandCell.self, for: indexPath) - .configured(with: (expand: showAdvanced, title: LocalizableStrings.advanced.uppercased())) - cell.delegate = self - return cell - case 6: - let cell = tableView - .dequeueReusableCell(withType: ReceiveAmountCell.self, for: indexPath).configured(with: amount) - cell.delegate = self - return cell - case 7: - let cell = tableView - .dequeueReusableCell(withType: ReceiveAddressButtonsCell.self, for: indexPath) - cell.delegate = self - return cell - default: - return BaseCell() - } - } - - func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { - let view = UIView() - view.backgroundColor = section > 0 ? UIColor.clear : UIColor.main.marineTwo.withAlphaComponent(0.2) - return view - } -} - -extension ReceiveViewController : ReceiveCellProtocol { - - func textValueDidBegin(_ sender: UITableViewCell) { - if let path = tableView.indexPath(for: sender) { - tableView.scrollToRow(at: path, at: .middle, animated: true) - } - } - - func textValueDidChange(_ sender: UITableViewCell, _ text: String) { - if sender is ReceiveFieldCell { - address.label = text - } - else if sender is ReceiveAmountCell { - amount = text - } - } - - func textValueDidReturn(_ sender: UITableViewCell) { - if sender is ReceiveFieldCell { - AppModel.sharedManager().setWalletComment(address.label, toAddress: address.walletId) - } - } - - func onExpandRecieveAddress(_ sender: UITableViewCell) { - if let path = tableView.indexPath(for: sender) - { - if path.section == 1 { - showEdit = !showEdit - - if showEdit { - self.tableView.insertRows(at: [IndexPath(row: 0, section: 2), IndexPath(row: 0, section: 3), IndexPath(row: 0, section: 4)], with: .fade) - } - else{ - self.tableView.deleteRows(at: [IndexPath(row: 0, section: 2), IndexPath(row: 0, section: 3), IndexPath(row: 0, section: 4)], with: .fade) - } - } - else{ - showAdvanced = !showAdvanced - - if showAdvanced { - self.tableView.insertRows(at: [IndexPath(row: 0, section: 6)], with: .fade) - } - else{ - self.tableView.deleteRows(at: [IndexPath(row: 0, section: 6)], with: .fade) - } - } - } - } - - func onChangeAddress() { - let vc = ReceiveListViewController() - vc.completion = { - obj in - - if ((self.address.category.isEmpty || self.address.category == LocalizableStrings.zero) && self.address.label.isEmpty) - { - AppModel.sharedManager().deleteAddress(self.address.walletId) - } - - self.address = obj - self.tableView.reloadData() - } - pushViewController(vc: vc) - } - - func onClickQRCode() { - self.view.endEditing(true) - - let modalViewController = ReceiveQRViewController(address: address, amount: amount) - modalViewController.delegate = self - modalViewController.modalPresentationStyle = .overFullScreen - modalViewController.modalTransitionStyle = .crossDissolve - present(modalViewController, animated: true, completion: nil) - } - - func onClickShare() { - self.view.endEditing(true) - - let vc = UIActivityViewController(activityItems: [address.walletId ?? String.empty()], applicationActivities: []) - vc.completionWithItemsHandler = {(activityType: UIActivity.ActivityType?, completed: Bool, returnedItems: [Any]?, error: Error?) in - if completed { - - if activityType == UIActivity.ActivityType.copyToPasteboard { - ShowCopied() - } - - self.navigationController?.popViewController(animated: true) - } - } - vc.excludedActivityTypes = [UIActivity.ActivityType.assignToContact, UIActivity.ActivityType.print,UIActivity.ActivityType.openInIBooks] - present(vc, animated: true) - } -} - -extension ReceiveViewController : ReceiveQRViewControllerDelegate { - func onCopyDone() { - self.navigationController?.popViewController(animated: true) - } -} - -// MARK: Keyboard Handling - -extension ReceiveViewController { - - @objc func keyboardWillShow(_ notification: Notification) { - if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue { - let keyboardRectangle = keyboardFrame.cgRectValue - let keyboardHeight = keyboardRectangle.height - - tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: keyboardHeight, right: 0) - } - } - - @objc func keyboardWillHide(notification: NSNotification) { - tableView.contentInset = UIEdgeInsets.zero - } -} From eadcd4a9115309128d295881b54553f9b496e082 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sat, 9 May 2026 15:25:33 +0200 Subject: [PATCH 18/48] style: SwiftLint cleanup across the codebase MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pure formatting pass — closure args inlined onto the same line as the opening brace, `}) { … }` rewritten as `}, completion: { … }`, trailing whitespace removed, empty `viewDidAppear` / `awakeFromNib` overrides deleted, `// MARK:` spacing normalized. No functional changes. Includes the trailing-whitespace cleanup inside the four AppModel.mm hunks within `-restore:` and `-prepareSend:`. --- BeamWallet/AppDelegate.swift | 20 +++--- BeamWallet/BeamSDK/AppModel.mm | 12 ++-- .../Controls/BMAutoSecurityScreen.swift | 4 +- .../Controls/BMCategoryColorsView.swift | 2 +- BeamWallet/Controls/BMCopyLabel.swift | 4 +- .../Controls/BMDataPickerViewController.swift | 72 +++++++++---------- BeamWallet/Controls/BMInputCopyBar.swift | 6 +- BeamWallet/Controls/BMNetworkStatusView.swift | 22 +++--- BeamWallet/Controls/BMNotificationView.swift | 16 ++--- BeamWallet/Controls/BMOverlayTimerView.swift | 2 +- BeamWallet/Controls/BMPopoverMenu.swift | 13 ++-- BeamWallet/Controls/BMSnackBar.swift | 8 +-- BeamWallet/Controls/BMStepView.swift | 10 +-- BeamWallet/Controls/BMWordField.swift | 25 +++---- BeamWallet/Controls/Cell/BMAmountCell.swift | 7 +- BeamWallet/Controls/Cell/BMDetailCell.swift | 2 +- BeamWallet/Controls/Cell/BMExpandCell.swift | 2 +- BeamWallet/Controls/Cell/BMFieldCell.swift | 11 ++- .../Controls/Cell/BMMultiLinesCell.swift | 6 +- .../Controls/Cell/BMPickedAddressCell.swift | 2 +- .../Controls/Cell/PopoverAssetCell.swift | 11 --- BeamWallet/Controls/Cell/PopoverCell.swift | 12 ---- .../Controls/Cell/SingleCenterCell.swift | 6 -- BeamWallet/Extensions/Array.swift | 2 +- BeamWallet/Extensions/Field.swift | 8 +-- BeamWallet/Extensions/String.swift | 4 +- BeamWallet/Extensions/TableView.swift | 41 +++++------ BeamWallet/Extensions/View.swift | 2 +- BeamWallet/Extensions/ViewController.swift | 11 ++- BeamWallet/Manager/BackgroundDownloader.swift | 20 +++--- .../Manager/BiometricAuthorization.swift | 6 +- .../Manager/Crowdin/CrowdinManager.swift | 26 +++---- BeamWallet/Manager/NotificationManager.swift | 27 +++---- BeamWallet/Manager/PasswordManager.swift | 7 +- BeamWallet/Manager/RestoreManager.swift | 22 +++--- .../Model/Address/AddressViewModel.swift | 2 +- .../Address/DetailAddressViewModel.swift | 4 +- .../Address/ReceiveAddressViewModel.swift | 16 ++--- .../Model/Objects/BMMultiLineItem.swift | 10 +-- .../DetailTransactionViewModel.swift | 6 +- .../SendTransactionViewModel.swift | 56 +++++++-------- .../Transaction/TransactionViewModel.swift | 14 ++-- BeamWallet/Model/Wallet/AssetViewModel.swift | 7 +- BeamWallet/Protocols/KeyboardListener.swift | 2 - BeamWallet/Protocols/Progress.swift | 2 +- .../Base/BaseNavigationController.swift | 14 ++-- .../Base/BaseViewController.swift | 6 +- .../EnterWalletPasswordViewController.swift | 21 ++---- .../RestoreOptionsViewController.swift | 16 ++--- .../OpenWalletProgressViewController.swift | 72 ++++++++++--------- .../Cells/CollectionButtonFooter.swift | 1 - .../SeedPhraseViewController.swift | 29 ++++---- .../Login/WellcomeViewController.swift | 4 +- .../Main/Addresses/AddressTableView.swift | 4 +- .../Addresses/AddressViewController.swift | 16 +---- .../Addresses/EditAddressViewController.swift | 4 +- .../Addresses/ShowTokenViewController.swift | 6 +- .../Assets/AssetDetailViewController.swift | 24 +++---- .../Main/Assets/AssetsViewController.swift | 4 -- .../Main/DAO/DAOConfirmViewController.swift | 2 +- .../Main/DAO/DAOViewController.swift | 6 +- .../Main/DAO/JS/XWVBindingObject.swift | 2 +- .../Main/DAO/JS/XWVChannel.swift | 4 +- .../Main/DAO/JS/XWVHttpServer.swift | 2 +- .../Main/DAO/JS/XWVInvocation.swift | 6 +- .../ViewControllers/Main/DAO/JS/XWVJson.swift | 4 +- .../Main/DAO/JS/XWVLogging.swift | 4 +- .../Main/DAO/JS/XWVMetaObject.swift | 8 +-- .../Main/DAO/JS/XWVObject.swift | 2 +- .../Main/DAO/JS/XWebView.swift | 8 +-- .../Main/Menu/LeftMenuViewController.swift | 6 +- .../Notifications/NotificationViewModel.swift | 4 +- .../NotificationsViewController.swift | 4 +- .../CreateWalletPasswordViewController.swift | 16 ++--- .../Passwords/UnlockPasswordPopover.swift | 64 ++++++++--------- .../Main/QRCode/PreviewQRViewController.swift | 6 +- .../QRCode/QRCodeSmallViewController.swift | 6 +- .../Main/QRCode/QRScannerViewController.swift | 16 ++--- .../Main/QRCode/QRViewController.swift | 6 +- .../Main/Settings/Cells/NodeCell.swift | 4 +- .../Settings/SelectNodeViewController.swift | 10 +-- .../Settings/SettingsViewController.swift | 26 ++----- .../Main/Wallet/Cells/OnboardCell.swift | 6 +- .../Main/Wallet/Cells/WalletStatusCell.swift | 4 -- .../Wallet/Cells/WalletTransactionCell.swift | 7 -- .../MaxPrivacyDetailViewController.swift | 3 +- .../MaxPrivacyDetailViewModel.swift | 3 +- .../Cells/ReceiveTransactionTypeCell.swift | 2 +- .../OfflineAddressViewController.swift | 12 ++-- .../Receive/ReceiveListViewController.swift | 6 +- .../Receive/ReceiveViewController.swift | 12 ++-- .../Send/Cells/BMSearchAddressCell.swift | 11 ++- .../Main/Wallet/Send/Cells/FeeCell.swift | 4 +- .../Main/Wallet/Send/Cells/SendAllCell.swift | 2 +- .../Send/Cells/SendContactAddressCell.swift | 6 +- .../Send/Cells/SendSaveAddressCell.swift | 4 +- .../Send/Cells/SendTransactionTypeCell.swift | 8 +-- .../Send/SaveContactViewController.swift | 14 ++-- .../Main/Wallet/Send/SearchTableView.swift | 4 -- .../Main/Wallet/Send/SendViewController.swift | 15 ++-- .../Send/WalletSendViewController.swift | 19 ++--- .../Cell/TransactionPaymentProofCell.swift | 4 -- .../PaymentProofDetailViewController.swift | 9 +-- .../Transaction/TransactionShareView.swift | 2 +- .../TransactionViewController.swift | 10 +-- .../Transaction/TransactionsTableView.swift | 30 ++++---- .../TransactionsViewController.swift | 10 ++- .../Main/Wallet/WalletViewController.swift | 30 ++++---- 108 files changed, 509 insertions(+), 735 deletions(-) diff --git a/BeamWallet/AppDelegate.swift b/BeamWallet/AppDelegate.swift index 06779c75..39c5d0e3 100644 --- a/BeamWallet/AppDelegate.swift +++ b/BeamWallet/AppDelegate.swift @@ -112,7 +112,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { if let crash = UserDefaults.standard.string(forKey: "crash"), let crash_name = UserDefaults.standard.string(forKey: "crash_name") { - var name = ""; + var name = "" if Settings.sharedManager().target == Mainnet { name = "GoogleServiceMain" @@ -257,7 +257,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool { - //options[.sourceApplication] as? String == "com.beam.runner" + // options[.sourceApplication] as? String == "com.beam.runner" if let params = url.queryParameters, params.count == 2, let amount = params["amount"], @@ -341,11 +341,11 @@ extension AppDelegate: WalletModelDelegate { if let result = data, result.type == .address { AppModel.sharedManager().cancelDeleteAddress(result.id) } - }) { data in + }, ended: { data in if let result = data, result.type == .address { AppModel.sharedManager().deletePreparedAddresses(result.id) } - } + }) } } @@ -357,11 +357,11 @@ extension AppDelegate: WalletModelDelegate { if let result = data, result.type == .transaction { AppModel.sharedManager().cancelPreparedTransaction(result.id) } - }) { data in + }, ended: { data in if let result = data, result.type == .transaction { AppModel.sharedManager().sendPreparedTransaction(result.id) } - } + }) } } @@ -379,11 +379,9 @@ extension AppDelegate: WalletModelDelegate { t.isIncome && !t.isSelf } - for transaction in filtered { - if oldTransactions.first(where: { $0 == transaction.id }) == nil { - NotificationManager.sharedManager.scheduleNotification(transaction: transaction) - oldTransactions.append(transaction.id) - } + for transaction in filtered where oldTransactions.first(where: { $0 == transaction.id }) == nil { + NotificationManager.sharedManager.scheduleNotification(transaction: transaction) + oldTransactions.append(transaction.id) } userDefaults.set(oldTransactions, forKey: "transactions_ids") diff --git a/BeamWallet/BeamSDK/AppModel.mm b/BeamWallet/BeamSDK/AppModel.mm index 8f3e3c22..b280eac8 100644 --- a/BeamWallet/BeamSDK/AppModel.mm +++ b/BeamWallet/BeamSDK/AppModel.mm @@ -939,16 +939,16 @@ -(void)restore:(NSString*_Nonnull)path{ additionalTxCreators->emplace(TxType::PushTransaction, pushTxCreator); wallet = make_shared(walletDb, nodeAddrStr, walletReactor); - + NSLog(@"NODE ADDRESS: %@", [Settings sharedManager].nodeAddress); wallet->getAsync()->setNodeAddress(nodeAddrStr); - + if ([Settings sharedManager].isNodeProtocolEnabled) { [Settings sharedManager].isNodeProtocolEnabled = NO; wallet->getAsync()->enableBodyRequests(false); } - + wallet->start(activeNotifications, isSecondCurrencyEnabled, additionalTxCreators); __weak typeof(self) weakSelf = self; @@ -968,7 +968,7 @@ -(void)restore:(NSString*_Nonnull)path{ } catch (const std::exception& e) { NSLog(@"ImportRecovery failed %s",e.what()); - + NSString *erorString = [NSString stringWithUTF8String:e.what()]; NSArray *delegates = [AppModel sharedManager].delegates.allObjects; @@ -984,7 +984,7 @@ -(void)restore:(NSString*_Nonnull)path{ } catch (...) { NSLog(@"ImportRecovery failed"); - + NSString *erorString = @"Recovery failed"; NSArray *delegates = [AppModel sharedManager].delegates.allObjects; @@ -2357,7 +2357,7 @@ -(void)prepareSend:(double)amount fee:(double)fee assetId:(int)assetId to:(NSStr transaction.assetId = assetId; [_preparedTransactions addObject:transaction]; - + NSArray *delegates = [AppModel sharedManager].delegates.allObjects; for(id delegate in delegates) { diff --git a/BeamWallet/Controls/BMAutoSecurityScreen.swift b/BeamWallet/Controls/BMAutoSecurityScreen.swift index 32afc839..5da94d8d 100755 --- a/BeamWallet/Controls/BMAutoSecurityScreen.swift +++ b/BeamWallet/Controls/BMAutoSecurityScreen.swift @@ -68,9 +68,9 @@ public class BMAutoSecurityScreen { private func removeBlurEffect() { UIView.animate(withDuration: 0.3, animations: { self.blurView.alpha = 0 - }) { (_ ) in + }, completion: { _ in self.blurView.removeFromSuperview() - } + }) } } diff --git a/BeamWallet/Controls/BMCategoryColorsView.swift b/BeamWallet/Controls/BMCategoryColorsView.swift index fb527faf..58293dbe 100644 --- a/BeamWallet/Controls/BMCategoryColorsView.swift +++ b/BeamWallet/Controls/BMCategoryColorsView.swift @@ -124,7 +124,7 @@ class BMCategoryColorsView: UIView { } } - public func colorsWidht()->CGFloat { + public func colorsWidht() -> CGFloat { if self.subviews.count > 0 { if let last = self.subviews.last { return last.frame.origin.x + last.frame.size.width diff --git a/BeamWallet/Controls/BMCopyLabel.swift b/BeamWallet/Controls/BMCopyLabel.swift index 3b4c64cd..6a44c7d7 100644 --- a/BeamWallet/Controls/BMCopyLabel.swift +++ b/BeamWallet/Controls/BMCopyLabel.swift @@ -32,9 +32,7 @@ class BMCopyLabel: UILabel { public var copiedText:String? override public var canBecomeFirstResponder: Bool { - get { - return true - } + return true } override init(frame: CGRect) { diff --git a/BeamWallet/Controls/BMDataPickerViewController.swift b/BeamWallet/Controls/BMDataPickerViewController.swift index e750c10f..a594ab6a 100644 --- a/BeamWallet/Controls/BMDataPickerViewController.swift +++ b/BeamWallet/Controls/BMDataPickerViewController.swift @@ -109,7 +109,7 @@ class BMDataPickerViewController: BaseTableViewController { tableView.backgroundColor = UIColor.main.marine } - private func footerView(text:String)-> UIView { + private func footerView(text:String) -> UIView { let view = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 0)) let infoLabel = UILabel() @@ -119,7 +119,7 @@ class BMDataPickerViewController: BaseTableViewController { infoLabel.font = ItalicFont(size: 14) infoLabel.textAlignment = .center if Settings.sharedManager().isDarkMode { - infoLabel.textColor = UIColor.main.steel; + infoLabel.textColor = UIColor.main.steel } else { infoLabel.textColor = UIColor.main.blueyGrey @@ -140,20 +140,18 @@ class BMDataPickerViewController: BaseTableViewController { if type == .clear { var deleted = [String]() - for item in values { - if item.arrowType == BMPickerData.ArrowType.selected { - switch item.unique as! Int { - case 1: - deleted.append(Localizable.shared.strings.addresses.lowercased()) - case 2: - deleted.append(Localizable.shared.strings.contacts.lowercased()) - case 3: - deleted.append(Localizable.shared.strings.transactions.lowercased()) - case 4: - deleted.append(Localizable.shared.strings.categories.lowercased()) - default: - break - } + for item in values where item.arrowType == BMPickerData.ArrowType.selected { + switch item.unique as! Int { + case 1: + deleted.append(Localizable.shared.strings.addresses.lowercased()) + case 2: + deleted.append(Localizable.shared.strings.contacts.lowercased()) + case 3: + deleted.append(Localizable.shared.strings.transactions.lowercased()) + case 4: + deleted.append(Localizable.shared.strings.categories.lowercased()) + default: + break } } @@ -169,31 +167,27 @@ class BMDataPickerViewController: BaseTableViewController { } confirmAlert(title: Localizable.shared.strings.clear_data, message: Localizable.shared.strings.delete_data_text(str: str), cancelTitle: Localizable.shared.strings.cancel, confirmTitle: Localizable.shared.strings.delete, cancelHandler: { _ in - - }) { _ in - for item in self.values { - if item.arrowType == BMPickerData.ArrowType.selected { - switch item.unique as! Int { - case 1: - AppModel.sharedManager().clearAllAddresses() - case 2: - AppModel.sharedManager().clearAllContacts() - case 3: - AppModel.sharedManager().clearAllTransactions() - default: - break - } + + }, confirmHandler: { _ in + for item in self.values where item.arrowType == BMPickerData.ArrowType.selected { + switch item.unique as! Int { + case 1: + AppModel.sharedManager().clearAllAddresses() + case 2: + AppModel.sharedManager().clearAllContacts() + case 3: + AppModel.sharedManager().clearAllTransactions() + default: + break } } self.back() - } + }) } else if type == .export_data { var selectedValues = [String]() - for item in values { - if item.arrowType == BMPickerData.ArrowType.selected { - selectedValues.append(item.unique as! String) - } + for item in values where item.arrowType == BMPickerData.ArrowType.selected { + selectedValues.append(item.unique as! String) } if type == .export_data { @@ -209,7 +203,7 @@ class BMDataPickerViewController: BaseTableViewController { try data.write(to: fileURL, atomically: false, encoding: .utf8) let vc = UIActivityViewController(activityItems: [fileURL], applicationActivities: []) - vc.completionWithItemsHandler = { (activityType, completed:Bool, returnedItems:[Any]?, error: Error?) in + vc.completionWithItemsHandler = { (_, completed:Bool, _:[Any]?, _: Error?) in if completed { self.back() } @@ -333,10 +327,8 @@ class BMDataPickerViewController: BaseTableViewController { data.arrowType = BMPickerData.ArrowType.selected } var isAllDisabled = true - for item in values { - if item.arrowType == BMPickerData.ArrowType.selected { - isAllDisabled = false - } + for item in values where item.arrowType == BMPickerData.ArrowType.selected { + isAllDisabled = false } enableRightButton(enabled: !isAllDisabled) case .currency: diff --git a/BeamWallet/Controls/BMInputCopyBar.swift b/BeamWallet/Controls/BMInputCopyBar.swift index 832905d9..1f3a29f3 100644 --- a/BeamWallet/Controls/BMInputCopyBar.swift +++ b/BeamWallet/Controls/BMInputCopyBar.swift @@ -31,12 +31,12 @@ class BMInputCopyBar: UIView { addSubview(view) let toolbar = UIToolbar(frame: view.bounds) - toolbar.autoresizingMask = .flexibleWidth; - toolbar.isUserInteractionEnabled = false; + toolbar.autoresizingMask = .flexibleWidth + toolbar.isUserInteractionEnabled = false view.addSubview(toolbar) let separator = UIView(frame: CGRect(x:0, y:43.5, width:view.frame.size.width, height:0.5)) - separator.autoresizingMask = .flexibleWidth; + separator.autoresizingMask = .flexibleWidth separator.backgroundColor = UIColor.init(white: 0, alpha: 0.2) view.addSubview(separator) diff --git a/BeamWallet/Controls/BMNetworkStatusView.swift b/BeamWallet/Controls/BMNetworkStatusView.swift index 602123a3..d2b2dfe7 100644 --- a/BeamWallet/Controls/BMNetworkStatusView.swift +++ b/BeamWallet/Controls/BMNetworkStatusView.swift @@ -134,22 +134,20 @@ class BMNetworkStatusView: UIView { @objc private func onChangeNode() { if let top = UIApplication.getTopMostViewController() { let vc = SelectNodeViewController() - //SettingsViewController(type: SettingsViewModel.SettingsType.node) + // SettingsViewController(type: SettingsViewModel.SettingsType.node) top.pushViewController(vc: vc) } } private var onlineString:String { - get { - if Settings.sharedManager().isNodeProtocolEnabled { - return Localizable.shared.strings.online_mobile_node.lowercased() - } - else if !Settings.sharedManager().connectToRandomNode { - return Localizable.shared.strings.online.lowercased() - } - else { - return Localizable.shared.strings.online.lowercased() - } + if Settings.sharedManager().isNodeProtocolEnabled { + return Localizable.shared.strings.online_mobile_node.lowercased() + } + else if !Settings.sharedManager().connectToRandomNode { + return Localizable.shared.strings.online.lowercased() + } + else { + return Localizable.shared.strings.online.lowercased() } } @@ -366,7 +364,7 @@ extension BMNetworkStatusView: WalletModelDelegate { func onNetwotkStartConnecting(_ connecting: Bool) { DispatchQueue.main.async { if connecting { - //https://github.com/BeamMW/ios-wallet/issues/194 + // https://github.com/BeamMW/ios-wallet/issues/194 self.onNetwotkStatusChange(true) } } diff --git a/BeamWallet/Controls/BMNotificationView.swift b/BeamWallet/Controls/BMNotificationView.swift index d6af8a0e..f8873dfa 100644 --- a/BeamWallet/Controls/BMNotificationView.swift +++ b/BeamWallet/Controls/BMNotificationView.swift @@ -37,7 +37,7 @@ class BMNotificationView: UIView { weak var delegate: BMNotificationViewDelegate? - private static func showNews (notification: BMNotification, delegate:BMNotificationViewDelegate?) { + private static func showNews(notification: BMNotification, delegate:BMNotificationViewDelegate?) { DispatchQueue.main.async { let detail = NSMutableAttributedString(string: Localizable.shared.strings.new_notifications_text) detail.addAttribute(NSAttributedString.Key.font, value: BoldFont(size: 14) , range: NSRange(location: 0, length: Localizable.shared.strings.new_notifications_text.count)) @@ -46,14 +46,14 @@ class BMNotificationView: UIView { } } - private static func showAddress (notification: BMNotification, delegate:BMNotificationViewDelegate) { + private static func showAddress(notification: BMNotification, delegate:BMNotificationViewDelegate) { DispatchQueue.main.async { let view = BMNotificationView(title: Localizable.shared.strings.address_expired_notif, detail: nil, icon: IconNotifictionsExpired()?.maskWithColor(color: UIColor.main.marineOriginal), id: notification.pId, delegate: delegate) view.display() } } - private static func showVersion (notification: BMNotification, delegate:BMNotificationViewDelegate?) { + private static func showVersion(notification: BMNotification, delegate:BMNotificationViewDelegate?) { DispatchQueue.main.async { let detail = NSMutableAttributedString(string: Localizable.shared.strings.new_version_available_notif_detail) detail.addAttribute(NSAttributedString.Key.font, value: BoldFont(size: 14) , range: NSRange(location: 0, length: Localizable.shared.strings.new_version_available_notif_detail.count)) @@ -62,7 +62,7 @@ class BMNotificationView: UIView { } } - static func showTransaction (transaction: BMTransaction, delegate:BMNotificationViewDelegate?, delay:Double = 2.0) { + static func showTransaction(transaction: BMTransaction, delegate:BMNotificationViewDelegate?, delay:Double = 2.0) { DispatchQueue.main.async { if transaction.enumStatus == BMTransactionStatusInProgress && transaction.isDapps { return @@ -208,7 +208,7 @@ class BMNotificationView: UIView { } } - static func showTransaction (notification: BMNotification, delegate:BMNotificationViewDelegate) { + static func showTransaction(notification: BMNotification, delegate:BMNotificationViewDelegate) { DispatchQueue.main.async { if let transaction = AppModel.sharedManager().transaction(byId: notification.pId) { guard let asset = transaction.asset else { @@ -306,7 +306,7 @@ class BMNotificationView: UIView { } } - public static func show (notification: BMNotification, delegate:BMNotificationViewDelegate) { + public static func show(notification: BMNotification, delegate:BMNotificationViewDelegate) { if(BMNotificationView.notificationView == nil) { if(notification.type == ADDRESS) { showAddress(notification: notification, delegate: delegate) @@ -323,7 +323,7 @@ class BMNotificationView: UIView { } } - public static func show (title: String?, detail: NSMutableAttributedString?, icon: UIImage?, id: String, delegate:BMNotificationViewDelegate) { + public static func show(title: String?, detail: NSMutableAttributedString?, icon: UIImage?, id: String, delegate:BMNotificationViewDelegate) { DispatchQueue.main.async { if(BMNotificationView.notificationView == nil) { let view = BMNotificationView(title: title, detail: detail, icon: icon, id: id, delegate: delegate) @@ -376,7 +376,7 @@ class BMNotificationView: UIView { self.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(onTap))) self.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(onPan))) - BMNotificationView.notificationView = self; + BMNotificationView.notificationView = self } fileprivate func display(delay:Double = 2.0) { diff --git a/BeamWallet/Controls/BMOverlayTimerView.swift b/BeamWallet/Controls/BMOverlayTimerView.swift index 5a5a74e1..9c56c958 100644 --- a/BeamWallet/Controls/BMOverlayTimerView.swift +++ b/BeamWallet/Controls/BMOverlayTimerView.swift @@ -24,7 +24,7 @@ class BMOverlayTimerView: UIView, BMCountdownViewDelegate { private var seconds = 0 private var url:URL! - public static func show (text:String, link:URL) { + public static func show(text:String, link:URL) { let view = BMOverlayTimerView(text: text, link: link) view.display() } diff --git a/BeamWallet/Controls/BMPopoverMenu.swift b/BeamWallet/Controls/BMPopoverMenu.swift index ee825144..e68b35b0 100644 --- a/BeamWallet/Controls/BMPopoverMenu.swift +++ b/BeamWallet/Controls/BMPopoverMenu.swift @@ -53,10 +53,7 @@ extension BMPopoverMenu { rootVC.present(alert, animated: true) - if #available(iOS 13, *) { - - } - else { + if #unavailable(iOS 13) { if(Settings.sharedManager().isDarkMode) { alert.setBackgroundColor(color: UIColor.black) } @@ -106,8 +103,8 @@ class BMPopoverMenu: NSObject { var name: String var icon: String? var action: BMPopoverMenuItemAction - var selected:Bool? = nil - var id:Int? = nil + var selected:Bool? + var id:Int? init(name: String, icon: String?, action: BMPopoverMenuItemAction) { self.name = name @@ -180,7 +177,7 @@ class BMPopoverMenu: NSObject { animations: { self.popOverMenu.alpha = 0 self.popOverMenu.transform = CGAffineTransform(scaleX: 0.1, y: 0.1) - }) { isFinished in + }, completion: { isFinished in if isFinished { self.backgroundView.removeFromSuperview() if selectedItem == nil { @@ -194,7 +191,7 @@ class BMPopoverMenu: NSObject { } } } - } + }) } fileprivate func showForSenderAssets(sender: UIView?, or senderFrame: CGRect?, with menuItems: [BMPopoverMenuItem]!, done: @escaping (BMPopoverMenuItem?) -> Void, cancel: (() -> Void)? = nil) { diff --git a/BeamWallet/Controls/BMSnackBar.swift b/BeamWallet/Controls/BMSnackBar.swift index 863cc787..9a6af248 100644 --- a/BeamWallet/Controls/BMSnackBar.swift +++ b/BeamWallet/Controls/BMSnackBar.swift @@ -32,12 +32,6 @@ class BMSnackBar: UIView, BMCountdownViewDelegate { var type:SnackType! var id:String! var title:String! - - init(type:SnackType!, id:String!, title:String!) { - self.type = type - self.id = id - self.title = title - } } private var data:SnackData! @@ -129,7 +123,7 @@ extension BMSnackBar { private static var snack: BMSnackBar? - public static func show (data:SnackData!, done: @escaping (SnackData?) -> Void, ended: @escaping (SnackData?) -> Void) { + public static func show(data:SnackData!, done: @escaping (SnackData?) -> Void, ended: @escaping (SnackData?) -> Void) { if snack != nil && snack?.data.id == data.id { return diff --git a/BeamWallet/Controls/BMStepView.swift b/BeamWallet/Controls/BMStepView.swift index c6d18ccc..be0274d6 100644 --- a/BeamWallet/Controls/BMStepView.swift +++ b/BeamWallet/Controls/BMStepView.swift @@ -40,7 +40,7 @@ class BMStepView: UIView { super.layoutSubviews() let separate:CGFloat = 5.0 - let stepWidth = round((self.frame.size.width - separate * CGFloat(totalStep)) / CGFloat(totalStep)); + let stepWidth = round((self.frame.size.width - separate * CGFloat(totalStep)) / CGFloat(totalStep)) if views.count > 0 { @@ -49,13 +49,13 @@ class BMStepView: UIView { if view.tag < currentStep { UIView.animate(withDuration: 0.2) { view.layer.borderColor = UIColor.clear.cgColor - view.backgroundColor = self.finishedStepColor; + view.backgroundColor = self.finishedStepColor } } else{ UIView.animate(withDuration: 0.2) { view.layer.borderColor = UIColor.main.darkSlateBlue.cgColor - view.backgroundColor = UIColor.clear; + view.backgroundColor = UIColor.clear } } } @@ -65,8 +65,8 @@ class BMStepView: UIView { let view = UIView(frame: CGRect(x: CGFloat(i) * (stepWidth + separate), y: 0, width: stepWidth, height: self.frame.size.height)) view.layer.cornerRadius = view.frame.size.height/2 view.layer.borderColor = UIColor.main.darkSlateBlue.cgColor - view.backgroundColor = UIColor.clear; - view.layer.borderWidth = 1; + view.backgroundColor = UIColor.clear + view.layer.borderWidth = 1 view.tag = i views.append(view) self.addSubview(view) diff --git a/BeamWallet/Controls/BMWordField.swift b/BeamWallet/Controls/BMWordField.swift index 9a145ba3..e635395b 100644 --- a/BeamWallet/Controls/BMWordField.swift +++ b/BeamWallet/Controls/BMWordField.swift @@ -43,15 +43,12 @@ class BMWordField: BMField { case .empty?: self.status = .normal self.textColor = UIColor.white - break case .error?: self.status = .error self.textColor = errorColor - break case .correct?: self.status = .normal self.textColor = UIColor.white - break case .none: break } @@ -73,8 +70,8 @@ class BMWordField: BMField { accessoryView = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 44)) let toolbar = UIToolbar(frame: accessoryView.bounds) - toolbar.autoresizingMask = .flexibleWidth; - toolbar.isUserInteractionEnabled = false; + toolbar.autoresizingMask = .flexibleWidth + toolbar.isUserInteractionEnabled = false accessoryView.addSubview(toolbar) let width_3 = toolbar.frame.size.width / CGFloat(maxWords) @@ -90,7 +87,7 @@ class BMWordField: BMField { } let separator = UIView(frame: CGRect(x:0, y:43.5, width:accessoryView.frame.size.width, height:0.5)) - separator.autoresizingMask = .flexibleWidth; + separator.autoresizingMask = .flexibleWidth separator.backgroundColor = UIColor.init(white: 0, alpha: 0.2) accessoryView.addSubview(separator) @@ -143,17 +140,15 @@ class BMWordField: BMField { if !recommendFirstWord && words.count != 0 && words[0].hasPrefix(prefix) { - var hasPrefix = false; + var hasPrefix = false - for i in 1...words.count-1 { - if words[i].hasPrefix(prefix) { - hasPrefix = true; - break - } + for i in 1...words.count-1 where words[i].hasPrefix(prefix) { + hasPrefix = true + break } if !hasPrefix { - recommendFirstWord = true; + recommendFirstWord = true } } @@ -189,13 +184,13 @@ class BMWordField: BMField { } if recommendFirstWord { - let button = accessoryOptions[0]; + let button = accessoryOptions[0] button.layer.removeAllAnimations() let animate = CABasicAnimation(keyPath: "backgroundColor") animate.fromValue = UIColor.black.cgColor animate.toValue = UIColor.clear.cgColor - animate.duration = 1.0; + animate.duration = 1.0 button.layer.add(animate, forKey: "recommend") } diff --git a/BeamWallet/Controls/Cell/BMAmountCell.swift b/BeamWallet/Controls/Cell/BMAmountCell.swift index 7114c4c4..e354643a 100644 --- a/BeamWallet/Controls/Cell/BMAmountCell.swift +++ b/BeamWallet/Controls/Cell/BMAmountCell.swift @@ -50,7 +50,7 @@ class BMAmountCell: BaseCell { } } - public var hideNameLabel:Bool? = nil + public var hideNameLabel:Bool? { didSet { if let hide = hideNameLabel { @@ -172,8 +172,8 @@ class BMAmountCell: BaseCell { if Settings.sharedManager().isDarkMode { secondCurrencyLabel.textColor = UIColor.main.steel - nameLabel.textColor = UIColor.main.steel; - maxAmountErrorLabel.textColor = UIColor.main.steel; + nameLabel.textColor = UIColor.main.steel + maxAmountErrorLabel.textColor = UIColor.main.steel } } @@ -223,7 +223,6 @@ extension BMAmountCell: Configurable { case 1: textField.textColor = UIColor.main.brightTeal textField.setNormalColor(color: UIColor.main.brightTeal) - break default: return } diff --git a/BeamWallet/Controls/Cell/BMDetailCell.swift b/BeamWallet/Controls/Cell/BMDetailCell.swift index b19cd8bf..07c9b578 100644 --- a/BeamWallet/Controls/Cell/BMDetailCell.swift +++ b/BeamWallet/Controls/Cell/BMDetailCell.swift @@ -43,7 +43,7 @@ class BMDetailCell: BaseCell { arrowIcon.highlightedImage = IconNextArrow()?.maskWithColor(color: UIColor.main.steelGrey) if Settings.sharedManager().isDarkMode { - nameLabel.textColor = UIColor.main.steel; + nameLabel.textColor = UIColor.main.steel } } diff --git a/BeamWallet/Controls/Cell/BMExpandCell.swift b/BeamWallet/Controls/Cell/BMExpandCell.swift index f3c676a1..94f2b36f 100644 --- a/BeamWallet/Controls/Cell/BMExpandCell.swift +++ b/BeamWallet/Controls/Cell/BMExpandCell.swift @@ -47,7 +47,7 @@ class BMExpandCell: BaseCell { selectedBackgroundView = selectedView if Settings.sharedManager().isDarkMode { - nameLabel.textColor = UIColor.main.steel; + nameLabel.textColor = UIColor.main.steel } } diff --git a/BeamWallet/Controls/Cell/BMFieldCell.swift b/BeamWallet/Controls/Cell/BMFieldCell.swift index f9f1421c..c1d91271 100644 --- a/BeamWallet/Controls/Cell/BMFieldCell.swift +++ b/BeamWallet/Controls/Cell/BMFieldCell.swift @@ -47,15 +47,15 @@ class BMFieldCell: BaseCell { } } - public var titleTextColor: UIColor? = nil { + public var titleTextColor: UIColor? { didSet { if let color = titleTextColor { - nameLabel.textColor = color; + nameLabel.textColor = color } } } - public var hideNameLabel:Bool? = nil + public var hideNameLabel:Bool? { didSet { if let hide = hideNameLabel { @@ -81,7 +81,7 @@ class BMFieldCell: BaseCell { // textField.placeHolderColor = UIColor.white.withAlphaComponent(0.2) if Settings.sharedManager().isDarkMode { - nameLabel.textColor = UIColor.main.steel; + nameLabel.textColor = UIColor.main.steel } } @@ -147,8 +147,7 @@ extension BMFieldCell : UITextFieldDelegate { if let copy = copyText { let inputBar = BMInputCopyBar(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 44), copy:copy) - inputBar.completion = { - (obj : String?) -> Void in + inputBar.completion = { (obj : String?) in if let text = obj { self.textField.text = text self.delegate?.textValueDidChange?(self, text, false) diff --git a/BeamWallet/Controls/Cell/BMMultiLinesCell.swift b/BeamWallet/Controls/Cell/BMMultiLinesCell.swift index ad5fb92b..11459c3e 100644 --- a/BeamWallet/Controls/Cell/BMMultiLinesCell.swift +++ b/BeamWallet/Controls/Cell/BMMultiLinesCell.swift @@ -225,10 +225,10 @@ extension BMMultiLinesCell: Configurable { let imageString = NSAttributedString(attachment: imageAttachment) let nameString = NSMutableAttributedString(string:address.label) - nameString.addAttribute(NSAttributedString.Key.font, value: BoldFont(size: 16 + fontSizeOffset), range: NSMakeRange(0, nameString.string.count)) + nameString.addAttribute(NSAttributedString.Key.font, value: BoldFont(size: 16 + fontSizeOffset), range: NSRange(location: 0, length: nameString.string.count)) let detailString = NSMutableAttributedString(string:item.detail!) - detailString.addAttribute(NSAttributedString.Key.paragraphStyle, value: style2, range: NSMakeRange(0, detailString.string.count)) + detailString.addAttribute(NSAttributedString.Key.paragraphStyle, value: style2, range: NSRange(location: 0, length: detailString.string.count)) attributedString.append(imageString) attributedString.append(NSAttributedString(string: " ")) @@ -236,7 +236,7 @@ extension BMMultiLinesCell: Configurable { attributedString.append(NSAttributedString(string: "\n")) attributedString.append(detailString) - attributedString.addAttribute(NSAttributedString.Key.paragraphStyle, value: style, range: NSMakeRange(0, nameString.string.count)) + attributedString.addAttribute(NSAttributedString.Key.paragraphStyle, value: style, range: NSRange(location: 0, length: nameString.string.count)) copyButton.imageEdgeInsets = UIEdgeInsets(top: 30, left: 0, bottom: 0, right: 0) } diff --git a/BeamWallet/Controls/Cell/BMPickedAddressCell.swift b/BeamWallet/Controls/Cell/BMPickedAddressCell.swift index 0980d954..6a752ddc 100644 --- a/BeamWallet/Controls/Cell/BMPickedAddressCell.swift +++ b/BeamWallet/Controls/Cell/BMPickedAddressCell.swift @@ -36,7 +36,7 @@ class BMPickedAddressCell: BaseCell { selectionStyle = .none if Settings.sharedManager().isDarkMode { - nameLabel.textColor = UIColor.main.steel; + nameLabel.textColor = UIColor.main.steel } } diff --git a/BeamWallet/Controls/Cell/PopoverAssetCell.swift b/BeamWallet/Controls/Cell/PopoverAssetCell.swift index 713a57f0..a69af639 100644 --- a/BeamWallet/Controls/Cell/PopoverAssetCell.swift +++ b/BeamWallet/Controls/Cell/PopoverAssetCell.swift @@ -23,15 +23,4 @@ class PopoverAssetCell: UITableViewCell { @IBOutlet weak var label:UILabel! @IBOutlet weak var iconView:AssetIconView! - override func awakeFromNib() { - super.awakeFromNib() - // Initialization code - } - - override func setSelected(_ selected: Bool, animated: Bool) { - super.setSelected(selected, animated: animated) - - // Configure the view for the selected state - } - } diff --git a/BeamWallet/Controls/Cell/PopoverCell.swift b/BeamWallet/Controls/Cell/PopoverCell.swift index 6c0aee37..97d81503 100644 --- a/BeamWallet/Controls/Cell/PopoverCell.swift +++ b/BeamWallet/Controls/Cell/PopoverCell.swift @@ -23,17 +23,5 @@ class PopoverCell: UITableViewCell { @IBOutlet weak var label:UILabel! @IBOutlet weak var iconView:UIImageView! - - - override func awakeFromNib() { - super.awakeFromNib() - // Initialization code - } - - override func setSelected(_ selected: Bool, animated: Bool) { - super.setSelected(selected, animated: animated) - - // Configure the view for the selected state - } } diff --git a/BeamWallet/Controls/Cell/SingleCenterCell.swift b/BeamWallet/Controls/Cell/SingleCenterCell.swift index edf36a24..c898f19f 100644 --- a/BeamWallet/Controls/Cell/SingleCenterCell.swift +++ b/BeamWallet/Controls/Cell/SingleCenterCell.swift @@ -31,11 +31,5 @@ class SingleCenterCell: UITableViewCell { } selectionStyle = .none } - - override func setSelected(_ selected: Bool, animated: Bool) { - super.setSelected(selected, animated: animated) - - // Configure the view for the selected state - } } diff --git a/BeamWallet/Extensions/Array.swift b/BeamWallet/Extensions/Array.swift index dee0e5b2..d252b87b 100644 --- a/BeamWallet/Extensions/Array.swift +++ b/BeamWallet/Extensions/Array.swift @@ -19,7 +19,7 @@ import Foundation -func rearrange(array: Array, fromIndex: Int, toIndex: Int) -> Array{ +func rearrange(array: [T], fromIndex: Int, toIndex: Int) -> [T]{ var arr = array let element = arr.remove(at: fromIndex) arr.insert(element, at: toIndex) diff --git a/BeamWallet/Extensions/Field.swift b/BeamWallet/Extensions/Field.swift index 0f546a6b..69811cc9 100644 --- a/BeamWallet/Extensions/Field.swift +++ b/BeamWallet/Extensions/Field.swift @@ -21,7 +21,7 @@ import Foundation import UIKit -//extension UITextField { +// extension UITextField { // // var clearButtonTintColor: UIColor? { // get { @@ -30,11 +30,11 @@ import UIKit // set { // } // } -//} +// } extension UITextField { - public func disablePasswordAutoFill () { + public func disablePasswordAutoFill() { if #available(iOS 12, *) { // iOS 12: Not the best solution, but it works. self.textContentType = .oneTimeCode @@ -69,7 +69,7 @@ extension UITextField { } } - @IBInspectable var placeHolderFont: UIFont? { + var placeHolderFont: UIFont? { get { return self.placeHolderFont } diff --git a/BeamWallet/Extensions/String.swift b/BeamWallet/Extensions/String.swift index 23979a1e..e29eb1f8 100644 --- a/BeamWallet/Extensions/String.swift +++ b/BeamWallet/Extensions/String.swift @@ -210,9 +210,9 @@ extension String { func isValidIp() -> Bool { if #available(iOS 12.0, *) { - if let _ = IPv4Address(self) { + if IPv4Address(self) != nil { return true - } else if let _ = IPv6Address(self) { + } else if IPv6Address(self) != nil { return true } else { return false diff --git a/BeamWallet/Extensions/TableView.swift b/BeamWallet/Extensions/TableView.swift index 8518aef7..5a653128 100644 --- a/BeamWallet/Extensions/TableView.swift +++ b/BeamWallet/Extensions/TableView.swift @@ -54,7 +54,7 @@ extension UITableView { extension UITableView { - func performUpdate(_ update: ()->Void, completion: (()->Void)?) { + func performUpdate(_ update: () -> Void, completion: (() -> Void)?) { CATransaction.begin() CATransaction.setCompletionBlock(completion) @@ -68,35 +68,28 @@ extension UITableView { } public func findPath(_ row:AnyClass) -> IndexPath? { - for cell in visibleCells { - if cell.isKind(of: row) { - return self.indexPath(for: cell) - } + for cell in visibleCells where cell.isKind(of: row) { + return self.indexPath(for: cell) } return nil } - + public func findCell(_ row:AnyClass) -> UITableViewCell? { - for cell in visibleCells { - if cell.isKind(of: row) { - return cell - } + for cell in visibleCells where cell.isKind(of: row) { + return cell } return nil } - + public func reloadRow(_ row: AnyClass, animated:Bool = true) { - - for cell in visibleCells { - - if cell.isKind(of: row) { - - if let path = indexPath(for: cell) { - - reloadRows(at: [path], with: (animated ? .fade : .none)) - - return - } + + for cell in visibleCells where cell.isKind(of: row) { + + if let path = indexPath(for: cell) { + + reloadRows(at: [path], with: (animated ? .fade : .none)) + + return } } @@ -147,7 +140,7 @@ extension UICollectionView { extension UITableView { func rowsHeight() -> CGFloat { - var cellsHeight:CGFloat = 0; + var cellsHeight:CGFloat = 0 let sections = numberOfSections for section in 0.. () + typealias ProgressHandler = (Float?,Error?, String?, String?) -> Void var onProgress : ProgressHandler? @@ -32,10 +32,10 @@ class BackgroundDownloader: NSObject { private var destinationURLForFile:URL! private var task:URLSessionDownloadTask? - private var start = Date.timeIntervalSinceReferenceDate; + private var start = Date.timeIntervalSinceReferenceDate public func startDownloading(_ url:URL, _ destinationUrl:URL) { - + if FileManager.default.fileExists(atPath: destinationUrl.path) { do { @@ -45,9 +45,9 @@ class BackgroundDownloader: NSObject { print(error) } } - + self.destinationURLForFile = destinationUrl - + let config = URLSessionConfiguration.background(withIdentifier: "com.beam.background" + url.lastPathComponent) let session = URLSession(configuration: config, delegate: self, delegateQueue: OperationQueue()) @@ -68,9 +68,9 @@ extension BackgroundDownloader: URLSessionTaskDelegate, URLSessionDownloadDelega func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) { if totalBytesExpectedToWrite > 0 { - + let progress = Float(totalBytesWritten) / Float(totalBytesExpectedToWrite) - + avgTime = avgTime + 1 let speed = Double(totalBytesWritten) / Double((Date.timeIntervalSinceReferenceDate - self.start)) @@ -99,16 +99,16 @@ extension BackgroundDownloader: URLSessionTaskDelegate, URLSessionDownloadDelega func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) { print("Download finished: \(location)") - + do { try FileManager.default.moveItem(at: location, to: destinationURLForFile) onProgress?(nil, nil, destinationURLForFile.path, nil) - + }catch{ onProgress?(nil, error, nil, nil) } } - + func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { if let reason = error { let code = (reason as NSError).code diff --git a/BeamWallet/Manager/BiometricAuthorization.swift b/BeamWallet/Manager/BiometricAuthorization.swift index adfa9987..ade9871b 100644 --- a/BeamWallet/Manager/BiometricAuthorization.swift +++ b/BeamWallet/Manager/BiometricAuthorization.swift @@ -20,11 +20,11 @@ import Foundation import LocalAuthentication -public typealias AuthorizationSuccess = (() -> ()) +public typealias AuthorizationSuccess = (() -> Void) -public typealias AuthorizationFailure = (() -> ()) +public typealias AuthorizationFailure = (() -> Void) -public typealias AuthorizationRetry = (() -> ()) +public typealias AuthorizationRetry = (() -> Void) @objc public enum BiometricFailureReason: Int { case canceled diff --git a/BeamWallet/Manager/Crowdin/CrowdinManager.swift b/BeamWallet/Manager/Crowdin/CrowdinManager.swift index 1ea20acf..c9989a4c 100644 --- a/BeamWallet/Manager/Crowdin/CrowdinManager.swift +++ b/BeamWallet/Manager/Crowdin/CrowdinManager.swift @@ -23,28 +23,24 @@ import Foundation class CrowdinManager : NSObject { fileprivate static var zipPath:URL { - get{ - let path = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true) - let documentDirectoryPath:String = path[0] - let destinationURLForFile = URL(fileURLWithPath: documentDirectoryPath.appendingFormat("/all.zip")) - return destinationURLForFile - } + let path = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true) + let documentDirectoryPath:String = path[0] + let destinationURLForFile = URL(fileURLWithPath: documentDirectoryPath.appendingFormat("/all.zip")) + return destinationURLForFile } - + static var localizationPath:URL { - get{ - let path = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true) - let documentDirectoryPath:String = path[0] - let destinationURLForFile = URL(fileURLWithPath: documentDirectoryPath.appendingFormat("/localization")) - return destinationURLForFile - } + let path = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true) + let documentDirectoryPath:String = path[0] + let destinationURLForFile = URL(fileURLWithPath: documentDirectoryPath.appendingFormat("/localization")) + return destinationURLForFile } static public func updateLocalizations() { let zipLink = URL(string: "https://api.crowdin.com/api/project/\(crowdinProject)/download/all.zip?key=\(crowdinKey)")! BackgroundDownloader.shared.startDownloading(zipLink, zipPath) - BackgroundDownloader.shared.onProgress = { (progress, error, filePath, time) in + BackgroundDownloader.shared.onProgress = { (_, error, filePath, _) in if filePath != nil { if FileManager.default.fileExists(atPath: localizationPath.path) @@ -59,7 +55,7 @@ class CrowdinManager : NSObject { SSZipArchive.unzipFile(atPath: filePath!, toDestination: localizationPath.path, overwrite:true, password: nil, progressHandler: { (_ , _ , _ , _ ) in - }, completionHandler: { (path, success, error ) in + }, completionHandler: { (_, success, error ) in if(success) { do { let items = try FileManager.default.contentsOfDirectory(atPath: localizationPath.path) diff --git a/BeamWallet/Manager/NotificationManager.swift b/BeamWallet/Manager/NotificationManager.swift index 9172a7b7..f7b7e524 100644 --- a/BeamWallet/Manager/NotificationManager.swift +++ b/BeamWallet/Manager/NotificationManager.swift @@ -41,7 +41,7 @@ class NotificationManager : NSObject { AppModel.sharedManager().addDelegate(self) } - //MARK: - Registration + // MARK: - Registration public func isApnsEnabled(completion: @escaping ((Bool) -> Void)) { let current = UNUserNotificationCenter.current() @@ -61,8 +61,7 @@ class NotificationManager : NSObject { let options: UNAuthorizationOptions = [.alert, .sound, .badge] let notificationCenter = UNUserNotificationCenter.current() - notificationCenter.requestAuthorization(options: options) { - (didAllow, error) in + notificationCenter.requestAuthorization(options: options) { (_, _) in } UIApplication.shared.registerForRemoteNotifications() @@ -77,7 +76,7 @@ class NotificationManager : NSObject { } - //MARK: - Send + // MARK: - Send public func scheduleNotification(notification: BMNotification){ print("-------- scheduleNotification ---------") @@ -248,12 +247,10 @@ extension NotificationManager: BMNotificationViewDelegate { if(id == NotificationManager.notificationID || id == NotificationManager.addressesID) { if let vc = UIApplication.getTopMostViewController() { var notificationFound = false - for v in vc.navigationController?.viewControllers ?? [] { - if v is NotificationsViewController { - notificationFound = true - vc.navigationController?.popToViewController(v, animated: true) - break - } + for v in vc.navigationController?.viewControllers ?? [] where v is NotificationsViewController { + notificationFound = true + vc.navigationController?.popToViewController(v, animated: true) + break } if !notificationFound { vc.navigationController?.pushViewController(NotificationsViewController(), animated: true) @@ -263,12 +260,10 @@ extension NotificationManager: BMNotificationViewDelegate { else if(id == NotificationManager.versionID) { if let vc = UIApplication.getTopMostViewController() { var notificationFound = false - for v in vc.navigationController?.viewControllers ?? [] { - if v is NotificationVersionViewController { - notificationFound = true - vc.navigationController?.popToViewController(v, animated: true) - break - } + for v in vc.navigationController?.viewControllers ?? [] where v is NotificationVersionViewController { + notificationFound = true + vc.navigationController?.popToViewController(v, animated: true) + break } if !notificationFound { if let notification = AppModel.sharedManager().getLastVersionNotification() { diff --git a/BeamWallet/Manager/PasswordManager.swift b/BeamWallet/Manager/PasswordManager.swift index 93583ccf..44ad6a49 100644 --- a/BeamWallet/Manager/PasswordManager.swift +++ b/BeamWallet/Manager/PasswordManager.swift @@ -62,11 +62,8 @@ class PasswordTestManager { let range = NSRange(location: 0, length: password.utf16.count) - for test in strengthTests { - if(test.exp.firstMatch(in: password, options: [], range: range) != nil) - { - state = test.state - } + for test in strengthTests where test.exp.firstMatch(in: password, options: [], range: range) != nil { + state = test.state } return state diff --git a/BeamWallet/Manager/RestoreManager.swift b/BeamWallet/Manager/RestoreManager.swift index 184e7c5d..302644df 100644 --- a/BeamWallet/Manager/RestoreManager.swift +++ b/BeamWallet/Manager/RestoreManager.swift @@ -27,18 +27,14 @@ class RestoreManager: NSObject { private var progress : ((Error?, Float?, String?) -> Void)? var filePath:URL { - get{ - let path = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true) - let documentDirectoryPath:String = path[0] - let destinationURLForFile = URL(fileURLWithPath: documentDirectoryPath.appendingFormat("/node.bin")) - return destinationURLForFile - } + let path = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true) + let documentDirectoryPath:String = path[0] + let destinationURLForFile = URL(fileURLWithPath: documentDirectoryPath.appendingFormat("/node.bin")) + return destinationURLForFile } - + var isNeedReturnToRestore:Bool { - get { - return (FileManager.default.fileExists(atPath: filePath.path)) - } + return (FileManager.default.fileExists(atPath: filePath.path)) } public func cancelRestore() { @@ -56,13 +52,13 @@ class RestoreManager: NSObject { } public func startRestore(completion:@escaping ((Bool) -> Void), progress:@escaping ((Error?, Float?, String?) -> Void)) { - + self.cancelRestore() self.completion = completion self.progress = progress var url:URL? - + if Settings.sharedManager().target == Testnet { url = URL(string: "https://mobile-restore.beam.mw/testnet/testnet_recovery.bin") } @@ -74,7 +70,7 @@ class RestoreManager: NSObject { // url = URL(string: "https://mobile-restore.beam.mw/masternet/masternet_recovery.bin") } - + if let downloadUrl = url { BackgroundDownloader.shared.startDownloading(downloadUrl, filePath) BackgroundDownloader.shared.onProgress = { (progress, error, filePath, time) in diff --git a/BeamWallet/Model/Address/AddressViewModel.swift b/BeamWallet/Model/Address/AddressViewModel.swift index 6cc1994d..a7ecc7ca 100644 --- a/BeamWallet/Model/Address/AddressViewModel.swift +++ b/BeamWallet/Model/Address/AddressViewModel.swift @@ -187,7 +187,7 @@ class AddressViewModel: NSObject { return } } - }) {} + }, cancel: {}) } public func onEditAddress(address: BMAddress) { diff --git a/BeamWallet/Model/Address/DetailAddressViewModel.swift b/BeamWallet/Model/Address/DetailAddressViewModel.swift index 814cb259..54d4059e 100644 --- a/BeamWallet/Model/Address/DetailAddressViewModel.swift +++ b/BeamWallet/Model/Address/DetailAddressViewModel.swift @@ -25,9 +25,7 @@ class DetailAddressViewModel: AddressViewModel { public var details = [BMMultiLineItem]() public var transactionViewModel:TransactionViewModel! public var transactions:[BMTransaction] { - get{ - return transactionViewModel.transactions - } + return transactionViewModel.transactions } override init(address: BMAddress) { diff --git a/BeamWallet/Model/Address/ReceiveAddressViewModel.swift b/BeamWallet/Model/Address/ReceiveAddressViewModel.swift index 0e8f9abf..a93cc628 100644 --- a/BeamWallet/Model/Address/ReceiveAddressViewModel.swift +++ b/BeamWallet/Model/Address/ReceiveAddressViewModel.swift @@ -112,9 +112,7 @@ class ReceiveAddressViewModel: NSObject { } } public var selectedCurrencyString: String { - get { - return AssetsManager.shared().getAsset(Int32(selectedAssetId))?.unitName ?? "" - } + return AssetsManager.shared().getAsset(Int32(selectedAssetId))?.unitName ?? "" } override init() { @@ -132,7 +130,7 @@ class ReceiveAddressViewModel: NSObject { if isOwn { AppModel.sharedManager().generateMaxPrivacyAddress(address._id, assetId: Int32(selectedAssetId), amount: bamount) { (token) in - self.address.maxPrivacyToken = token; + self.address.maxPrivacyToken = token } } @@ -140,11 +138,11 @@ class ReceiveAddressViewModel: NSObject { AppModel.sharedManager().generateOfflineAddress(address._id, assetId: Int32(selectedAssetId), amount: bamount) { (token) in DispatchQueue.main.async { if self.address.offlineToken != nil { - self.address.offlineToken = token; + self.address.offlineToken = token self.onAddressUpdate?(nil) } else { - self.address.offlineToken = token; + self.address.offlineToken = token self.onAddressCreated?(nil) } } @@ -152,7 +150,7 @@ class ReceiveAddressViewModel: NSObject { } if !isOwn { - AppModel.sharedManager().generateNewWalletAddress(withBlockAndAmount: Int32(selectedAssetId), amount: bamount) { address, error in + AppModel.sharedManager().generateNewWalletAddress(withBlockAndAmount: Int32(selectedAssetId), amount: bamount) { address, _ in if let result = address { self.address = result } @@ -242,15 +240,13 @@ class ReceiveAddressViewModel: NSObject { if let token = self.address.offlineToken { self.showShareDialog(token) } - break case .share_pool_token: self.showShareDialog(self.address.walletId) - break default: return } } - }) {} + }, cancel: {}) } private func showShareDialog(_ token:String) { diff --git a/BeamWallet/Model/Objects/BMMultiLineItem.swift b/BeamWallet/Model/Objects/BMMultiLineItem.swift index 23e0e07d..ca8e2854 100644 --- a/BeamWallet/Model/Objects/BMMultiLineItem.swift +++ b/BeamWallet/Model/Objects/BMMultiLineItem.swift @@ -35,9 +35,9 @@ struct BMThreeLineItem { public var hasArrow:Bool public var expand = true - public var accessoryName:String? = nil + public var accessoryName:String? - public var customObject:Any? = nil + public var customObject:Any? } class BMMultiLineItem { @@ -47,9 +47,9 @@ class BMMultiLineItem { public var detailColor:UIColor? public var detailAttributedString:NSMutableAttributedString? public var canCopy = false - public var copiedText: String? = nil - public var copyValue: String? = nil - public var showCopyButton: Bool? = nil + public var copiedText: String? + public var copyValue: String? + public var showCopyButton: Bool? required init(title:String!, detail:String?, detailFont:UIFont?, detailColor:UIColor?) { self.title = title diff --git a/BeamWallet/Model/Transaction/DetailTransactionViewModel.swift b/BeamWallet/Model/Transaction/DetailTransactionViewModel.swift index 1f2c0ad0..728609df 100644 --- a/BeamWallet/Model/Transaction/DetailTransactionViewModel.swift +++ b/BeamWallet/Model/Transaction/DetailTransactionViewModel.swift @@ -264,7 +264,7 @@ class DetailTransactionViewModel: TransactionViewModel { if let tr = self.transaction, let top = UIApplication.getTopMostViewController() { let activityItem: [String] = [tr.textDetails()] let vc = UIActivityViewController(activityItems: activityItem, applicationActivities: []) - vc.completionWithItemsHandler = {(activityType: UIActivity.ActivityType?, completed: Bool, returnedItems: [Any]?, error: Error?) in + vc.completionWithItemsHandler = {(_: UIActivity.ActivityType?, _: Bool, _: [Any]?, _: Error?) in } vc.excludedActivityTypes = [UIActivity.ActivityType.assignToContact, UIActivity.ActivityType.print,UIActivity.ActivityType.openInIBooks] @@ -300,7 +300,7 @@ class DetailTransactionViewModel: TransactionViewModel { if let image = shareView.snapshot(scale: false) { let activityItem: [AnyObject] = [image] let vc = UIActivityViewController(activityItems: activityItem, applicationActivities: []) - vc.completionWithItemsHandler = {(activityType: UIActivity.ActivityType?, completed: Bool, returnedItems: [Any]?, error: Error?) in + vc.completionWithItemsHandler = {(_: UIActivity.ActivityType?, _: Bool, _: [Any]?, _: Error?) in } vc.excludedActivityTypes = [UIActivity.ActivityType.assignToContact, UIActivity.ActivityType.print,UIActivity.ActivityType.openInIBooks] @@ -313,7 +313,7 @@ class DetailTransactionViewModel: TransactionViewModel { public func saveContact() { if let top = UIApplication.getTopMostViewController() { let transaction = self.transaction! - var address:String? = nil + var address:String? if transaction.isIncome { address = transaction.senderAddress diff --git a/BeamWallet/Model/Transaction/SendTransactionViewModel.swift b/BeamWallet/Model/Transaction/SendTransactionViewModel.swift index f1adf596..48d8d4a6 100644 --- a/BeamWallet/Model/Transaction/SendTransactionViewModel.swift +++ b/BeamWallet/Model/Transaction/SendTransactionViewModel.swift @@ -62,9 +62,7 @@ class SendTransactionViewModel: NSObject, WalletModelDelegate { } public var isNeedDisplaySegmentCell:Bool { - get { - return addressType == BMAddressTypeShielded && isToken - } + return addressType == BMAddressTypeShielded && isToken } public var maxPrivacy:Bool = false @@ -72,29 +70,25 @@ class SendTransactionViewModel: NSObject, WalletModelDelegate { public var selectedAssetId = 0 public var selectedCurrencyString: String { - get { - return AssetsManager.shared().getAsset(Int32(selectedAssetId))?.unitName ?? "" - } + return AssetsManager.shared().getAsset(Int32(selectedAssetId))?.unitName ?? "" } - + public var secondAmount:String { - get { - return ExchangeManager.shared().exchangeValueAsset(Double(inputAmount) ?? 0, assetID: UInt64(selectedAssetId)) - } + return ExchangeManager.shared().exchangeValueAsset(Double(inputAmount) ?? 0, assetID: UInt64(selectedAssetId)) } public func calculateFee() { let isShielded = (addressType == BMAddressTypeOfflinePublic || addressType == BMAddressTypeMaxPrivacy || isSendOffline) - //addressType == BMAddressTypeShielded || + // addressType == BMAddressTypeShielded || var assetName = (AssetsManager.shared().getAsset(Int32(self.selectedAssetId))?.unitName ?? "") + " " if assetName == "assets" { assetName = "BEAM" } - AppModel.sharedManager().calculateFee(Double(amount) ?? 0, assetId: Int32(selectedAssetId), fee: (Double(fee) ?? 0), isShielded: isShielded) { (result, changed, shieldedInputsFee, max) in + AppModel.sharedManager().calculateFee(Double(amount) ?? 0, assetId: Int32(selectedAssetId), fee: (Double(fee) ?? 0), isShielded: isShielded) { (result, _, shieldedInputsFee, max) in DispatchQueue.main.async { self.shieldedInputsFee = shieldedInputsFee let current = UInt64(self.fee) ?? 0 @@ -204,7 +198,7 @@ class SendTransactionViewModel: NSObject, WalletModelDelegate { isToken = false - requestedMaxPrivacy = false; + requestedMaxPrivacy = false maxPrivacy = false calculateFee() } @@ -231,12 +225,12 @@ class SendTransactionViewModel: NSObject, WalletModelDelegate { } } public var amount: String { - set { - inputAmount = newValue - } get { return getAmount } + set { + inputAmount = newValue + } } public var getAmount: String { @@ -279,22 +273,20 @@ class SendTransactionViewModel: NSObject, WalletModelDelegate { } var isNeedFocus:Bool { - get { - if !isFocused && transaction == nil { - isFocused = true - - if let address = UIPasteboard.general.string { - if AppModel.sharedManager().isValidAddress(address) - { - copyAddress = address - - return true - } + if !isFocused && transaction == nil { + isFocused = true + + if let address = UIPasteboard.general.string { + if AppModel.sharedManager().isValidAddress(address) + { + copyAddress = address + + return true } } - - return false } + + return false } @@ -313,7 +305,7 @@ class SendTransactionViewModel: NSObject, WalletModelDelegate { } private func generateOutgoindAddress() { - AppModel.sharedManager().generateNewWalletAddress { (address, error) in + AppModel.sharedManager().generateNewWalletAddress { (address, _) in if let result = address { DispatchQueue.main.async { self.outgoindAdderss = result @@ -526,7 +518,7 @@ class SendTransactionViewModel: NSObject, WalletModelDelegate { public func isNeedSaveContact() -> Bool { var address = toAddress - var identity:String? = nil + var identity:String? if (AppModel.sharedManager().isToken(address)) { let params = AppModel.sharedManager().getTransactionParameters(address) @@ -549,7 +541,7 @@ class SendTransactionViewModel: NSObject, WalletModelDelegate { let isShielded = (addressType == BMAddressTypeShielded || addressType == BMAddressTypeOfflinePublic || addressType == BMAddressTypeMaxPrivacy || isSendOffline) - AppModel.sharedManager().calculateFee((Double(amount) ?? 0), assetId: Int32(selectedAssetId), fee: (Double(fee) ?? 0), isShielded: isShielded) { (fee, change, shieldedInputsFee, max) in + AppModel.sharedManager().calculateFee((Double(amount) ?? 0), assetId: Int32(selectedAssetId), fee: (Double(fee) ?? 0), isShielded: isShielded) { (_, change, _, _) in self.onCalculateChanged?(change) } } diff --git a/BeamWallet/Model/Transaction/TransactionViewModel.swift b/BeamWallet/Model/Transaction/TransactionViewModel.swift index 20fca9a1..abc00697 100644 --- a/BeamWallet/Model/Transaction/TransactionViewModel.swift +++ b/BeamWallet/Model/Transaction/TransactionViewModel.swift @@ -46,7 +46,7 @@ class TransactionViewModel: NSObject { } } - public var assetId:Int32? = nil { + public var assetId:Int32? { didSet { if let id = assetId { self.transactions = self.transactions.filter { tr in @@ -105,7 +105,7 @@ class TransactionViewModel: NSObject { AppModel.sharedManager().removeDelegate(self) } -//MARK: - Actions +// MARK: - Actions public func cancelTransation(indexPath:IndexPath?) { let transaction:BMTransaction = (indexPath == nil ? self.transaction! : transactions[indexPath!.row]) @@ -161,17 +161,17 @@ class TransactionViewModel: NSObject { public func trailingSwipeActions(indexPath:IndexPath) -> UISwipeActionsConfiguration? { let transaction = transactions[indexPath.row] - let cancel = UIContextualAction(style: .normal, title: nil) { (action, view, handler) in + let cancel = UIContextualAction(style: .normal, title: nil) { (_, _, handler) in handler(true) self.cancelTransation(indexPath: indexPath) } cancel.image = IconRowCancel() cancel.backgroundColor = UIColor.main.cerulean - var rep:UIContextualAction? = nil + var rep:UIContextualAction? if !transaction.isShielded { - rep = UIContextualAction(style: .normal, title: nil) { (action, view, handler) in + rep = UIContextualAction(style: .normal, title: nil) { (_, _, handler) in handler(true) self.repeatTransation(transaction: transaction) } @@ -179,7 +179,7 @@ class TransactionViewModel: NSObject { rep!.backgroundColor = UIColor.main.deepSeaBlue } - let delete = UIContextualAction(style: .normal, title: nil) { (action, view, handler) in + let delete = UIContextualAction(style: .normal, title: nil) { (_, _, handler) in handler(true) self.deleteTransation(indexPath: indexPath) } @@ -206,7 +206,7 @@ class TransactionViewModel: NSObject { } } -//MARK: - Delegate +// MARK: - Delegate extension TransactionViewModel : WalletModelDelegate { diff --git a/BeamWallet/Model/Wallet/AssetViewModel.swift b/BeamWallet/Model/Wallet/AssetViewModel.swift index 51a11811..5acbfe2e 100644 --- a/BeamWallet/Model/Wallet/AssetViewModel.swift +++ b/BeamWallet/Model/Wallet/AssetViewModel.swift @@ -75,17 +75,14 @@ class AssetViewModel: NSObject { self.assets.sort { a1, a2 in return a1.dateUsed() > a2.dateUsed() } - break case .old_recent: self.assets.sort { a1, a2 in return a1.dateUsed() < a2.dateUsed() } - break case .amount_large_small: self.assets.sort { a1, a2 in return a1.realAmount > a2.realAmount } - break case .amount_small_large: self.assets.sort { a1, a2 in return a1.realAmount < a2.realAmount @@ -156,7 +153,7 @@ class AssetViewModel: NSObject { return result } - public func getAssetBalanceInfo(asset:BMAsset)-> [[BMThreeLineItem]] { + public func getAssetBalanceInfo(asset:BMAsset) -> [[BMThreeLineItem]] { var result = [[BMThreeLineItem]]() var section_1 = [BMThreeLineItem]() @@ -203,7 +200,7 @@ class AssetViewModel: NSObject { } } -//MARK: - Delegate +// MARK: - Delegate extension AssetViewModel : WalletModelDelegate { diff --git a/BeamWallet/Protocols/KeyboardListener.swift b/BeamWallet/Protocols/KeyboardListener.swift index ffc46325..f93ae70b 100644 --- a/BeamWallet/Protocols/KeyboardListener.swift +++ b/BeamWallet/Protocols/KeyboardListener.swift @@ -19,8 +19,6 @@ import Foundation -import Foundation - class KeyboardListener: NSObject { static let shared = KeyboardListener() diff --git a/BeamWallet/Protocols/Progress.swift b/BeamWallet/Protocols/Progress.swift index 9189ad28..8f1174c7 100644 --- a/BeamWallet/Protocols/Progress.swift +++ b/BeamWallet/Protocols/Progress.swift @@ -19,7 +19,7 @@ import Foundation -func ShowCopied (text:String? = nil) { +func ShowCopied(text:String? = nil) { if let s = text { BMToast.show(text: s) } diff --git a/BeamWallet/ViewControllers/Base/BaseNavigationController.swift b/BeamWallet/ViewControllers/Base/BaseNavigationController.swift index eea3ab53..1deb3d50 100644 --- a/BeamWallet/ViewControllers/Base/BaseNavigationController.swift +++ b/BeamWallet/ViewControllers/Base/BaseNavigationController.swift @@ -53,17 +53,17 @@ class NavigationPopTransition: NSObject, UIViewControllerAnimatedTransitioning { delay: 0, options: .curveLinear, animations: { - + dimmingView.alpha = 0 toViewController.view.frame = transitionContext.finalFrame(for: toViewController) fromViewController.view.frame = CGRect(x: toViewController.view.frame.size.width, y: fromViewController.view.frame.origin.y, width: fromViewController.view.frame.size.width, height: fromViewController.view.frame.size.height) - - }) { finished in - + + }, completion: { _ in + dimmingView.removeFromSuperview() transitionContext.completeTransition(!transitionContext.transitionWasCancelled) - - } + + }) } } @@ -93,7 +93,7 @@ class BaseNavigationController: UINavigationController, UINavigationControllerDe } } - var gesture:UIPanGestureRecognizer? = nil + var gesture:UIPanGestureRecognizer? var interactivePopTransition: UIPercentDrivenInteractiveTransition! override func viewDidLoad() { diff --git a/BeamWallet/ViewControllers/Base/BaseViewController.swift b/BeamWallet/ViewControllers/Base/BaseViewController.swift index bfeb425e..0bb61811 100644 --- a/BeamWallet/ViewControllers/Base/BaseViewController.swift +++ b/BeamWallet/ViewControllers/Base/BaseViewController.swift @@ -389,11 +389,11 @@ class BaseViewController: UIViewController { if !Settings.sharedManager().isHideAmounts { if Settings.sharedManager().isAskForHideAmounts { self.confirmAlert(title: Localizable.shared.strings.activate_security_title, message: Localizable.shared.strings.activate_security_text, cancelTitle: Localizable.shared.strings.cancel, confirmTitle: Localizable.shared.strings.activate, cancelHandler: { _ in - - }) { _ in + + }, confirmHandler: { _ in Settings.sharedManager().isAskForHideAmounts = false Settings.sharedManager().isHideAmounts = !Settings.sharedManager().isHideAmounts - } + }) } else { Settings.sharedManager().isHideAmounts = !Settings.sharedManager().isHideAmounts diff --git a/BeamWallet/ViewControllers/Login/EnterWalletPasswordViewController.swift b/BeamWallet/ViewControllers/Login/EnterWalletPasswordViewController.swift index 9c6677ca..f8552837 100644 --- a/BeamWallet/ViewControllers/Login/EnterWalletPasswordViewController.swift +++ b/BeamWallet/ViewControllers/Login/EnterWalletPasswordViewController.swift @@ -96,13 +96,6 @@ class EnterWalletPasswordViewController: BaseWizardViewController { } } - override func viewDidAppear(_ animated: Bool) { - super.viewDidAppear(animated) - -// passField.text = "1" -// onLogin(sender: UIButton()) - } - override func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) @@ -161,7 +154,7 @@ class EnterWalletPasswordViewController: BaseWizardViewController { if(!AppModel.sharedManager().isWalletRunning()) { AppModel.sharedManager().openWallet(pass) isLoggedin = true - AppModel.sharedManager().isLoggedin = isLoggedin; + AppModel.sharedManager().isLoggedin = isLoggedin AppModel.sharedManager().isConnected = true } if navigationController?.viewControllers.count == 1 { @@ -198,12 +191,12 @@ class EnterWalletPasswordViewController: BaseWizardViewController { @IBAction func onChangeWallet(sender: UIButton) { confirmAlert(title: Localizable.shared.strings.restore_create_title, message: Localizable.shared.strings.restore_create_text, cancelTitle: Localizable.shared.strings.cancel, confirmTitle: Localizable.shared.strings.proceed, cancelHandler: { _ in - - }) { _ in - AppModel.sharedManager().isLoggedin = false; + + }, confirmHandler: { _ in + AppModel.sharedManager().isLoggedin = false AppModel.sharedManager().startChangeWallet() self.pushViewController(vc: WellcomeViewController()) - } + }) } @IBAction func onExport(sender: UIButton) { @@ -242,8 +235,8 @@ class EnterWalletPasswordViewController: BaseWizardViewController { leftViewController: menuViewController, rightViewController: nil) - sideMenuController.leftViewWidth = UIScreen.main.bounds.size.width - 60; - sideMenuController.leftViewPresentationStyle = LGSideMenuPresentationStyle.slideAbove; + sideMenuController.leftViewWidth = UIScreen.main.bounds.size.width - 60 + sideMenuController.leftViewPresentationStyle = LGSideMenuPresentationStyle.slideAbove sideMenuController.rootViewLayerShadowRadius = 0 sideMenuController.rootViewLayerShadowColor = UIColor.clear sideMenuController.leftViewLayerShadowRadius = 0 diff --git a/BeamWallet/ViewControllers/Login/New Group/RestoreOptionsViewController.swift b/BeamWallet/ViewControllers/Login/New Group/RestoreOptionsViewController.swift index 2e1242b8..ee31397c 100644 --- a/BeamWallet/ViewControllers/Login/New Group/RestoreOptionsViewController.swift +++ b/BeamWallet/ViewControllers/Login/New Group/RestoreOptionsViewController.swift @@ -81,20 +81,20 @@ class RestoreOptionsViewController: BaseViewController { @IBAction func onNext(sender: UIButton) { if AppModel.sharedManager().restoreType == BMRestoreAutomatic { confirmAlert(title: Localizable.shared.strings.restore_wallet_title, message: Localizable.shared.strings.auto_restore_warning, cancelTitle: Localizable.shared.strings.cancel, confirmTitle: Localizable.shared.strings.understand, cancelHandler: { _ in - - }) { _ in + + }, confirmHandler: { _ in Settings.sharedManager().connectToRandomNode = true Settings.sharedManager().nodeAddress = AppModel.chooseRandomNode() AppModel.sharedManager().changeNodeAddress() let vc = OpenWalletProgressViewController(password: self.password, phrase: self.phrase) self.pushViewController(vc: vc) - } + }) } else { confirmAlert(title: Localizable.shared.strings.restore_wallet_title, message: Localizable.shared.strings.manual_restore_warning, cancelTitle: Localizable.shared.strings.cancel, confirmTitle: Localizable.shared.strings.understand, cancelHandler: { _ in - - }) { _ in + + }, confirmHandler: { _ in let created = AppModel.sharedManager().createWallet(self.phrase, pass: self.password) if !created { self.alert(title: Localizable.shared.strings.error, message: Localizable.shared.strings.wallet_not_created) { _ in @@ -114,16 +114,16 @@ class RestoreOptionsViewController: BaseViewController { DispatchQueue.main.asyncAfter(deadline: .now() + 1) { AppModel.sharedManager().exportOwnerKey(self.password) { [weak self] key in SVProgressHUD.dismiss() - + guard let strongSelf = self else { return } - + let vc = OwnerKeyViewController() vc.ownerKey = key strongSelf.pushViewController(vc: vc) } } } - } + }) } } } diff --git a/BeamWallet/ViewControllers/Login/OpenWalletProgressViewController.swift b/BeamWallet/ViewControllers/Login/OpenWalletProgressViewController.swift index 5ba72e4e..43e3bf06 100644 --- a/BeamWallet/ViewControllers/Login/OpenWalletProgressViewController.swift +++ b/BeamWallet/ViewControllers/Login/OpenWalletProgressViewController.swift @@ -67,7 +67,7 @@ class OpenWalletProgressViewController: BaseViewController { super.viewDidLoad() let name = Bundle.main.bundleIdentifier! + ".task" - backgroundTaskID = UIApplication.shared.beginBackgroundTask (withName: name) { + backgroundTaskID = UIApplication.shared.beginBackgroundTask(withName: name) { print("END BG TASK") UIApplication.shared.endBackgroundTask(self.backgroundTaskID!) self.backgroundTaskID = UIBackgroundTaskIdentifier.invalid @@ -217,40 +217,44 @@ class OpenWalletProgressViewController: BaseViewController { } @objc private func openMainPage() { + // Don't remove the delegate before the early-return checks. Other + // callbacks (e.g. onNetwotkStatusChange after node-connect) call + // openMainPage while `isWaitingRestore` is still true; if we tore + // ourselves out of the delegate list first and then returned, the + // post-recovery sync events would never reach this VC and the screen + // would sit on "Synchronizing with node: 0%" forever. + if isWaitingRestore { + return + } + + if isPresented && !onlyConnect { + return + } + AppModel.sharedManager().removeDelegate(self) if onlyConnect { AppModel.sharedManager().refreshAddresses() - + var found = false if let controllers = self.navigationController?.viewControllers { - for vc in controllers { - if vc is WalletViewController { - found = true - self.navigationController?.popToViewController(vc, animated: true) - } + for vc in controllers where vc is WalletViewController { + found = true + self.navigationController?.popToViewController(vc, animated: true) } } - + if !found && !isPresented { isPresented = true - + onMainPage() - + if Settings.sharedManager().isNodeProtocolEnabled { BMToast.show(text: Localizable.shared.strings.wallet_connected_to_mobile_node) } } return } - - if isWaitingRestore { - return - } - - if isPresented { - return - } isPresented = true @@ -284,8 +288,8 @@ class OpenWalletProgressViewController: BaseViewController { leftViewController: menuViewController, rightViewController: nil) - sideMenuController.leftViewWidth = UIScreen.main.bounds.size.width - 60; - sideMenuController.leftViewPresentationStyle = LGSideMenuPresentationStyle.slideAbove; + sideMenuController.leftViewWidth = UIScreen.main.bounds.size.width - 60 + sideMenuController.leftViewPresentationStyle = LGSideMenuPresentationStyle.slideAbove sideMenuController.rootViewLayerShadowRadius = 0 sideMenuController.rootViewLayerShadowColor = UIColor.clear sideMenuController.leftViewLayerShadowRadius = 0 @@ -310,7 +314,7 @@ class OpenWalletProgressViewController: BaseViewController { self.restoreCompleted() } } - }) { (error, progress, time) in + }, progress: { (error, progress, time) in DispatchQueue.main.async { if let reason = error { self.alert(title: Localizable.shared.strings.error, message: reason.localizedDescription) { (_ ) in @@ -322,7 +326,7 @@ class OpenWalletProgressViewController: BaseViewController { else if let percent = progress { self.errorLabel.isHidden = true self.progressView.progress = percent - + if let remaining = time { self.progressValueLabel.text = Localizable.shared.strings.downloading + " " + "\(Int32(percent * 100))%" self.progressTimeValueLabel.text = remaining + Localizable.shared.strings.to_completion @@ -334,7 +338,7 @@ class OpenWalletProgressViewController: BaseViewController { } } } - } + }) } private func startCreateWallet() { @@ -416,7 +420,7 @@ class OpenWalletProgressViewController: BaseViewController { strongSelf.progressView.progress = 0 strongSelf.progressValueLabel.text = Localizable.shared.strings.restored + " \(0)%" } - + DispatchQueue.global(qos: .background).async { AppModel.sharedManager().restore(RestoreManager.shared.filePath.path) } @@ -424,9 +428,7 @@ class OpenWalletProgressViewController: BaseViewController { private func openNodeController() { let vc = TrustedNodeViewController(event: .change) - vc.completion = { [weak self] - obj in - + vc.completion = { [weak self] obj in if obj == true { AppModel.sharedManager().isConnecting = false @@ -516,6 +518,13 @@ extension OpenWalletProgressViewController : WalletModelDelegate { DispatchQueue.main.async { [weak self] in guard let strongSelf = self else { return } + // BEAM core often fires extra progress events at completion. Once we've + // already transitioned to the sync UI, ignore them — otherwise the text + // update below would overwrite "Synchronizing with node: 0%" back to + // "Restored 100%" (oldProgress is reset to 0 during the transition, + // so the next callback always passes the != check). + if strongSelf.stopRestore { return } + strongSelf.hideErrorIfOnline() strongSelf.progressView.progress = Float(Float(done)/Float(total)) @@ -644,8 +653,7 @@ extension OpenWalletProgressViewController : WalletModelDelegate { } func onWalletError(_ _error: Error) { - DispatchQueue.main.async { - [weak self] in + DispatchQueue.main.async { [weak self] in guard let strongSelf = self else { return } let error = _error as NSError @@ -658,10 +666,8 @@ extension OpenWalletProgressViewController : WalletModelDelegate { } else if !strongSelf.isPresented { if let controllers = strongSelf.navigationController?.viewControllers { - for vc in controllers { - if vc is TrustedNodeViewController { - return - } + for vc in controllers where vc is TrustedNodeViewController { + return } } strongSelf.alert(title: Localizable.shared.strings.error, message: error.localizedDescription, handler: { (_ ) in diff --git a/BeamWallet/ViewControllers/Login/PhraseViewController/Cells/CollectionButtonFooter.swift b/BeamWallet/ViewControllers/Login/PhraseViewController/Cells/CollectionButtonFooter.swift index 780e9639..109f70a6 100644 --- a/BeamWallet/ViewControllers/Login/PhraseViewController/Cells/CollectionButtonFooter.swift +++ b/BeamWallet/ViewControllers/Login/PhraseViewController/Cells/CollectionButtonFooter.swift @@ -38,7 +38,6 @@ class CollectionButtonFooter: UICollectionReusableView { btn2.isHidden = true case .display, .onlyDisplay: btn2.setTitle(Localizable.shared.strings.i_will_later, for: .normal) - break } if Settings.sharedManager().isDarkMode { diff --git a/BeamWallet/ViewControllers/Login/PhraseViewController/SeedPhraseViewController.swift b/BeamWallet/ViewControllers/Login/PhraseViewController/SeedPhraseViewController.swift index 11985408..a4697f7d 100644 --- a/BeamWallet/ViewControllers/Login/PhraseViewController/SeedPhraseViewController.swift +++ b/BeamWallet/ViewControllers/Login/PhraseViewController/SeedPhraseViewController.swift @@ -94,10 +94,8 @@ class SeedPhraseViewController: BaseViewController { if let index = words.firstIndex(of: word) { var added = false - for inWord in inputWords { - if inWord.index == index { - added = true - } + for inWord in inputWords where inWord.index == index { + added = true } if !added { @@ -148,18 +146,17 @@ class SeedPhraseViewController: BaseViewController { override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) - + + // swiftlint:disable:next notification_center_detachment NotificationCenter.default.removeObserver(self) } @objc private func didTakeScreenshot() { if event == .restore { var shouldDisplayAlert = false - for i in 0 ... confirmCountWords - 1 { - if inputWords[i].correct { - shouldDisplayAlert = true - break - } + for i in 0 ... confirmCountWords - 1 where inputWords[i].correct { + shouldDisplayAlert = true + break } if shouldDisplayAlert { alert(message: Localizable.shared.strings.seed_capture_warning) @@ -179,12 +176,12 @@ class SeedPhraseViewController: BaseViewController { } else { confirmAlert(title: Localizable.shared.strings.save_seed_title, message: Localizable.shared.strings.save_seed_info, cancelTitle: Localizable.shared.strings.cancel, confirmTitle: Localizable.shared.strings.done, cancelHandler: { _ in - - }) { _ in + + }, confirmHandler: { _ in let vc = SeedPhraseViewController(event: .confirm, words: self.words) vc.increaseSecutirty = self.increaseSecutirty self.pushViewController(vc: vc) - } + }) } } else if event == .confirm { @@ -281,10 +278,10 @@ class SeedPhraseViewController: BaseViewController { @objc private func onNavigationBack() { confirmAlert(title: Localizable.shared.strings.seed_back_title, message: Localizable.shared.strings.seed_back_text, cancelTitle: Localizable.shared.strings.cancel, confirmTitle: Localizable.shared.strings.generate, cancelHandler: { _ in - - }) { _ in + + }, confirmHandler: { _ in self.back() - } + }) } @objc private func handleLongPress(sender: UIGestureRecognizer) { diff --git a/BeamWallet/ViewControllers/Login/WellcomeViewController.swift b/BeamWallet/ViewControllers/Login/WellcomeViewController.swift index 0e354610..01d86794 100644 --- a/BeamWallet/ViewControllers/Login/WellcomeViewController.swift +++ b/BeamWallet/ViewControllers/Login/WellcomeViewController.swift @@ -51,7 +51,7 @@ class WellcomeViewController: BaseViewController { languageButton.setTitle(Settings.sharedManager().shortLanguageName(), for: .normal) } - //MARK: IBAction + // MARK: IBAction @IBAction func onRestoreWallet(sender :UIButton) { // AppModel.sharedManager().resetWallet(true) @@ -68,7 +68,7 @@ class WellcomeViewController: BaseViewController { @IBAction func onCreateWallet(sender :UIButton) { // AppModel.sharedManager().resetWallet(true) - AppModel.sharedManager().isRestoreFlow = false; + AppModel.sharedManager().isRestoreFlow = false pushViewController(vc: SeedPhraseViewController(event: .intro, words: nil)) } diff --git a/BeamWallet/ViewControllers/Main/Addresses/AddressTableView.swift b/BeamWallet/ViewControllers/Main/Addresses/AddressTableView.swift index abc84326..4ab0fcd3 100755 --- a/BeamWallet/ViewControllers/Main/Addresses/AddressTableView.swift +++ b/BeamWallet/ViewControllers/Main/Addresses/AddressTableView.swift @@ -51,9 +51,7 @@ class AddressTableView: UITableViewController { strongSelf.tableView.reloadData() } - viewModel.onDataDeleted = { [weak self] - indexPath, address in - + viewModel.onDataDeleted = { [weak self] indexPath, address in guard let strongSelf = self else { return } if let path = indexPath { diff --git a/BeamWallet/ViewControllers/Main/Addresses/AddressViewController.swift b/BeamWallet/ViewControllers/Main/Addresses/AddressViewController.swift index 532b9fea..85879843 100644 --- a/BeamWallet/ViewControllers/Main/Addresses/AddressViewController.swift +++ b/BeamWallet/ViewControllers/Main/Addresses/AddressViewController.swift @@ -51,26 +51,18 @@ class AddressViewController: BaseTableViewController { subscribeToUpdates() } - override func viewWillDisappear(_ animated: Bool) { - super.viewWillDisappear(animated) - } - private func subscribeToUpdates() { addressViewModel.onDataChanged = { [weak self] in self?.tableView.reloadData() } - addressViewModel.onDataDeleted = { [weak self] - indexPath, address in - + addressViewModel.onDataDeleted = { [weak self] _, address in AppModel.sharedManager().prepareDelete(address, removeTransactions: address.isNeedRemoveTransactions) self?.back() } - addressViewModel.transactionViewModel.onDataDeleted = { [weak self] - indexPath, transaction in - + addressViewModel.transactionViewModel.onDataDeleted = { [weak self] indexPath, transaction in if let path = indexPath { self?.tableView.performUpdate({ self?.tableView.deleteRows(at: [path], with: .left) @@ -80,9 +72,7 @@ class AddressViewController: BaseTableViewController { } } - addressViewModel.transactionViewModel.onDataUpdated = { [weak self] - indexPath, transaction in - + addressViewModel.transactionViewModel.onDataUpdated = { [weak self] indexPath, transaction in if let path = indexPath { self?.tableView.performUpdate({ self?.tableView.reloadRows(at: [path], with: .fade) diff --git a/BeamWallet/ViewControllers/Main/Addresses/EditAddressViewController.swift b/BeamWallet/ViewControllers/Main/Addresses/EditAddressViewController.swift index e82f67bd..61cef575 100644 --- a/BeamWallet/ViewControllers/Main/Addresses/EditAddressViewController.swift +++ b/BeamWallet/ViewControllers/Main/Addresses/EditAddressViewController.swift @@ -87,9 +87,7 @@ class EditAddressViewController: BaseTableViewController { tableView.register([AddressExpiresCell.self, BMMultiLinesCell.self, BMFieldCell.self, BMDetailCell.self, BMGroupedCell.self]) - viewModel.onDataDeleted = { [weak self] - indexPath, address in - + viewModel.onDataDeleted = { [weak self] _, address in AppModel.sharedManager().prepareDelete(address, removeTransactions: address.isNeedRemoveTransactions) self?.navigationController?.popViewControllers(viewsToPop: 2) diff --git a/BeamWallet/ViewControllers/Main/Addresses/ShowTokenViewController.swift b/BeamWallet/ViewControllers/Main/Addresses/ShowTokenViewController.swift index 15166511..d0fcce5f 100644 --- a/BeamWallet/ViewControllers/Main/Addresses/ShowTokenViewController.swift +++ b/BeamWallet/ViewControllers/Main/Addresses/ShowTokenViewController.swift @@ -79,10 +79,6 @@ class ShowTokenViewController: BaseTableViewController { buildItems() } - override func viewWillDisappear(_ animated: Bool) { - super.viewWillDisappear(animated) - } - @objc private func onCopy() { UIPasteboard.general.string = token ShowCopied(text: Localizable.shared.strings.address_copied) @@ -145,7 +141,7 @@ class ShowTokenViewController: BaseTableViewController { // } - //&& AppModel.sharedManager().checkIsOwnNode() + // && AppModel.sharedManager().checkIsOwnNode() if !params.address.isEmpty { items.append(BMMultiLineItem(title: "", detail: "", detailFont: nil, detailColor: nil)) diff --git a/BeamWallet/ViewControllers/Main/Assets/AssetDetailViewController.swift b/BeamWallet/ViewControllers/Main/Assets/AssetDetailViewController.swift index 01e2f856..d33eb3f7 100644 --- a/BeamWallet/ViewControllers/Main/Assets/AssetDetailViewController.swift +++ b/BeamWallet/ViewControllers/Main/Assets/AssetDetailViewController.swift @@ -94,9 +94,7 @@ class AssetDetailViewController: BaseTableViewController { } } - transactionViewModel.onDataDeleted = { [weak self] - indexPath, transaction in - + transactionViewModel.onDataDeleted = { [weak self] indexPath, transaction in guard let strongSelf = self else { return } if strongSelf.transactionViewModel.transactions.count == 0 { @@ -114,9 +112,7 @@ class AssetDetailViewController: BaseTableViewController { } } - transactionViewModel.onDataUpdated = { [weak self] - indexPath, transaction in - + transactionViewModel.onDataUpdated = { [weak self] indexPath, transaction in if let path = indexPath { self?.tableView.performUpdate({ self?.tableView.reloadRows(at: [path], with: .fade) @@ -396,7 +392,7 @@ extension AssetDetailViewController: UIContextMenuInteractionDelegate { return UIContextMenuConfiguration(identifier: indexPath as NSCopying, previewProvider: { return detailVC - }, actionProvider: { suggestedActions in + }, actionProvider: { _ in return self.makeContextMenu(transaction: self.transactionViewModel.transactions[indexPath.row]) }) } @@ -410,45 +406,45 @@ extension AssetDetailViewController: UIContextMenuInteractionDelegate { let viewModel = DetailTransactionViewModel(transaction: transaction) if transaction.canSaveContact() { - let action1 = UIAction(title: Localizable.shared.strings.save_contact_title, image: nil) { action in + let action1 = UIAction(title: Localizable.shared.strings.save_contact_title, image: nil) { _ in viewModel.saveContact() } array.append(action1) } - let action1 = UIAction(title: Localizable.shared.strings.share_details, image: nil) { action in + let action1 = UIAction(title: Localizable.shared.strings.share_details, image: nil) { _ in viewModel.share() } array.append(action1) - let action2 = UIAction(title: Localizable.shared.strings.copy_details, image: nil) { action in + let action2 = UIAction(title: Localizable.shared.strings.copy_details, image: nil) { _ in viewModel.copyDetails() } array.append(action2) if !transaction.isIncome && !transaction.isDapps { - let action3 = UIAction(title: Localizable.shared.strings.repeat_transaction, image: nil) { action in + let action3 = UIAction(title: Localizable.shared.strings.repeat_transaction, image: nil) { _ in viewModel.repeatTransation(transaction: viewModel.transaction!) } array.append(action3) } if transaction.canCancel && !transaction.isDapps { - let action4 = UIAction(title: Localizable.shared.strings.cancel_transaction, image: nil) { action in + let action4 = UIAction(title: Localizable.shared.strings.cancel_transaction, image: nil) { _ in viewModel.cancelTransation(indexPath: nil) } array.append(action4) } if transaction.canDelete { - let action5 = UIAction(title: Localizable.shared.strings.delete_transaction, image: nil) { action in + let action5 = UIAction(title: Localizable.shared.strings.delete_transaction, image: nil) { _ in viewModel.deleteTransationNew(indexPath: nil) } array.append(action5) } if transaction.isDapps { - let action6 = UIAction(title: Localizable.shared.strings.open_dapp, image: nil) { action in + let action6 = UIAction(title: Localizable.shared.strings.open_dapp, image: nil) { _ in viewModel.openDapp() } array.append(action6) diff --git a/BeamWallet/ViewControllers/Main/Assets/AssetsViewController.swift b/BeamWallet/ViewControllers/Main/Assets/AssetsViewController.swift index 959fbdb0..0d22c1a0 100644 --- a/BeamWallet/ViewControllers/Main/Assets/AssetsViewController.swift +++ b/BeamWallet/ViewControllers/Main/Assets/AssetsViewController.swift @@ -47,10 +47,6 @@ class AssetsViewController: BaseTableViewController { subscribeToUpdates() } - - override func viewWillDisappear(_ animated: Bool) { - super.viewWillDisappear(animated) - } deinit { Settings.sharedManager().removeDelegate(self) diff --git a/BeamWallet/ViewControllers/Main/DAO/DAOConfirmViewController.swift b/BeamWallet/ViewControllers/Main/DAO/DAOConfirmViewController.swift index d41d2a8a..c7a319aa 100644 --- a/BeamWallet/ViewControllers/Main/DAO/DAOConfirmViewController.swift +++ b/BeamWallet/ViewControllers/Main/DAO/DAOConfirmViewController.swift @@ -54,7 +54,7 @@ class DAOConfirmViewController: BaseViewController { @IBOutlet private weak var passField:BMField! @IBOutlet private weak var viewWidth:NSLayoutConstraint! - private var hintText:String? = nil + private var hintText:String? override func viewDidLoad() { super.viewDidLoad() diff --git a/BeamWallet/ViewControllers/Main/DAO/DAOViewController.swift b/BeamWallet/ViewControllers/Main/DAO/DAOViewController.swift index 29f6feec..5c0a5665 100644 --- a/BeamWallet/ViewControllers/Main/DAO/DAOViewController.swift +++ b/BeamWallet/ViewControllers/Main/DAO/DAOViewController.swift @@ -26,7 +26,7 @@ import SafariServices @objc var style = WBStyle() - var resultObject:XWVScriptObject? = nil + var resultObject:XWVScriptObject? @objc public func callWalletApi(_ json:NSString) { print("\(json)") @@ -45,7 +45,7 @@ class DAOViewController: BaseViewController, WKNavigationDelegate, WKScriptMessa private var loadingImage = UIImageView() private var loadingLabel = UILabel() - @objc private var channel:XWVChannel? = nil + @objc private var channel:XWVChannel? @objc private var beam:WBBEAM? @objc public var app:BMApp! @@ -95,7 +95,7 @@ class DAOViewController: BaseViewController, WKNavigationDelegate, WKScriptMessa let logSource = "function captureLog(msg) { window.webkit.messageHandlers.logHandler.postMessage(msg); } window.console.log = captureLog;" let logScript = WKUserScript(source: logSource, injectionTime: .atDocumentEnd, forMainFrameOnly: false) - let jsLogScript2 = "console.log = (function(oriLogFunc){ return function(str) { window.webkit.messageHandlers.log.postMessage(str); oriLogFunc.call(console,str);} })(console.log);"; + let jsLogScript2 = "console.log = (function(oriLogFunc){ return function(str) { window.webkit.messageHandlers.log.postMessage(str); oriLogFunc.call(console,str);} })(console.log);" webView = WKWebView(frame: self.view.bounds, configuration: configuration) webView?.navigationDelegate = self diff --git a/BeamWallet/ViewControllers/Main/DAO/JS/XWVBindingObject.swift b/BeamWallet/ViewControllers/Main/DAO/JS/XWVBindingObject.swift index 12c5d6ca..447f9161 100644 --- a/BeamWallet/ViewControllers/Main/DAO/JS/XWVBindingObject.swift +++ b/BeamWallet/ViewControllers/Main/DAO/JS/XWVBindingObject.swift @@ -97,7 +97,7 @@ final class XWVBindingObject : XWVScriptObject { var args = arguments.map(wrapScriptObject) if plugin is XWVScripting && name.isEmpty && selector == #selector(XWVScripting.invokeDefaultMethod(withArguments:)) { - args = [args]; + args = [args] } _ = performSelector(selector, with: args, waitUntilDone: false) } diff --git a/BeamWallet/ViewControllers/Main/DAO/JS/XWVChannel.swift b/BeamWallet/ViewControllers/Main/DAO/JS/XWVChannel.swift index 1c9d6930..334f0bdc 100644 --- a/BeamWallet/ViewControllers/Main/DAO/JS/XWVChannel.swift +++ b/BeamWallet/ViewControllers/Main/DAO/JS/XWVChannel.swift @@ -98,9 +98,9 @@ public class XWVChannel : NSObject, WKScriptMessageHandler { public func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { // A workaround for crash when postMessage(undefined) - //guard unsafeBitCast(message.body, to: OpaquePointer!.self) != nil else { return } + // guard unsafeBitCast(message.body, to: OpaquePointer!.self) != nil else { return } - //TODO: logs + // TODO: logs // print("msg:") // print(message.body) diff --git a/BeamWallet/ViewControllers/Main/DAO/JS/XWVHttpServer.swift b/BeamWallet/ViewControllers/Main/DAO/JS/XWVHttpServer.swift index f2581799..8954b344 100644 --- a/BeamWallet/ViewControllers/Main/DAO/JS/XWVHttpServer.swift +++ b/BeamWallet/ViewControllers/Main/DAO/JS/XWVHttpServer.swift @@ -169,7 +169,7 @@ extension XWVHttpServer : XWVHttpConnectionDelegate { var headers: [String: String] = ["Date": dateFormatter.string(from: Date())] var statusCode = 500 - var fileURL: URL? = nil + var fileURL: URL? if request == nil { // Bad request statusCode = 400 diff --git a/BeamWallet/ViewControllers/Main/DAO/JS/XWVInvocation.swift b/BeamWallet/ViewControllers/Main/DAO/JS/XWVInvocation.swift index 4587eb41..60dd50bb 100644 --- a/BeamWallet/ViewControllers/Main/DAO/JS/XWVInvocation.swift +++ b/BeamWallet/ViewControllers/Main/DAO/JS/XWVInvocation.swift @@ -292,9 +292,9 @@ public class XWVInvocation { } // Syntactic sugar for calling method - public subscript (selector: Selector) -> (Any?...)->Any? { + public subscript (selector: Selector) -> (Any?...) -> Any? { return { - (args: Any?...)->Any? in + (args: Any?...) -> Any? in self.call(selector, with: args) } } @@ -347,7 +347,7 @@ extension XWVInvocation { return nil } - var setter: Selector? = nil + var setter: Selector? var attr = property_copyAttributeValue(property, "R") if attr == nil { attr = property_copyAttributeValue(property, "S") diff --git a/BeamWallet/ViewControllers/Main/DAO/JS/XWVJson.swift b/BeamWallet/ViewControllers/Main/DAO/JS/XWVJson.swift index cfe637c8..f5a05f2b 100644 --- a/BeamWallet/ViewControllers/Main/DAO/JS/XWVJson.swift +++ b/BeamWallet/ViewControllers/Main/DAO/JS/XWVJson.swift @@ -94,9 +94,9 @@ public func jsonify(_ value: Any?) -> String? { return n.boolValue.description } return n.stringValue - case let a as Array: + case let a as [Any?]: return jsonify(a) - case let d as Dictionary: + case let d as [String: Any?]: return jsonify(d) case let s as CustomJSONStringable: return s.jsonString diff --git a/BeamWallet/ViewControllers/Main/DAO/JS/XWVLogging.swift b/BeamWallet/ViewControllers/Main/DAO/JS/XWVLogging.swift index b2cb4423..e6a7fb39 100644 --- a/BeamWallet/ViewControllers/Main/DAO/JS/XWVLogging.swift +++ b/BeamWallet/ViewControllers/Main/DAO/JS/XWVLogging.swift @@ -112,7 +112,7 @@ public class XWVLogging : XWVScripting { @objc public func invokeDefaultMethod(withArguments args: [Any]!) -> Any! { guard args.count > 0 else { return nil } let message = args[0] as? String ?? "\(args[0])" - var level: Level? = nil + var level: Level? if args.count > 1, let num = args[1] as? Int { if 3 <= num && num <= 7 { level = Level(rawValue: Int32(num)) @@ -130,7 +130,7 @@ func log(_ message: String, level: XWVLogging.Level? = nil) { logger.log(message, level: level) } -func die(_ message: @autoclosure ()->String, file: StaticString = #file, line: UInt = #line) -> Never { +func die(_ message: @autoclosure () -> String, file: StaticString = #file, line: UInt = #line) -> Never { logger.log(message(), level: .Alert) fatalError(message(), file: file, line: line) } diff --git a/BeamWallet/ViewControllers/Main/DAO/JS/XWVMetaObject.swift b/BeamWallet/ViewControllers/Main/DAO/JS/XWVMetaObject.swift index 0027b39f..dcd1fe36 100644 --- a/BeamWallet/ViewControllers/Main/DAO/JS/XWVMetaObject.swift +++ b/BeamWallet/ViewControllers/Main/DAO/JS/XWVMetaObject.swift @@ -111,7 +111,7 @@ class XWVMetaObject { return true } - case .Property(_, _): + case .Property: if let cls = plugin as? XWVScripting.Type { if let isExcluded = cls.isKeyExcluded(fromScript:), name.withCString(isExcluded) { return true @@ -140,7 +140,7 @@ class XWVMetaObject { } } - private func enumerate(excluding selectors: Set, callback: (String, Member)->Bool) -> Bool { + private func enumerate(excluding selectors: Set, callback: (String, Member) -> Bool) -> Bool { var known = selectors var count: UInt32 = 0 @@ -163,7 +163,7 @@ class XWVMetaObject { known.insert(getter) // get setter if readwrite - var setter: Selector? = nil + var setter: Selector? var attr = property_copyAttributeValue(propertyList[i], "R") if attr == nil { attr = property_copyAttributeValue(propertyList[i], "S") @@ -219,7 +219,7 @@ class XWVMetaObject { extension XWVMetaObject: Collection { typealias Element = (key: String, value: Member) typealias Index = DictionaryIndex - typealias SubSequence = Slice> + typealias SubSequence = Slice<[String: Member]> var startIndex: Index { return members.startIndex diff --git a/BeamWallet/ViewControllers/Main/DAO/JS/XWVObject.swift b/BeamWallet/ViewControllers/Main/DAO/JS/XWVObject.swift index b3c95c65..d257cc75 100644 --- a/BeamWallet/ViewControllers/Main/DAO/JS/XWVObject.swift +++ b/BeamWallet/ViewControllers/Main/DAO/JS/XWVObject.swift @@ -85,7 +85,7 @@ public class XWVObject : NSObject { return } webView.asyncEvaluateJavaScript(scriptForRetaining(expression)) { - [weak self](result: Any?, error: Error?)->Void in + [weak self](result: Any?, error: Error?)in if let error = error { completionHandler(nil, error) } else if let result = result { diff --git a/BeamWallet/ViewControllers/Main/DAO/JS/XWebView.swift b/BeamWallet/ViewControllers/Main/DAO/JS/XWebView.swift index e852aa93..f460e70b 100644 --- a/BeamWallet/ViewControllers/Main/DAO/JS/XWebView.swift +++ b/BeamWallet/ViewControllers/Main/DAO/JS/XWebView.swift @@ -61,7 +61,7 @@ extension WKWebView { if Thread.isMainThread { evaluateJavaScript(script, completionHandler: handler) } else { - DispatchQueue.main.async() { + DispatchQueue.main.async { [weak self] in self?.evaluateJavaScript(script, completionHandler: handler) } @@ -76,7 +76,7 @@ extension WKWebView { let timeout = 3.0 if Thread.isMainThread { evaluateJavaScript(script) { - (obj: Any?, err: Error?)->Void in + (obj: Any?, err: Error?)in result = obj error = err done = true @@ -89,10 +89,10 @@ extension WKWebView { } } else { let condition: NSCondition = NSCondition() - DispatchQueue.main.async() { + DispatchQueue.main.async { [weak self] in self?.evaluateJavaScript(script) { - (obj: Any?, err: Error?)->Void in + (obj: Any?, err: Error?)in condition.lock() result = obj error = err diff --git a/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift b/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift index 655b6d28..432cec52 100644 --- a/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift +++ b/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift @@ -177,7 +177,7 @@ extension LeftMenuViewController: UITableViewDelegate, UITableViewDataSource { cell?.textLabel?.highlightedTextColor = UIColor.main.brightTeal cell?.textLabel?.font = RegularFont(size: 17) - let countView = UIView(frame: CGRect(x: 39, y: 13, width: 12, height: 12)); + let countView = UIView(frame: CGRect(x: 39, y: 13, width: 12, height: 12)) countView.layer.cornerRadius = 6 countView.backgroundColor = UIColor.main.green countView.glow() @@ -205,11 +205,11 @@ extension LeftMenuViewController: UITableViewDelegate, UITableViewDataSource { let selectedBackgroundView = UIImageView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 60)) - selectedBackgroundView.image = MenuSelectedBackground(); + selectedBackgroundView.image = MenuSelectedBackground() selectedBackgroundView.tag = 12 let selectedBackgroundView1 = UIImageView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 60)) - selectedBackgroundView1.image = MenuSelectedBackground(); + selectedBackgroundView1.image = MenuSelectedBackground() cell?.contentView.viewWithTag(12)?.removeFromSuperview() diff --git a/BeamWallet/ViewControllers/Main/Notifications/NotificationViewModel.swift b/BeamWallet/ViewControllers/Main/Notifications/NotificationViewModel.swift index 433838ab..99fdabf7 100644 --- a/BeamWallet/ViewControllers/Main/Notifications/NotificationViewModel.swift +++ b/BeamWallet/ViewControllers/Main/Notifications/NotificationViewModel.swift @@ -59,7 +59,7 @@ class NotificationViewModel: NSObject { public func trailingSwipeActions(indexPath:IndexPath) -> UISwipeActionsConfiguration? { - let delete = UIContextualAction(style: .normal, title: nil) { (action, view, handler) in + let delete = UIContextualAction(style: .normal, title: nil) { (_, _, handler) in handler(true) self.deleteNotification(indexPath: indexPath) } @@ -86,7 +86,7 @@ class NotificationViewModel: NSObject { } } -//MARK: - Delegate +// MARK: - Delegate extension NotificationViewModel : WalletModelDelegate { diff --git a/BeamWallet/ViewControllers/Main/Notifications/NotificationsViewController.swift b/BeamWallet/ViewControllers/Main/Notifications/NotificationsViewController.swift index 7fe3017e..1ca7872b 100644 --- a/BeamWallet/ViewControllers/Main/Notifications/NotificationsViewController.swift +++ b/BeamWallet/ViewControllers/Main/Notifications/NotificationsViewController.swift @@ -106,9 +106,7 @@ class NotificationsViewController: BaseTableViewController { } } - viewModel.onDataDeleted = { [weak self] - indexPath, notification in - + viewModel.onDataDeleted = { [weak self] indexPath, notification in guard let strongSelf = self else { return } if strongSelf.viewModel.unreads.count == 0 && strongSelf.viewModel.reads.count == 0 { diff --git a/BeamWallet/ViewControllers/Main/Passwords/CreateWalletPasswordViewController.swift b/BeamWallet/ViewControllers/Main/Passwords/CreateWalletPasswordViewController.swift index c13e5551..71aab24f 100644 --- a/BeamWallet/ViewControllers/Main/Passwords/CreateWalletPasswordViewController.swift +++ b/BeamWallet/ViewControllers/Main/Passwords/CreateWalletPasswordViewController.swift @@ -127,13 +127,13 @@ class CreateWalletPasswordViewController: BaseWizardViewController { } else { confirmAlert(title: Localizable.shared.strings.return_to_seed_title, message: Localizable.shared.strings.return_to_seed_info, cancelTitle: Localizable.shared.strings.cancel, confirmTitle: Localizable.shared.strings.retur, cancelHandler: { _ in - - }) { _ in + + }, confirmHandler: { _ in let count = OnboardManager.shared.isSkipedSeed() ? 2 : 3 let viewControllers = self.navigationController?.viewControllers let vc = viewControllers![(viewControllers?.count)! - count] self.navigationController?.popToViewController(vc, animated: true) - } + }) } } @@ -167,14 +167,14 @@ class CreateWalletPasswordViewController: BaseWizardViewController { confirmAlert(title: title, message: message, cancelTitle: Localizable.shared.strings.dont_use, confirmTitle: Localizable.shared.strings.enable, cancelHandler: { _ in self.goNext(pass: pass) - + Settings.sharedManager().isEnableBiometric = false - - }) { _ in + + }, confirmHandler: { _ in self.goNext(pass: pass) - + Settings.sharedManager().isEnableBiometric = true - } + }) } else { goNext(pass: pass) diff --git a/BeamWallet/ViewControllers/Main/Passwords/UnlockPasswordPopover.swift b/BeamWallet/ViewControllers/Main/Passwords/UnlockPasswordPopover.swift index 747d04c8..3728e52d 100644 --- a/BeamWallet/ViewControllers/Main/Passwords/UnlockPasswordPopover.swift +++ b/BeamWallet/ViewControllers/Main/Passwords/UnlockPasswordPopover.swift @@ -89,46 +89,46 @@ class UnlockPasswordPopover: BaseViewController { private func getTextForFaceID() -> String { switch event { - case .transaction: - return Localizable.shared.strings.confirm_transaction_2 - case .node: - return Localizable.shared.strings.change_node_text_1 - case .settings: - return Localizable.shared.strings.change_settings_text_1 - case .clear_wallet: - return String.empty() - case .none: - return String.empty() + case .transaction: + return Localizable.shared.strings.confirm_transaction_2 + case .node: + return Localizable.shared.strings.change_node_text_1 + case .settings: + return Localizable.shared.strings.change_settings_text_1 + case .clear_wallet: + return String.empty() + case .none: + return String.empty() } } - + private func getTextForTouchID() -> String { switch event { - case .transaction: - return Localizable.shared.strings.confirm_transaction_1 - case .node: - return Localizable.shared.strings.change_node_text_2 - case .settings: - return Localizable.shared.strings.change_settings_text_2 - case .clear_wallet: - return String.empty() - case .none: - return String.empty() + case .transaction: + return Localizable.shared.strings.confirm_transaction_1 + case .node: + return Localizable.shared.strings.change_node_text_2 + case .settings: + return Localizable.shared.strings.change_settings_text_2 + case .clear_wallet: + return String.empty() + case .none: + return String.empty() } } - + private func getTextForPassword() -> String { switch event { - case .transaction: - return Localizable.shared.strings.confirm_transaction_3 - case .node: - return Localizable.shared.strings.change_node_text_3 - case .settings: - return Localizable.shared.strings.change_settings_text_3 - case .clear_wallet: - return Localizable.shared.strings.clear_wallet_password - case .none: - return String.empty() + case .transaction: + return Localizable.shared.strings.confirm_transaction_3 + case .node: + return Localizable.shared.strings.change_node_text_3 + case .settings: + return Localizable.shared.strings.change_settings_text_3 + case .clear_wallet: + return Localizable.shared.strings.clear_wallet_password + case .none: + return String.empty() } } diff --git a/BeamWallet/ViewControllers/Main/QRCode/PreviewQRViewController.swift b/BeamWallet/ViewControllers/Main/QRCode/PreviewQRViewController.swift index 6f3ad1d9..5d19a23c 100644 --- a/BeamWallet/ViewControllers/Main/QRCode/PreviewQRViewController.swift +++ b/BeamWallet/ViewControllers/Main/QRCode/PreviewQRViewController.swift @@ -112,7 +112,7 @@ class PreviewQRViewController: BaseViewController { if let image = codeView.snapshot(), let topVC = UIApplication.getTopMostViewController() { let activityItem: [AnyObject] = [image] let vc = UIActivityViewController(activityItems: activityItem, applicationActivities: []) - vc.completionWithItemsHandler = {(activityType: UIActivity.ActivityType?, completed: Bool, returnedItems: [Any]?, error: Error?) in + vc.completionWithItemsHandler = {(_: UIActivity.ActivityType?, completed: Bool, _: [Any]?, _: Error?) in if completed && self.fromMore { self.back() @@ -138,13 +138,13 @@ class PreviewQRViewController: BaseViewController { let action1 = UIPreviewAction(title: Localizable.shared.strings.share_qr_code, style: .default, - handler: { previewAction, viewController in + handler: { _, _ in self.onShare() }) let action2 = UIPreviewAction(title: Localizable.shared.strings.copy_address, style: .default, - handler: { previewAction, viewController in + handler: { _, _ in self.onCopy() }) diff --git a/BeamWallet/ViewControllers/Main/QRCode/QRCodeSmallViewController.swift b/BeamWallet/ViewControllers/Main/QRCode/QRCodeSmallViewController.swift index c79d6e17..6d7d122c 100644 --- a/BeamWallet/ViewControllers/Main/QRCode/QRCodeSmallViewController.swift +++ b/BeamWallet/ViewControllers/Main/QRCode/QRCodeSmallViewController.swift @@ -84,15 +84,11 @@ class QRCodeSmallViewController: BaseViewController { addSwipeToDismiss() } - override func viewDidLayoutSubviews() { - super.viewDidLayoutSubviews() - } - @IBAction func onShare(sender :UIButton) { if let image = codeConentView.snapshot() { let activityItem: [AnyObject] = [image] let vc = UIActivityViewController(activityItems: activityItem, applicationActivities: []) - vc.completionWithItemsHandler = {(activityType: UIActivity.ActivityType?, completed: Bool, returnedItems: [Any]?, error: Error?) in + vc.completionWithItemsHandler = {(activityType: UIActivity.ActivityType?, completed: Bool, _: [Any]?, _: Error?) in if completed { self.dismiss(animated: true, completion: { if activityType == UIActivity.ActivityType.copyToPasteboard { diff --git a/BeamWallet/ViewControllers/Main/QRCode/QRScannerViewController.swift b/BeamWallet/ViewControllers/Main/QRCode/QRScannerViewController.swift index d62cbdc6..1ada6438 100644 --- a/BeamWallet/ViewControllers/Main/QRCode/QRScannerViewController.swift +++ b/BeamWallet/ViewControllers/Main/QRCode/QRScannerViewController.swift @@ -142,7 +142,7 @@ class QRScannerViewController: BaseViewController { } -//MARK: - AVCaptureMetadataOutputObjectsDelegate +// MARK: - AVCaptureMetadataOutputObjectsDelegate extension QRScannerViewController : AVCaptureMetadataOutputObjectsDelegate { @@ -171,7 +171,7 @@ extension QRScannerViewController : AVCaptureMetadataOutputObjectsDelegate { { AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) - scannedValue = code; + scannedValue = code print(scannedValue) @@ -283,7 +283,7 @@ extension QRScannerViewController : AVCaptureMetadataOutputObjectsDelegate { } -//MARK: - Permissions +// MARK: - Permissions extension QRScannerViewController { @@ -315,13 +315,13 @@ extension QRScannerViewController { } private func camDenied() { - self.confirmAlert(title: String.empty(), message: Localizable.shared.strings.camera_denied_text, cancelTitle: Localizable.shared.strings.cancel, confirmTitle: Localizable.shared.strings.open_settings, cancelHandler: { (_ ) in - - }) { (_ ) in + self.confirmAlert(title: String.empty(), message: Localizable.shared.strings.camera_denied_text, cancelTitle: Localizable.shared.strings.cancel, confirmTitle: Localizable.shared.strings.open_settings, cancelHandler: { _ in + + }, confirmHandler: { _ in UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!, options: [:], completionHandler: { (_ ) in self.back() }) - } + }) } } @@ -340,7 +340,7 @@ extension QRScannerViewController: UIImagePickerControllerDelegate { picker.dismiss(animated: true) { guard let image = info[.originalImage] as? UIImage else { - return; + return } if let features = self.detectQRCode(image) { diff --git a/BeamWallet/ViewControllers/Main/QRCode/QRViewController.swift b/BeamWallet/ViewControllers/Main/QRCode/QRViewController.swift index 720c9aac..7860d55d 100644 --- a/BeamWallet/ViewControllers/Main/QRCode/QRViewController.swift +++ b/BeamWallet/ViewControllers/Main/QRCode/QRViewController.swift @@ -82,12 +82,12 @@ class QRViewController: BaseViewController { amountTitleLabel.text = Localizable.shared.strings.requested_amount.uppercased() infoLabel.text = Localizable.shared.strings.send_qr_secure - //+ "\n\n" + Localizable.shared.strings.receive_notice + // + "\n\n" + Localizable.shared.strings.receive_notice addressTitleLabel.text = Localizable.shared.strings.address.uppercased() if isToken { - addressLabel.text = "token"//address.token + addressLabel.text = "token"// address.token } else { if let display = address.displayAddress { @@ -152,7 +152,7 @@ class QRViewController: BaseViewController { if let image = codeConentView.snapshot() { let activityItem: [AnyObject] = [image] let vc = UIActivityViewController(activityItems: activityItem, applicationActivities: []) - vc.completionWithItemsHandler = {(activityType: UIActivity.ActivityType?, completed: Bool, returnedItems: [Any]?, error: Error?) in + vc.completionWithItemsHandler = {(activityType: UIActivity.ActivityType?, completed: Bool, _: [Any]?, _: Error?) in if completed { self.dismiss(animated: true, completion: { if activityType == UIActivity.ActivityType.copyToPasteboard { diff --git a/BeamWallet/ViewControllers/Main/Settings/Cells/NodeCell.swift b/BeamWallet/ViewControllers/Main/Settings/Cells/NodeCell.swift index bff676cb..0d7440ae 100644 --- a/BeamWallet/ViewControllers/Main/Settings/Cells/NodeCell.swift +++ b/BeamWallet/ViewControllers/Main/Settings/Cells/NodeCell.swift @@ -31,8 +31,8 @@ class NodeCell: UITableViewCell { super.awakeFromNib() if Settings.sharedManager().isDarkMode { - nameLabel.textColor = UIColor.main.steel; - hintLabel.textColor = UIColor.main.steel; + nameLabel.textColor = UIColor.main.steel + hintLabel.textColor = UIColor.main.steel } selectionStyle = .none diff --git a/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift b/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift index 1488b242..2bfa757b 100644 --- a/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift +++ b/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift @@ -160,8 +160,8 @@ class SelectNodeViewController: BaseTableViewController { leftViewController: menuViewController, rightViewController: nil) - sideMenuController.leftViewWidth = UIScreen.main.bounds.size.width - 60; - sideMenuController.leftViewPresentationStyle = LGSideMenuPresentationStyle.slideAbove; + sideMenuController.leftViewWidth = UIScreen.main.bounds.size.width - 60 + sideMenuController.leftViewPresentationStyle = LGSideMenuPresentationStyle.slideAbove sideMenuController.rootViewLayerShadowRadius = 0 sideMenuController.rootViewLayerShadowColor = UIColor.clear sideMenuController.leftViewLayerShadowRadius = 0 @@ -210,7 +210,7 @@ class SelectNodeViewController: BaseTableViewController { AppModel.sharedManager().enableBodyRequests(false) } Settings.sharedManager().connectToRandomNode = true - Settings.sharedManager().nodeAddress = AppModel.chooseRandomNode(); + Settings.sharedManager().nodeAddress = AppModel.chooseRandomNode() AppModel.sharedManager().changeNodeAddress() if isCreateWallet { @@ -227,7 +227,7 @@ class SelectNodeViewController: BaseTableViewController { Settings.sharedManager().connectToRandomNode = true Settings.sharedManager().isNodeProtocolEnabled = true - Settings.sharedManager().nodeAddress = AppModel.chooseRandomNode(); + Settings.sharedManager().nodeAddress = AppModel.chooseRandomNode() AppModel.sharedManager().changeNodeAddress() AppModel.sharedManager().enableBodyRequests(true) @@ -423,7 +423,7 @@ extension SelectNodeViewController : UITableViewDelegate { } private func onNextSelected(indexPath: IndexPath) { - for (index, _) in items.enumerated() { + for index in items.indices { items[index].selected = false } diff --git a/BeamWallet/ViewControllers/Main/Settings/SettingsViewController.swift b/BeamWallet/ViewControllers/Main/Settings/SettingsViewController.swift index df507225..07ad7c71 100644 --- a/BeamWallet/ViewControllers/Main/Settings/SettingsViewController.swift +++ b/BeamWallet/ViewControllers/Main/Settings/SettingsViewController.swift @@ -77,8 +77,7 @@ class SettingsViewController: BaseTableViewController { searchView.y = 12 searchView.searchField.placeholder = Localizable.shared.strings.search_settings - searchView.onSearchTextChanged = { - [weak self] text in + searchView.onSearchTextChanged = { [weak self] text in guard let strongSelf = self else { return } if !text.isEmpty { strongSelf.tableView.sectionHeaderHeight = 5 @@ -92,8 +91,7 @@ class SettingsViewController: BaseTableViewController { } strongSelf.viewModel.searchString = text } - searchView.onCancelSearch = { - [weak self] in + searchView.onCancelSearch = { [weak self] in guard let strongSelf = self else { return } strongSelf.tableView.sectionHeaderHeight = 15 strongSelf.tableView.sectionFooterHeight = 15 @@ -123,10 +121,6 @@ class SettingsViewController: BaseTableViewController { } } - override func viewWillDisappear(_ animated: Bool) { - super.viewWillDisappear(animated) - } - override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() @@ -267,9 +261,7 @@ extension SettingsViewController : SettingsCellDelegate { if value == false && item.type == .ask_password { let vc = UnlockPasswordPopover(event: .settings) - vc.completion = { [weak self] - obj in - + vc.completion = { [weak self] obj in if obj == false { item.isSwitch = true @@ -286,9 +278,7 @@ extension SettingsViewController : SettingsCellDelegate { } else if value == true && item.type == .ask_password { let vc = UnlockPasswordPopover(event: .settings) - vc.completion = { [weak self] - obj in - + vc.completion = { [weak self] obj in if obj == false { item.isSwitch = false @@ -305,9 +295,7 @@ extension SettingsViewController : SettingsCellDelegate { } else if value == false && item.type == .enable_bio { let vc = UnlockPasswordPopover(event: .settings, allowBiometric: false) - vc.completion = { - obj in - + vc.completion = { obj in if obj == false { item.isSwitch = true @@ -337,13 +325,13 @@ extension SettingsViewController : SettingsCellDelegate { if(value) { - Settings.sharedManager().nodeAddress = AppModel.chooseRandomNode(); + Settings.sharedManager().nodeAddress = AppModel.chooseRandomNode() AppModel.sharedManager().changeNodeAddress() viewModel.items[0][1].detail = Settings.sharedManager().nodeAddress } else if Settings.sharedManager().customNode().isEmpty == false { - Settings.sharedManager().nodeAddress = Settings.sharedManager().customNode(); + Settings.sharedManager().nodeAddress = Settings.sharedManager().customNode() AppModel.sharedManager().changeNodeAddress() viewModel.items[0][1].detail = Settings.sharedManager().nodeAddress diff --git a/BeamWallet/ViewControllers/Main/Wallet/Cells/OnboardCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Cells/OnboardCell.swift index cf630421..c9d9e098 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Cells/OnboardCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Cells/OnboardCell.swift @@ -67,15 +67,15 @@ class OnboardCell: UITableViewCell { } } - @IBAction private func onClose (sender :UIButton) { + @IBAction private func onClose(sender :UIButton) { self.delegate?.onClickCloseFaucet(cell:self) } - @IBAction private func onVerefication (sender :UIButton) { + @IBAction private func onVerefication(sender :UIButton) { self.delegate?.onClickMakeSecure(cell:self) } - @IBAction private func onReceive (sender :UIButton) { + @IBAction private func onReceive(sender :UIButton) { self.delegate?.onClickReceiveFaucet(cell: self) } } diff --git a/BeamWallet/ViewControllers/Main/Wallet/Cells/WalletStatusCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Cells/WalletStatusCell.swift index f6fbf241..deff3911 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Cells/WalletStatusCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Cells/WalletStatusCell.swift @@ -35,10 +35,6 @@ class WalletStatusCell: BaseCell { selectionStyle = .none } - - override func setSelected(_ selected: Bool, animated: Bool) { - super.setSelected(selected, animated: animated) - } @IBAction func onReceived(sender :UIButton) { self.delegate?.onClickReceived() diff --git a/BeamWallet/ViewControllers/Main/Wallet/Cells/WalletTransactionCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Cells/WalletTransactionCell.swift index 8c9f5fd9..af577da7 100755 --- a/BeamWallet/ViewControllers/Main/Wallet/Cells/WalletTransactionCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Cells/WalletTransactionCell.swift @@ -42,13 +42,6 @@ class WalletTransactionCell: UITableViewCell { selectionStyle = .none } - - override func layoutSubviews() { - super.layoutSubviews() - -// assetIcon2.x = 20 -// assetIcon3.x = 40 - } } extension WalletTransactionCell: Configurable { diff --git a/BeamWallet/ViewControllers/Main/Wallet/MaxPrivacyDetail/MaxPrivacyDetailViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/MaxPrivacyDetail/MaxPrivacyDetailViewController.swift index a60e0bc0..bdb708a5 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/MaxPrivacyDetail/MaxPrivacyDetailViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/MaxPrivacyDetail/MaxPrivacyDetailViewController.swift @@ -38,8 +38,7 @@ class MaxPrivacyDetailViewController: BaseTableViewController { tableView.delegate = self tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: 320, height: 10)) - viewModel.onDataChanged = { - [weak self] in + viewModel.onDataChanged = { [weak self] in guard let strongSelf = self else { return } diff --git a/BeamWallet/ViewControllers/Main/Wallet/MaxPrivacyDetail/MaxPrivacyDetailViewModel.swift b/BeamWallet/ViewControllers/Main/Wallet/MaxPrivacyDetail/MaxPrivacyDetailViewModel.swift index 4b79586d..f7dcea0d 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/MaxPrivacyDetail/MaxPrivacyDetailViewModel.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/MaxPrivacyDetail/MaxPrivacyDetailViewModel.swift @@ -56,8 +56,7 @@ class MaxPrivacyDetailViewModel: NSObject { func filterUTXOS() { - DispatchQueue.main.async { - [weak self] in + DispatchQueue.main.async { [weak self] in guard let strongSelf = self else { return } diff --git a/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveTransactionTypeCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveTransactionTypeCell.swift index 250d8e6a..5530b162 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveTransactionTypeCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveTransactionTypeCell.swift @@ -14,7 +14,7 @@ protocol ReceiveTransactionTypeCellDelegate: AnyObject { class ReceiveTransactionTypeCell: UITableViewCell { - public weak var delegate:ReceiveTransactionTypeCellDelegate? = nil + public weak var delegate:ReceiveTransactionTypeCellDelegate? @IBOutlet private var transactionTypeLabel: UILabel! @IBOutlet private var errorLabel: UILabel! diff --git a/BeamWallet/ViewControllers/Main/Wallet/Receive/OfflineAddressViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Receive/OfflineAddressViewController.swift index c0b358df..ac564bc8 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Receive/OfflineAddressViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Receive/OfflineAddressViewController.swift @@ -28,7 +28,7 @@ class OfflineAddressViewController: BaseViewController { topOffset?.constant = topOffset!.constant - 20 - shqreButton.backgroundColor = UIColor.main.marineThree; + shqreButton.backgroundColor = UIColor.main.marineThree shqreButton.awakeFromNib() addressTitleLabel.text = Localizable.shared.strings.address.uppercased() @@ -37,8 +37,8 @@ class OfflineAddressViewController: BaseViewController { if Settings.sharedManager().isDarkMode { shqreButton.setTitleColor(UIColor.white, for: .normal) - infoLabel.textColor = UIColor.main.steel; - addressTitleLabel.textColor = UIColor.main.steel; + infoLabel.textColor = UIColor.main.steel + addressTitleLabel.textColor = UIColor.main.steel } @@ -56,15 +56,11 @@ class OfflineAddressViewController: BaseViewController { ShowCopied(text: Localizable.shared.strings.address_copied) } - override func viewDidAppear(_ animated: Bool) { - super.viewDidAppear(animated) - } - @IBAction private func onShare() { if let image = codeConentView.snapshot() { let activityItem: [AnyObject] = [image] let vc = UIActivityViewController(activityItems: activityItem, applicationActivities: []) - vc.completionWithItemsHandler = {(activityType: UIActivity.ActivityType?, completed: Bool, returnedItems: [Any]?, error: Error?) in + vc.completionWithItemsHandler = {(activityType: UIActivity.ActivityType?, completed: Bool, _: [Any]?, _: Error?) in if completed { self.dismiss(animated: true, completion: { if activityType == UIActivity.ActivityType.copyToPasteboard { diff --git a/BeamWallet/ViewControllers/Main/Wallet/Receive/ReceiveListViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Receive/ReceiveListViewController.swift index 80dd7f8d..00915df5 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Receive/ReceiveListViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Receive/ReceiveListViewController.swift @@ -63,10 +63,8 @@ class ReceiveListViewController: BaseTableViewController { var mainColor = UIColor.main.brightSkyBlue if let viewControllers = self.navigationController?.viewControllers{ - for vc in viewControllers { - if vc is SendViewController { - mainColor = UIColor.main.heliotrope - } + for vc in viewControllers where vc is SendViewController { + mainColor = UIColor.main.heliotrope } } diff --git a/BeamWallet/ViewControllers/Main/Wallet/Receive/ReceiveViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Receive/ReceiveViewController.swift index cf58593c..121b469e 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Receive/ReceiveViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Receive/ReceiveViewController.swift @@ -87,8 +87,7 @@ class ReceiveViewController: BaseTableViewController { self?.back() } - viewModel.onAddressCreated = {[weak self] - error in + viewModel.onAddressCreated = {[weak self] error in DispatchQueue.main.async { if let reason = error?.localizedDescription { self?.alert(title: Localizable.shared.strings.error, message: reason, handler: { (_ ) in @@ -121,8 +120,7 @@ class ReceiveViewController: BaseTableViewController { } } - viewModel.onAddressUpdate = {[weak self] - error in + viewModel.onAddressUpdate = {[weak self] _ in UIView.performWithoutAnimation { guard let strongSelf = self else { return } @@ -219,12 +217,12 @@ class ReceiveViewController: BaseTableViewController { @objc private func onBack() { let state = viewModel.isNeedAskToSave() if state != .none { - self.confirmAndSkipAlert(title: state == .new ? Localizable.shared.strings.save_address_title : Localizable.shared.strings.save_changes, message: state == .new ? Localizable.shared.strings.save_address_text : Localizable.shared.strings.save_edit_address_text, cancelTitle: Localizable.shared.strings.not_save, confirmTitle: Localizable.shared.strings.save, cancelHandler: { [weak self] (_ ) in + self.confirmAndSkipAlert(title: state == .new ? Localizable.shared.strings.save_address_title : Localizable.shared.strings.save_changes, message: state == .new ? Localizable.shared.strings.save_address_text : Localizable.shared.strings.save_edit_address_text, cancelTitle: Localizable.shared.strings.not_save, confirmTitle: Localizable.shared.strings.save, cancelHandler: { [weak self] _ in self?.back() - }) { [weak self] (_ ) in + }, confirmHandler: { [weak self] _ in self?.viewModel.isShared = true self?.back() - } + }) } else{ back() diff --git a/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/BMSearchAddressCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/BMSearchAddressCell.swift index fc9014de..54a47d72 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/BMSearchAddressCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/BMSearchAddressCell.swift @@ -71,12 +71,12 @@ class BMSearchAddressCell: BaseCell { nameLabel.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(onTap(_:)))) if Settings.sharedManager().isDarkMode { - nameLabel.textColor = UIColor.main.steel; - addressTypeLabel.textColor = UIColor.main.steel; - additionalErrorLabel.textColor = UIColor.main.steel; + nameLabel.textColor = UIColor.main.steel + addressTypeLabel.textColor = UIColor.main.steel + additionalErrorLabel.textColor = UIColor.main.steel } - NotificationCenter.default.addObserver(forName: UITextField.textDidChangeNotification, object: textField, queue: nil) { [weak self] notification in + NotificationCenter.default.addObserver(forName: UITextField.textDidChangeNotification, object: textField, queue: nil) { [weak self] _ in guard let strongSelf = self else { return } strongSelf.showTokenButton.isHidden = true @@ -227,8 +227,7 @@ extension BMSearchAddressCell: UITextFieldDelegate { if let copy = copyText { let inputBar = BMInputCopyBar(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 44), copy: copy) - inputBar.completion = { - (obj: String?) -> Void in + inputBar.completion = { (obj: String?) in if let text = obj { self.delegate?.textValueDidChange?(self, text, false) _ = self.textField.resignFirstResponder() diff --git a/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/FeeCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/FeeCell.swift index 6e5aaf36..a285c4cd 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/FeeCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/FeeCell.swift @@ -81,9 +81,7 @@ class FeeCell: BaseCell { modalViewController.modalPresentationStyle = .overFullScreen modalViewController.modalTransitionStyle = .crossDissolve modalViewController.type = self.type - modalViewController.completion = { - (obj : String) -> Void in - + modalViewController.completion = { (obj : String) in let nFee = Double(obj) ?? 0 if nFee > Double(self.feeSlider.maximumValue) { diff --git a/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendAllCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendAllCell.swift index 9c56f8ea..83146e2d 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendAllCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendAllCell.swift @@ -51,7 +51,7 @@ class SendAllCell: BaseCell { allButton.setTitle(Localizable.shared.strings.add_max.lowercased(), for: .normal) if Settings.sharedManager().isDarkMode { - titleLabel.textColor = UIColor.main.steel; + titleLabel.textColor = UIColor.main.steel } } diff --git a/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendContactAddressCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendContactAddressCell.swift index 53e69579..ddf21978 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendContactAddressCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendContactAddressCell.swift @@ -14,7 +14,7 @@ class SendContactAddressCell: BaseCell { @IBOutlet private weak var addressLabel: UILabel! @IBOutlet private weak var typeLabel: UILabel! - private var contact: BMContact? = nil + private var contact: BMContact? weak var delegate: BMCellProtocol? @@ -25,8 +25,8 @@ class SendContactAddressCell: BaseCell { nameLabel.letterSpacing = 1.5 if Settings.sharedManager().isDarkMode { - addressLabel.textColor = UIColor.main.steel; - typeLabel.textColor = UIColor.main.steel; + addressLabel.textColor = UIColor.main.steel + typeLabel.textColor = UIColor.main.steel } contentView.backgroundColor = UIColor.main.marineThree diff --git a/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendSaveAddressCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendSaveAddressCell.swift index 94b9b0fc..6eb32e63 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendSaveAddressCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendSaveAddressCell.swift @@ -14,7 +14,7 @@ class SendSaveAddressCell: BaseCell, UITextFieldDelegate { @IBOutlet private weak var typeLabel: UILabel! @IBOutlet private weak var textField: BMField! - private var token: String? = nil + private var token: String? weak var delegate: BMCellProtocol? @@ -30,7 +30,7 @@ class SendSaveAddressCell: BaseCell, UITextFieldDelegate { textField.placeHolderFont = ItalicFont(size: 16) if Settings.sharedManager().isDarkMode { - typeLabel.textColor = UIColor.main.steel; + typeLabel.textColor = UIColor.main.steel } contentView.backgroundColor = UIColor.main.marineThree diff --git a/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendTransactionTypeCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendTransactionTypeCell.swift index b9e0ef00..161eacf5 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendTransactionTypeCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendTransactionTypeCell.swift @@ -14,7 +14,7 @@ protocol SendTransactionTypeCellDelegate: AnyObject { class SendTransactionTypeCell: UITableViewCell { - public weak var delegate:SendTransactionTypeCellDelegate? = nil + public weak var delegate:SendTransactionTypeCellDelegate? @IBOutlet private var transactionTypeLabel: UILabel! @@ -36,12 +36,6 @@ class SendTransactionTypeCell: UITableViewCell { } } - override func layoutSubviews() { - super.layoutSubviews() - -// transactionTypeSegment.selectedSegmentIndex = selectedIndex - } - override func awakeFromNib() { super.awakeFromNib() diff --git a/BeamWallet/ViewControllers/Main/Wallet/Send/SaveContactViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Send/SaveContactViewController.swift index 614c9929..cf320a9c 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Send/SaveContactViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Send/SaveContactViewController.swift @@ -65,7 +65,7 @@ class SaveContactViewController: BaseTableViewController { if(AppModel.sharedManager().isToken(address!)) { let params = AppModel.sharedManager().getTransactionParameters(address!) - self.address.walletId = address!//params.address + self.address.walletId = address!// params.address self.address.identity = params.identity self.address.address = address } @@ -117,10 +117,6 @@ class SaveContactViewController: BaseTableViewController { } } - override func viewDidLayoutSubviews() { - super.viewDidLayoutSubviews() - } - @objc private func onSave() { var walletId = address.walletId var shouldSaveToken = false @@ -147,12 +143,12 @@ class SaveContactViewController: BaseTableViewController { if isContactFound { alert(title: Localizable.shared.strings.error, message: Localizable.shared.strings.address_already_exist_1, handler: nil) - return; + return } if isMyAddress { alert(title: Localizable.shared.strings.error, message: Localizable.shared.strings.address_already_exist_2, handler: nil) - return; + return } } @@ -226,7 +222,7 @@ extension SaveContactViewController : UITableViewDataSource { switch indexPath.section { case 0: if isAddContact { - let trim = self.address.walletId.count > 0 ? "\(self.address.walletId.prefix(6))...\(self.address.walletId.suffix(6))" : ""; + let trim = self.address.walletId.count > 0 ? "\(self.address.walletId.prefix(6))...\(self.address.walletId.suffix(6))" : "" let cell = tableView .dequeueReusableCell(withType: BMSearchAddressCell.self, for: indexPath) @@ -241,7 +237,7 @@ extension SaveContactViewController : UITableViewDataSource { return cell } else{ - let trim = "\(self.address.walletId.prefix(6))...\(self.address.walletId.suffix(6))"; + let trim = "\(self.address.walletId.prefix(6))...\(self.address.walletId.suffix(6))" let item = BMMultiLineItem(title: Localizable.shared.strings.address.uppercased(), detail: trim, detailFont: RegularFont(size: 16), detailColor: UIColor.white) let cell = tableView diff --git a/BeamWallet/ViewControllers/Main/Wallet/Send/SearchTableView.swift b/BeamWallet/ViewControllers/Main/Wallet/Send/SearchTableView.swift index 05ddf95a..da510d32 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Send/SearchTableView.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Send/SearchTableView.swift @@ -38,10 +38,6 @@ class SearchTableView: UITableViewController { tableView.keyboardDismissMode = .interactive } - override func viewDidLayoutSubviews() { - super.viewDidLayoutSubviews() - } - public func reload() { tableView.reloadData() diff --git a/BeamWallet/ViewControllers/Main/Wallet/Send/SendViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Send/SendViewController.swift index 9996027e..7aaf504b 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Send/SendViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Send/SendViewController.swift @@ -38,7 +38,7 @@ class SendViewController: BaseTableViewController { private let nextButton = BMButton.defaultButton(frame: CGRect(x: (UIScreen.main.bounds.size.width - 180) / 2, y: 40, width: 180, height: 44), color: UIColor.main.heliotrope.withAlphaComponent(0.1)) - private func footerView()-> UIView { + private func footerView() -> UIView { let view = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 0)) infoLabel.frame = CGRect(x: 20, y: 25, width: UIScreen.main.bounds.width-40, height: 0) @@ -55,7 +55,7 @@ class SendViewController: BaseTableViewController { infoLabel.font = ItalicFont(size: 16) infoLabel.textAlignment = .center if Settings.sharedManager().isDarkMode { - infoLabel.textColor = UIColor.main.steel; + infoLabel.textColor = UIColor.main.steel } else { infoLabel.textColor = UIColor.main.blueyGrey @@ -104,7 +104,7 @@ class SendViewController: BaseTableViewController { override func viewDidLoad() { super.viewDidLoad() - viewModel.onTokensCountChanged = {[weak self] obj in + viewModel.onTokensCountChanged = {[weak self] _ in guard let strongSelf = self else { return } if let cell = strongSelf.tableView.cellForRow(at: IndexPath(row: 0, section: 0)) as? BMSearchAddressCell { cell.setAddressType(BMAddressType(strongSelf.viewModel.addressType), strongSelf.viewModel.isSendOffline, strongSelf.viewModel.tokensLeft) @@ -247,11 +247,6 @@ class SendViewController: BaseTableViewController { self.isAppear = true } - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - - } - override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) @@ -281,7 +276,7 @@ class SendViewController: BaseTableViewController { viewModel.toAddress = value tableView.reloadData() - tableView.reloadSections(IndexSet(arrayLiteral: 0), with: .none) + tableView.reloadSections([0], with: .none) if viewModel.amount.isEmpty { if let cell = tableView.findCell(BMAmountCell.self) as? BMAmountCell { @@ -365,7 +360,7 @@ extension SendViewController: UITableViewDataSource { cell.delegate = self cell.additionalError = viewModel.newVersionError cell.copyText = viewModel.copyAddress - cell.configure(with: (name: Localizable.shared.strings.send_to.uppercased(), value: viewModel.toAddress, rightIcons: [IconScanQr()])) //IconAddressBookSmall(), + cell.configure(with: (name: Localizable.shared.strings.send_to.uppercased(), value: viewModel.toAddress, rightIcons: [IconScanQr()])) // IconAddressBookSmall(), cell.contact = viewModel.selectedContact cell.setAddressType(BMAddressType(viewModel.addressType), viewModel.isSendOffline, viewModel.tokensLeft) cell.nameLabelTopOffset.constant = 20 diff --git a/BeamWallet/ViewControllers/Main/Wallet/Send/WalletSendViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Send/WalletSendViewController.swift index 3acc18c2..9f66321d 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Send/WalletSendViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Send/WalletSendViewController.swift @@ -66,11 +66,11 @@ class LegacyWalletSendViewController: BaseViewController { if (Device.screenType == .iPhone_XR || Device.screenType == .iPhones_X_XS) { - mainStack.spacing = 45; + mainStack.spacing = 45 } else if (Device.screenType == .iPhones_Plus || Device.screenType == .iPhone_XSMax) { - mainStack.spacing = 55; + mainStack.spacing = 55 } mainViewWidth.constant = UIScreen.main.bounds.width @@ -125,10 +125,6 @@ class LegacyWalletSendViewController: BaseViewController { NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification , object: nil) } - override func viewDidAppear(_ animated: Bool) { - super.viewDidAppear(animated) - } - private func updateLayout() { mainViewHeight.constant = mainStack.frame.height + mainStack.frame.origin.y + 20 @@ -146,7 +142,7 @@ class LegacyWalletSendViewController: BaseViewController { self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: icon, style: .plain, target: self, action: #selector(onHideAmounts)) } -//MARK: - IBAction +// MARK: - IBAction @objc private func onHideAmounts() { if !Settings.sharedManager().isHideAmounts { @@ -154,10 +150,10 @@ class LegacyWalletSendViewController: BaseViewController { if Settings.sharedManager().isAskForHideAmounts { let alert = UIAlertController(title: "Activate security mode", message: "All the balances will be hidden until the eye icon is tapped again", preferredStyle: .alert) - alert.addAction(UIAlertAction(title: "Cancel", style: .default, handler:{ (UIAlertAction)in + alert.addAction(UIAlertAction(title: "Cancel", style: .default, handler:{ (_)in })) - alert.addAction(UIAlertAction(title: "Activate", style: .default, handler:{ (UIAlertAction)in + alert.addAction(UIAlertAction(title: "Activate", style: .default, handler:{ (_)in Settings.sharedManager().isHideAmounts = !Settings.sharedManager().isHideAmounts Settings.sharedManager().isAskForHideAmounts = false @@ -374,8 +370,7 @@ extension LegacyWalletSendViewController : UITextFieldDelegate { if AppModel.sharedManager().isValidAddress(text) { let inputBar = BMInputCopyBar(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 44), copy:text) - inputBar.completion = { - (obj : String?) -> Void in + inputBar.completion = { (obj : String?) in if let text = obj { self.toAddressField.text = text self.amountField.becomeFirstResponder() @@ -439,7 +434,7 @@ extension LegacyWalletSendViewController { } } -//MARK: - WalletQRCodeScannerViewControllerDelegate +// MARK: - WalletQRCodeScannerViewControllerDelegate extension LegacyWalletSendViewController : WalletQRCodeScannerViewControllerDelegate { diff --git a/BeamWallet/ViewControllers/Main/Wallet/Transaction/Cell/TransactionPaymentProofCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Transaction/Cell/TransactionPaymentProofCell.swift index d47714d4..3f1981cb 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Transaction/Cell/TransactionPaymentProofCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Transaction/Cell/TransactionPaymentProofCell.swift @@ -60,10 +60,6 @@ class TransactionPaymentProofCell: BaseCell { titleLabel.textColor = UIColor.main.steel } } - - override func setSelected(_ selected: Bool, animated: Bool) { - super.setSelected(selected, animated: animated) - } @IBAction func onDetails(sender :UIButton) { diff --git a/BeamWallet/ViewControllers/Main/Wallet/Transaction/PaymentProofDetailViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Transaction/PaymentProofDetailViewController.swift index b0fdd7f6..92fb0458 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Transaction/PaymentProofDetailViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Transaction/PaymentProofDetailViewController.swift @@ -98,10 +98,6 @@ class PaymentProofDetailViewController: BaseTableViewController { } } - override func viewDidLayoutSubviews() { - super.viewDidLayoutSubviews() - } - @objc private func onCopyCodeDetails() { if let transactionDetail = transaction?.details() { UIPasteboard.general.string = transactionDetail @@ -123,7 +119,7 @@ class PaymentProofDetailViewController: BaseTableViewController { @objc private func onMoreDetails() { detailsExpand = !detailsExpand - tableView.reloadSections(IndexSet(arrayLiteral: tableView.tableHeaderView == codeInputView ? 0 : 1), with: .fade) + tableView.reloadSections([tableView.tableHeaderView == codeInputView ? 0 : 1], with: .fade) } private func fillTransactionInfo() { @@ -268,8 +264,7 @@ extension PaymentProofDetailViewController: UITextViewDelegate { if let text = UIPasteboard.general.string { if text.lengthOfBytes(using: .utf8) >= 330 { let inputBar = BMInputCopyBar(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 44), copy: text) - inputBar.completion = { - (obj: String?) -> Void in + inputBar.completion = { (obj: String?) in if let text = obj { self.codeInputField.text = text self.textViewDidChange(self.codeInputField) diff --git a/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionShareView.swift b/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionShareView.swift index f6098be0..46d3881e 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionShareView.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionShareView.swift @@ -166,7 +166,7 @@ class TransactionShareView: UIView { amountLabel.textColor = UIColor.main.heliotrope } - addressTypeValueLabel.text = transaction.getAddressType(); + addressTypeValueLabel.text = transaction.getAddressType() transactionKernelValueLabel.text = transaction.kernelId if transaction.kernelId.contains("000000") || transaction.isExpired() || transaction.isFailed() { diff --git a/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionViewController.swift index 516dbc34..c4d0a2cf 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionViewController.swift @@ -127,10 +127,6 @@ class TransactionViewController: UITableViewController { subscribeToUpdates() } - override func viewDidLayoutSubviews() { - super.viewDidLayoutSubviews() - } - public func didShow() { } @@ -142,14 +138,12 @@ class TransactionViewController: UITableViewController { } } - viewModel.onDataUpdated = { [weak self] - _, transaction in + viewModel.onDataUpdated = { [weak self] _, transaction in AppModel.sharedManager().cancelTransaction(transaction) self?.back() } - viewModel.onDataDeleted = { [weak self] - _, transaction in + viewModel.onDataDeleted = { [weak self] _, transaction in AppModel.sharedManager().prepareDeleteTransaction(transaction) self?.back() } diff --git a/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionsTableView.swift b/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionsTableView.swift index 7b3dcb72..69e51c64 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionsTableView.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionsTableView.swift @@ -83,7 +83,7 @@ class TransactionsTableView: UITableViewController { } -//MARK: - Updates +// MARK: - Updates @objc private func refreshData(_ sender: Any) { AppModel.sharedManager().getWalletStatus() @@ -99,9 +99,7 @@ class TransactionsTableView: UITableViewController { } } - viewModel.onDataDeleted = { [weak self] - indexPath, transaction in - + viewModel.onDataDeleted = { [weak self] indexPath, transaction in guard let strongSelf = self else { return } if strongSelf.viewModel.transactions.count == 0 { @@ -119,9 +117,7 @@ class TransactionsTableView: UITableViewController { } } - viewModel.onDataUpdated = { [weak self] - indexPath, transaction in - + viewModel.onDataUpdated = { [weak self] indexPath, transaction in if let path = indexPath { self?.tableView.performUpdate({ self?.tableView.reloadRows(at: [path], with: .fade) @@ -132,7 +128,7 @@ class TransactionsTableView: UITableViewController { } } -//MARK: - TableView +// MARK: - TableView override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { if viewModel.transactions.count == 0 { @@ -216,7 +212,7 @@ class TransactionsTableView: UITableViewController { } } -//MARK: - Keyboard +// MARK: - Keyboard extension TransactionsTableView { @@ -328,7 +324,7 @@ extension TransactionsTableView: UIContextMenuInteractionDelegate { return UIContextMenuConfiguration(identifier: indexPath as NSCopying, previewProvider: { return detailVC - }, actionProvider: { suggestedActions in + }, actionProvider: { _ in return self.makeContextMenu(transaction: self.viewModel.transactions[indexPath.row]) }) } @@ -342,45 +338,45 @@ extension TransactionsTableView: UIContextMenuInteractionDelegate { let viewModel = DetailTransactionViewModel(transaction: transaction) if transaction.canSaveContact() { - let action1 = UIAction(title: Localizable.shared.strings.save_contact_title, image: nil) { action in + let action1 = UIAction(title: Localizable.shared.strings.save_contact_title, image: nil) { _ in viewModel.saveContact() } array.append(action1) } - let action1 = UIAction(title: Localizable.shared.strings.share_details, image: nil) { action in + let action1 = UIAction(title: Localizable.shared.strings.share_details, image: nil) { _ in viewModel.share() } array.append(action1) - let action2 = UIAction(title: Localizable.shared.strings.copy_details, image: nil) { action in + let action2 = UIAction(title: Localizable.shared.strings.copy_details, image: nil) { _ in viewModel.copyDetails() } array.append(action2) if !transaction.isIncome && !transaction.isDapps { - let action3 = UIAction(title: Localizable.shared.strings.repeat_transaction, image: nil) { action in + let action3 = UIAction(title: Localizable.shared.strings.repeat_transaction, image: nil) { _ in viewModel.repeatTransation(transaction: viewModel.transaction!) } array.append(action3) } if transaction.canCancel && !transaction.isDapps { - let action4 = UIAction(title: Localizable.shared.strings.cancel_transaction, image: nil) { action in + let action4 = UIAction(title: Localizable.shared.strings.cancel_transaction, image: nil) { _ in viewModel.cancelTransation(indexPath: nil) } array.append(action4) } if transaction.canDelete { - let action5 = UIAction(title: Localizable.shared.strings.delete_transaction, image: nil) { action in + let action5 = UIAction(title: Localizable.shared.strings.delete_transaction, image: nil) { _ in viewModel.deleteTransationNew(indexPath: nil) } array.append(action5) } if transaction.isDapps { - let action6 = UIAction(title: Localizable.shared.strings.open_dapp, image: nil) { action in + let action6 = UIAction(title: Localizable.shared.strings.open_dapp, image: nil) { _ in viewModel.openDapp() } array.append(action6) diff --git a/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionsViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionsViewController.swift index c229b2e0..df587ed8 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionsViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionsViewController.swift @@ -69,9 +69,8 @@ class TransactionsViewController: BaseTableViewController { addRightButton(image: MoreIcon(), target: self, selector: #selector(onMore)) searchView = BMSearchView() - searchView.onSearchTextChanged = { - [weak self] text in - + searchView.onSearchTextChanged = { [weak self] text in + guard let strongSelf = self else { return } for model in strongSelf.viewModels { @@ -80,8 +79,7 @@ class TransactionsViewController: BaseTableViewController { model.search() } } - searchView.onCancelSearch = { - [weak self] in + searchView.onCancelSearch = { [weak self] in guard let strongSelf = self else { return } for model in strongSelf.viewModels { @@ -129,7 +127,7 @@ class TransactionsViewController: BaseTableViewController { } @objc private func onExporToCSV() { - AppModel.sharedManager().exportTransactions { (data, url) in + AppModel.sharedManager().exportTransactions { (_, url) in DispatchQueue.main.async { let vc = UIActivityViewController(activityItems: [url], applicationActivities: nil) vc.excludedActivityTypes = [UIActivity.ActivityType.postToFacebook, UIActivity.ActivityType.assignToContact, UIActivity.ActivityType.copyToPasteboard, UIActivity.ActivityType.print,UIActivity.ActivityType.openInIBooks] diff --git a/BeamWallet/ViewControllers/Main/Wallet/WalletViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/WalletViewController.swift index ce259921..30e7fa80 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/WalletViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/WalletViewController.swift @@ -103,9 +103,7 @@ class WalletViewController: BaseTableViewController { } } - transactionViewModel.onDataDeleted = { [weak self] - indexPath, transaction in - + transactionViewModel.onDataDeleted = { [weak self] indexPath, transaction in guard let strongSelf = self else { return } if strongSelf.transactionViewModel.transactions.count == 0 || strongSelf.transactionViewModel.transactions.count >= strongSelf.maximumTransactionsCount { @@ -123,9 +121,7 @@ class WalletViewController: BaseTableViewController { } } - transactionViewModel.onDataUpdated = { [weak self] - indexPath, transaction in - + transactionViewModel.onDataUpdated = { [weak self] indexPath, transaction in if let path = indexPath { self?.tableView.performUpdate({ self?.tableView.reloadRows(at: [path], with: .fade) @@ -258,7 +254,7 @@ extension WalletViewController: UITableViewDelegate { return UIContextMenuConfiguration(identifier: indexPath as NSCopying, previewProvider: { return detailVC - }, actionProvider: { suggestedActions in + }, actionProvider: { _ in return self.makeContextMenu(transaction: self.transactionViewModel.transactions[indexPath.row]) }) } @@ -272,45 +268,45 @@ extension WalletViewController: UITableViewDelegate { let viewModel = DetailTransactionViewModel(transaction: transaction) if transaction.canSaveContact() { - let action1 = UIAction(title: Localizable.shared.strings.save_contact_title, image: nil) { action in + let action1 = UIAction(title: Localizable.shared.strings.save_contact_title, image: nil) { _ in viewModel.saveContact() } array.append(action1) } - let action1 = UIAction(title: Localizable.shared.strings.share_details, image: nil) { action in + let action1 = UIAction(title: Localizable.shared.strings.share_details, image: nil) { _ in viewModel.share() } array.append(action1) - let action2 = UIAction(title: Localizable.shared.strings.copy_details, image: nil) { action in + let action2 = UIAction(title: Localizable.shared.strings.copy_details, image: nil) { _ in viewModel.copyDetails() } array.append(action2) if !transaction.isIncome && !transaction.isDapps { - let action3 = UIAction(title: Localizable.shared.strings.repeat_transaction, image: nil) { action in + let action3 = UIAction(title: Localizable.shared.strings.repeat_transaction, image: nil) { _ in viewModel.repeatTransation(transaction: viewModel.transaction!) } array.append(action3) } if transaction.canCancel && !transaction.isDapps { - let action4 = UIAction(title: Localizable.shared.strings.cancel_transaction, image: nil) { action in + let action4 = UIAction(title: Localizable.shared.strings.cancel_transaction, image: nil) { _ in viewModel.cancelTransation(indexPath: nil) } array.append(action4) } if transaction.canDelete { - let action5 = UIAction(title: Localizable.shared.strings.delete_transaction, image: nil) { action in + let action5 = UIAction(title: Localizable.shared.strings.delete_transaction, image: nil) { _ in viewModel.deleteTransationNew(indexPath: nil) } array.append(action5) } if transaction.isDapps { - let action6 = UIAction(title: Localizable.shared.strings.open_dapp, image: nil) { action in + let action6 = UIAction(title: Localizable.shared.strings.open_dapp, image: nil) { _ in viewModel.openDapp() } array.append(action6) @@ -494,10 +490,10 @@ extension WalletViewController: OnboardCellDelegate { } else { strongSelf.confirmAlert(title: Localizable.shared.strings.external_link_title, message: Localizable.shared.strings.external_link_text, cancelTitle: Localizable.shared.strings.cancel, confirmTitle: Localizable.shared.strings.open, cancelHandler: { _ in - - }) { _ in + + }, confirmHandler: { _ in BMOverlayTimerView.show(text: Localizable.shared.strings.faucet_redirect_text, link: result) - } + }) } } } From a11d62275f99533353c0deccb91812eb36a6be04 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sat, 9 May 2026 15:29:27 +0200 Subject: [PATCH 19/48] chore: bump copyright year to 2026 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sweep across the first-party source files (`BeamSDK/`, `Controls/Cell/`, and `ViewControllers/`) that carried "Copyright © {2019|2020|2021} Denis." headers and update them to 2026. ThirdParty/ is skipped — those carry their own upstream attribution (LGSideMenuController, MASegmentedControl) and should not be rewritten. --- BeamWallet/BeamSDK/DAO/AppsApiUI.h | 2 +- BeamWallet/BeamSDK/DAO/AppsApiUI.mm | 2 +- BeamWallet/BeamSDK/DAO/DAOManager.h | 2 +- BeamWallet/BeamSDK/DAO/DAOManager.mm | 2 +- BeamWallet/BeamSDK/DAO/Public.h | 2 +- BeamWallet/BeamSDK/DAO/WebAPICreator.h | 2 +- BeamWallet/BeamSDK/DAO/WebAPICreator.mm | 2 +- BeamWallet/BeamSDK/Objects/BMApp.h | 2 +- BeamWallet/BeamSDK/Objects/BMApp.m | 2 +- BeamWallet/BeamSDK/Objects/BMMaxPrivacyLock.h | 2 +- BeamWallet/BeamSDK/Objects/BMMaxPrivacyLock.m | 2 +- BeamWallet/BeamSDK/Objects/BMPreparedTransaction.m | 2 +- BeamWallet/BeamSDK/StringManager.h | 2 +- BeamWallet/BeamSDK/StringManager.m | 2 +- BeamWallet/Controls/Cell/BMGroupedCell.swift | 2 +- .../PhraseViewController/Cells/CollectionButtonFooter.swift | 2 +- .../Login/PhraseViewController/Cells/CollectionTextHeader.swift | 2 +- .../Login/PhraseViewController/Cells/SeedIntroCell.swift | 2 +- BeamWallet/ViewControllers/Main/DAO/Cell/DAOAppCell.swift | 2 +- BeamWallet/ViewControllers/Main/DAO/DAOAppsViewController.swift | 2 +- .../ViewControllers/Main/DAO/DAOConfirmViewController.swift | 2 +- BeamWallet/ViewControllers/Main/DAO/DAOConfirmViewModel.swift | 2 +- BeamWallet/ViewControllers/Main/DAO/DAOListViewModel.swift | 2 +- BeamWallet/ViewControllers/Main/DAO/DAOViewController.swift | 2 +- .../Main/Notifications/Cells/NotificationTableViewCell.swift | 2 +- .../Wallet/MaxPrivacyDetail/Cell/MaxPrivacyDetailHeader.swift | 2 +- .../Main/Wallet/Receive/Cells/ReceiveTokenCell.swift | 2 +- .../Main/Wallet/Receive/Cells/ReceiveTransactionTypeCell.swift | 2 +- .../Main/Wallet/Receive/OfflineAddressViewController.swift | 2 +- .../Main/Wallet/Send/Cells/SendContactAddressCell.swift | 2 +- .../Main/Wallet/Send/Cells/SendSaveAddressCell.swift | 2 +- .../Main/Wallet/Send/Cells/SendTransactionTypeCell.swift | 2 +- 32 files changed, 32 insertions(+), 32 deletions(-) diff --git a/BeamWallet/BeamSDK/DAO/AppsApiUI.h b/BeamWallet/BeamSDK/DAO/AppsApiUI.h index 608ac57d..25add7a6 100644 --- a/BeamWallet/BeamSDK/DAO/AppsApiUI.h +++ b/BeamWallet/BeamSDK/DAO/AppsApiUI.h @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 31.08.2021. -// Copyright © 2021 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // #include "wallet/api/i_wallet_api.h" diff --git a/BeamWallet/BeamSDK/DAO/AppsApiUI.mm b/BeamWallet/BeamSDK/DAO/AppsApiUI.mm index bc5df7e0..692ba510 100644 --- a/BeamWallet/BeamSDK/DAO/AppsApiUI.mm +++ b/BeamWallet/BeamSDK/DAO/AppsApiUI.mm @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 31.08.2021. -// Copyright © 2021 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // #import "AppsApiUI.h" diff --git a/BeamWallet/BeamSDK/DAO/DAOManager.h b/BeamWallet/BeamSDK/DAO/DAOManager.h index 41fc6c02..39c21f8c 100644 --- a/BeamWallet/BeamSDK/DAO/DAOManager.h +++ b/BeamWallet/BeamSDK/DAO/DAOManager.h @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 01.09.2021. -// Copyright © 2021 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // #import diff --git a/BeamWallet/BeamSDK/DAO/DAOManager.mm b/BeamWallet/BeamSDK/DAO/DAOManager.mm index a84a9587..93a89845 100644 --- a/BeamWallet/BeamSDK/DAO/DAOManager.mm +++ b/BeamWallet/BeamSDK/DAO/DAOManager.mm @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 01.09.2021. -// Copyright © 2021 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // #import "DAOManager.h" diff --git a/BeamWallet/BeamSDK/DAO/Public.h b/BeamWallet/BeamSDK/DAO/Public.h index c547ffcf..4d39bfbe 100644 --- a/BeamWallet/BeamSDK/DAO/Public.h +++ b/BeamWallet/BeamSDK/DAO/Public.h @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 31.08.2021. -// Copyright © 2021 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // #include "wallet/api/i_wallet_api.h" diff --git a/BeamWallet/BeamSDK/DAO/WebAPICreator.h b/BeamWallet/BeamSDK/DAO/WebAPICreator.h index cbea7d51..3570db23 100644 --- a/BeamWallet/BeamSDK/DAO/WebAPICreator.h +++ b/BeamWallet/BeamSDK/DAO/WebAPICreator.h @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 31.08.2021. -// Copyright © 2021 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // #import "WalletModel.h" diff --git a/BeamWallet/BeamSDK/DAO/WebAPICreator.mm b/BeamWallet/BeamSDK/DAO/WebAPICreator.mm index ffe46daf..17609380 100644 --- a/BeamWallet/BeamSDK/DAO/WebAPICreator.mm +++ b/BeamWallet/BeamSDK/DAO/WebAPICreator.mm @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 31.08.2021. -// Copyright © 2021 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // #import "WebAPICreator.h" diff --git a/BeamWallet/BeamSDK/Objects/BMApp.h b/BeamWallet/BeamSDK/Objects/BMApp.h index a64a650f..c1d16fc9 100644 --- a/BeamWallet/BeamSDK/Objects/BMApp.h +++ b/BeamWallet/BeamSDK/Objects/BMApp.h @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 01.09.2021. -// Copyright © 2021 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // #import diff --git a/BeamWallet/BeamSDK/Objects/BMApp.m b/BeamWallet/BeamSDK/Objects/BMApp.m index a7a72ce7..c695398c 100644 --- a/BeamWallet/BeamSDK/Objects/BMApp.m +++ b/BeamWallet/BeamSDK/Objects/BMApp.m @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 01.09.2021. -// Copyright © 2021 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // #import "BMApp.h" diff --git a/BeamWallet/BeamSDK/Objects/BMMaxPrivacyLock.h b/BeamWallet/BeamSDK/Objects/BMMaxPrivacyLock.h index 6d8e2ba8..a1774357 100644 --- a/BeamWallet/BeamSDK/Objects/BMMaxPrivacyLock.h +++ b/BeamWallet/BeamSDK/Objects/BMMaxPrivacyLock.h @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 14.12.2020. -// Copyright © 2020 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // #import diff --git a/BeamWallet/BeamSDK/Objects/BMMaxPrivacyLock.m b/BeamWallet/BeamSDK/Objects/BMMaxPrivacyLock.m index 4e198a21..2a77d602 100644 --- a/BeamWallet/BeamSDK/Objects/BMMaxPrivacyLock.m +++ b/BeamWallet/BeamSDK/Objects/BMMaxPrivacyLock.m @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 14.12.2020. -// Copyright © 2020 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // #import "BMMaxPrivacyLock.h" diff --git a/BeamWallet/BeamSDK/Objects/BMPreparedTransaction.m b/BeamWallet/BeamSDK/Objects/BMPreparedTransaction.m index f16368f1..f90a4dab 100644 --- a/BeamWallet/BeamSDK/Objects/BMPreparedTransaction.m +++ b/BeamWallet/BeamSDK/Objects/BMPreparedTransaction.m @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 5/29/19. -// Copyright © 2019 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // #import "BMPreparedTransaction.h" diff --git a/BeamWallet/BeamSDK/StringManager.h b/BeamWallet/BeamSDK/StringManager.h index be31238d..ac658165 100644 --- a/BeamWallet/BeamSDK/StringManager.h +++ b/BeamWallet/BeamSDK/StringManager.h @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 09.06.2021. -// Copyright © 2021 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // #import diff --git a/BeamWallet/BeamSDK/StringManager.m b/BeamWallet/BeamSDK/StringManager.m index 38ec3aaa..4033f4ad 100644 --- a/BeamWallet/BeamSDK/StringManager.m +++ b/BeamWallet/BeamSDK/StringManager.m @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 09.06.2021. -// Copyright © 2021 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // #import "StringManager.h" diff --git a/BeamWallet/Controls/Cell/BMGroupedCell.swift b/BeamWallet/Controls/Cell/BMGroupedCell.swift index 2df1222a..a927a1f3 100644 --- a/BeamWallet/Controls/Cell/BMGroupedCell.swift +++ b/BeamWallet/Controls/Cell/BMGroupedCell.swift @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 7/19/19. -// Copyright © 2019 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // import UIKit diff --git a/BeamWallet/ViewControllers/Login/PhraseViewController/Cells/CollectionButtonFooter.swift b/BeamWallet/ViewControllers/Login/PhraseViewController/Cells/CollectionButtonFooter.swift index 109f70a6..4f60ce5a 100644 --- a/BeamWallet/ViewControllers/Login/PhraseViewController/Cells/CollectionButtonFooter.swift +++ b/BeamWallet/ViewControllers/Login/PhraseViewController/Cells/CollectionButtonFooter.swift @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 10/18/19. -// Copyright © 2019 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // import Foundation diff --git a/BeamWallet/ViewControllers/Login/PhraseViewController/Cells/CollectionTextHeader.swift b/BeamWallet/ViewControllers/Login/PhraseViewController/Cells/CollectionTextHeader.swift index b8c1b3df..50381e86 100644 --- a/BeamWallet/ViewControllers/Login/PhraseViewController/Cells/CollectionTextHeader.swift +++ b/BeamWallet/ViewControllers/Login/PhraseViewController/Cells/CollectionTextHeader.swift @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 10/18/19. -// Copyright © 2019 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // import UIKit diff --git a/BeamWallet/ViewControllers/Login/PhraseViewController/Cells/SeedIntroCell.swift b/BeamWallet/ViewControllers/Login/PhraseViewController/Cells/SeedIntroCell.swift index 09e64653..75996491 100644 --- a/BeamWallet/ViewControllers/Login/PhraseViewController/Cells/SeedIntroCell.swift +++ b/BeamWallet/ViewControllers/Login/PhraseViewController/Cells/SeedIntroCell.swift @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 10/18/19. -// Copyright © 2019 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // import UIKit diff --git a/BeamWallet/ViewControllers/Main/DAO/Cell/DAOAppCell.swift b/BeamWallet/ViewControllers/Main/DAO/Cell/DAOAppCell.swift index 4fdfcf61..e0e5c2f3 100644 --- a/BeamWallet/ViewControllers/Main/DAO/Cell/DAOAppCell.swift +++ b/BeamWallet/ViewControllers/Main/DAO/Cell/DAOAppCell.swift @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 08.09.2021. -// Copyright © 2021 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // import UIKit diff --git a/BeamWallet/ViewControllers/Main/DAO/DAOAppsViewController.swift b/BeamWallet/ViewControllers/Main/DAO/DAOAppsViewController.swift index d7e44760..3d76e6d7 100644 --- a/BeamWallet/ViewControllers/Main/DAO/DAOAppsViewController.swift +++ b/BeamWallet/ViewControllers/Main/DAO/DAOAppsViewController.swift @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 08.09.2021. -// Copyright © 2021 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // import Foundation diff --git a/BeamWallet/ViewControllers/Main/DAO/DAOConfirmViewController.swift b/BeamWallet/ViewControllers/Main/DAO/DAOConfirmViewController.swift index c7a319aa..f5497ec7 100644 --- a/BeamWallet/ViewControllers/Main/DAO/DAOConfirmViewController.swift +++ b/BeamWallet/ViewControllers/Main/DAO/DAOConfirmViewController.swift @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 06.09.2021. -// Copyright © 2021 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // import UIKit diff --git a/BeamWallet/ViewControllers/Main/DAO/DAOConfirmViewModel.swift b/BeamWallet/ViewControllers/Main/DAO/DAOConfirmViewModel.swift index 4e4d8535..af043559 100644 --- a/BeamWallet/ViewControllers/Main/DAO/DAOConfirmViewModel.swift +++ b/BeamWallet/ViewControllers/Main/DAO/DAOConfirmViewModel.swift @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 06.09.2021. -// Copyright © 2021 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // import UIKit diff --git a/BeamWallet/ViewControllers/Main/DAO/DAOListViewModel.swift b/BeamWallet/ViewControllers/Main/DAO/DAOListViewModel.swift index 009266d7..75c76a43 100644 --- a/BeamWallet/ViewControllers/Main/DAO/DAOListViewModel.swift +++ b/BeamWallet/ViewControllers/Main/DAO/DAOListViewModel.swift @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 08.09.2021. -// Copyright © 2021 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // import Foundation diff --git a/BeamWallet/ViewControllers/Main/DAO/DAOViewController.swift b/BeamWallet/ViewControllers/Main/DAO/DAOViewController.swift index 5c0a5665..97b11094 100644 --- a/BeamWallet/ViewControllers/Main/DAO/DAOViewController.swift +++ b/BeamWallet/ViewControllers/Main/DAO/DAOViewController.swift @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 03.09.2021. -// Copyright © 2021 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // import UIKit diff --git a/BeamWallet/ViewControllers/Main/Notifications/Cells/NotificationTableViewCell.swift b/BeamWallet/ViewControllers/Main/Notifications/Cells/NotificationTableViewCell.swift index 3e1e36da..7363af26 100644 --- a/BeamWallet/ViewControllers/Main/Notifications/Cells/NotificationTableViewCell.swift +++ b/BeamWallet/ViewControllers/Main/Notifications/Cells/NotificationTableViewCell.swift @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 29.04.2020. -// Copyright © 2020 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // import UIKit diff --git a/BeamWallet/ViewControllers/Main/Wallet/MaxPrivacyDetail/Cell/MaxPrivacyDetailHeader.swift b/BeamWallet/ViewControllers/Main/Wallet/MaxPrivacyDetail/Cell/MaxPrivacyDetailHeader.swift index 2f4fd17f..cee9d1fe 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/MaxPrivacyDetail/Cell/MaxPrivacyDetailHeader.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/MaxPrivacyDetail/Cell/MaxPrivacyDetailHeader.swift @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 18.12.2020. -// Copyright © 2020 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // import UIKit diff --git a/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveTokenCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveTokenCell.swift index 3b11d8ce..880bba22 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveTokenCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveTokenCell.swift @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 04.11.2020. -// Copyright © 2020 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // import UIKit diff --git a/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveTransactionTypeCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveTransactionTypeCell.swift index 5530b162..a436012e 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveTransactionTypeCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveTransactionTypeCell.swift @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 08.04.2021. -// Copyright © 2021 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // import UIKit diff --git a/BeamWallet/ViewControllers/Main/Wallet/Receive/OfflineAddressViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Receive/OfflineAddressViewController.swift index ac564bc8..215dca50 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Receive/OfflineAddressViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Receive/OfflineAddressViewController.swift @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 02.11.2020. -// Copyright © 2020 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // import UIKit diff --git a/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendContactAddressCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendContactAddressCell.swift index ddf21978..d0a6a502 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendContactAddressCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendContactAddressCell.swift @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 13.04.2021. -// Copyright © 2021 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // import UIKit diff --git a/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendSaveAddressCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendSaveAddressCell.swift index 6eb32e63..4bae24d5 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendSaveAddressCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendSaveAddressCell.swift @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 13.04.2021. -// Copyright © 2021 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // import UIKit diff --git a/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendTransactionTypeCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendTransactionTypeCell.swift index 161eacf5..3a475a0b 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendTransactionTypeCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendTransactionTypeCell.swift @@ -3,7 +3,7 @@ // BeamWallet // // Created by Denis on 20.04.2021. -// Copyright © 2021 Denis. All rights reserved. +// Copyright © 2026 Denis. All rights reserved. // import UIKit From 7a03378a956936b872c8d76fce28ac73731f7d83 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sat, 9 May 2026 17:26:21 +0200 Subject: [PATCH 20/48] bump copyright year to 2026 --- BeamWallet/AppDelegate.swift | 2 +- BeamWallet/BeamSDK/AssetsManager.h | 2 +- BeamWallet/BeamSDK/AssetsManager.mm | 2 +- BeamWallet/BeamSDK/DiskStatusManager.h | 2 +- BeamWallet/BeamSDK/DiskStatusManager.m | 2 +- BeamWallet/BeamSDK/ExchangeManager.h | 2 +- BeamWallet/BeamSDK/ExchangeManager.mm | 2 +- BeamWallet/BeamSDK/MnemonicModel.h | 2 +- BeamWallet/BeamSDK/MnemonicModel.mm | 2 +- BeamWallet/BeamSDK/ObjcExtensions/Color.h | 2 +- BeamWallet/BeamSDK/ObjcExtensions/Color.m | 2 +- BeamWallet/BeamSDK/ObjcExtensions/CurrencyFormatter.h | 2 +- BeamWallet/BeamSDK/ObjcExtensions/CurrencyFormatter.m | 2 +- BeamWallet/BeamSDK/ObjcExtensions/Image.h | 2 +- BeamWallet/BeamSDK/ObjcExtensions/Image.m | 2 +- BeamWallet/BeamSDK/ObjcExtensions/StringLocalize.h | 2 +- BeamWallet/BeamSDK/ObjcExtensions/StringLocalize.m | 2 +- BeamWallet/BeamSDK/ObjcExtensions/StringStd.h | 2 +- BeamWallet/BeamSDK/ObjcExtensions/StringStd.mm | 2 +- BeamWallet/BeamSDK/Objects/BMAddress.h | 2 +- BeamWallet/BeamSDK/Objects/BMAddress.mm | 2 +- BeamWallet/BeamSDK/Objects/BMAsset.h | 2 +- BeamWallet/BeamSDK/Objects/BMAsset.m | 2 +- BeamWallet/BeamSDK/Objects/BMChat.h | 2 +- BeamWallet/BeamSDK/Objects/BMChat.mm | 2 +- BeamWallet/BeamSDK/Objects/BMContact.h | 2 +- BeamWallet/BeamSDK/Objects/BMContact.m | 2 +- BeamWallet/BeamSDK/Objects/BMCurrency.h | 2 +- BeamWallet/BeamSDK/Objects/BMCurrency.m | 2 +- BeamWallet/BeamSDK/Objects/BMDexOrder.h | 2 +- BeamWallet/BeamSDK/Objects/BMDexOrder.mm | 2 +- BeamWallet/BeamSDK/Objects/BMDuration.h | 2 +- BeamWallet/BeamSDK/Objects/BMDuration.m | 2 +- BeamWallet/BeamSDK/Objects/BMInstantMessage.h | 2 +- BeamWallet/BeamSDK/Objects/BMInstantMessage.mm | 2 +- BeamWallet/BeamSDK/Objects/BMLanguage.h | 2 +- BeamWallet/BeamSDK/Objects/BMLanguage.m | 2 +- BeamWallet/BeamSDK/Objects/BMLockScreenValue.h | 2 +- BeamWallet/BeamSDK/Objects/BMLockScreenValue.m | 2 +- BeamWallet/BeamSDK/Objects/BMLogValue.h | 2 +- BeamWallet/BeamSDK/Objects/BMLogValue.m | 2 +- BeamWallet/BeamSDK/Objects/BMNotification.h | 2 +- BeamWallet/BeamSDK/Objects/BMNotification.m | 2 +- BeamWallet/BeamSDK/Objects/BMPaymentInfo.h | 2 +- BeamWallet/BeamSDK/Objects/BMPaymentInfo.m | 2 +- BeamWallet/BeamSDK/Objects/BMPaymentProof.h | 2 +- BeamWallet/BeamSDK/Objects/BMPaymentProof.m | 2 +- BeamWallet/BeamSDK/Objects/BMPreparedTransaction.h | 2 +- BeamWallet/BeamSDK/Objects/BMTransaction.h | 2 +- BeamWallet/BeamSDK/Objects/BMTransaction.m | 2 +- BeamWallet/BeamSDK/Objects/BMTransactionParameters.h | 2 +- BeamWallet/BeamSDK/Objects/BMTransactionParameters.m | 2 +- BeamWallet/BeamSDK/Objects/BMUTXO.h | 2 +- BeamWallet/BeamSDK/Objects/BMUTXO.m | 2 +- BeamWallet/BeamSDK/Objects/BMWalletStatus.h | 2 +- BeamWallet/BeamSDK/Objects/BMWalletStatus.m | 2 +- BeamWallet/BeamSDK/Objects/BMWord.h | 2 +- BeamWallet/BeamSDK/Objects/BMWord.m | 2 +- BeamWallet/BeamSDK/RecoveryProgress.h | 2 +- BeamWallet/BeamSDK/RecoveryProgress.mm | 2 +- BeamWallet/BeamSDK/Settings.h | 2 +- BeamWallet/BeamSDK/Settings.m | 2 +- BeamWallet/BeamSDK/WalletModel.h | 2 +- BeamWallet/BeamSDK/WalletModel.mm | 2 +- BeamWallet/Controls/BMAutoSecurityScreen.swift | 2 +- BeamWallet/Controls/BMButton.swift | 2 +- BeamWallet/Controls/BMCategoryColorsView.swift | 2 +- BeamWallet/Controls/BMCopyLabel.swift | 2 +- BeamWallet/Controls/BMCountdownView.swift | 2 +- BeamWallet/Controls/BMDataPickerViewController.swift | 2 +- BeamWallet/Controls/BMDoubleAuthViewController.swift | 2 +- BeamWallet/Controls/BMEmptyView.swift | 2 +- BeamWallet/Controls/BMField.swift | 2 +- BeamWallet/Controls/BMGradientView.swift | 2 +- BeamWallet/Controls/BMInputCopyBar.swift | 2 +- BeamWallet/Controls/BMInputViewController.swift | 2 +- BeamWallet/Controls/BMLockScreen.swift | 2 +- BeamWallet/Controls/BMNetworkStatusView.swift | 2 +- BeamWallet/Controls/BMNotificationView.swift | 2 +- BeamWallet/Controls/BMOptionPickerViewController.swift | 2 +- BeamWallet/Controls/BMOverlayTimerView.swift | 2 +- BeamWallet/Controls/BMPagingViewController.swift | 2 +- BeamWallet/Controls/BMPopoverMenu.swift | 2 +- BeamWallet/Controls/BMRippleCell.swift | 2 +- BeamWallet/Controls/BMSearchView.swift | 2 +- BeamWallet/Controls/BMSegmentView.swift | 2 +- BeamWallet/Controls/BMSlider.swift | 2 +- BeamWallet/Controls/BMSnackBar.swift | 2 +- BeamWallet/Controls/BMStepView.swift | 2 +- BeamWallet/Controls/BMTableHeaderTitleView.swift | 2 +- BeamWallet/Controls/BMTextView.swift | 2 +- BeamWallet/Controls/BMToast.swift | 2 +- BeamWallet/Controls/BMWordField.swift | 2 +- BeamWallet/Controls/Cell/BMAddressCell.swift | 2 +- BeamWallet/Controls/Cell/BMAmountCell.swift | 2 +- BeamWallet/Controls/Cell/BMCellProtocol.swift | 2 +- BeamWallet/Controls/Cell/BMCopyCell.swift | 2 +- BeamWallet/Controls/Cell/BMDetailAmountCell.swift | 2 +- BeamWallet/Controls/Cell/BMDetailCell.swift | 2 +- BeamWallet/Controls/Cell/BMEmptyCell.swift | 2 +- BeamWallet/Controls/Cell/BMExpandCell.swift | 2 +- BeamWallet/Controls/Cell/BMFieldCell.swift | 2 +- BeamWallet/Controls/Cell/BMMultiLinesCell.swift | 2 +- BeamWallet/Controls/Cell/BMMultiLinesCell2.swift | 2 +- BeamWallet/Controls/Cell/BMPickedAddressCell.swift | 2 +- BeamWallet/Controls/Cell/BMPickerCell.swift | 2 +- BeamWallet/Controls/Cell/BMThreeLineCell.swift | 2 +- BeamWallet/Controls/Cell/PopoverAssetCell.swift | 2 +- BeamWallet/Controls/Cell/PopoverCell.swift | 2 +- BeamWallet/Controls/Cell/SingleCenterCell.swift | 2 +- BeamWallet/Controls/NonDisappearingView.swift | 2 +- BeamWallet/Controls/QRCodeView.swift | 2 +- BeamWallet/Extensions/AlertController.swift | 2 +- BeamWallet/Extensions/Application.swift | 2 +- BeamWallet/Extensions/Array.swift | 2 +- BeamWallet/Extensions/BackButtonItem.swift | 2 +- BeamWallet/Extensions/Button.swift | 2 +- BeamWallet/Extensions/Color.swift | 2 +- BeamWallet/Extensions/Device.swift | 2 +- BeamWallet/Extensions/Double.swift | 2 +- BeamWallet/Extensions/Field.swift | 2 +- BeamWallet/Extensions/Image.swift | 2 +- BeamWallet/Extensions/Label.swift | 2 +- BeamWallet/Extensions/String.swift | 2 +- BeamWallet/Extensions/TableView.swift | 2 +- BeamWallet/Extensions/TextView.swift | 2 +- BeamWallet/Extensions/UITapGestureRecognizer.swift | 2 +- BeamWallet/Extensions/URL.swift | 2 +- BeamWallet/Extensions/View.swift | 2 +- BeamWallet/Extensions/ViewController.swift | 2 +- BeamWallet/Manager/AppStoreReviewManager.swift | 2 +- BeamWallet/Manager/BackgroundDownloader.swift | 2 +- BeamWallet/Manager/BiometricAuthorization.swift | 2 +- BeamWallet/Manager/Crowdin/CrowdinManager.swift | 2 +- BeamWallet/Manager/KeychainManager.swift | 2 +- BeamWallet/Manager/New Group/CrowdinCredentials.swift | 2 +- BeamWallet/Manager/NotificationManager.swift | 2 +- BeamWallet/Manager/OnboardManager.swift | 2 +- BeamWallet/Manager/PasswordManager.swift | 2 +- BeamWallet/Manager/RestoreManager.swift | 2 +- BeamWallet/Manager/ShortcutManager.swift | 2 +- BeamWallet/Model/Address/AddressViewModel.swift | 2 +- BeamWallet/Model/Address/DetailAddressViewModel.swift | 2 +- BeamWallet/Model/Address/EditAddressViewModel.swift | 2 +- BeamWallet/Model/Address/ReceiveAddressViewModel.swift | 2 +- BeamWallet/Model/AssetSwaps/AssetSwapCreateViewModel.swift | 2 +- BeamWallet/Model/AssetSwaps/AssetSwapDetailsViewModel.swift | 2 +- BeamWallet/Model/AssetSwaps/AssetSwapsViewModel.swift | 2 +- BeamWallet/Model/Messenger/MessengerChatListViewModel.swift | 2 +- BeamWallet/Model/Messenger/MessengerConversationViewModel.swift | 2 +- BeamWallet/Model/Objects/BMMultiLineItem.swift | 2 +- BeamWallet/Model/Objects/BMPickerData.swift | 2 +- BeamWallet/Model/Settings/SettingsViewModel.swift | 2 +- BeamWallet/Model/Transaction/DetailTransactionViewModel.swift | 2 +- BeamWallet/Model/Transaction/SendTransactionViewModel.swift | 2 +- BeamWallet/Model/Transaction/TransactionViewModel.swift | 2 +- BeamWallet/Model/UTXO/DetailUTXOViewModel.swift | 2 +- BeamWallet/Model/Wallet/AssetViewModel.swift | 2 +- BeamWallet/Model/Wallet/StatusViewModel.swift | 2 +- BeamWallet/Protocols/Configurable.swift | 2 +- BeamWallet/Protocols/Fonts.swift | 2 +- BeamWallet/Protocols/Frames.swift | 2 +- BeamWallet/Protocols/KeyboardListener.swift | 2 +- BeamWallet/Protocols/Progress.swift | 2 +- BeamWallet/Protocols/Resources.swift | 2 +- BeamWallet/Protocols/ShareLogActivity.swift | 2 +- BeamWallet/ViewControllers/Base/BaseCell.swift | 2 +- BeamWallet/ViewControllers/Base/BaseNavigationController.swift | 2 +- BeamWallet/ViewControllers/Base/BaseView.swift | 2 +- BeamWallet/ViewControllers/Base/BaseViewController.swift | 2 +- BeamWallet/ViewControllers/Base/BaseWizardViewController.swift | 2 +- .../Login/EnterWalletPasswordViewController.swift | 2 +- .../Login/New Group/RestoreOptionsViewController.swift | 2 +- .../Login/OpenWalletProgressViewController.swift | 2 +- .../Login/PhraseViewController/Cells/InputWordCell.swift | 2 +- .../Login/PhraseViewController/Cells/WordCell.swift | 2 +- .../Login/PhraseViewController/SeedPhraseViewController.swift | 2 +- BeamWallet/ViewControllers/Login/WellcomeViewController.swift | 2 +- .../ViewControllers/Main/Addresses/AddressTableView.swift | 2 +- .../ViewControllers/Main/Addresses/AddressViewController.swift | 2 +- .../Main/Addresses/AddressesViewController.swift | 2 +- .../Main/Addresses/Cell/AddressExpiresCell.swift | 2 +- .../Main/Addresses/EditAddressViewController.swift | 2 +- .../Main/Addresses/ShowTokenViewController.swift | 2 +- .../Main/AssetSwaps/AssetSwapCreateViewController.swift | 2 +- .../Main/AssetSwaps/AssetSwapDetailsViewController.swift | 2 +- .../Main/AssetSwaps/AssetSwapsViewController.swift | 2 +- .../Main/AssetSwaps/Cells/AssetSwapOrderCell.swift | 2 +- .../Main/Assets/AssetBalanceViewController.swift | 2 +- .../ViewControllers/Main/Assets/AssetDescViewController.swift | 2 +- .../ViewControllers/Main/Assets/AssetDetailViewController.swift | 2 +- .../ViewControllers/Main/Assets/AssetInfoViewController.swift | 2 +- .../ViewControllers/Main/Assets/AssetsViewController.swift | 2 +- .../ViewControllers/Main/Assets/Cells/AssetDropDownCell.swift | 2 +- .../ViewControllers/Main/Assets/Cells/AssetExporerCell.swift | 2 +- .../ViewControllers/Main/Assets/Cells/AssetSiteCell.swift | 2 +- .../ViewControllers/Main/Menu/LeftMenuViewController.swift | 2 +- .../ViewControllers/Main/Messenger/MessengerBubbleCell.swift | 2 +- .../ViewControllers/Main/Messenger/MessengerChatCell.swift | 2 +- .../Main/Messenger/MessengerChatListViewController.swift | 2 +- .../Main/Messenger/MessengerChatViewController.swift | 2 +- .../Main/Messenger/MessengerNewChatViewController.swift | 2 +- .../ViewControllers/Main/Notifications/NotificationItem.swift | 2 +- .../Main/Notifications/NotificationVersionViewController.swift | 2 +- .../Main/Notifications/NotificationViewModel.swift | 2 +- .../Main/Notifications/NotificationsViewController.swift | 2 +- .../Main/Passwords/CreateWalletPasswordViewController.swift | 2 +- .../ViewControllers/Main/Passwords/UnlockPasswordPopover.swift | 2 +- .../Main/Passwords/UnlockPasswordViewController.swift | 2 +- .../ViewControllers/Main/QRCode/PreviewQRViewController.swift | 2 +- .../ViewControllers/Main/QRCode/QRCodeSmallViewController.swift | 2 +- .../ViewControllers/Main/QRCode/QRScannerViewController.swift | 2 +- BeamWallet/ViewControllers/Main/QRCode/QRViewController.swift | 2 +- BeamWallet/ViewControllers/Main/Settings/Cells/NodeCell.swift | 2 +- .../ViewControllers/Main/Settings/Cells/SettingsCell.swift | 2 +- .../Main/Settings/Cells/SettingsSubTitleCell.swift | 2 +- .../ViewControllers/Main/Settings/OwnerKeyViewController.swift | 2 +- .../Main/Settings/SelectNodeViewController.swift | 2 +- .../Main/Settings/TrustedNodeViewController.swift | 2 +- BeamWallet/ViewControllers/Main/UTXO/Cells/UTXODetailCell.swift | 2 +- .../ViewControllers/Main/UTXO/Cells/UTXOTransactionCell.swift | 2 +- BeamWallet/ViewControllers/Main/UTXO/UTXOTableView.swift | 2 +- .../ViewControllers/Main/Wallet/Cells/AssetAvailableCell.swift | 2 +- BeamWallet/ViewControllers/Main/Wallet/Cells/OnboardCell.swift | 2 +- .../ViewControllers/Main/Wallet/Cells/WalletStatusCell.swift | 2 +- .../Main/Wallet/Cells/WalletTransactionCell.swift | 2 +- .../Main/Wallet/Cells/WalletTransactionSearchCell.swift | 2 +- .../Wallet/MaxPrivacyDetail/Cell/MaxPrivacyDetailCell.swift | 2 +- .../MaxPrivacyDetail/MaxPrivacyDetailViewController.swift | 2 +- .../Wallet/MaxPrivacyDetail/MaxPrivacyDetailViewModel.swift | 2 +- .../Main/Wallet/Receive/AssetSearchViewController.swift | 2 +- .../Main/Wallet/Receive/Cells/ReceiveAddressButtonsCell.swift | 2 +- .../Main/Wallet/Receive/Cells/ReceiveAmountCell.swift | 2 +- .../Main/Wallet/Receive/ReceiveListViewController.swift | 2 +- .../Main/Wallet/Receive/ReceiveViewController.swift | 2 +- .../Main/Wallet/Send/Cells/BMSearchAddressCell.swift | 2 +- BeamWallet/ViewControllers/Main/Wallet/Send/Cells/FeeCell.swift | 2 +- .../ViewControllers/Main/Wallet/Send/Cells/SendAllCell.swift | 2 +- .../ViewControllers/Main/Wallet/Send/InputFeePopover.swift | 2 +- .../Main/Wallet/Send/SaveContactViewController.swift | 2 +- .../ViewControllers/Main/Wallet/Send/SearchTableView.swift | 2 +- .../Main/Wallet/Send/SendConfirmViewController.swift | 2 +- .../ViewControllers/Main/Wallet/Send/SendViewController.swift | 2 +- .../Main/Wallet/Send/WalletSendViewController.swift | 2 +- .../Wallet/Transaction/Cell/TransactionPaymentProofCell.swift | 2 +- .../Main/Wallet/Transaction/Cell/TransactionUTXOCell.swift | 2 +- .../Wallet/Transaction/PaymentProofDetailViewController.swift | 2 +- .../Main/Wallet/Transaction/TransactionPageViewController.swift | 2 +- .../Main/Wallet/Transaction/TransactionShareView.swift | 2 +- .../Main/Wallet/Transaction/TransactionViewController.swift | 2 +- .../Main/Wallet/Transaction/TransactionsTableView.swift | 2 +- .../Main/Wallet/Transaction/TransactionsViewController.swift | 2 +- .../ViewControllers/Main/Wallet/WalletViewController.swift | 2 +- .../Main/Wallet/Withdraw/WithdrawViewController.swift | 2 +- BeamWalletNotificationView/NotificationViewController.swift | 2 +- 255 files changed, 255 insertions(+), 255 deletions(-) diff --git a/BeamWallet/AppDelegate.swift b/BeamWallet/AppDelegate.swift index 39c5d0e3..9dfa7282 100644 --- a/BeamWallet/AppDelegate.swift +++ b/BeamWallet/AppDelegate.swift @@ -2,7 +2,7 @@ // AppDelegate.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/AssetsManager.h b/BeamWallet/BeamSDK/AssetsManager.h index 3fcf25e5..9372b778 100644 --- a/BeamWallet/BeamSDK/AssetsManager.h +++ b/BeamWallet/BeamSDK/AssetsManager.h @@ -2,7 +2,7 @@ // AssetsManager.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/AssetsManager.mm b/BeamWallet/BeamSDK/AssetsManager.mm index b2a28ddf..2d24f6be 100644 --- a/BeamWallet/BeamSDK/AssetsManager.mm +++ b/BeamWallet/BeamSDK/AssetsManager.mm @@ -2,7 +2,7 @@ // AssetsManager.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/DiskStatusManager.h b/BeamWallet/BeamSDK/DiskStatusManager.h index a4729e76..d4ae9319 100644 --- a/BeamWallet/BeamSDK/DiskStatusManager.h +++ b/BeamWallet/BeamSDK/DiskStatusManager.h @@ -2,7 +2,7 @@ // DiskStatusManager.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/DiskStatusManager.m b/BeamWallet/BeamSDK/DiskStatusManager.m index 1579d548..71d2343e 100644 --- a/BeamWallet/BeamSDK/DiskStatusManager.m +++ b/BeamWallet/BeamSDK/DiskStatusManager.m @@ -2,7 +2,7 @@ // DiskStatusManager.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/ExchangeManager.h b/BeamWallet/BeamSDK/ExchangeManager.h index c5678a5e..ff30a137 100644 --- a/BeamWallet/BeamSDK/ExchangeManager.h +++ b/BeamWallet/BeamSDK/ExchangeManager.h @@ -2,7 +2,7 @@ // ExchangeManager.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/ExchangeManager.mm b/BeamWallet/BeamSDK/ExchangeManager.mm index 82cbb89a..821b122a 100644 --- a/BeamWallet/BeamSDK/ExchangeManager.mm +++ b/BeamWallet/BeamSDK/ExchangeManager.mm @@ -2,7 +2,7 @@ // ExchangeManager.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/MnemonicModel.h b/BeamWallet/BeamSDK/MnemonicModel.h index dcd6356e..19cc93ac 100644 --- a/BeamWallet/BeamSDK/MnemonicModel.h +++ b/BeamWallet/BeamSDK/MnemonicModel.h @@ -2,7 +2,7 @@ // MnemonicModel.h // BeamTest // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/MnemonicModel.mm b/BeamWallet/BeamSDK/MnemonicModel.mm index 3b240e4c..2b888c26 100644 --- a/BeamWallet/BeamSDK/MnemonicModel.mm +++ b/BeamWallet/BeamSDK/MnemonicModel.mm @@ -2,7 +2,7 @@ // MnemonicModel.m // BeamTest // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/ObjcExtensions/Color.h b/BeamWallet/BeamSDK/ObjcExtensions/Color.h index 9e92493b..9b85a844 100644 --- a/BeamWallet/BeamSDK/ObjcExtensions/Color.h +++ b/BeamWallet/BeamSDK/ObjcExtensions/Color.h @@ -2,7 +2,7 @@ // Color.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/ObjcExtensions/Color.m b/BeamWallet/BeamSDK/ObjcExtensions/Color.m index 25be7f4e..5ba2c906 100644 --- a/BeamWallet/BeamSDK/ObjcExtensions/Color.m +++ b/BeamWallet/BeamSDK/ObjcExtensions/Color.m @@ -2,7 +2,7 @@ // Color.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/ObjcExtensions/CurrencyFormatter.h b/BeamWallet/BeamSDK/ObjcExtensions/CurrencyFormatter.h index 5640305e..ae52108c 100644 --- a/BeamWallet/BeamSDK/ObjcExtensions/CurrencyFormatter.h +++ b/BeamWallet/BeamSDK/ObjcExtensions/CurrencyFormatter.h @@ -2,7 +2,7 @@ // CurrencyFormatter.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/ObjcExtensions/CurrencyFormatter.m b/BeamWallet/BeamSDK/ObjcExtensions/CurrencyFormatter.m index b887e6c8..0eaecb43 100644 --- a/BeamWallet/BeamSDK/ObjcExtensions/CurrencyFormatter.m +++ b/BeamWallet/BeamSDK/ObjcExtensions/CurrencyFormatter.m @@ -2,7 +2,7 @@ // CurrencyFormatter.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/ObjcExtensions/Image.h b/BeamWallet/BeamSDK/ObjcExtensions/Image.h index 6ac9d983..98ad5fd2 100644 --- a/BeamWallet/BeamSDK/ObjcExtensions/Image.h +++ b/BeamWallet/BeamSDK/ObjcExtensions/Image.h @@ -2,7 +2,7 @@ // Image.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/ObjcExtensions/Image.m b/BeamWallet/BeamSDK/ObjcExtensions/Image.m index 89c6bbb3..5fd9d9c3 100644 --- a/BeamWallet/BeamSDK/ObjcExtensions/Image.m +++ b/BeamWallet/BeamSDK/ObjcExtensions/Image.m @@ -2,7 +2,7 @@ // Image.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/ObjcExtensions/StringLocalize.h b/BeamWallet/BeamSDK/ObjcExtensions/StringLocalize.h index e5d4a467..ca0afda4 100644 --- a/BeamWallet/BeamSDK/ObjcExtensions/StringLocalize.h +++ b/BeamWallet/BeamSDK/ObjcExtensions/StringLocalize.h @@ -2,7 +2,7 @@ // StringLocalize.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/ObjcExtensions/StringLocalize.m b/BeamWallet/BeamSDK/ObjcExtensions/StringLocalize.m index 54598e49..dcadaec9 100644 --- a/BeamWallet/BeamSDK/ObjcExtensions/StringLocalize.m +++ b/BeamWallet/BeamSDK/ObjcExtensions/StringLocalize.m @@ -2,7 +2,7 @@ // StringLocalize.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/ObjcExtensions/StringStd.h b/BeamWallet/BeamSDK/ObjcExtensions/StringStd.h index 42415935..f475e1a2 100644 --- a/BeamWallet/BeamSDK/ObjcExtensions/StringStd.h +++ b/BeamWallet/BeamSDK/ObjcExtensions/StringStd.h @@ -1,7 +1,7 @@ // // String.h // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/ObjcExtensions/StringStd.mm b/BeamWallet/BeamSDK/ObjcExtensions/StringStd.mm index 69bcf1dd..912aee6d 100644 --- a/BeamWallet/BeamSDK/ObjcExtensions/StringStd.mm +++ b/BeamWallet/BeamSDK/ObjcExtensions/StringStd.mm @@ -1,7 +1,7 @@ // // String.m // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMAddress.h b/BeamWallet/BeamSDK/Objects/BMAddress.h index 419b4c73..15130a4b 100644 --- a/BeamWallet/BeamSDK/Objects/BMAddress.h +++ b/BeamWallet/BeamSDK/Objects/BMAddress.h @@ -2,7 +2,7 @@ // BMAddress.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMAddress.mm b/BeamWallet/BeamSDK/Objects/BMAddress.mm index a9d205a9..d16e5e32 100644 --- a/BeamWallet/BeamSDK/Objects/BMAddress.mm +++ b/BeamWallet/BeamSDK/Objects/BMAddress.mm @@ -2,7 +2,7 @@ // BMAddress.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMAsset.h b/BeamWallet/BeamSDK/Objects/BMAsset.h index 8e42cc77..d392c506 100644 --- a/BeamWallet/BeamSDK/Objects/BMAsset.h +++ b/BeamWallet/BeamSDK/Objects/BMAsset.h @@ -2,7 +2,7 @@ // BMAsset.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMAsset.m b/BeamWallet/BeamSDK/Objects/BMAsset.m index 4a3f5647..0bb587e8 100644 --- a/BeamWallet/BeamSDK/Objects/BMAsset.m +++ b/BeamWallet/BeamSDK/Objects/BMAsset.m @@ -2,7 +2,7 @@ // BMAsset.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMChat.h b/BeamWallet/BeamSDK/Objects/BMChat.h index 8b500cc0..b8914c9c 100644 --- a/BeamWallet/BeamSDK/Objects/BMChat.h +++ b/BeamWallet/BeamSDK/Objects/BMChat.h @@ -2,7 +2,7 @@ // BMChat.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMChat.mm b/BeamWallet/BeamSDK/Objects/BMChat.mm index a4756567..a365824e 100644 --- a/BeamWallet/BeamSDK/Objects/BMChat.mm +++ b/BeamWallet/BeamSDK/Objects/BMChat.mm @@ -2,7 +2,7 @@ // BMChat.mm // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMContact.h b/BeamWallet/BeamSDK/Objects/BMContact.h index a0f9890a..6b89c6f8 100644 --- a/BeamWallet/BeamSDK/Objects/BMContact.h +++ b/BeamWallet/BeamSDK/Objects/BMContact.h @@ -2,7 +2,7 @@ // BMContact.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMContact.m b/BeamWallet/BeamSDK/Objects/BMContact.m index bf293f51..24ae47d9 100644 --- a/BeamWallet/BeamSDK/Objects/BMContact.m +++ b/BeamWallet/BeamSDK/Objects/BMContact.m @@ -2,7 +2,7 @@ // BMContact.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMCurrency.h b/BeamWallet/BeamSDK/Objects/BMCurrency.h index 3522163f..3588cac8 100644 --- a/BeamWallet/BeamSDK/Objects/BMCurrency.h +++ b/BeamWallet/BeamSDK/Objects/BMCurrency.h @@ -2,7 +2,7 @@ // BMCurrency.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMCurrency.m b/BeamWallet/BeamSDK/Objects/BMCurrency.m index 79edb977..91b76028 100644 --- a/BeamWallet/BeamSDK/Objects/BMCurrency.m +++ b/BeamWallet/BeamSDK/Objects/BMCurrency.m @@ -2,7 +2,7 @@ // BMCurrency.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMDexOrder.h b/BeamWallet/BeamSDK/Objects/BMDexOrder.h index f8e7242a..2d5f9b00 100644 --- a/BeamWallet/BeamSDK/Objects/BMDexOrder.h +++ b/BeamWallet/BeamSDK/Objects/BMDexOrder.h @@ -2,7 +2,7 @@ // BMDexOrder.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMDexOrder.mm b/BeamWallet/BeamSDK/Objects/BMDexOrder.mm index 83a1a9a0..a310a35b 100644 --- a/BeamWallet/BeamSDK/Objects/BMDexOrder.mm +++ b/BeamWallet/BeamSDK/Objects/BMDexOrder.mm @@ -2,7 +2,7 @@ // BMDexOrder.mm // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMDuration.h b/BeamWallet/BeamSDK/Objects/BMDuration.h index 6765c44f..ca555502 100644 --- a/BeamWallet/BeamSDK/Objects/BMDuration.h +++ b/BeamWallet/BeamSDK/Objects/BMDuration.h @@ -2,7 +2,7 @@ // BMDuration.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMDuration.m b/BeamWallet/BeamSDK/Objects/BMDuration.m index 4386e1f2..c7b64392 100644 --- a/BeamWallet/BeamSDK/Objects/BMDuration.m +++ b/BeamWallet/BeamSDK/Objects/BMDuration.m @@ -2,7 +2,7 @@ // BMDuration.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMInstantMessage.h b/BeamWallet/BeamSDK/Objects/BMInstantMessage.h index c30135f7..027589d3 100644 --- a/BeamWallet/BeamSDK/Objects/BMInstantMessage.h +++ b/BeamWallet/BeamSDK/Objects/BMInstantMessage.h @@ -2,7 +2,7 @@ // BMInstantMessage.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMInstantMessage.mm b/BeamWallet/BeamSDK/Objects/BMInstantMessage.mm index 0f67eb3d..6374258b 100644 --- a/BeamWallet/BeamSDK/Objects/BMInstantMessage.mm +++ b/BeamWallet/BeamSDK/Objects/BMInstantMessage.mm @@ -2,7 +2,7 @@ // BMInstantMessage.mm // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMLanguage.h b/BeamWallet/BeamSDK/Objects/BMLanguage.h index 6cf67470..25d6850b 100644 --- a/BeamWallet/BeamSDK/Objects/BMLanguage.h +++ b/BeamWallet/BeamSDK/Objects/BMLanguage.h @@ -2,7 +2,7 @@ // BMLanguage.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMLanguage.m b/BeamWallet/BeamSDK/Objects/BMLanguage.m index 4380a85e..32864565 100644 --- a/BeamWallet/BeamSDK/Objects/BMLanguage.m +++ b/BeamWallet/BeamSDK/Objects/BMLanguage.m @@ -2,7 +2,7 @@ // BMLanguage.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMLockScreenValue.h b/BeamWallet/BeamSDK/Objects/BMLockScreenValue.h index e36bf16e..7b1b9532 100644 --- a/BeamWallet/BeamSDK/Objects/BMLockScreenValue.h +++ b/BeamWallet/BeamSDK/Objects/BMLockScreenValue.h @@ -2,7 +2,7 @@ // BMLockScreenValue.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMLockScreenValue.m b/BeamWallet/BeamSDK/Objects/BMLockScreenValue.m index 5d5aeb20..1b497db8 100644 --- a/BeamWallet/BeamSDK/Objects/BMLockScreenValue.m +++ b/BeamWallet/BeamSDK/Objects/BMLockScreenValue.m @@ -2,7 +2,7 @@ // BMLockScreenValue.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMLogValue.h b/BeamWallet/BeamSDK/Objects/BMLogValue.h index 187225ca..3b473955 100644 --- a/BeamWallet/BeamSDK/Objects/BMLogValue.h +++ b/BeamWallet/BeamSDK/Objects/BMLogValue.h @@ -2,7 +2,7 @@ // BMLogValue.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMLogValue.m b/BeamWallet/BeamSDK/Objects/BMLogValue.m index 6543e20f..b68d90ce 100644 --- a/BeamWallet/BeamSDK/Objects/BMLogValue.m +++ b/BeamWallet/BeamSDK/Objects/BMLogValue.m @@ -2,7 +2,7 @@ // BMLogValue.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMNotification.h b/BeamWallet/BeamSDK/Objects/BMNotification.h index 69fa862e..0bcc3123 100644 --- a/BeamWallet/BeamSDK/Objects/BMNotification.h +++ b/BeamWallet/BeamSDK/Objects/BMNotification.h @@ -2,7 +2,7 @@ // BMNotification.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMNotification.m b/BeamWallet/BeamSDK/Objects/BMNotification.m index 685a3d42..d087d11f 100644 --- a/BeamWallet/BeamSDK/Objects/BMNotification.m +++ b/BeamWallet/BeamSDK/Objects/BMNotification.m @@ -2,7 +2,7 @@ // BMNotification.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMPaymentInfo.h b/BeamWallet/BeamSDK/Objects/BMPaymentInfo.h index 6516f4ec..3a20e63d 100644 --- a/BeamWallet/BeamSDK/Objects/BMPaymentInfo.h +++ b/BeamWallet/BeamSDK/Objects/BMPaymentInfo.h @@ -2,7 +2,7 @@ // BMPaymentInfo.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMPaymentInfo.m b/BeamWallet/BeamSDK/Objects/BMPaymentInfo.m index 2841857c..82ec4572 100644 --- a/BeamWallet/BeamSDK/Objects/BMPaymentInfo.m +++ b/BeamWallet/BeamSDK/Objects/BMPaymentInfo.m @@ -2,7 +2,7 @@ // BMPaymentInfo.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMPaymentProof.h b/BeamWallet/BeamSDK/Objects/BMPaymentProof.h index b352aa9c..e813e989 100644 --- a/BeamWallet/BeamSDK/Objects/BMPaymentProof.h +++ b/BeamWallet/BeamSDK/Objects/BMPaymentProof.h @@ -2,7 +2,7 @@ // BMPaymentProof.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMPaymentProof.m b/BeamWallet/BeamSDK/Objects/BMPaymentProof.m index c2b16400..6695c154 100644 --- a/BeamWallet/BeamSDK/Objects/BMPaymentProof.m +++ b/BeamWallet/BeamSDK/Objects/BMPaymentProof.m @@ -2,7 +2,7 @@ // BMPaymentProof.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMPreparedTransaction.h b/BeamWallet/BeamSDK/Objects/BMPreparedTransaction.h index 639e2246..642f7fa4 100644 --- a/BeamWallet/BeamSDK/Objects/BMPreparedTransaction.h +++ b/BeamWallet/BeamSDK/Objects/BMPreparedTransaction.h @@ -2,7 +2,7 @@ // BMPreparedTransaction.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMTransaction.h b/BeamWallet/BeamSDK/Objects/BMTransaction.h index 93e0ba10..2bddb52e 100644 --- a/BeamWallet/BeamSDK/Objects/BMTransaction.h +++ b/BeamWallet/BeamSDK/Objects/BMTransaction.h @@ -2,7 +2,7 @@ // BMTransaction.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMTransaction.m b/BeamWallet/BeamSDK/Objects/BMTransaction.m index 9ca480aa..578bcb33 100644 --- a/BeamWallet/BeamSDK/Objects/BMTransaction.m +++ b/BeamWallet/BeamSDK/Objects/BMTransaction.m @@ -2,7 +2,7 @@ // BMTransaction.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMTransactionParameters.h b/BeamWallet/BeamSDK/Objects/BMTransactionParameters.h index b9418e8a..8b9f5e4f 100644 --- a/BeamWallet/BeamSDK/Objects/BMTransactionParameters.h +++ b/BeamWallet/BeamSDK/Objects/BMTransactionParameters.h @@ -2,7 +2,7 @@ // BMTransactionParameters.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMTransactionParameters.m b/BeamWallet/BeamSDK/Objects/BMTransactionParameters.m index 466480da..4e735d77 100644 --- a/BeamWallet/BeamSDK/Objects/BMTransactionParameters.m +++ b/BeamWallet/BeamSDK/Objects/BMTransactionParameters.m @@ -2,7 +2,7 @@ // BMTransactionParameters.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMUTXO.h b/BeamWallet/BeamSDK/Objects/BMUTXO.h index cc41124c..3e846353 100644 --- a/BeamWallet/BeamSDK/Objects/BMUTXO.h +++ b/BeamWallet/BeamSDK/Objects/BMUTXO.h @@ -2,7 +2,7 @@ // BMUTXO.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMUTXO.m b/BeamWallet/BeamSDK/Objects/BMUTXO.m index efd432d7..a146506f 100644 --- a/BeamWallet/BeamSDK/Objects/BMUTXO.m +++ b/BeamWallet/BeamSDK/Objects/BMUTXO.m @@ -2,7 +2,7 @@ // BMUTXO.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMWalletStatus.h b/BeamWallet/BeamSDK/Objects/BMWalletStatus.h index 51a3abb5..fb266030 100644 --- a/BeamWallet/BeamSDK/Objects/BMWalletStatus.h +++ b/BeamWallet/BeamSDK/Objects/BMWalletStatus.h @@ -2,7 +2,7 @@ // BMWalletStatus.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMWalletStatus.m b/BeamWallet/BeamSDK/Objects/BMWalletStatus.m index a4fbfd57..784b0fc5 100644 --- a/BeamWallet/BeamSDK/Objects/BMWalletStatus.m +++ b/BeamWallet/BeamSDK/Objects/BMWalletStatus.m @@ -2,7 +2,7 @@ // BMWalletStatus.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMWord.h b/BeamWallet/BeamSDK/Objects/BMWord.h index 18721a93..49208107 100644 --- a/BeamWallet/BeamSDK/Objects/BMWord.h +++ b/BeamWallet/BeamSDK/Objects/BMWord.h @@ -2,7 +2,7 @@ // BMWord.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Objects/BMWord.m b/BeamWallet/BeamSDK/Objects/BMWord.m index 31ab6f0c..84338b60 100644 --- a/BeamWallet/BeamSDK/Objects/BMWord.m +++ b/BeamWallet/BeamSDK/Objects/BMWord.m @@ -2,7 +2,7 @@ // BMWord.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/RecoveryProgress.h b/BeamWallet/BeamSDK/RecoveryProgress.h index 720e28e4..ebfd061b 100644 --- a/BeamWallet/BeamSDK/RecoveryProgress.h +++ b/BeamWallet/BeamSDK/RecoveryProgress.h @@ -2,7 +2,7 @@ // RecoveryProgress.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/RecoveryProgress.mm b/BeamWallet/BeamSDK/RecoveryProgress.mm index 5af3b5a3..62cf807c 100644 --- a/BeamWallet/BeamSDK/RecoveryProgress.mm +++ b/BeamWallet/BeamSDK/RecoveryProgress.mm @@ -2,7 +2,7 @@ // RecoveryProgress.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Settings.h b/BeamWallet/BeamSDK/Settings.h index 8ed457fa..a04d0736 100644 --- a/BeamWallet/BeamSDK/Settings.h +++ b/BeamWallet/BeamSDK/Settings.h @@ -2,7 +2,7 @@ // Settings.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/Settings.m b/BeamWallet/BeamSDK/Settings.m index 3a318f44..9b3f6592 100644 --- a/BeamWallet/BeamSDK/Settings.m +++ b/BeamWallet/BeamSDK/Settings.m @@ -2,7 +2,7 @@ // Settings.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/WalletModel.h b/BeamWallet/BeamSDK/WalletModel.h index bef26214..76a79c72 100644 --- a/BeamWallet/BeamSDK/WalletModel.h +++ b/BeamWallet/BeamSDK/WalletModel.h @@ -2,7 +2,7 @@ // WalletModel.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/BeamSDK/WalletModel.mm b/BeamWallet/BeamSDK/WalletModel.mm index 3948e652..c047ee84 100644 --- a/BeamWallet/BeamSDK/WalletModel.mm +++ b/BeamWallet/BeamSDK/WalletModel.mm @@ -2,7 +2,7 @@ // WalletModel.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMAutoSecurityScreen.swift b/BeamWallet/Controls/BMAutoSecurityScreen.swift index 5da94d8d..b5834a0f 100755 --- a/BeamWallet/Controls/BMAutoSecurityScreen.swift +++ b/BeamWallet/Controls/BMAutoSecurityScreen.swift @@ -2,7 +2,7 @@ // BMAutoSecurityScreen.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMButton.swift b/BeamWallet/Controls/BMButton.swift index 00e4899e..8b3e4aec 100644 --- a/BeamWallet/Controls/BMButton.swift +++ b/BeamWallet/Controls/BMButton.swift @@ -3,7 +3,7 @@ // BeamWallet // // 2/28/19. -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMCategoryColorsView.swift b/BeamWallet/Controls/BMCategoryColorsView.swift index 58293dbe..4b1c2f7f 100644 --- a/BeamWallet/Controls/BMCategoryColorsView.swift +++ b/BeamWallet/Controls/BMCategoryColorsView.swift @@ -2,7 +2,7 @@ // BMCategoryColorsView.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMCopyLabel.swift b/BeamWallet/Controls/BMCopyLabel.swift index 6a44c7d7..7084fde6 100644 --- a/BeamWallet/Controls/BMCopyLabel.swift +++ b/BeamWallet/Controls/BMCopyLabel.swift @@ -2,7 +2,7 @@ // BMCopyLabel.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMCountdownView.swift b/BeamWallet/Controls/BMCountdownView.swift index 98f60048..745f6571 100644 --- a/BeamWallet/Controls/BMCountdownView.swift +++ b/BeamWallet/Controls/BMCountdownView.swift @@ -2,7 +2,7 @@ // BMCountdownView.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMDataPickerViewController.swift b/BeamWallet/Controls/BMDataPickerViewController.swift index a594ab6a..9d9f7372 100644 --- a/BeamWallet/Controls/BMDataPickerViewController.swift +++ b/BeamWallet/Controls/BMDataPickerViewController.swift @@ -2,7 +2,7 @@ // BMDataPickerViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMDoubleAuthViewController.swift b/BeamWallet/Controls/BMDoubleAuthViewController.swift index 06bf9cb2..487e5a25 100644 --- a/BeamWallet/Controls/BMDoubleAuthViewController.swift +++ b/BeamWallet/Controls/BMDoubleAuthViewController.swift @@ -2,7 +2,7 @@ // BMDoubleAuthViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMEmptyView.swift b/BeamWallet/Controls/BMEmptyView.swift index 773e782d..a061074c 100644 --- a/BeamWallet/Controls/BMEmptyView.swift +++ b/BeamWallet/Controls/BMEmptyView.swift @@ -2,7 +2,7 @@ // BMEmptyView.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMField.swift b/BeamWallet/Controls/BMField.swift index 91507fb2..b15f632c 100644 --- a/BeamWallet/Controls/BMField.swift +++ b/BeamWallet/Controls/BMField.swift @@ -2,7 +2,7 @@ // BMField.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMGradientView.swift b/BeamWallet/Controls/BMGradientView.swift index 31d9cc18..02ab2a87 100644 --- a/BeamWallet/Controls/BMGradientView.swift +++ b/BeamWallet/Controls/BMGradientView.swift @@ -2,7 +2,7 @@ // BMGradientView.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMInputCopyBar.swift b/BeamWallet/Controls/BMInputCopyBar.swift index 1f3a29f3..74feb52b 100644 --- a/BeamWallet/Controls/BMInputCopyBar.swift +++ b/BeamWallet/Controls/BMInputCopyBar.swift @@ -2,7 +2,7 @@ // BMInputCopyBar.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMInputViewController.swift b/BeamWallet/Controls/BMInputViewController.swift index 67973b15..dbea7dbc 100644 --- a/BeamWallet/Controls/BMInputViewController.swift +++ b/BeamWallet/Controls/BMInputViewController.swift @@ -2,7 +2,7 @@ // BMInputViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMLockScreen.swift b/BeamWallet/Controls/BMLockScreen.swift index 98511490..d36405bc 100644 --- a/BeamWallet/Controls/BMLockScreen.swift +++ b/BeamWallet/Controls/BMLockScreen.swift @@ -2,7 +2,7 @@ // LockScreen.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMNetworkStatusView.swift b/BeamWallet/Controls/BMNetworkStatusView.swift index d2b2dfe7..fb1eddb4 100644 --- a/BeamWallet/Controls/BMNetworkStatusView.swift +++ b/BeamWallet/Controls/BMNetworkStatusView.swift @@ -2,7 +2,7 @@ // BMStatusView.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMNotificationView.swift b/BeamWallet/Controls/BMNotificationView.swift index f8873dfa..6285038f 100644 --- a/BeamWallet/Controls/BMNotificationView.swift +++ b/BeamWallet/Controls/BMNotificationView.swift @@ -2,7 +2,7 @@ // BMNotificationView.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMOptionPickerViewController.swift b/BeamWallet/Controls/BMOptionPickerViewController.swift index 57f2d0eb..3c23ec50 100644 --- a/BeamWallet/Controls/BMOptionPickerViewController.swift +++ b/BeamWallet/Controls/BMOptionPickerViewController.swift @@ -2,7 +2,7 @@ // BMOptionPickerViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMOverlayTimerView.swift b/BeamWallet/Controls/BMOverlayTimerView.swift index 9c56c958..4ec4b9a9 100644 --- a/BeamWallet/Controls/BMOverlayTimerView.swift +++ b/BeamWallet/Controls/BMOverlayTimerView.swift @@ -2,7 +2,7 @@ // BMOverlayTimerView.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMPagingViewController.swift b/BeamWallet/Controls/BMPagingViewController.swift index 997c17c2..5f242733 100644 --- a/BeamWallet/Controls/BMPagingViewController.swift +++ b/BeamWallet/Controls/BMPagingViewController.swift @@ -2,7 +2,7 @@ // BMPagingViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMPopoverMenu.swift b/BeamWallet/Controls/BMPopoverMenu.swift index e68b35b0..74ece2d8 100644 --- a/BeamWallet/Controls/BMPopoverMenu.swift +++ b/BeamWallet/Controls/BMPopoverMenu.swift @@ -2,7 +2,7 @@ // BMPopoverMenu.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMRippleCell.swift b/BeamWallet/Controls/BMRippleCell.swift index 57fdb23a..4da148ff 100644 --- a/BeamWallet/Controls/BMRippleCell.swift +++ b/BeamWallet/Controls/BMRippleCell.swift @@ -2,7 +2,7 @@ // BMRippleCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMSearchView.swift b/BeamWallet/Controls/BMSearchView.swift index 210cbf59..54361c92 100644 --- a/BeamWallet/Controls/BMSearchView.swift +++ b/BeamWallet/Controls/BMSearchView.swift @@ -2,7 +2,7 @@ // BMSearchView.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMSegmentView.swift b/BeamWallet/Controls/BMSegmentView.swift index b314cb0b..7e8ec6fc 100644 --- a/BeamWallet/Controls/BMSegmentView.swift +++ b/BeamWallet/Controls/BMSegmentView.swift @@ -2,7 +2,7 @@ // BMSegmentView.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMSlider.swift b/BeamWallet/Controls/BMSlider.swift index d2589b27..e11fc9a0 100644 --- a/BeamWallet/Controls/BMSlider.swift +++ b/BeamWallet/Controls/BMSlider.swift @@ -2,7 +2,7 @@ // BMSlider.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMSnackBar.swift b/BeamWallet/Controls/BMSnackBar.swift index 9a6af248..629640bf 100644 --- a/BeamWallet/Controls/BMSnackBar.swift +++ b/BeamWallet/Controls/BMSnackBar.swift @@ -2,7 +2,7 @@ // BMSnackBar.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMStepView.swift b/BeamWallet/Controls/BMStepView.swift index be0274d6..b2390e32 100644 --- a/BeamWallet/Controls/BMStepView.swift +++ b/BeamWallet/Controls/BMStepView.swift @@ -3,7 +3,7 @@ // BeamWallet // // 3/1/19. -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMTableHeaderTitleView.swift b/BeamWallet/Controls/BMTableHeaderTitleView.swift index 13935898..eef02511 100644 --- a/BeamWallet/Controls/BMTableHeaderTitleView.swift +++ b/BeamWallet/Controls/BMTableHeaderTitleView.swift @@ -2,7 +2,7 @@ // BMTableHeaderTitleView.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMTextView.swift b/BeamWallet/Controls/BMTextView.swift index 768194de..ab94c697 100644 --- a/BeamWallet/Controls/BMTextView.swift +++ b/BeamWallet/Controls/BMTextView.swift @@ -3,7 +3,7 @@ // BeamWallet // // 3/1/19. -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMToast.swift b/BeamWallet/Controls/BMToast.swift index b4e1391d..9e9d546b 100644 --- a/BeamWallet/Controls/BMToast.swift +++ b/BeamWallet/Controls/BMToast.swift @@ -2,7 +2,7 @@ // BMToast.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/BMWordField.swift b/BeamWallet/Controls/BMWordField.swift index e635395b..bc56d23d 100644 --- a/BeamWallet/Controls/BMWordField.swift +++ b/BeamWallet/Controls/BMWordField.swift @@ -3,7 +3,7 @@ // BeamWallet // // 3/1/19. -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/Cell/BMAddressCell.swift b/BeamWallet/Controls/Cell/BMAddressCell.swift index c668db0e..0ad786fc 100644 --- a/BeamWallet/Controls/Cell/BMAddressCell.swift +++ b/BeamWallet/Controls/Cell/BMAddressCell.swift @@ -2,7 +2,7 @@ // BMAddressCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/Cell/BMAmountCell.swift b/BeamWallet/Controls/Cell/BMAmountCell.swift index e354643a..d67ab8b1 100644 --- a/BeamWallet/Controls/Cell/BMAmountCell.swift +++ b/BeamWallet/Controls/Cell/BMAmountCell.swift @@ -2,7 +2,7 @@ // BMAmountCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/Cell/BMCellProtocol.swift b/BeamWallet/Controls/Cell/BMCellProtocol.swift index 5354149b..a5f36e4e 100644 --- a/BeamWallet/Controls/Cell/BMCellProtocol.swift +++ b/BeamWallet/Controls/Cell/BMCellProtocol.swift @@ -2,7 +2,7 @@ // BMCellProtocol.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/Cell/BMCopyCell.swift b/BeamWallet/Controls/Cell/BMCopyCell.swift index 05b045fa..4e90d6ac 100644 --- a/BeamWallet/Controls/Cell/BMCopyCell.swift +++ b/BeamWallet/Controls/Cell/BMCopyCell.swift @@ -2,7 +2,7 @@ // BMMultiLinesCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/Cell/BMDetailAmountCell.swift b/BeamWallet/Controls/Cell/BMDetailAmountCell.swift index 74b09b8e..a27e6609 100644 --- a/BeamWallet/Controls/Cell/BMDetailAmountCell.swift +++ b/BeamWallet/Controls/Cell/BMDetailAmountCell.swift @@ -2,7 +2,7 @@ // BMMultiLinesCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/Cell/BMDetailCell.swift b/BeamWallet/Controls/Cell/BMDetailCell.swift index 07c9b578..2aae08aa 100644 --- a/BeamWallet/Controls/Cell/BMDetailCell.swift +++ b/BeamWallet/Controls/Cell/BMDetailCell.swift @@ -2,7 +2,7 @@ // BMDetailCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/Cell/BMEmptyCell.swift b/BeamWallet/Controls/Cell/BMEmptyCell.swift index 7db57613..64a9a1b0 100644 --- a/BeamWallet/Controls/Cell/BMEmptyCell.swift +++ b/BeamWallet/Controls/Cell/BMEmptyCell.swift @@ -2,7 +2,7 @@ // BMEmptyCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/Cell/BMExpandCell.swift b/BeamWallet/Controls/Cell/BMExpandCell.swift index 94f2b36f..e32e3722 100644 --- a/BeamWallet/Controls/Cell/BMExpandCell.swift +++ b/BeamWallet/Controls/Cell/BMExpandCell.swift @@ -2,7 +2,7 @@ // BMExpandCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/Cell/BMFieldCell.swift b/BeamWallet/Controls/Cell/BMFieldCell.swift index c1d91271..aa9d3178 100644 --- a/BeamWallet/Controls/Cell/BMFieldCell.swift +++ b/BeamWallet/Controls/Cell/BMFieldCell.swift @@ -2,7 +2,7 @@ // BMFieldCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/Cell/BMMultiLinesCell.swift b/BeamWallet/Controls/Cell/BMMultiLinesCell.swift index 11459c3e..42015f7b 100644 --- a/BeamWallet/Controls/Cell/BMMultiLinesCell.swift +++ b/BeamWallet/Controls/Cell/BMMultiLinesCell.swift @@ -2,7 +2,7 @@ // BMMultiLinesCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/Cell/BMMultiLinesCell2.swift b/BeamWallet/Controls/Cell/BMMultiLinesCell2.swift index 8c4d66fb..4b63dfba 100644 --- a/BeamWallet/Controls/Cell/BMMultiLinesCell2.swift +++ b/BeamWallet/Controls/Cell/BMMultiLinesCell2.swift @@ -2,7 +2,7 @@ // BMMultiLinesCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/Cell/BMPickedAddressCell.swift b/BeamWallet/Controls/Cell/BMPickedAddressCell.swift index 6a752ddc..c0369e74 100644 --- a/BeamWallet/Controls/Cell/BMPickedAddressCell.swift +++ b/BeamWallet/Controls/Cell/BMPickedAddressCell.swift @@ -2,7 +2,7 @@ // BMPickedAddressCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/Cell/BMPickerCell.swift b/BeamWallet/Controls/Cell/BMPickerCell.swift index 9ba96027..95220281 100644 --- a/BeamWallet/Controls/Cell/BMPickerCell.swift +++ b/BeamWallet/Controls/Cell/BMPickerCell.swift @@ -2,7 +2,7 @@ // BMPickerCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/Cell/BMThreeLineCell.swift b/BeamWallet/Controls/Cell/BMThreeLineCell.swift index 96acd395..33df6140 100644 --- a/BeamWallet/Controls/Cell/BMThreeLineCell.swift +++ b/BeamWallet/Controls/Cell/BMThreeLineCell.swift @@ -2,7 +2,7 @@ // BMThreeLineCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/Cell/PopoverAssetCell.swift b/BeamWallet/Controls/Cell/PopoverAssetCell.swift index a69af639..97a1e6f6 100644 --- a/BeamWallet/Controls/Cell/PopoverAssetCell.swift +++ b/BeamWallet/Controls/Cell/PopoverAssetCell.swift @@ -2,7 +2,7 @@ // PopoverAssetCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/Cell/PopoverCell.swift b/BeamWallet/Controls/Cell/PopoverCell.swift index 97d81503..f494a921 100644 --- a/BeamWallet/Controls/Cell/PopoverCell.swift +++ b/BeamWallet/Controls/Cell/PopoverCell.swift @@ -2,7 +2,7 @@ // PopoverCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/Cell/SingleCenterCell.swift b/BeamWallet/Controls/Cell/SingleCenterCell.swift index c898f19f..bb318231 100644 --- a/BeamWallet/Controls/Cell/SingleCenterCell.swift +++ b/BeamWallet/Controls/Cell/SingleCenterCell.swift @@ -2,7 +2,7 @@ // SingleCenterCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/NonDisappearingView.swift b/BeamWallet/Controls/NonDisappearingView.swift index 2f34ac7d..6b000a79 100644 --- a/BeamWallet/Controls/NonDisappearingView.swift +++ b/BeamWallet/Controls/NonDisappearingView.swift @@ -2,7 +2,7 @@ // NonDisappearingView.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Controls/QRCodeView.swift b/BeamWallet/Controls/QRCodeView.swift index b046a595..d07fdb8a 100644 --- a/BeamWallet/Controls/QRCodeView.swift +++ b/BeamWallet/Controls/QRCodeView.swift @@ -2,7 +2,7 @@ // QRCodeView.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Extensions/AlertController.swift b/BeamWallet/Extensions/AlertController.swift index b9114952..7b45a16d 100644 --- a/BeamWallet/Extensions/AlertController.swift +++ b/BeamWallet/Extensions/AlertController.swift @@ -2,7 +2,7 @@ // AlertController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Extensions/Application.swift b/BeamWallet/Extensions/Application.swift index 769ee015..b6d6c1c9 100644 --- a/BeamWallet/Extensions/Application.swift +++ b/BeamWallet/Extensions/Application.swift @@ -2,7 +2,7 @@ // Application.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Extensions/Array.swift b/BeamWallet/Extensions/Array.swift index d252b87b..2be2419e 100644 --- a/BeamWallet/Extensions/Array.swift +++ b/BeamWallet/Extensions/Array.swift @@ -2,7 +2,7 @@ // Array.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Extensions/BackButtonItem.swift b/BeamWallet/Extensions/BackButtonItem.swift index 350466e6..af326b33 100644 --- a/BeamWallet/Extensions/BackButtonItem.swift +++ b/BeamWallet/Extensions/BackButtonItem.swift @@ -2,7 +2,7 @@ // BackButtonItem.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Extensions/Button.swift b/BeamWallet/Extensions/Button.swift index fc080084..16e0c2b6 100644 --- a/BeamWallet/Extensions/Button.swift +++ b/BeamWallet/Extensions/Button.swift @@ -2,7 +2,7 @@ // Button.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Extensions/Color.swift b/BeamWallet/Extensions/Color.swift index 7c48b19d..baacfd01 100644 --- a/BeamWallet/Extensions/Color.swift +++ b/BeamWallet/Extensions/Color.swift @@ -2,7 +2,7 @@ // Color.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Extensions/Device.swift b/BeamWallet/Extensions/Device.swift index 476210c7..81be1cea 100644 --- a/BeamWallet/Extensions/Device.swift +++ b/BeamWallet/Extensions/Device.swift @@ -2,7 +2,7 @@ // Device.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Extensions/Double.swift b/BeamWallet/Extensions/Double.swift index fce88b2f..6648d6b6 100644 --- a/BeamWallet/Extensions/Double.swift +++ b/BeamWallet/Extensions/Double.swift @@ -2,7 +2,7 @@ // Double.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Extensions/Field.swift b/BeamWallet/Extensions/Field.swift index 69811cc9..8a2f029e 100644 --- a/BeamWallet/Extensions/Field.swift +++ b/BeamWallet/Extensions/Field.swift @@ -3,7 +3,7 @@ // BeamWallet // // 3/2/19. -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Extensions/Image.swift b/BeamWallet/Extensions/Image.swift index 281ca424..e0bce301 100644 --- a/BeamWallet/Extensions/Image.swift +++ b/BeamWallet/Extensions/Image.swift @@ -2,7 +2,7 @@ // Image.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Extensions/Label.swift b/BeamWallet/Extensions/Label.swift index 7b741c47..6b490fbd 100644 --- a/BeamWallet/Extensions/Label.swift +++ b/BeamWallet/Extensions/Label.swift @@ -3,7 +3,7 @@ // BeamWallet // // 3/2/19. -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Extensions/String.swift b/BeamWallet/Extensions/String.swift index e29eb1f8..5d133e1f 100644 --- a/BeamWallet/Extensions/String.swift +++ b/BeamWallet/Extensions/String.swift @@ -2,7 +2,7 @@ // String.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Extensions/TableView.swift b/BeamWallet/Extensions/TableView.swift index 5a653128..74fc70c9 100644 --- a/BeamWallet/Extensions/TableView.swift +++ b/BeamWallet/Extensions/TableView.swift @@ -2,7 +2,7 @@ // TableView.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Extensions/TextView.swift b/BeamWallet/Extensions/TextView.swift index 4d9e6a6c..ee97f1ab 100644 --- a/BeamWallet/Extensions/TextView.swift +++ b/BeamWallet/Extensions/TextView.swift @@ -2,7 +2,7 @@ // TextView.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Extensions/UITapGestureRecognizer.swift b/BeamWallet/Extensions/UITapGestureRecognizer.swift index 782249e4..6fe35d45 100644 --- a/BeamWallet/Extensions/UITapGestureRecognizer.swift +++ b/BeamWallet/Extensions/UITapGestureRecognizer.swift @@ -2,7 +2,7 @@ // Gesture.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Extensions/URL.swift b/BeamWallet/Extensions/URL.swift index 60dcd230..5d79e79f 100644 --- a/BeamWallet/Extensions/URL.swift +++ b/BeamWallet/Extensions/URL.swift @@ -2,7 +2,7 @@ // URL.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Extensions/View.swift b/BeamWallet/Extensions/View.swift index ebd023b3..8803a0a6 100644 --- a/BeamWallet/Extensions/View.swift +++ b/BeamWallet/Extensions/View.swift @@ -2,7 +2,7 @@ // View.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Extensions/ViewController.swift b/BeamWallet/Extensions/ViewController.swift index b777f530..7a813bf8 100644 --- a/BeamWallet/Extensions/ViewController.swift +++ b/BeamWallet/Extensions/ViewController.swift @@ -3,7 +3,7 @@ // BeamWallet // // 3/2/19. -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Manager/AppStoreReviewManager.swift b/BeamWallet/Manager/AppStoreReviewManager.swift index 8b830f42..1aa17a26 100644 --- a/BeamWallet/Manager/AppStoreReviewManager.swift +++ b/BeamWallet/Manager/AppStoreReviewManager.swift @@ -2,7 +2,7 @@ // AppStoreReviewManager.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Manager/BackgroundDownloader.swift b/BeamWallet/Manager/BackgroundDownloader.swift index 0253a599..f58c8a84 100644 --- a/BeamWallet/Manager/BackgroundDownloader.swift +++ b/BeamWallet/Manager/BackgroundDownloader.swift @@ -2,7 +2,7 @@ // BackgroundDownloader.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Manager/BiometricAuthorization.swift b/BeamWallet/Manager/BiometricAuthorization.swift index ade9871b..23b17219 100644 --- a/BeamWallet/Manager/BiometricAuthorization.swift +++ b/BeamWallet/Manager/BiometricAuthorization.swift @@ -2,7 +2,7 @@ // BiometricAuthorization.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Manager/Crowdin/CrowdinManager.swift b/BeamWallet/Manager/Crowdin/CrowdinManager.swift index c9989a4c..9c179b7d 100644 --- a/BeamWallet/Manager/Crowdin/CrowdinManager.swift +++ b/BeamWallet/Manager/Crowdin/CrowdinManager.swift @@ -2,7 +2,7 @@ // CrowdinManager.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Manager/KeychainManager.swift b/BeamWallet/Manager/KeychainManager.swift index 49fde338..9b355db0 100644 --- a/BeamWallet/Manager/KeychainManager.swift +++ b/BeamWallet/Manager/KeychainManager.swift @@ -2,7 +2,7 @@ // KeychainManager.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Manager/New Group/CrowdinCredentials.swift b/BeamWallet/Manager/New Group/CrowdinCredentials.swift index 9e129466..9ab558e9 100644 --- a/BeamWallet/Manager/New Group/CrowdinCredentials.swift +++ b/BeamWallet/Manager/New Group/CrowdinCredentials.swift @@ -2,7 +2,7 @@ // CrowdinCredentials.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Manager/NotificationManager.swift b/BeamWallet/Manager/NotificationManager.swift index f7b7e524..31d4f169 100644 --- a/BeamWallet/Manager/NotificationManager.swift +++ b/BeamWallet/Manager/NotificationManager.swift @@ -2,7 +2,7 @@ // NotificationManager.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Manager/OnboardManager.swift b/BeamWallet/Manager/OnboardManager.swift index 54493375..9944985e 100644 --- a/BeamWallet/Manager/OnboardManager.swift +++ b/BeamWallet/Manager/OnboardManager.swift @@ -2,7 +2,7 @@ // RestoreManager.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Manager/PasswordManager.swift b/BeamWallet/Manager/PasswordManager.swift index 44ad6a49..a4df2c93 100644 --- a/BeamWallet/Manager/PasswordManager.swift +++ b/BeamWallet/Manager/PasswordManager.swift @@ -2,7 +2,7 @@ // PasswordManager.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Manager/RestoreManager.swift b/BeamWallet/Manager/RestoreManager.swift index 302644df..5190167c 100644 --- a/BeamWallet/Manager/RestoreManager.swift +++ b/BeamWallet/Manager/RestoreManager.swift @@ -2,7 +2,7 @@ // RestoreManager.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Manager/ShortcutManager.swift b/BeamWallet/Manager/ShortcutManager.swift index 05738f91..282d3975 100644 --- a/BeamWallet/Manager/ShortcutManager.swift +++ b/BeamWallet/Manager/ShortcutManager.swift @@ -2,7 +2,7 @@ // ShortcutManager.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Model/Address/AddressViewModel.swift b/BeamWallet/Model/Address/AddressViewModel.swift index a7ecc7ca..79aa5959 100644 --- a/BeamWallet/Model/Address/AddressViewModel.swift +++ b/BeamWallet/Model/Address/AddressViewModel.swift @@ -2,7 +2,7 @@ // AddressViewModel.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Model/Address/DetailAddressViewModel.swift b/BeamWallet/Model/Address/DetailAddressViewModel.swift index 54d4059e..99676b4d 100644 --- a/BeamWallet/Model/Address/DetailAddressViewModel.swift +++ b/BeamWallet/Model/Address/DetailAddressViewModel.swift @@ -2,7 +2,7 @@ // DetailAddressViewModel.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Model/Address/EditAddressViewModel.swift b/BeamWallet/Model/Address/EditAddressViewModel.swift index e751145f..01f40a53 100644 --- a/BeamWallet/Model/Address/EditAddressViewModel.swift +++ b/BeamWallet/Model/Address/EditAddressViewModel.swift @@ -2,7 +2,7 @@ // EditAddressViewModel.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Model/Address/ReceiveAddressViewModel.swift b/BeamWallet/Model/Address/ReceiveAddressViewModel.swift index a93cc628..4edb7e73 100644 --- a/BeamWallet/Model/Address/ReceiveAddressViewModel.swift +++ b/BeamWallet/Model/Address/ReceiveAddressViewModel.swift @@ -2,7 +2,7 @@ // ReceiveAddressViewModel.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Model/AssetSwaps/AssetSwapCreateViewModel.swift b/BeamWallet/Model/AssetSwaps/AssetSwapCreateViewModel.swift index d3059144..8c7e95c8 100644 --- a/BeamWallet/Model/AssetSwaps/AssetSwapCreateViewModel.swift +++ b/BeamWallet/Model/AssetSwaps/AssetSwapCreateViewModel.swift @@ -2,7 +2,7 @@ // AssetSwapCreateViewModel.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Model/AssetSwaps/AssetSwapDetailsViewModel.swift b/BeamWallet/Model/AssetSwaps/AssetSwapDetailsViewModel.swift index 8e6b2dfc..d2034844 100644 --- a/BeamWallet/Model/AssetSwaps/AssetSwapDetailsViewModel.swift +++ b/BeamWallet/Model/AssetSwaps/AssetSwapDetailsViewModel.swift @@ -2,7 +2,7 @@ // AssetSwapDetailsViewModel.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Model/AssetSwaps/AssetSwapsViewModel.swift b/BeamWallet/Model/AssetSwaps/AssetSwapsViewModel.swift index 168a24c7..0eb313f5 100644 --- a/BeamWallet/Model/AssetSwaps/AssetSwapsViewModel.swift +++ b/BeamWallet/Model/AssetSwaps/AssetSwapsViewModel.swift @@ -2,7 +2,7 @@ // AssetSwapsViewModel.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Model/Messenger/MessengerChatListViewModel.swift b/BeamWallet/Model/Messenger/MessengerChatListViewModel.swift index a3e5c1d4..b15853a0 100644 --- a/BeamWallet/Model/Messenger/MessengerChatListViewModel.swift +++ b/BeamWallet/Model/Messenger/MessengerChatListViewModel.swift @@ -2,7 +2,7 @@ // MessengerChatListViewModel.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Model/Messenger/MessengerConversationViewModel.swift b/BeamWallet/Model/Messenger/MessengerConversationViewModel.swift index a13c953c..634b3dd3 100644 --- a/BeamWallet/Model/Messenger/MessengerConversationViewModel.swift +++ b/BeamWallet/Model/Messenger/MessengerConversationViewModel.swift @@ -2,7 +2,7 @@ // MessengerConversationViewModel.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Model/Objects/BMMultiLineItem.swift b/BeamWallet/Model/Objects/BMMultiLineItem.swift index ca8e2854..dee92bea 100644 --- a/BeamWallet/Model/Objects/BMMultiLineItem.swift +++ b/BeamWallet/Model/Objects/BMMultiLineItem.swift @@ -2,7 +2,7 @@ // BMMultiLineItem.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Model/Objects/BMPickerData.swift b/BeamWallet/Model/Objects/BMPickerData.swift index 28420948..bd113e7a 100644 --- a/BeamWallet/Model/Objects/BMPickerData.swift +++ b/BeamWallet/Model/Objects/BMPickerData.swift @@ -2,7 +2,7 @@ // BMPickerData.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Model/Settings/SettingsViewModel.swift b/BeamWallet/Model/Settings/SettingsViewModel.swift index e733b9a4..2a74ae6d 100644 --- a/BeamWallet/Model/Settings/SettingsViewModel.swift +++ b/BeamWallet/Model/Settings/SettingsViewModel.swift @@ -2,7 +2,7 @@ // SettingsViewModel.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Model/Transaction/DetailTransactionViewModel.swift b/BeamWallet/Model/Transaction/DetailTransactionViewModel.swift index 728609df..ce80c376 100644 --- a/BeamWallet/Model/Transaction/DetailTransactionViewModel.swift +++ b/BeamWallet/Model/Transaction/DetailTransactionViewModel.swift @@ -2,7 +2,7 @@ // DetailTransactionViewModel.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Model/Transaction/SendTransactionViewModel.swift b/BeamWallet/Model/Transaction/SendTransactionViewModel.swift index 48d8d4a6..7c6a1647 100644 --- a/BeamWallet/Model/Transaction/SendTransactionViewModel.swift +++ b/BeamWallet/Model/Transaction/SendTransactionViewModel.swift @@ -2,7 +2,7 @@ // SendTransactionViewModel.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Model/Transaction/TransactionViewModel.swift b/BeamWallet/Model/Transaction/TransactionViewModel.swift index abc00697..a219c1ee 100644 --- a/BeamWallet/Model/Transaction/TransactionViewModel.swift +++ b/BeamWallet/Model/Transaction/TransactionViewModel.swift @@ -2,7 +2,7 @@ // TransactionViewModel.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Model/UTXO/DetailUTXOViewModel.swift b/BeamWallet/Model/UTXO/DetailUTXOViewModel.swift index 87d9d881..d5cf960f 100644 --- a/BeamWallet/Model/UTXO/DetailUTXOViewModel.swift +++ b/BeamWallet/Model/UTXO/DetailUTXOViewModel.swift @@ -2,7 +2,7 @@ // DetailUTXOViewModel.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Model/Wallet/AssetViewModel.swift b/BeamWallet/Model/Wallet/AssetViewModel.swift index 5acbfe2e..b07b5486 100644 --- a/BeamWallet/Model/Wallet/AssetViewModel.swift +++ b/BeamWallet/Model/Wallet/AssetViewModel.swift @@ -2,7 +2,7 @@ // AssetViewModel.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Model/Wallet/StatusViewModel.swift b/BeamWallet/Model/Wallet/StatusViewModel.swift index 48f75f33..e34f04a6 100644 --- a/BeamWallet/Model/Wallet/StatusViewModel.swift +++ b/BeamWallet/Model/Wallet/StatusViewModel.swift @@ -2,7 +2,7 @@ // StatusViewModel.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Protocols/Configurable.swift b/BeamWallet/Protocols/Configurable.swift index 47b1a3ac..aa320ecd 100644 --- a/BeamWallet/Protocols/Configurable.swift +++ b/BeamWallet/Protocols/Configurable.swift @@ -2,7 +2,7 @@ // Configurable.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Protocols/Fonts.swift b/BeamWallet/Protocols/Fonts.swift index 93c3a298..bbde8b91 100644 --- a/BeamWallet/Protocols/Fonts.swift +++ b/BeamWallet/Protocols/Fonts.swift @@ -2,7 +2,7 @@ // Fonts.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Protocols/Frames.swift b/BeamWallet/Protocols/Frames.swift index 019cac3f..c647446d 100644 --- a/BeamWallet/Protocols/Frames.swift +++ b/BeamWallet/Protocols/Frames.swift @@ -2,7 +2,7 @@ // Frames.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Protocols/KeyboardListener.swift b/BeamWallet/Protocols/KeyboardListener.swift index f93ae70b..3e1da5e0 100644 --- a/BeamWallet/Protocols/KeyboardListener.swift +++ b/BeamWallet/Protocols/KeyboardListener.swift @@ -2,7 +2,7 @@ // KeyboardListener.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Protocols/Progress.swift b/BeamWallet/Protocols/Progress.swift index 8f1174c7..5c74c8ff 100644 --- a/BeamWallet/Protocols/Progress.swift +++ b/BeamWallet/Protocols/Progress.swift @@ -2,7 +2,7 @@ // SVProgressHUDProtocol.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Protocols/Resources.swift b/BeamWallet/Protocols/Resources.swift index 1ccb278d..fdb18ac5 100644 --- a/BeamWallet/Protocols/Resources.swift +++ b/BeamWallet/Protocols/Resources.swift @@ -2,7 +2,7 @@ // Resources.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/Protocols/ShareLogActivity.swift b/BeamWallet/Protocols/ShareLogActivity.swift index 96817623..5b3e10fb 100644 --- a/BeamWallet/Protocols/ShareLogActivity.swift +++ b/BeamWallet/Protocols/ShareLogActivity.swift @@ -2,7 +2,7 @@ // ShareLogActivity.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Base/BaseCell.swift b/BeamWallet/ViewControllers/Base/BaseCell.swift index 2a033008..f68e1111 100644 --- a/BeamWallet/ViewControllers/Base/BaseCell.swift +++ b/BeamWallet/ViewControllers/Base/BaseCell.swift @@ -3,7 +3,7 @@ // BeamWallet // // 3/1/19. -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Base/BaseNavigationController.swift b/BeamWallet/ViewControllers/Base/BaseNavigationController.swift index 1deb3d50..359c449a 100644 --- a/BeamWallet/ViewControllers/Base/BaseNavigationController.swift +++ b/BeamWallet/ViewControllers/Base/BaseNavigationController.swift @@ -2,7 +2,7 @@ // BaseNavigationController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Base/BaseView.swift b/BeamWallet/ViewControllers/Base/BaseView.swift index d589f0c6..e97dd43a 100644 --- a/BeamWallet/ViewControllers/Base/BaseView.swift +++ b/BeamWallet/ViewControllers/Base/BaseView.swift @@ -2,7 +2,7 @@ // BaseView.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Base/BaseViewController.swift b/BeamWallet/ViewControllers/Base/BaseViewController.swift index 0bb61811..951a3297 100644 --- a/BeamWallet/ViewControllers/Base/BaseViewController.swift +++ b/BeamWallet/ViewControllers/Base/BaseViewController.swift @@ -2,7 +2,7 @@ // BaseViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Base/BaseWizardViewController.swift b/BeamWallet/ViewControllers/Base/BaseWizardViewController.swift index 66a735e8..d703cc47 100644 --- a/BeamWallet/ViewControllers/Base/BaseWizardViewController.swift +++ b/BeamWallet/ViewControllers/Base/BaseWizardViewController.swift @@ -3,7 +3,7 @@ // BeamWallet // // 3/1/19. -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Login/EnterWalletPasswordViewController.swift b/BeamWallet/ViewControllers/Login/EnterWalletPasswordViewController.swift index f8552837..d7b60dc8 100644 --- a/BeamWallet/ViewControllers/Login/EnterWalletPasswordViewController.swift +++ b/BeamWallet/ViewControllers/Login/EnterWalletPasswordViewController.swift @@ -2,7 +2,7 @@ // EnterWalletPasswordViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Login/New Group/RestoreOptionsViewController.swift b/BeamWallet/ViewControllers/Login/New Group/RestoreOptionsViewController.swift index ee31397c..6a26352a 100644 --- a/BeamWallet/ViewControllers/Login/New Group/RestoreOptionsViewController.swift +++ b/BeamWallet/ViewControllers/Login/New Group/RestoreOptionsViewController.swift @@ -2,7 +2,7 @@ // RestoreOptionsViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Login/OpenWalletProgressViewController.swift b/BeamWallet/ViewControllers/Login/OpenWalletProgressViewController.swift index 43e3bf06..88d98c4f 100644 --- a/BeamWallet/ViewControllers/Login/OpenWalletProgressViewController.swift +++ b/BeamWallet/ViewControllers/Login/OpenWalletProgressViewController.swift @@ -2,7 +2,7 @@ // OpenWalletProgressViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Login/PhraseViewController/Cells/InputWordCell.swift b/BeamWallet/ViewControllers/Login/PhraseViewController/Cells/InputWordCell.swift index cd764c25..c2c15691 100644 --- a/BeamWallet/ViewControllers/Login/PhraseViewController/Cells/InputWordCell.swift +++ b/BeamWallet/ViewControllers/Login/PhraseViewController/Cells/InputWordCell.swift @@ -2,7 +2,7 @@ // InputWordCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Login/PhraseViewController/Cells/WordCell.swift b/BeamWallet/ViewControllers/Login/PhraseViewController/Cells/WordCell.swift index 339e524e..6dc4ed37 100644 --- a/BeamWallet/ViewControllers/Login/PhraseViewController/Cells/WordCell.swift +++ b/BeamWallet/ViewControllers/Login/PhraseViewController/Cells/WordCell.swift @@ -2,7 +2,7 @@ // WordCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Login/PhraseViewController/SeedPhraseViewController.swift b/BeamWallet/ViewControllers/Login/PhraseViewController/SeedPhraseViewController.swift index a4697f7d..c0614acf 100644 --- a/BeamWallet/ViewControllers/Login/PhraseViewController/SeedPhraseViewController.swift +++ b/BeamWallet/ViewControllers/Login/PhraseViewController/SeedPhraseViewController.swift @@ -1,7 +1,7 @@ // // SeedPhraseViewController.swift // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Login/WellcomeViewController.swift b/BeamWallet/ViewControllers/Login/WellcomeViewController.swift index 01d86794..08e45769 100644 --- a/BeamWallet/ViewControllers/Login/WellcomeViewController.swift +++ b/BeamWallet/ViewControllers/Login/WellcomeViewController.swift @@ -2,7 +2,7 @@ // WellcomeViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Addresses/AddressTableView.swift b/BeamWallet/ViewControllers/Main/Addresses/AddressTableView.swift index 4ab0fcd3..172d1776 100755 --- a/BeamWallet/ViewControllers/Main/Addresses/AddressTableView.swift +++ b/BeamWallet/ViewControllers/Main/Addresses/AddressTableView.swift @@ -2,7 +2,7 @@ // AddressTableView.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Addresses/AddressViewController.swift b/BeamWallet/ViewControllers/Main/Addresses/AddressViewController.swift index 85879843..70d4d83f 100644 --- a/BeamWallet/ViewControllers/Main/Addresses/AddressViewController.swift +++ b/BeamWallet/ViewControllers/Main/Addresses/AddressViewController.swift @@ -2,7 +2,7 @@ // AddressViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Addresses/AddressesViewController.swift b/BeamWallet/ViewControllers/Main/Addresses/AddressesViewController.swift index 2d9033b5..05375a2c 100644 --- a/BeamWallet/ViewControllers/Main/Addresses/AddressesViewController.swift +++ b/BeamWallet/ViewControllers/Main/Addresses/AddressesViewController.swift @@ -2,7 +2,7 @@ // AddressesViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Addresses/Cell/AddressExpiresCell.swift b/BeamWallet/ViewControllers/Main/Addresses/Cell/AddressExpiresCell.swift index aec89db5..f58a6420 100644 --- a/BeamWallet/ViewControllers/Main/Addresses/Cell/AddressExpiresCell.swift +++ b/BeamWallet/ViewControllers/Main/Addresses/Cell/AddressExpiresCell.swift @@ -2,7 +2,7 @@ // AddressExpireCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Addresses/EditAddressViewController.swift b/BeamWallet/ViewControllers/Main/Addresses/EditAddressViewController.swift index 61cef575..e35e9183 100644 --- a/BeamWallet/ViewControllers/Main/Addresses/EditAddressViewController.swift +++ b/BeamWallet/ViewControllers/Main/Addresses/EditAddressViewController.swift @@ -2,7 +2,7 @@ // EditAddressViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Addresses/ShowTokenViewController.swift b/BeamWallet/ViewControllers/Main/Addresses/ShowTokenViewController.swift index d0fcce5f..4ed5b189 100644 --- a/BeamWallet/ViewControllers/Main/Addresses/ShowTokenViewController.swift +++ b/BeamWallet/ViewControllers/Main/Addresses/ShowTokenViewController.swift @@ -2,7 +2,7 @@ // ShowTokenViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapCreateViewController.swift b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapCreateViewController.swift index f49391dd..a6303c80 100644 --- a/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapCreateViewController.swift +++ b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapCreateViewController.swift @@ -2,7 +2,7 @@ // AssetSwapCreateViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapDetailsViewController.swift b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapDetailsViewController.swift index d74f0378..52caf05d 100644 --- a/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapDetailsViewController.swift +++ b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapDetailsViewController.swift @@ -2,7 +2,7 @@ // AssetSwapDetailsViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapsViewController.swift b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapsViewController.swift index 72d37f8e..6584ebe0 100644 --- a/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapsViewController.swift +++ b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapsViewController.swift @@ -2,7 +2,7 @@ // AssetSwapsViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/AssetSwaps/Cells/AssetSwapOrderCell.swift b/BeamWallet/ViewControllers/Main/AssetSwaps/Cells/AssetSwapOrderCell.swift index 099dd6de..710f9add 100644 --- a/BeamWallet/ViewControllers/Main/AssetSwaps/Cells/AssetSwapOrderCell.swift +++ b/BeamWallet/ViewControllers/Main/AssetSwaps/Cells/AssetSwapOrderCell.swift @@ -2,7 +2,7 @@ // AssetSwapOrderCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Assets/AssetBalanceViewController.swift b/BeamWallet/ViewControllers/Main/Assets/AssetBalanceViewController.swift index a0827980..c9dfc8f6 100644 --- a/BeamWallet/ViewControllers/Main/Assets/AssetBalanceViewController.swift +++ b/BeamWallet/ViewControllers/Main/Assets/AssetBalanceViewController.swift @@ -2,7 +2,7 @@ // AssetInfoViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Assets/AssetDescViewController.swift b/BeamWallet/ViewControllers/Main/Assets/AssetDescViewController.swift index 0051b194..bba1f85f 100644 --- a/BeamWallet/ViewControllers/Main/Assets/AssetDescViewController.swift +++ b/BeamWallet/ViewControllers/Main/Assets/AssetDescViewController.swift @@ -2,7 +2,7 @@ // AssetDescViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Assets/AssetDetailViewController.swift b/BeamWallet/ViewControllers/Main/Assets/AssetDetailViewController.swift index d33eb3f7..0059b600 100644 --- a/BeamWallet/ViewControllers/Main/Assets/AssetDetailViewController.swift +++ b/BeamWallet/ViewControllers/Main/Assets/AssetDetailViewController.swift @@ -2,7 +2,7 @@ // AssetDetailViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Assets/AssetInfoViewController.swift b/BeamWallet/ViewControllers/Main/Assets/AssetInfoViewController.swift index e95ca0d2..ec481ff6 100644 --- a/BeamWallet/ViewControllers/Main/Assets/AssetInfoViewController.swift +++ b/BeamWallet/ViewControllers/Main/Assets/AssetInfoViewController.swift @@ -2,7 +2,7 @@ // AssetInfoViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Assets/AssetsViewController.swift b/BeamWallet/ViewControllers/Main/Assets/AssetsViewController.swift index 0d22c1a0..77eb70ab 100644 --- a/BeamWallet/ViewControllers/Main/Assets/AssetsViewController.swift +++ b/BeamWallet/ViewControllers/Main/Assets/AssetsViewController.swift @@ -2,7 +2,7 @@ // AssetsViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Assets/Cells/AssetDropDownCell.swift b/BeamWallet/ViewControllers/Main/Assets/Cells/AssetDropDownCell.swift index 7ded51a8..e3dd1ba9 100644 --- a/BeamWallet/ViewControllers/Main/Assets/Cells/AssetDropDownCell.swift +++ b/BeamWallet/ViewControllers/Main/Assets/Cells/AssetDropDownCell.swift @@ -2,7 +2,7 @@ // AssetDropDownCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Assets/Cells/AssetExporerCell.swift b/BeamWallet/ViewControllers/Main/Assets/Cells/AssetExporerCell.swift index 8a3c5d4e..24c62aa3 100644 --- a/BeamWallet/ViewControllers/Main/Assets/Cells/AssetExporerCell.swift +++ b/BeamWallet/ViewControllers/Main/Assets/Cells/AssetExporerCell.swift @@ -2,7 +2,7 @@ // AssetExporerCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Assets/Cells/AssetSiteCell.swift b/BeamWallet/ViewControllers/Main/Assets/Cells/AssetSiteCell.swift index e971b6d2..45bdef38 100644 --- a/BeamWallet/ViewControllers/Main/Assets/Cells/AssetSiteCell.swift +++ b/BeamWallet/ViewControllers/Main/Assets/Cells/AssetSiteCell.swift @@ -2,7 +2,7 @@ // AssetSiteCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift b/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift index 432cec52..ae0406fa 100644 --- a/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift +++ b/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift @@ -2,7 +2,7 @@ // LeftMenuViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Messenger/MessengerBubbleCell.swift b/BeamWallet/ViewControllers/Main/Messenger/MessengerBubbleCell.swift index 7226cf61..b456f556 100644 --- a/BeamWallet/ViewControllers/Main/Messenger/MessengerBubbleCell.swift +++ b/BeamWallet/ViewControllers/Main/Messenger/MessengerBubbleCell.swift @@ -2,7 +2,7 @@ // MessengerBubbleCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Messenger/MessengerChatCell.swift b/BeamWallet/ViewControllers/Main/Messenger/MessengerChatCell.swift index 2bd98865..4d0520b6 100644 --- a/BeamWallet/ViewControllers/Main/Messenger/MessengerChatCell.swift +++ b/BeamWallet/ViewControllers/Main/Messenger/MessengerChatCell.swift @@ -2,7 +2,7 @@ // MessengerChatCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Messenger/MessengerChatListViewController.swift b/BeamWallet/ViewControllers/Main/Messenger/MessengerChatListViewController.swift index 6f8af0e4..3b4c7960 100644 --- a/BeamWallet/ViewControllers/Main/Messenger/MessengerChatListViewController.swift +++ b/BeamWallet/ViewControllers/Main/Messenger/MessengerChatListViewController.swift @@ -2,7 +2,7 @@ // MessengerChatListViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Messenger/MessengerChatViewController.swift b/BeamWallet/ViewControllers/Main/Messenger/MessengerChatViewController.swift index e5bef4e8..038107d3 100644 --- a/BeamWallet/ViewControllers/Main/Messenger/MessengerChatViewController.swift +++ b/BeamWallet/ViewControllers/Main/Messenger/MessengerChatViewController.swift @@ -2,7 +2,7 @@ // MessengerChatViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Messenger/MessengerNewChatViewController.swift b/BeamWallet/ViewControllers/Main/Messenger/MessengerNewChatViewController.swift index 79d331e3..1e8dfd6a 100644 --- a/BeamWallet/ViewControllers/Main/Messenger/MessengerNewChatViewController.swift +++ b/BeamWallet/ViewControllers/Main/Messenger/MessengerNewChatViewController.swift @@ -2,7 +2,7 @@ // MessengerNewChatViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Notifications/NotificationItem.swift b/BeamWallet/ViewControllers/Main/Notifications/NotificationItem.swift index b465653f..010f81ee 100644 --- a/BeamWallet/ViewControllers/Main/Notifications/NotificationItem.swift +++ b/BeamWallet/ViewControllers/Main/Notifications/NotificationItem.swift @@ -2,7 +2,7 @@ // NotificationItem.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Notifications/NotificationVersionViewController.swift b/BeamWallet/ViewControllers/Main/Notifications/NotificationVersionViewController.swift index ad645df0..799ca017 100644 --- a/BeamWallet/ViewControllers/Main/Notifications/NotificationVersionViewController.swift +++ b/BeamWallet/ViewControllers/Main/Notifications/NotificationVersionViewController.swift @@ -2,7 +2,7 @@ // NotificationVersionViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Notifications/NotificationViewModel.swift b/BeamWallet/ViewControllers/Main/Notifications/NotificationViewModel.swift index 99fdabf7..b3e37776 100644 --- a/BeamWallet/ViewControllers/Main/Notifications/NotificationViewModel.swift +++ b/BeamWallet/ViewControllers/Main/Notifications/NotificationViewModel.swift @@ -2,7 +2,7 @@ // NotificationViewModel.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Notifications/NotificationsViewController.swift b/BeamWallet/ViewControllers/Main/Notifications/NotificationsViewController.swift index 1ca7872b..3e49da37 100644 --- a/BeamWallet/ViewControllers/Main/Notifications/NotificationsViewController.swift +++ b/BeamWallet/ViewControllers/Main/Notifications/NotificationsViewController.swift @@ -2,7 +2,7 @@ // NotificationsViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Passwords/CreateWalletPasswordViewController.swift b/BeamWallet/ViewControllers/Main/Passwords/CreateWalletPasswordViewController.swift index 71aab24f..a2c986ca 100644 --- a/BeamWallet/ViewControllers/Main/Passwords/CreateWalletPasswordViewController.swift +++ b/BeamWallet/ViewControllers/Main/Passwords/CreateWalletPasswordViewController.swift @@ -2,7 +2,7 @@ // CreateWalletPasswordViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Passwords/UnlockPasswordPopover.swift b/BeamWallet/ViewControllers/Main/Passwords/UnlockPasswordPopover.swift index 3728e52d..acea56d1 100644 --- a/BeamWallet/ViewControllers/Main/Passwords/UnlockPasswordPopover.swift +++ b/BeamWallet/ViewControllers/Main/Passwords/UnlockPasswordPopover.swift @@ -2,7 +2,7 @@ // UnlockPasswordPopover.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Passwords/UnlockPasswordViewController.swift b/BeamWallet/ViewControllers/Main/Passwords/UnlockPasswordViewController.swift index 48abb845..cab7e508 100644 --- a/BeamWallet/ViewControllers/Main/Passwords/UnlockPasswordViewController.swift +++ b/BeamWallet/ViewControllers/Main/Passwords/UnlockPasswordViewController.swift @@ -2,7 +2,7 @@ // UnlockPasswordViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/QRCode/PreviewQRViewController.swift b/BeamWallet/ViewControllers/Main/QRCode/PreviewQRViewController.swift index 5d19a23c..2edf0107 100644 --- a/BeamWallet/ViewControllers/Main/QRCode/PreviewQRViewController.swift +++ b/BeamWallet/ViewControllers/Main/QRCode/PreviewQRViewController.swift @@ -2,7 +2,7 @@ // PreviewQRViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/QRCode/QRCodeSmallViewController.swift b/BeamWallet/ViewControllers/Main/QRCode/QRCodeSmallViewController.swift index 6d7d122c..e9342647 100644 --- a/BeamWallet/ViewControllers/Main/QRCode/QRCodeSmallViewController.swift +++ b/BeamWallet/ViewControllers/Main/QRCode/QRCodeSmallViewController.swift @@ -2,7 +2,7 @@ // QRCodeSmallViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/QRCode/QRScannerViewController.swift b/BeamWallet/ViewControllers/Main/QRCode/QRScannerViewController.swift index 1ada6438..637ed68a 100644 --- a/BeamWallet/ViewControllers/Main/QRCode/QRScannerViewController.swift +++ b/BeamWallet/ViewControllers/Main/QRCode/QRScannerViewController.swift @@ -2,7 +2,7 @@ // QRScannerViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/QRCode/QRViewController.swift b/BeamWallet/ViewControllers/Main/QRCode/QRViewController.swift index 7860d55d..a1d62da7 100644 --- a/BeamWallet/ViewControllers/Main/QRCode/QRViewController.swift +++ b/BeamWallet/ViewControllers/Main/QRCode/QRViewController.swift @@ -2,7 +2,7 @@ // QRViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Settings/Cells/NodeCell.swift b/BeamWallet/ViewControllers/Main/Settings/Cells/NodeCell.swift index 0d7440ae..b2ea4c93 100644 --- a/BeamWallet/ViewControllers/Main/Settings/Cells/NodeCell.swift +++ b/BeamWallet/ViewControllers/Main/Settings/Cells/NodeCell.swift @@ -2,7 +2,7 @@ // NodeCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Settings/Cells/SettingsCell.swift b/BeamWallet/ViewControllers/Main/Settings/Cells/SettingsCell.swift index 11d50661..d74d9f71 100644 --- a/BeamWallet/ViewControllers/Main/Settings/Cells/SettingsCell.swift +++ b/BeamWallet/ViewControllers/Main/Settings/Cells/SettingsCell.swift @@ -2,7 +2,7 @@ // SettingsCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Settings/Cells/SettingsSubTitleCell.swift b/BeamWallet/ViewControllers/Main/Settings/Cells/SettingsSubTitleCell.swift index 726ba123..d3fc637d 100644 --- a/BeamWallet/ViewControllers/Main/Settings/Cells/SettingsSubTitleCell.swift +++ b/BeamWallet/ViewControllers/Main/Settings/Cells/SettingsSubTitleCell.swift @@ -2,7 +2,7 @@ // SettingsSubTitleCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Settings/OwnerKeyViewController.swift b/BeamWallet/ViewControllers/Main/Settings/OwnerKeyViewController.swift index eca269f2..14449bcb 100644 --- a/BeamWallet/ViewControllers/Main/Settings/OwnerKeyViewController.swift +++ b/BeamWallet/ViewControllers/Main/Settings/OwnerKeyViewController.swift @@ -2,7 +2,7 @@ // OwnerKeyViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift b/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift index 2bfa757b..3843ca62 100644 --- a/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift +++ b/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift @@ -2,7 +2,7 @@ // SelectNodeViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Settings/TrustedNodeViewController.swift b/BeamWallet/ViewControllers/Main/Settings/TrustedNodeViewController.swift index 0e4a8f1b..e565413a 100644 --- a/BeamWallet/ViewControllers/Main/Settings/TrustedNodeViewController.swift +++ b/BeamWallet/ViewControllers/Main/Settings/TrustedNodeViewController.swift @@ -2,7 +2,7 @@ // TrustedNodeViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/UTXO/Cells/UTXODetailCell.swift b/BeamWallet/ViewControllers/Main/UTXO/Cells/UTXODetailCell.swift index 3a97bc64..a66c2b2a 100644 --- a/BeamWallet/ViewControllers/Main/UTXO/Cells/UTXODetailCell.swift +++ b/BeamWallet/ViewControllers/Main/UTXO/Cells/UTXODetailCell.swift @@ -2,7 +2,7 @@ // UTXODetailCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/UTXO/Cells/UTXOTransactionCell.swift b/BeamWallet/ViewControllers/Main/UTXO/Cells/UTXOTransactionCell.swift index 79b6171a..f37abe22 100644 --- a/BeamWallet/ViewControllers/Main/UTXO/Cells/UTXOTransactionCell.swift +++ b/BeamWallet/ViewControllers/Main/UTXO/Cells/UTXOTransactionCell.swift @@ -2,7 +2,7 @@ // UTXOTransactionCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/UTXO/UTXOTableView.swift b/BeamWallet/ViewControllers/Main/UTXO/UTXOTableView.swift index 1db30ff3..30861ce0 100644 --- a/BeamWallet/ViewControllers/Main/UTXO/UTXOTableView.swift +++ b/BeamWallet/ViewControllers/Main/UTXO/UTXOTableView.swift @@ -2,7 +2,7 @@ // UTXOTableView.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Cells/AssetAvailableCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Cells/AssetAvailableCell.swift index 57dbb9c5..2478e825 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Cells/AssetAvailableCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Cells/AssetAvailableCell.swift @@ -2,7 +2,7 @@ // AssetAvailableCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Cells/OnboardCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Cells/OnboardCell.swift index c9d9e098..bec60e2d 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Cells/OnboardCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Cells/OnboardCell.swift @@ -2,7 +2,7 @@ // OnboardCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Cells/WalletStatusCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Cells/WalletStatusCell.swift index deff3911..ed120055 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Cells/WalletStatusCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Cells/WalletStatusCell.swift @@ -2,7 +2,7 @@ // WalletStatusCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Cells/WalletTransactionCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Cells/WalletTransactionCell.swift index af577da7..9193c70c 100755 --- a/BeamWallet/ViewControllers/Main/Wallet/Cells/WalletTransactionCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Cells/WalletTransactionCell.swift @@ -2,7 +2,7 @@ // WalletTransactionCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Cells/WalletTransactionSearchCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Cells/WalletTransactionSearchCell.swift index 7085fd61..3399300f 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Cells/WalletTransactionSearchCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Cells/WalletTransactionSearchCell.swift @@ -2,7 +2,7 @@ // WalletTransactionCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/MaxPrivacyDetail/Cell/MaxPrivacyDetailCell.swift b/BeamWallet/ViewControllers/Main/Wallet/MaxPrivacyDetail/Cell/MaxPrivacyDetailCell.swift index d8d89467..bfff367b 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/MaxPrivacyDetail/Cell/MaxPrivacyDetailCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/MaxPrivacyDetail/Cell/MaxPrivacyDetailCell.swift @@ -2,7 +2,7 @@ // MaxPrivacyDetailCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/MaxPrivacyDetail/MaxPrivacyDetailViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/MaxPrivacyDetail/MaxPrivacyDetailViewController.swift index bdb708a5..2f620718 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/MaxPrivacyDetail/MaxPrivacyDetailViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/MaxPrivacyDetail/MaxPrivacyDetailViewController.swift @@ -2,7 +2,7 @@ // MaxPrivacyDetailViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/MaxPrivacyDetail/MaxPrivacyDetailViewModel.swift b/BeamWallet/ViewControllers/Main/Wallet/MaxPrivacyDetail/MaxPrivacyDetailViewModel.swift index f7dcea0d..a715cdf1 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/MaxPrivacyDetail/MaxPrivacyDetailViewModel.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/MaxPrivacyDetail/MaxPrivacyDetailViewModel.swift @@ -2,7 +2,7 @@ // MaxPrivacyDetailViewModel.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Receive/AssetSearchViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Receive/AssetSearchViewController.swift index 75f1a458..c65de7b0 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Receive/AssetSearchViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Receive/AssetSearchViewController.swift @@ -2,7 +2,7 @@ // AssetSearchViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveAddressButtonsCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveAddressButtonsCell.swift index d7720710..71e920f8 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveAddressButtonsCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveAddressButtonsCell.swift @@ -2,7 +2,7 @@ // ReceiveAddressButtonsCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveAmountCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveAmountCell.swift index 05975c23..c64030f4 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveAmountCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Receive/Cells/ReceiveAmountCell.swift @@ -2,7 +2,7 @@ // BMAmountCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Receive/ReceiveListViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Receive/ReceiveListViewController.swift index 00915df5..66db058f 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Receive/ReceiveListViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Receive/ReceiveListViewController.swift @@ -2,7 +2,7 @@ // ReceiveListViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Receive/ReceiveViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Receive/ReceiveViewController.swift index 121b469e..360cd440 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Receive/ReceiveViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Receive/ReceiveViewController.swift @@ -2,7 +2,7 @@ // ReceiveViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/BMSearchAddressCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/BMSearchAddressCell.swift index 54a47d72..6067bdda 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/BMSearchAddressCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/BMSearchAddressCell.swift @@ -2,7 +2,7 @@ // BMSearchAddressCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/FeeCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/FeeCell.swift index a285c4cd..c62265f4 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/FeeCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/FeeCell.swift @@ -2,7 +2,7 @@ // FeeCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendAllCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendAllCell.swift index 83146e2d..07121b90 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendAllCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Send/Cells/SendAllCell.swift @@ -2,7 +2,7 @@ // SendAllCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Send/InputFeePopover.swift b/BeamWallet/ViewControllers/Main/Wallet/Send/InputFeePopover.swift index 00477d88..b668135f 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Send/InputFeePopover.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Send/InputFeePopover.swift @@ -2,7 +2,7 @@ // InputFeePopover.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Send/SaveContactViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Send/SaveContactViewController.swift index cf320a9c..5c185e9d 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Send/SaveContactViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Send/SaveContactViewController.swift @@ -2,7 +2,7 @@ // SaveContactViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Send/SearchTableView.swift b/BeamWallet/ViewControllers/Main/Wallet/Send/SearchTableView.swift index da510d32..7fd443ad 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Send/SearchTableView.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Send/SearchTableView.swift @@ -2,7 +2,7 @@ // UTXOTableView.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Send/SendConfirmViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Send/SendConfirmViewController.swift index 284fbc06..b3b14563 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Send/SendConfirmViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Send/SendConfirmViewController.swift @@ -2,7 +2,7 @@ // SendConfirmViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Send/SendViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Send/SendViewController.swift index 7aaf504b..f8897f95 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Send/SendViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Send/SendViewController.swift @@ -2,7 +2,7 @@ // SendViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Send/WalletSendViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Send/WalletSendViewController.swift index 9f66321d..f7af26b9 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Send/WalletSendViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Send/WalletSendViewController.swift @@ -2,7 +2,7 @@ // LegacyWalletSendViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Transaction/Cell/TransactionPaymentProofCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Transaction/Cell/TransactionPaymentProofCell.swift index 3f1981cb..8a43bd5a 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Transaction/Cell/TransactionPaymentProofCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Transaction/Cell/TransactionPaymentProofCell.swift @@ -2,7 +2,7 @@ // GeneralInfoCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Transaction/Cell/TransactionUTXOCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Transaction/Cell/TransactionUTXOCell.swift index 2bc557b2..176b5d6d 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Transaction/Cell/TransactionUTXOCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Transaction/Cell/TransactionUTXOCell.swift @@ -2,7 +2,7 @@ // TransactionUTXOCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Transaction/PaymentProofDetailViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Transaction/PaymentProofDetailViewController.swift index 92fb0458..e3ea56ad 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Transaction/PaymentProofDetailViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Transaction/PaymentProofDetailViewController.swift @@ -2,7 +2,7 @@ // PaymentProofDetailViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionPageViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionPageViewController.swift index 09516e4a..fbe09270 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionPageViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionPageViewController.swift @@ -2,7 +2,7 @@ // TransactionPageViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionShareView.swift b/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionShareView.swift index 46d3881e..272831ce 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionShareView.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionShareView.swift @@ -2,7 +2,7 @@ // TransactionShareView.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionViewController.swift index c4d0a2cf..b271d827 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionViewController.swift @@ -2,7 +2,7 @@ // TransactionViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionsTableView.swift b/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionsTableView.swift index 69e51c64..10e73cc7 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionsTableView.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionsTableView.swift @@ -2,7 +2,7 @@ // TransactionsTableView.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionsViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionsViewController.swift index df587ed8..cf171ca2 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionsViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Transaction/TransactionsViewController.swift @@ -2,7 +2,7 @@ // TransactionsViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/WalletViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/WalletViewController.swift index 30e7fa80..5c61c162 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/WalletViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/WalletViewController.swift @@ -2,7 +2,7 @@ // WalletViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Withdraw/WithdrawViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Withdraw/WithdrawViewController.swift index 536d730b..156f320e 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Withdraw/WithdrawViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Withdraw/WithdrawViewController.swift @@ -2,7 +2,7 @@ // WithdrawViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/BeamWalletNotificationView/NotificationViewController.swift b/BeamWalletNotificationView/NotificationViewController.swift index 6b1d5ca6..a3d3424c 100644 --- a/BeamWalletNotificationView/NotificationViewController.swift +++ b/BeamWalletNotificationView/NotificationViewController.swift @@ -1,7 +1,7 @@ // // NotificationViewController.swift // BeamWalletNotificationView -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. From bb1aa4252fb63f7a6ba1b2aac9dab4f4d1b97321 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sat, 9 May 2026 17:27:18 +0200 Subject: [PATCH 21/48] feat(utxo): per-asset grouping with split-coins bottom sheet MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rewrite the UTXO screen so coins are grouped by asset, each section topped with an asset header card (icon, unit name, Split pill button). Replaces the prior available/in-progress/spent/unavailable paging tabs. Tapping Split presents a bottom sheet that splits the largest UTXO of the asset into N equal coins (2/3/5/8/10) — the common workaround for the failure mode where the only large coin is locked in an in-flight tx and the wallet has nothing to fund the next send. Splits go through a new AppModel splitCoins:outputGroths:fee: bridge that constructs CreateSplitTransactionParameters and submits via wallet->getAsync()-> startTransaction. AssetIconView reworked to scale its glyph proportionally so the same view renders correctly at the larger header size as well as the existing 28pt cell size. --- BeamWallet.xcodeproj/project.pbxproj | 48 ++ BeamWallet/BeamSDK/AppModel.h | 5 +- BeamWallet/BeamSDK/AppModel.mm | 20 +- BeamWallet/Controls/AssetIconView.swift | 80 ++- BeamWallet/Model/UTXO/AssetUTXOGroup.swift | 49 ++ .../Model/UTXO/SplitCoinsViewModel.swift | 127 +++++ BeamWallet/Model/UTXO/UTXOViewModel.swift | 25 +- BeamWallet/Protocols/LocalizableStrings.swift | 18 +- .../Cells/AssetUTXOSectionHeaderView.swift | 118 +++++ .../UTXO/Cells/SplitCoinPreviewCard.swift | 100 ++++ .../UTXO/Cells/SplitCoinsStripeView.swift | 73 +++ .../Main/UTXO/Cells/UTXOCell.swift | 6 +- .../Main/UTXO/SplitCoinsViewController.swift | 477 ++++++++++++++++++ .../Main/UTXO/UTXODetailViewController.swift | 8 +- .../Main/UTXO/UTXOViewController.swift | 209 ++++---- Resources/cs.lproj/Localizable.strings | 17 + Resources/en.lproj/Localizable.strings | 17 + Resources/es.lproj/Localizable.strings | 17 + Resources/fi-FI.lproj/Localizable.strings | 17 + Resources/fr.lproj/Localizable.strings | 17 + Resources/ko.lproj/Localizable.strings | 17 + Resources/nl.lproj/Localizable.strings | 17 + Resources/ru.lproj/Localizable.strings | 17 + Resources/sv-SE.lproj/Localizable.strings | 17 + Resources/sv.lproj/Localizable.strings | 17 + Resources/th.lproj/Localizable.strings | 17 + Resources/tr.lproj/Localizable.strings | 17 + Resources/vi.lproj/Localizable.strings | 17 + Resources/zh-Hans.lproj/Localizable.strings | 17 + 29 files changed, 1451 insertions(+), 150 deletions(-) create mode 100644 BeamWallet/Model/UTXO/AssetUTXOGroup.swift create mode 100644 BeamWallet/Model/UTXO/SplitCoinsViewModel.swift create mode 100644 BeamWallet/ViewControllers/Main/UTXO/Cells/AssetUTXOSectionHeaderView.swift create mode 100644 BeamWallet/ViewControllers/Main/UTXO/Cells/SplitCoinPreviewCard.swift create mode 100644 BeamWallet/ViewControllers/Main/UTXO/Cells/SplitCoinsStripeView.swift create mode 100644 BeamWallet/ViewControllers/Main/UTXO/SplitCoinsViewController.swift diff --git a/BeamWallet.xcodeproj/project.pbxproj b/BeamWallet.xcodeproj/project.pbxproj index 3dc4f405..d071f8fe 100644 --- a/BeamWallet.xcodeproj/project.pbxproj +++ b/BeamWallet.xcodeproj/project.pbxproj @@ -7,15 +7,18 @@ objects = { /* Begin PBXBuildFile section */ + 000A92658A9461591881CE8C /* SplitCoinsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = E23EA93CE3207A2EBB4D17FD /* SplitCoinsViewModel.swift */; }; 00947887B27F2F825E1E67CC /* MessengerNewChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13CF5C205DC060CADA96F025 /* MessengerNewChatViewController.swift */; }; 05548629568C6211F87DA630 /* MessengerChatListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DFF1052A687C5F2265E618F /* MessengerChatListViewController.swift */; }; 066620C96ABA1816759B7AE3 /* MessengerConversationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A439F6A64EB61AD3DF6945B /* MessengerConversationViewModel.swift */; }; 09BB8194C318850B9C687050 /* Pods_BeamWallet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B5894AC3136298FE0B7E8E3 /* Pods_BeamWallet.framework */; }; 0E952497DFB46C7621546999 /* Pods_BeamWalletTestNet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 36A85446EDA45DA6335930C5 /* Pods_BeamWalletTestNet.framework */; }; + 0EC9234AAD2DC0A1BF7600B4 /* AssetUTXOSectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8865BEE3DDBE9806B38DDE04 /* AssetUTXOSectionHeaderView.swift */; }; 14458CA45E1281FAF80D496D /* MessengerNewChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13CF5C205DC060CADA96F025 /* MessengerNewChatViewController.swift */; }; 15A094B1963EAE81E9B86B33 /* BMDexOrder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 46577647151F6240CBA9CE2D /* BMDexOrder.mm */; }; 215454B3AA22BD789F53A90C /* BMChat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8C5EB5519EB54866BA8DB9A4 /* BMChat.mm */; }; 2361D1F909D78EC50B8C5D5C /* MessengerConversationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A439F6A64EB61AD3DF6945B /* MessengerConversationViewModel.swift */; }; + 275E60FB3A8D4704581DF986 /* SplitCoinsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A5FD8229312777D1D2BB813 /* SplitCoinsViewController.swift */; }; 2C2D70373756666705D14FDE /* AssetSwapCreateViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5B1E2B05648164FC49C46F7 /* AssetSwapCreateViewModel.swift */; }; 30BE993E2DFFA6452A536125 /* BMInstantMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = 20B7F5341703980CD2D3941F /* BMInstantMessage.mm */; }; 31509E4F991BC56BF7F10098 /* AssetSwapDetailsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92C9307A797CCA7FEAABBFD8 /* AssetSwapDetailsViewModel.swift */; }; @@ -24,6 +27,8 @@ 434CC206E4AD461CECAD5DFB /* BMInstantMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = 20B7F5341703980CD2D3941F /* BMInstantMessage.mm */; }; 492305E92FA7A41129BF7346 /* MessengerBubbleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E08B41CEDA5A06EBFD775E76 /* MessengerBubbleCell.swift */; }; 4D7C86E3D4DAAAD7DDFE22E7 /* MessengerChatListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DFF1052A687C5F2265E618F /* MessengerChatListViewController.swift */; }; + 5101D1DB95B6BECFE333B53C /* AssetUTXOSectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8865BEE3DDBE9806B38DDE04 /* AssetUTXOSectionHeaderView.swift */; }; + 532955652A405010EC21607C /* AssetUTXOSectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8865BEE3DDBE9806B38DDE04 /* AssetUTXOSectionHeaderView.swift */; }; 53E3D6F8F19BD21A69380CBA /* Pods_BeamWalletMasterNet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18CF009621EA8E5970DA1D87 /* Pods_BeamWalletMasterNet.framework */; }; 59D5C848EC6C80442BC6A8A3 /* BMOptionPickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53ECF740A61C5F0D941B8B36 /* BMOptionPickerViewController.swift */; }; 5A1A647678A2061222332D16 /* MessengerChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E4020D11686B93F29A46DA /* MessengerChatViewController.swift */; }; @@ -32,7 +37,9 @@ 610B9971C155D841609ACE0F /* libdex.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D7E7F685327E2CAB9E7C69 /* libdex.a */; }; 62D6B4FFAD6FCD00C5206630 /* AssetSwapsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21968CB26C3B977852247761 /* AssetSwapsViewController.swift */; }; 6315A76D06343C9CEDE2EF77 /* AssetSwapsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21968CB26C3B977852247761 /* AssetSwapsViewController.swift */; }; + 6854C506C6836F88B8F8484E /* SplitCoinsStripeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 603CF8C20147C7F9E087C33D /* SplitCoinsStripeView.swift */; }; 69B13BFFB153BF4611F30888 /* MessengerNewChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13CF5C205DC060CADA96F025 /* MessengerNewChatViewController.swift */; }; + 6EA6E49364A07F3740D84921 /* SplitCoinsStripeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 603CF8C20147C7F9E087C33D /* SplitCoinsStripeView.swift */; }; 705F9944DC83B6CC6816678F /* BMOptionPickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53ECF740A61C5F0D941B8B36 /* BMOptionPickerViewController.swift */; }; 75516585C510BB694A1B9AED /* MessengerBubbleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E08B41CEDA5A06EBFD775E76 /* MessengerBubbleCell.swift */; }; 75B069A9EC9A517ABCACFC1E /* MessengerChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E4020D11686B93F29A46DA /* MessengerChatViewController.swift */; }; @@ -43,6 +50,7 @@ 87B508D6F91B6BCDE6EC712F /* BMInstantMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = 20B7F5341703980CD2D3941F /* BMInstantMessage.mm */; }; 88D6972926A283D03D289A48 /* AssetSwapsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFDAF01730E8C754AA8C5175 /* AssetSwapsViewModel.swift */; }; 8E6EABD786898410576636A4 /* BMChat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8C5EB5519EB54866BA8DB9A4 /* BMChat.mm */; }; + 911AF3DF99FDD7FFD07F4830 /* AssetUTXOGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F9B63F6E98BA8303EE2FEAD /* AssetUTXOGroup.swift */; }; 9207DD8726778DF900250E80 /* AssetsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9207DD8626778DF900250E80 /* AssetsViewController.swift */; }; 9207DD8826778DF900250E80 /* AssetsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9207DD8626778DF900250E80 /* AssetsViewController.swift */; }; 9207DD8926778DF900250E80 /* AssetsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9207DD8626778DF900250E80 /* AssetsViewController.swift */; }; @@ -1385,6 +1393,7 @@ 92FE264222A11E4E00102DB4 /* BMExpandCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 92FE263A22A11E4D00102DB4 /* BMExpandCell.xib */; }; 92FE264322A11E4E00102DB4 /* BMExpandCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 92FE263A22A11E4D00102DB4 /* BMExpandCell.xib */; }; 94E405DB59B47772F0662861 /* AssetSwapCreateViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A6A43055CFB5C5820B099A1 /* AssetSwapCreateViewController.swift */; }; + 966EF2ACFF217F06AE183E6E /* SplitCoinsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = E23EA93CE3207A2EBB4D17FD /* SplitCoinsViewModel.swift */; }; 984E5950BBB86D093251AB57 /* MessengerChatCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390F813D5F08AC3C0F47183F /* MessengerChatCell.swift */; }; 9A1790F44DE275FD9644A9F7 /* AssetSwapCreateViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A6A43055CFB5C5820B099A1 /* AssetSwapCreateViewController.swift */; }; 9C3478CC0AB10D577E97E53E /* MessengerChatListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFF464435B3D65DCFC432FA3 /* MessengerChatListViewModel.swift */; }; @@ -1392,14 +1401,22 @@ 9E75E31529DE385C7D153631 /* MessengerChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E4020D11686B93F29A46DA /* MessengerChatViewController.swift */; }; A04389E8E8EE7AB9E4D87007 /* BMChat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8C5EB5519EB54866BA8DB9A4 /* BMChat.mm */; }; A522EB1A22FF64A990518431 /* AssetSwapDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A467070BE6633F1B715DAD /* AssetSwapDetailsViewController.swift */; }; + AAFE8C80296CA6DAA3BC3B1F /* AssetUTXOGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F9B63F6E98BA8303EE2FEAD /* AssetUTXOGroup.swift */; }; AB6BA79FF389E013065D35C9 /* libdex_board.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F426BB6F15C2E08A3E81B87D /* libdex_board.a */; }; + ABA34015221EA45051CC20EB /* SplitCoinsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = E23EA93CE3207A2EBB4D17FD /* SplitCoinsViewModel.swift */; }; + AC3CF90BF3C1ED7E2D19D65A /* SplitCoinPreviewCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B33EC6A5FD1571ED9D1EFFB /* SplitCoinPreviewCard.swift */; }; + B3476711F58F83C2F1CB8F2C /* AssetUTXOGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F9B63F6E98BA8303EE2FEAD /* AssetUTXOGroup.swift */; }; B4FE33729385D12603589437 /* AssetSwapDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A467070BE6633F1B715DAD /* AssetSwapDetailsViewController.swift */; }; B5E7CC16D70E7D12DD9315FC /* MessengerConversationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A439F6A64EB61AD3DF6945B /* MessengerConversationViewModel.swift */; }; B6037162941C5AB71A356FF3 /* AssetSwapDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A467070BE6633F1B715DAD /* AssetSwapDetailsViewController.swift */; }; BCB254DF739D2FA8FF92C672 /* AssetSwapDetailsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92C9307A797CCA7FEAABBFD8 /* AssetSwapDetailsViewModel.swift */; }; BE96C4A71A3D47721D003ACF /* AssetSwapOrderCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CDD341D6CFC3AD26C3F4374 /* AssetSwapOrderCell.swift */; }; + BFF9839E0FE16D5A8645D394 /* SplitCoinsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A5FD8229312777D1D2BB813 /* SplitCoinsViewController.swift */; }; C07BD2850E0E4E55AC706985 /* AssetSwapsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21968CB26C3B977852247761 /* AssetSwapsViewController.swift */; }; + C6FB138B2A261CBC43626204 /* SplitCoinsStripeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 603CF8C20147C7F9E087C33D /* SplitCoinsStripeView.swift */; }; + CA7E68B52D3092D76CBACF7C /* SplitCoinsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A5FD8229312777D1D2BB813 /* SplitCoinsViewController.swift */; }; CCB34673E007AADB0D649F2C /* libdex_board.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F426BB6F15C2E08A3E81B87D /* libdex_board.a */; }; + DAFECCA6179EA6FE92C0ABC7 /* SplitCoinPreviewCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B33EC6A5FD1571ED9D1EFFB /* SplitCoinPreviewCard.swift */; }; DEF279257A2A5B949FBA8B01 /* libdex.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D7E7F685327E2CAB9E7C69 /* libdex.a */; }; DFC07B98C98F293C31F86A8C /* MessengerChatListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DFF1052A687C5F2265E618F /* MessengerChatListViewController.swift */; }; E153DCA098F777EAFAA1D91A /* AssetSwapCreateViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5B1E2B05648164FC49C46F7 /* AssetSwapCreateViewModel.swift */; }; @@ -1407,6 +1424,7 @@ E545F78761926F0D8A51E9B2 /* BMDexOrder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 46577647151F6240CBA9CE2D /* BMDexOrder.mm */; }; E6218D6C7C5BE83B9707F158 /* MessengerChatCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390F813D5F08AC3C0F47183F /* MessengerChatCell.swift */; }; E7EA1E52231681BDE3D26C73 /* AssetSwapsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFDAF01730E8C754AA8C5175 /* AssetSwapsViewModel.swift */; }; + ECF8F9E33148D1833480ADFA /* SplitCoinPreviewCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B33EC6A5FD1571ED9D1EFFB /* SplitCoinPreviewCard.swift */; }; EEE47E74C114A85B33A3A618 /* MessengerChatListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFF464435B3D65DCFC432FA3 /* MessengerChatListViewModel.swift */; }; F00F7FD991CEA0402E131CFF /* AssetSwapCreateViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5B1E2B05648164FC49C46F7 /* AssetSwapCreateViewModel.swift */; }; F0F0F0F0AAAA0002ABCD0001 /* AssetSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */; }; @@ -1496,6 +1514,7 @@ 024109A68A03B9C8D11B9895 /* Pods-BeamWallet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeamWallet.release.xcconfig"; path = "Target Support Files/Pods-BeamWallet/Pods-BeamWallet.release.xcconfig"; sourceTree = ""; }; 13CF5C205DC060CADA96F025 /* MessengerNewChatViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerNewChatViewController.swift; sourceTree = ""; }; 18CF009621EA8E5970DA1D87 /* Pods_BeamWalletMasterNet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_BeamWalletMasterNet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1A5FD8229312777D1D2BB813 /* SplitCoinsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SplitCoinsViewController.swift; sourceTree = ""; }; 20B7F5341703980CD2D3941F /* BMInstantMessage.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = BMInstantMessage.mm; sourceTree = ""; }; 21968CB26C3B977852247761 /* AssetSwapsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSwapsViewController.swift; sourceTree = ""; }; 35296D58A729F092AFF0C821 /* BMChat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BMChat.h; sourceTree = ""; }; @@ -1506,11 +1525,15 @@ 46577647151F6240CBA9CE2D /* BMDexOrder.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = BMDexOrder.mm; sourceTree = ""; }; 46CAE6BC4C48E30E26AE304F /* BMInstantMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BMInstantMessage.h; sourceTree = ""; }; 4A6A43055CFB5C5820B099A1 /* AssetSwapCreateViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSwapCreateViewController.swift; sourceTree = ""; }; + 4B33EC6A5FD1571ED9D1EFFB /* SplitCoinPreviewCard.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SplitCoinPreviewCard.swift; sourceTree = ""; }; + 4F9B63F6E98BA8303EE2FEAD /* AssetUTXOGroup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetUTXOGroup.swift; sourceTree = ""; }; 53ECF740A61C5F0D941B8B36 /* BMOptionPickerViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BMOptionPickerViewController.swift; sourceTree = ""; }; 57D7E7F685327E2CAB9E7C69 /* libdex.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; path = libdex.a; sourceTree = ""; }; + 603CF8C20147C7F9E087C33D /* SplitCoinsStripeView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SplitCoinsStripeView.swift; sourceTree = ""; }; 75A467070BE6633F1B715DAD /* AssetSwapDetailsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSwapDetailsViewController.swift; sourceTree = ""; }; 7A439F6A64EB61AD3DF6945B /* MessengerConversationViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerConversationViewModel.swift; sourceTree = ""; }; 7CDD341D6CFC3AD26C3F4374 /* AssetSwapOrderCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSwapOrderCell.swift; sourceTree = ""; }; + 8865BEE3DDBE9806B38DDE04 /* AssetUTXOSectionHeaderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetUTXOSectionHeaderView.swift; sourceTree = ""; }; 8C5EB5519EB54866BA8DB9A4 /* BMChat.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = BMChat.mm; sourceTree = ""; }; 8DFF1052A687C5F2265E618F /* MessengerChatListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerChatListViewController.swift; sourceTree = ""; }; 9205284E237B11F1001F8E31 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = ""; }; @@ -2056,6 +2079,7 @@ D303009FB5F0DA4093A89DFB /* Pods-BeamWalletTestNet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeamWalletTestNet.debug.xcconfig"; path = "Target Support Files/Pods-BeamWalletTestNet/Pods-BeamWalletTestNet.debug.xcconfig"; sourceTree = ""; }; D601ED375D9C9B9FAB70DE0B /* Pods-BeamWallet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeamWallet.debug.xcconfig"; path = "Target Support Files/Pods-BeamWallet/Pods-BeamWallet.debug.xcconfig"; sourceTree = ""; }; E08B41CEDA5A06EBFD775E76 /* MessengerBubbleCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerBubbleCell.swift; sourceTree = ""; }; + E23EA93CE3207A2EBB4D17FD /* SplitCoinsViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SplitCoinsViewModel.swift; sourceTree = ""; }; EAEED72AAED404575AB9A6E5 /* Pods-BeamWalletMasterNet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeamWalletMasterNet.release.xcconfig"; path = "Target Support Files/Pods-BeamWalletMasterNet/Pods-BeamWalletMasterNet.release.xcconfig"; sourceTree = ""; }; F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetSearchViewController.swift; sourceTree = ""; }; F426BB6F15C2E08A3E81B87D /* libdex_board.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; path = libdex_board.a; sourceTree = ""; }; @@ -2640,6 +2664,7 @@ 92435258222E73FC00A0EF37 /* UTXOViewController.swift */, 92F68C762244E37200197D4D /* UTXODetailViewController.swift */, 9212DBAC22E0A1730053FC99 /* UTXOTableView.swift */, + 1A5FD8229312777D1D2BB813 /* SplitCoinsViewController.swift */, ); path = UTXO; sourceTree = ""; @@ -3032,6 +3057,8 @@ children = ( 92B7E4D422AF0067001708E4 /* UTXOViewModel.swift */, 92B7E4D822AF064A001708E4 /* DetailUTXOViewModel.swift */, + 4F9B63F6E98BA8303EE2FEAD /* AssetUTXOGroup.swift */, + E23EA93CE3207A2EBB4D17FD /* SplitCoinsViewModel.swift */, ); path = UTXO; sourceTree = ""; @@ -3229,6 +3256,9 @@ 92F68C7D2244E77500197D4D /* UTXODetailCell.xib */, 92F68C8B2245070200197D4D /* UTXOTransactionCell.swift */, 92F68C8C2245070200197D4D /* UTXOTransactionCell.xib */, + 8865BEE3DDBE9806B38DDE04 /* AssetUTXOSectionHeaderView.swift */, + 603CF8C20147C7F9E087C33D /* SplitCoinsStripeView.swift */, + 4B33EC6A5FD1571ED9D1EFFB /* SplitCoinPreviewCard.swift */, ); path = Cells; sourceTree = ""; @@ -4395,6 +4425,12 @@ B4FE33729385D12603589437 /* AssetSwapDetailsViewController.swift in Sources */, 5DAA3CCCB00AECEACD182FBF /* AssetSwapOrderCell.swift in Sources */, 59D5C848EC6C80442BC6A8A3 /* BMOptionPickerViewController.swift in Sources */, + 911AF3DF99FDD7FFD07F4830 /* AssetUTXOGroup.swift in Sources */, + 966EF2ACFF217F06AE183E6E /* SplitCoinsViewModel.swift in Sources */, + CA7E68B52D3092D76CBACF7C /* SplitCoinsViewController.swift in Sources */, + 0EC9234AAD2DC0A1BF7600B4 /* AssetUTXOSectionHeaderView.swift in Sources */, + C6FB138B2A261CBC43626204 /* SplitCoinsStripeView.swift in Sources */, + AC3CF90BF3C1ED7E2D19D65A /* SplitCoinPreviewCard.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4737,6 +4773,12 @@ A522EB1A22FF64A990518431 /* AssetSwapDetailsViewController.swift in Sources */, BE96C4A71A3D47721D003ACF /* AssetSwapOrderCell.swift in Sources */, 705F9944DC83B6CC6816678F /* BMOptionPickerViewController.swift in Sources */, + AAFE8C80296CA6DAA3BC3B1F /* AssetUTXOGroup.swift in Sources */, + 000A92658A9461591881CE8C /* SplitCoinsViewModel.swift in Sources */, + 275E60FB3A8D4704581DF986 /* SplitCoinsViewController.swift in Sources */, + 5101D1DB95B6BECFE333B53C /* AssetUTXOSectionHeaderView.swift in Sources */, + 6854C506C6836F88B8F8484E /* SplitCoinsStripeView.swift in Sources */, + ECF8F9E33148D1833480ADFA /* SplitCoinPreviewCard.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5079,6 +5121,12 @@ B6037162941C5AB71A356FF3 /* AssetSwapDetailsViewController.swift in Sources */, 84D2719B950F43294039957A /* AssetSwapOrderCell.swift in Sources */, 3C4B4023BBF6C6624DDC279E /* BMOptionPickerViewController.swift in Sources */, + B3476711F58F83C2F1CB8F2C /* AssetUTXOGroup.swift in Sources */, + ABA34015221EA45051CC20EB /* SplitCoinsViewModel.swift in Sources */, + BFF9839E0FE16D5A8645D394 /* SplitCoinsViewController.swift in Sources */, + 532955652A405010EC21607C /* AssetUTXOSectionHeaderView.swift in Sources */, + 6EA6E49364A07F3740D84921 /* SplitCoinsStripeView.swift in Sources */, + DAFECCA6179EA6FE92C0ABC7 /* SplitCoinPreviewCard.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/BeamWallet/BeamSDK/AppModel.h b/BeamWallet/BeamSDK/AppModel.h index 8d3335e1..f553425c 100644 --- a/BeamWallet/BeamSDK/AppModel.h +++ b/BeamWallet/BeamSDK/AppModel.h @@ -2,7 +2,7 @@ // AppModel.h // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -249,6 +249,9 @@ typedef void(^ExportCSVBlock)(NSString * _Nonnull data, NSURL * _Nonnull url); -(BMTransactionParameters*_Nonnull)getTransactionParameters:(NSString*_Nonnull)token; -(void)calculateFee:(double)amount assetId:(int)assetId fee:(double)fee isShielded:(BOOL) isShielded result:(FeecalculatedBlock _Nonnull )block; +// split +-(void)splitCoins:(int)assetId outputGroths:(NSArray*_Nonnull)groths fee:(double)fee; + // logs -(NSString*_Nonnull)getZipLogs ; -(void)clearLogs; diff --git a/BeamWallet/BeamSDK/AppModel.mm b/BeamWallet/BeamSDK/AppModel.mm index b280eac8..ca459ad3 100644 --- a/BeamWallet/BeamSDK/AppModel.mm +++ b/BeamWallet/BeamSDK/AppModel.mm @@ -2,7 +2,7 @@ // AppModel.m // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -2367,6 +2367,24 @@ -(void)prepareSend:(double)amount fee:(double)fee assetId:(int)assetId to:(NSStr } } +-(void)splitCoins:(int)assetId outputGroths:(NSArray*_Nonnull)groths fee:(double)fee { + if (wallet == nil || groths.count == 0) { + return; + } + + AmountList amountList; + amountList.reserve(groths.count); + for (NSNumber *n in groths) { + amountList.push_back((Amount)n.unsignedLongLongValue); + } + + auto params = CreateSplitTransactionParameters(amountList); + params.SetParameter(TxParameterID::Fee, (Amount)fee) + .SetParameter(TxParameterID::AssetID, beam::Asset::ID((uint32_t)assetId)); + + wallet->getAsync()->startTransaction(std::move(params)); +} + -(NSString*_Nonnull)allAmount:(double)fee assetId:(int)assetId { Amount available = [[AssetsManager sharedManager] getAsset:assetId].available; if(assetId == 0) { diff --git a/BeamWallet/Controls/AssetIconView.swift b/BeamWallet/Controls/AssetIconView.swift index 56c04ebe..b8c7a6a0 100644 --- a/BeamWallet/Controls/AssetIconView.swift +++ b/BeamWallet/Controls/AssetIconView.swift @@ -2,7 +2,7 @@ // AssetIconView.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -23,71 +23,113 @@ class AssetIconView: BMGradientView { private let imageView = UIImageView(image: UIImage(named: "ic_asset")) private let verify = UIImageView(image: UIImage(named: "ic_verify-1")) - + public var isBig = false - + + private var glyphReferenceSize: CGSize? + private var glyphFillsBounds = false + + override init(frame: CGRect) { + super.init(frame: frame) + commonInit() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + } + override func layoutSubviews() { super.layoutSubviews() - + verify.frame = CGRect(x: self.width-10, y: -3, width: 13, height: 13) + layoutImageView() } - + override func awakeFromNib() { super.awakeFromNib() - + commonInit() + } + + private func commonInit() { self.cornerRadius = self.frame.width/2 - - self.addSubview(imageView) + if imageView.superview !== self { + self.addSubview(imageView) + } } - + public func setAsset(_ asset:BMAsset) { verify.removeFromSuperview() - + if isBig { if asset.isBeamX() { addSubview(verify) - imageView.frame = self.bounds imageView.image = UIImage(named: "assetbeamx") + glyphReferenceSize = nil + glyphFillsBounds = true } else if asset.isBeam() { imageView.image = UIImage(named: "ic_asset_beam_big") - imageView.frame = CGRect(x:12, y: 11, width: 24, height: 20) + glyphReferenceSize = CGSize(width: 24, height: 20) + glyphFillsBounds = false } else { imageView.image = UIImage(named: "ic_asset_big") - imageView.frame = CGRect(x:12, y: 11, width: 23, height: 19) + glyphReferenceSize = CGSize(width: 23, height: 19) + glyphFillsBounds = false } } else { if asset.isBeamX() { addSubview(verify) - imageView.frame = self.bounds imageView.image = UIImage(named: "assetbeamx") + glyphReferenceSize = nil + glyphFillsBounds = true } else if asset.isBeam() { imageView.image = UIImage(named: "ic_asset_beam") - imageView.frame = CGRect(x:6, y: 5, width: 15, height: 13) + glyphReferenceSize = CGSize(width: 15, height: 13) + glyphFillsBounds = false } else { imageView.image = UIImage(named: "ic_asset") - imageView.frame = CGRect(x:7, y: 7, width: 12, height: 10) + glyphReferenceSize = CGSize(width: 12, height: 10) + glyphFillsBounds = false } - + self.gradientLayer.type = .radial self.gradientLayer.colors = [ UIColor(hexString: asset.color).withAlphaComponent(0.7).cgColor, UIColor.black] self.gradientLayer.startPoint = CGPoint(x: 0.5, y: 0.5) self.gradientLayer.endPoint = CGPoint(x: 1, y: 1) - + self.borderWidth = 2 self.borderColor = UIColor(hexString: asset.color) - + if asset.isBeamX() { self.borderWidth = 0 self.gradientLayer.colors = nil } } + + setNeedsLayout() + } + + private func layoutImageView() { + if glyphFillsBounds { + imageView.frame = bounds + return + } + guard let refSize = glyphReferenceSize, bounds.width > 0 else { return } + let referenceFrame: CGFloat = isBig ? 48 : 28 + let scale = bounds.width / referenceFrame + let size = CGSize(width: refSize.width * scale, height: refSize.height * scale) + imageView.frame = CGRect( + x: (bounds.width - size.width) / 2, + y: (bounds.height - size.height) / 2, + width: size.width, + height: size.height + ) } } diff --git a/BeamWallet/Model/UTXO/AssetUTXOGroup.swift b/BeamWallet/Model/UTXO/AssetUTXOGroup.swift new file mode 100644 index 00000000..d8f49be4 --- /dev/null +++ b/BeamWallet/Model/UTXO/AssetUTXOGroup.swift @@ -0,0 +1,49 @@ +// +// AssetUTXOGroup.swift +// BeamWallet +// +// Copyright 2026 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation + +struct AssetUTXOGroup { + let asset: BMAsset + let utxos: [BMUTXO] + let largestUtxo: BMUTXO? + let totalAvailableGroth: UInt64 + + var assetId: Int32 { Int32(asset.assetId) } + + var concentrationRatio: Double { + guard totalAvailableGroth > 0, let largest = largestUtxo else { return 0 } + return Double(largest.amount) / Double(totalAvailableGroth) + } + + var isConcentrated: Bool { concentrationRatio > 0.7 } + + var canSplit: Bool { (largestUtxo?.amount ?? 0) >= 2 } + + static func make(asset: BMAsset, utxos: [BMUTXO]) -> AssetUTXOGroup { + let sorted = utxos.sorted { $0.amount > $1.amount } + let total = sorted.reduce(UInt64(0)) { $0 + $1.amount } + return AssetUTXOGroup( + asset: asset, + utxos: sorted, + largestUtxo: sorted.first, + totalAvailableGroth: total + ) + } +} diff --git a/BeamWallet/Model/UTXO/SplitCoinsViewModel.swift b/BeamWallet/Model/UTXO/SplitCoinsViewModel.swift new file mode 100644 index 00000000..b45755ac --- /dev/null +++ b/BeamWallet/Model/UTXO/SplitCoinsViewModel.swift @@ -0,0 +1,127 @@ +// +// SplitCoinsViewModel.swift +// BeamWallet +// +// Copyright 2026 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation + +final class SplitCoinsViewModel: NSObject { + + let group: AssetUTXOGroup + let allowedSplitCounts: [Int] = [2, 3, 5, 8, 10] + + var splitInto: Int { + didSet { + if splitInto != oldValue { + recalculateFee() + onDataChanged?() + } + } + } + + private(set) var feeGroth: UInt64 = 0 + + var onDataChanged: (() -> Void)? + var onError: ((String) -> Void)? + var onSubmitted: (() -> Void)? + + init(group: AssetUTXOGroup) { + self.group = group + let suggested = SplitCoinsViewModel.suggestedSplitCount(for: group, allowed: [2, 3, 5, 8, 10]) + self.splitInto = group.isConcentrated ? suggested : 3 + super.init() + feeGroth = UInt64(AppModel.sharedManager().getDefaultFeeInGroth()) + } + + var assetId: Int32 { group.assetId } + var largestGroth: UInt64 { group.largestUtxo?.amount ?? 0 } + + var outputAmounts: [UInt64] { + guard splitInto > 0, largestGroth > 0 else { return [] } + let count = UInt64(splitInto) + let base = largestGroth / count + let remainder = largestGroth - base * count + var arr = Array(repeating: base, count: splitInto) + if !arr.isEmpty { + arr[arr.count - 1] += remainder + } + return arr + } + + var perOutputGroth: UInt64 { outputAmounts.first ?? 0 } + + var concentrationWarning: String? { + guard group.isConcentrated else { return nil } + let percent = Int((group.concentrationRatio * 100).rounded()) + let suggested = SplitCoinsViewModel.suggestedSplitCount(for: group, allowed: allowedSplitCounts) + return Localizable.shared.strings.split_concentration_warning_format + .replacingOccurrences(of: "(percent)", with: "\(percent)") + .replacingOccurrences(of: "(count)", with: "\(suggested)") + } + + var validationError: String? { + if largestGroth < UInt64(splitInto) { + return Localizable.shared.strings.split_too_small + } + if assetId == 0 && largestGroth <= feeGroth { + return Localizable.shared.strings.asset_swap_insufficient_funds + } + return nil + } + + var canSubmit: Bool { + validationError == nil && largestGroth > 0 && group.canSplit + } + + func recalculateFee() { + let realAmount = Double(largestGroth) / 100_000_000 + let defaultFee = Double(AppModel.sharedManager().getDefaultFeeInGroth()) + AppModel.sharedManager().calculateFee( + realAmount, + assetId: assetId, + fee: defaultFee, + isShielded: false + ) { [weak self] fee, _, _, _ in + DispatchQueue.main.async { + guard let self = self else { return } + self.feeGroth = fee + self.onDataChanged?() + } + } + } + + func submit() { + guard canSubmit else { + onError?(validationError ?? "") + return + } + let groths = outputAmounts.map { NSNumber(value: $0) } + AppModel.sharedManager().splitCoins( + assetId, + outputGroths: groths, + fee: Double(feeGroth) + ) + onSubmitted?() + } + + private static func suggestedSplitCount(for group: AssetUTXOGroup, allowed: [Int]) -> Int { + guard group.totalAvailableGroth > 0 else { return allowed.first ?? 2 } + let ratio = group.concentrationRatio + let target = max(2, Int((ratio / 0.3).rounded(.up))) + return allowed.last(where: { $0 <= target }) ?? allowed.last ?? 5 + } +} diff --git a/BeamWallet/Model/UTXO/UTXOViewModel.swift b/BeamWallet/Model/UTXO/UTXOViewModel.swift index 50d99170..b6228c00 100644 --- a/BeamWallet/Model/UTXO/UTXOViewModel.swift +++ b/BeamWallet/Model/UTXO/UTXOViewModel.swift @@ -2,7 +2,7 @@ // UTXOViewModel.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -41,7 +41,25 @@ class UTXOViewModel: NSObject { public var onStatusChanged : (() -> Void)? public var utxos = [BMUTXO]() - + + public func groupedByAsset() -> [AssetUTXOGroup] { + var pool = [BMUTXO]() + if let utxos = AppModel.sharedManager().utxos { + pool.append(contentsOf: utxos as! [BMUTXO]) + } + if let utxos = AppModel.sharedManager().shildedUtxos { + pool.append(contentsOf: utxos as! [BMUTXO]) + } + let available = pool.filter { $0.status == BMUTXOAvailable } + let byAsset = Dictionary(grouping: available, by: { $0.assetId }) + + return byAsset.compactMap { (assetId, utxos) -> AssetUTXOGroup? in + guard let asset = AssetsManager.shared().getAsset(Int32(assetId)) else { return nil } + return AssetUTXOGroup.make(asset: asset, utxos: utxos) + } + .sorted { $0.asset.assetId < $1.asset.assetId } + } + override init() { super.init() @@ -54,8 +72,7 @@ class UTXOViewModel: NSObject { private func filterUTXOS() { - DispatchQueue.main.async { - [weak self] in + DispatchQueue.main.async { [weak self] in guard let strongSelf = self else { return } diff --git a/BeamWallet/Protocols/LocalizableStrings.swift b/BeamWallet/Protocols/LocalizableStrings.swift index 2fa78867..26c3af99 100644 --- a/BeamWallet/Protocols/LocalizableStrings.swift +++ b/BeamWallet/Protocols/LocalizableStrings.swift @@ -2,7 +2,7 @@ // Localizable.shared.strings.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -586,6 +586,22 @@ class LocalizableStrings : NSObject { var max_funds_hint = "max_funds_hint".localized var dAppStore = "dAppStore".localized var fee = "fee".localized + + var split = "split".localized + var split_coins_subtitle = "split_coins_subtitle".localized + var split_coins_cta = "split_coins_cta".localized + var regular_balance = "regular_balance".localized + var current_coins = "current_coins".localized + var coin_count_format = "coin_count_format".localized + var largest_coin_format = "largest_coin_format".localized + var more_coins_format = "more_coins_format".localized + var split_into = "split_into".localized + var preview = "preview".localized + var nx_equal_format = "nx_equal_format".localized + var split_concentration_warning_format = "split_concentration_warning_format".localized + var split_too_small = "split_too_small".localized + var split_started_message = "split_started_message".localized + var confirm_accept = "confirm_accept".localized var will_take_funds = "will_take_funds".localized var will_send_funds = "will_send_funds".localized diff --git a/BeamWallet/ViewControllers/Main/UTXO/Cells/AssetUTXOSectionHeaderView.swift b/BeamWallet/ViewControllers/Main/UTXO/Cells/AssetUTXOSectionHeaderView.swift new file mode 100644 index 00000000..e0a3a42a --- /dev/null +++ b/BeamWallet/ViewControllers/Main/UTXO/Cells/AssetUTXOSectionHeaderView.swift @@ -0,0 +1,118 @@ +// +// AssetUTXOSectionHeaderView.swift +// BeamWallet +// +// Copyright 2026 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +final class AssetUTXOSectionHeaderView: UIView { + + static let preferredHeight: CGFloat = 76 + private static let iconSize: CGFloat = 36 + + private let card = UIView() + private let iconHost = UIView() + private let iconView: AssetIconView + private let nameLabel = UILabel() + private let subtitleLabel = UILabel() + private let labelStack = UIStackView() + private let splitButton = UIButton(type: .system) + + var onSplitTapped: (() -> Void)? + + init(group: AssetUTXOGroup) { + self.iconView = AssetIconView(frame: CGRect(x: 0, y: 0, width: Self.iconSize, height: Self.iconSize)) + super.init(frame: .zero) + setupViews() + configure(with: group) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupViews() { + backgroundColor = .clear + + card.backgroundColor = UIColor.main.cellBackgroundColor + card.layer.cornerRadius = 12 + card.translatesAutoresizingMaskIntoConstraints = false + addSubview(card) + + iconView.cornerRadius = Self.iconSize / 2 + iconHost.translatesAutoresizingMaskIntoConstraints = false + iconHost.addSubview(iconView) + card.addSubview(iconHost) + + nameLabel.font = BoldFont(size: 20) + nameLabel.textColor = UIColor.white + + subtitleLabel.font = RegularFont(size: 13) + subtitleLabel.textColor = UIColor.main.blueyGrey + + labelStack.axis = .vertical + labelStack.alignment = .leading + labelStack.spacing = 2 + labelStack.translatesAutoresizingMaskIntoConstraints = false + labelStack.addArrangedSubview(nameLabel) + labelStack.addArrangedSubview(subtitleLabel) + card.addSubview(labelStack) + + splitButton.setTitle(Localizable.shared.strings.split.uppercased(), for: .normal) + splitButton.titleLabel?.font = BoldFont(size: 12) + splitButton.setTitleColor(UIColor.main.brightTeal, for: .normal) + splitButton.setTitleColor(UIColor.main.brightTeal.withAlphaComponent(0.4), for: .disabled) + splitButton.layer.borderColor = UIColor.main.brightTeal.cgColor + splitButton.layer.borderWidth = 1 + splitButton.layer.cornerRadius = 16 + splitButton.contentEdgeInsets = UIEdgeInsets(top: 6, left: 14, bottom: 6, right: 14) + splitButton.translatesAutoresizingMaskIntoConstraints = false + splitButton.addTarget(self, action: #selector(onSplit), for: .touchUpInside) + card.addSubview(splitButton) + + NSLayoutConstraint.activate([ + card.topAnchor.constraint(equalTo: topAnchor, constant: 6), + card.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -6), + card.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 16), + card.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -16), + + iconHost.leadingAnchor.constraint(equalTo: card.leadingAnchor, constant: 14), + iconHost.centerYAnchor.constraint(equalTo: card.centerYAnchor), + iconHost.widthAnchor.constraint(equalToConstant: Self.iconSize), + iconHost.heightAnchor.constraint(equalToConstant: Self.iconSize), + + labelStack.leadingAnchor.constraint(equalTo: iconHost.trailingAnchor, constant: 12), + labelStack.centerYAnchor.constraint(equalTo: card.centerYAnchor), + labelStack.trailingAnchor.constraint(lessThanOrEqualTo: splitButton.leadingAnchor, constant: -8), + + splitButton.trailingAnchor.constraint(equalTo: card.trailingAnchor, constant: -14), + splitButton.centerYAnchor.constraint(equalTo: card.centerYAnchor), + splitButton.heightAnchor.constraint(equalToConstant: 32), + ]) + } + + private func configure(with group: AssetUTXOGroup) { + nameLabel.text = group.asset.unitName + subtitleLabel.text = group.asset.name + iconView.setAsset(group.asset) + splitButton.isEnabled = group.canSplit + } + + @objc private func onSplit() { + onSplitTapped?() + } +} diff --git a/BeamWallet/ViewControllers/Main/UTXO/Cells/SplitCoinPreviewCard.swift b/BeamWallet/ViewControllers/Main/UTXO/Cells/SplitCoinPreviewCard.swift new file mode 100644 index 00000000..6a166aa8 --- /dev/null +++ b/BeamWallet/ViewControllers/Main/UTXO/Cells/SplitCoinPreviewCard.swift @@ -0,0 +1,100 @@ +// +// SplitCoinPreviewCard.swift +// BeamWallet +// +// Copyright 2026 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +final class SplitCoinPreviewCard: UIView { + + static let preferredHeight: CGFloat = 86 + private static let swatchSize: CGFloat = 20 + + private let swatch = UIView() + private let amountLabel = UILabel() + private let unitLabel = UILabel() + + override init(frame: CGRect) { + super.init(frame: frame) + setupViews() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupViews() { + backgroundColor = UIColor.main.cellBackgroundColor + layer.cornerRadius = 10 + translatesAutoresizingMaskIntoConstraints = false + + swatch.layer.cornerRadius = 5 + swatch.translatesAutoresizingMaskIntoConstraints = false + addSubview(swatch) + + amountLabel.font = BoldFont(size: 13) + amountLabel.textColor = UIColor.white + amountLabel.adjustsFontSizeToFitWidth = true + amountLabel.minimumScaleFactor = 0.7 + amountLabel.textAlignment = .center + amountLabel.translatesAutoresizingMaskIntoConstraints = false + addSubview(amountLabel) + + unitLabel.font = RegularFont(size: 11) + unitLabel.textColor = UIColor.main.blueyGrey + unitLabel.textAlignment = .center + unitLabel.translatesAutoresizingMaskIntoConstraints = false + addSubview(unitLabel) + + NSLayoutConstraint.activate([ + heightAnchor.constraint(equalToConstant: SplitCoinPreviewCard.preferredHeight), + + swatch.topAnchor.constraint(equalTo: topAnchor, constant: 12), + swatch.centerXAnchor.constraint(equalTo: centerXAnchor), + swatch.widthAnchor.constraint(equalToConstant: SplitCoinPreviewCard.swatchSize), + swatch.heightAnchor.constraint(equalToConstant: SplitCoinPreviewCard.swatchSize), + + amountLabel.topAnchor.constraint(equalTo: swatch.bottomAnchor, constant: 8), + amountLabel.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 6), + amountLabel.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -6), + + unitLabel.topAnchor.constraint(equalTo: amountLabel.bottomAnchor, constant: 4), + unitLabel.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 6), + unitLabel.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -6), + ]) + } + + func configure(amountText: String, unitText: String, color: UIColor) { + swatch.isHidden = false + swatch.backgroundColor = color + amountLabel.text = amountText + amountLabel.textColor = UIColor.white + amountLabel.font = BoldFont(size: 13) + unitLabel.text = unitText.uppercased() + unitLabel.isHidden = false + } + + func configureMore(text: String) { + swatch.isHidden = true + swatch.backgroundColor = .clear + amountLabel.text = text + amountLabel.textColor = UIColor.main.blueyGrey + amountLabel.font = BoldFont(size: 13) + unitLabel.text = nil + unitLabel.isHidden = true + } +} diff --git a/BeamWallet/ViewControllers/Main/UTXO/Cells/SplitCoinsStripeView.swift b/BeamWallet/ViewControllers/Main/UTXO/Cells/SplitCoinsStripeView.swift new file mode 100644 index 00000000..21e52b3e --- /dev/null +++ b/BeamWallet/ViewControllers/Main/UTXO/Cells/SplitCoinsStripeView.swift @@ -0,0 +1,73 @@ +// +// SplitCoinsStripeView.swift +// BeamWallet +// +// Copyright 2026 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +final class SplitCoinsStripeView: UIView { + + static let palette: [UIColor] = [ + UIColor.main.brightTeal, + UIColor.main.heliotrope, + UIColor.main.green, + UIColor.main.brightSkyBlue, + UIColor.main.blueyGrey, + ] + + private var amounts: [UInt64] = [] + + override init(frame: CGRect) { + super.init(frame: frame) + clipsToBounds = true + layer.cornerRadius = 4 + backgroundColor = UIColor.white.withAlphaComponent(0.06) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func setAmounts(_ amounts: [UInt64]) { + self.amounts = amounts + setNeedsLayout() + } + + override func layoutSubviews() { + super.layoutSubviews() + subviews.forEach { $0.removeFromSuperview() } + + let total = amounts.reduce(UInt64(0), +) + guard total > 0 else { return } + + var x: CGFloat = 0 + let h = bounds.height + let w = bounds.width + + for (idx, value) in amounts.enumerated() { + let segmentWidth = w * CGFloat(Double(value) / Double(total)) + let seg = UIView(frame: CGRect(x: x, y: 0, width: segmentWidth, height: h)) + seg.backgroundColor = SplitCoinsStripeView.palette[idx % SplitCoinsStripeView.palette.count] + addSubview(seg) + x += segmentWidth + } + } + + static func color(forIndex index: Int) -> UIColor { + return palette[index % palette.count] + } +} diff --git a/BeamWallet/ViewControllers/Main/UTXO/Cells/UTXOCell.swift b/BeamWallet/ViewControllers/Main/UTXO/Cells/UTXOCell.swift index 9e68c09d..04f240f0 100644 --- a/BeamWallet/ViewControllers/Main/UTXO/Cells/UTXOCell.swift +++ b/BeamWallet/ViewControllers/Main/UTXO/Cells/UTXOCell.swift @@ -2,7 +2,7 @@ // UTXOCell.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -28,10 +28,6 @@ class UTXOCell: RippleCell { @IBOutlet weak private var typeLabel: UILabel! @IBOutlet weak private var dateLabel: UILabel! @IBOutlet weak private var assetIconView: AssetIconView! - - override func awakeFromNib() { - super.awakeFromNib() - } } extension UTXOCell: Configurable { diff --git a/BeamWallet/ViewControllers/Main/UTXO/SplitCoinsViewController.swift b/BeamWallet/ViewControllers/Main/UTXO/SplitCoinsViewController.swift new file mode 100644 index 00000000..992d57be --- /dev/null +++ b/BeamWallet/ViewControllers/Main/UTXO/SplitCoinsViewController.swift @@ -0,0 +1,477 @@ +// +// SplitCoinsViewController.swift +// BeamWallet +// +// Copyright 2026 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +final class SplitCoinsViewController: UIViewController { + + private let viewModel: SplitCoinsViewModel + + private let backdrop = UIView() + private let card = UIView() + private let grabHandle = UIView() + private let scrollView = UIScrollView() + private let contentStack = UIStackView() + + private let titleLabel = UILabel() + private let subtitleLabel = UILabel() + private let balanceTitleLabel = UILabel() + private let balanceValueLabel = UILabel() + private let currentCoinsLabel = UILabel() + private let stripeView = SplitCoinsStripeView() + private let summaryLabel = UILabel() + private let tileStack = UIStackView() + private let warningContainer = UIView() + private let warningLabel = UILabel() + private let splitIntoLabel = UILabel() + private let splitIntoStack = UIStackView() + private let previewLabel = UILabel() + private let previewValueLabel = UILabel() + private let feeTitleLabel = UILabel() + private let feeValueLabel = UILabel() + private let previewLeadingLabel = UILabel() + private let ctaButton: BMButton + + private var splitButtons: [UIButton] = [] + + init(viewModel: SplitCoinsViewModel) { + self.viewModel = viewModel + self.ctaButton = BMButton.defaultButton( + frame: CGRect(x: 0, y: 0, width: 100, height: 56), + color: UIColor.main.brightTeal + ) + super.init(nibName: nil, bundle: nil) + modalPresentationStyle = .overFullScreen + modalTransitionStyle = .crossDissolve + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func viewDidLoad() { + super.viewDidLoad() + view.backgroundColor = .clear + + setupBackdrop() + setupCard() + setupContent() + + viewModel.onDataChanged = { [weak self] in self?.refresh() } + viewModel.onError = { [weak self] msg in self?.alertWithMessage(msg) } + viewModel.onSubmitted = { [weak self] in + guard let self = self else { return } + let presenter = self.presentingViewController + self.dismissAnimated { + presenter?.alert(message: Localizable.shared.strings.split_started_message) + } + } + + viewModel.recalculateFee() + refresh() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + view.layoutIfNeeded() + card.transform = CGAffineTransform(translationX: 0, y: card.bounds.height) + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + UIView.animate(withDuration: 0.28, delay: 0, options: [.curveEaseOut], animations: { + self.backdrop.alpha = 1 + self.card.transform = .identity + }) + } + + private func setupBackdrop() { + backdrop.backgroundColor = UIColor.black.withAlphaComponent(0.55) + backdrop.alpha = 0 + backdrop.translatesAutoresizingMaskIntoConstraints = false + view.addSubview(backdrop) + let tap = UITapGestureRecognizer(target: self, action: #selector(onCancel)) + backdrop.addGestureRecognizer(tap) + + NSLayoutConstraint.activate([ + backdrop.topAnchor.constraint(equalTo: view.topAnchor), + backdrop.bottomAnchor.constraint(equalTo: view.bottomAnchor), + backdrop.leadingAnchor.constraint(equalTo: view.leadingAnchor), + backdrop.trailingAnchor.constraint(equalTo: view.trailingAnchor), + ]) + } + + private func setupCard() { + card.backgroundColor = UIColor.main.peacockBlue + card.layer.cornerRadius = 16 + card.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner] + card.translatesAutoresizingMaskIntoConstraints = false + view.addSubview(card) + + NSLayoutConstraint.activate([ + card.leadingAnchor.constraint(equalTo: view.leadingAnchor), + card.trailingAnchor.constraint(equalTo: view.trailingAnchor), + card.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 12), + card.bottomAnchor.constraint(equalTo: view.bottomAnchor), + ]) + + grabHandle.backgroundColor = UIColor.white.withAlphaComponent(0.25) + grabHandle.layer.cornerRadius = 2 + grabHandle.translatesAutoresizingMaskIntoConstraints = false + card.addSubview(grabHandle) + + let pan = UIPanGestureRecognizer(target: self, action: #selector(handleDragDown(_:))) + pan.delegate = self + card.addGestureRecognizer(pan) + + scrollView.translatesAutoresizingMaskIntoConstraints = false + scrollView.alwaysBounceVertical = true + scrollView.showsVerticalScrollIndicator = false + card.addSubview(scrollView) + + contentStack.axis = .vertical + contentStack.spacing = 0 + contentStack.translatesAutoresizingMaskIntoConstraints = false + scrollView.addSubview(contentStack) + + ctaButton.translatesAutoresizingMaskIntoConstraints = false + ctaButton.setTitle(Localizable.shared.strings.split_coins_cta.uppercased(), for: .normal) + ctaButton.setTitleColor(UIColor.main.marine, for: .normal) + ctaButton.addTarget(self, action: #selector(onSplitTapped), for: .touchUpInside) + card.addSubview(ctaButton) + + NSLayoutConstraint.activate([ + grabHandle.topAnchor.constraint(equalTo: card.topAnchor, constant: 8), + grabHandle.centerXAnchor.constraint(equalTo: card.centerXAnchor), + grabHandle.widthAnchor.constraint(equalToConstant: 36), + grabHandle.heightAnchor.constraint(equalToConstant: 4), + + scrollView.topAnchor.constraint(equalTo: grabHandle.bottomAnchor, constant: 12), + scrollView.leadingAnchor.constraint(equalTo: card.leadingAnchor), + scrollView.trailingAnchor.constraint(equalTo: card.trailingAnchor), + scrollView.bottomAnchor.constraint(equalTo: ctaButton.topAnchor, constant: -12), + + contentStack.topAnchor.constraint(equalTo: scrollView.contentLayoutGuide.topAnchor), + contentStack.bottomAnchor.constraint(equalTo: scrollView.contentLayoutGuide.bottomAnchor), + contentStack.leadingAnchor.constraint(equalTo: scrollView.contentLayoutGuide.leadingAnchor, constant: 20), + contentStack.trailingAnchor.constraint(equalTo: scrollView.contentLayoutGuide.trailingAnchor, constant: -20), + contentStack.widthAnchor.constraint(equalTo: scrollView.frameLayoutGuide.widthAnchor, constant: -40), + + ctaButton.leadingAnchor.constraint(equalTo: card.leadingAnchor, constant: 20), + ctaButton.trailingAnchor.constraint(equalTo: card.trailingAnchor, constant: -20), + ctaButton.heightAnchor.constraint(equalToConstant: 56), + ctaButton.bottomAnchor.constraint(equalTo: card.safeAreaLayoutGuide.bottomAnchor, constant: -16), + ]) + } + + private func setupContent() { + titleLabel.font = BoldFont(size: 22) + titleLabel.textColor = UIColor.white + contentStack.addArrangedSubview(titleLabel) + + contentStack.setCustomSpacing(8, after: titleLabel) + subtitleLabel.font = RegularFont(size: 14) + subtitleLabel.textColor = UIColor.main.blueyGrey + subtitleLabel.numberOfLines = 0 + contentStack.addArrangedSubview(subtitleLabel) + contentStack.setCustomSpacing(20, after: subtitleLabel) + + let balanceRow = UIStackView() + balanceRow.axis = .horizontal + balanceRow.alignment = .center + balanceRow.distribution = .equalSpacing + balanceTitleLabel.font = RegularFont(size: 14) + balanceTitleLabel.textColor = UIColor.main.blueyGrey + balanceTitleLabel.text = Localizable.shared.strings.regular_balance + balanceValueLabel.font = BoldFont(size: 16) + balanceValueLabel.textColor = UIColor.white + balanceRow.addArrangedSubview(balanceTitleLabel) + balanceRow.addArrangedSubview(balanceValueLabel) + contentStack.addArrangedSubview(balanceRow) + contentStack.setCustomSpacing(20, after: balanceRow) + + currentCoinsLabel.font = BoldFont(size: 11) + currentCoinsLabel.textColor = UIColor.main.blueyGrey + currentCoinsLabel.letterSpacing = 2 + currentCoinsLabel.text = Localizable.shared.strings.current_coins.uppercased() + contentStack.addArrangedSubview(currentCoinsLabel) + contentStack.setCustomSpacing(12, after: currentCoinsLabel) + + stripeView.translatesAutoresizingMaskIntoConstraints = false + contentStack.addArrangedSubview(stripeView) + stripeView.heightAnchor.constraint(equalToConstant: 12).isActive = true + contentStack.setCustomSpacing(8, after: stripeView) + + summaryLabel.font = RegularFont(size: 13) + summaryLabel.textColor = UIColor.main.blueyGrey + summaryLabel.numberOfLines = 0 + contentStack.addArrangedSubview(summaryLabel) + contentStack.setCustomSpacing(14, after: summaryLabel) + + tileStack.axis = .horizontal + tileStack.alignment = .fill + tileStack.distribution = .fillEqually + tileStack.spacing = 8 + contentStack.addArrangedSubview(tileStack) + contentStack.setCustomSpacing(20, after: tileStack) + + warningContainer.backgroundColor = UIColor.main.heliotrope.withAlphaComponent(0.12) + warningContainer.layer.cornerRadius = 8 + warningContainer.translatesAutoresizingMaskIntoConstraints = false + warningLabel.font = RegularFont(size: 12) + warningLabel.textColor = UIColor.main.heliotrope + warningLabel.numberOfLines = 0 + warningLabel.translatesAutoresizingMaskIntoConstraints = false + warningContainer.addSubview(warningLabel) + NSLayoutConstraint.activate([ + warningLabel.topAnchor.constraint(equalTo: warningContainer.topAnchor, constant: 10), + warningLabel.bottomAnchor.constraint(equalTo: warningContainer.bottomAnchor, constant: -10), + warningLabel.leadingAnchor.constraint(equalTo: warningContainer.leadingAnchor, constant: 12), + warningLabel.trailingAnchor.constraint(equalTo: warningContainer.trailingAnchor, constant: -12), + ]) + contentStack.addArrangedSubview(warningContainer) + contentStack.setCustomSpacing(20, after: warningContainer) + + splitIntoLabel.font = BoldFont(size: 11) + splitIntoLabel.textColor = UIColor.main.blueyGrey + splitIntoLabel.letterSpacing = 2 + splitIntoLabel.text = Localizable.shared.strings.split_into.uppercased() + contentStack.addArrangedSubview(splitIntoLabel) + contentStack.setCustomSpacing(12, after: splitIntoLabel) + + splitIntoStack.axis = .horizontal + splitIntoStack.distribution = .equalSpacing + splitIntoStack.alignment = .center + for count in viewModel.allowedSplitCounts { + let btn = makeSplitCountButton(count: count) + splitIntoStack.addArrangedSubview(btn) + splitButtons.append(btn) + } + contentStack.addArrangedSubview(splitIntoStack) + contentStack.setCustomSpacing(24, after: splitIntoStack) + + previewLabel.font = BoldFont(size: 11) + previewLabel.textColor = UIColor.main.blueyGrey + previewLabel.letterSpacing = 2 + previewLabel.text = Localizable.shared.strings.preview.uppercased() + contentStack.addArrangedSubview(previewLabel) + contentStack.setCustomSpacing(10, after: previewLabel) + + let previewRow = UIStackView() + previewRow.axis = .horizontal + previewRow.alignment = .center + previewRow.distribution = .fill + previewRow.spacing = 8 + previewLeadingLabel.font = RegularFont(size: 14) + previewLeadingLabel.textColor = UIColor.main.blueyGrey + previewLeadingLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal) + previewLeadingLabel.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal) + previewValueLabel.font = BoldFont(size: 16) + previewValueLabel.textColor = UIColor.white + previewValueLabel.numberOfLines = 0 + previewValueLabel.textAlignment = .right + previewValueLabel.adjustsFontSizeToFitWidth = true + previewValueLabel.minimumScaleFactor = 0.7 + previewRow.addArrangedSubview(previewLeadingLabel) + previewRow.addArrangedSubview(previewValueLabel) + contentStack.addArrangedSubview(previewRow) + contentStack.setCustomSpacing(10, after: previewRow) + + let feeRow = UIStackView() + feeRow.axis = .horizontal + feeRow.alignment = .center + feeRow.distribution = .fill + feeRow.spacing = 8 + feeTitleLabel.font = RegularFont(size: 13) + feeTitleLabel.textColor = UIColor.main.blueyGrey + feeTitleLabel.text = Localizable.shared.strings.fee.uppercased() + feeTitleLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal) + feeValueLabel.font = RegularFont(size: 13) + feeValueLabel.textColor = UIColor.white + feeValueLabel.textAlignment = .right + feeRow.addArrangedSubview(feeTitleLabel) + feeRow.addArrangedSubview(feeValueLabel) + contentStack.addArrangedSubview(feeRow) + contentStack.setCustomSpacing(20, after: feeRow) + } + + private func makeSplitCountButton(count: Int) -> UIButton { + let btn = UIButton(type: .system) + btn.tag = count + btn.setTitle("\(count)", for: .normal) + btn.titleLabel?.font = BoldFont(size: 16) + btn.layer.cornerRadius = 22 + btn.layer.borderWidth = 1 + btn.translatesAutoresizingMaskIntoConstraints = false + btn.widthAnchor.constraint(equalToConstant: 56).isActive = true + btn.heightAnchor.constraint(equalToConstant: 44).isActive = true + btn.addTarget(self, action: #selector(onSplitCountTapped(_:)), for: .touchUpInside) + return btn + } + + private func refresh() { + let group = viewModel.group + let asset = group.asset + + titleLabel.text = "\(Localizable.shared.strings.split.capitalized) \(asset.unitName.uppercased())" + subtitleLabel.text = Localizable.shared.strings.split_coins_subtitle + + balanceValueLabel.text = formattedAmount(real: asset.realAmount, unit: asset.unitName) + + stripeView.setAmounts(group.utxos.map { $0.amount }) + + let largestText = formattedAmount(real: group.largestUtxo?.realAmount ?? 0, unit: asset.unitName) + let countText = Localizable.shared.strings.coin_count_format + .replacingOccurrences(of: "(count)", with: "\(group.utxos.count)") + let largestRow = Localizable.shared.strings.largest_coin_format + .replacingOccurrences(of: "(amount)", with: largestText) + summaryLabel.text = "\(countText) · \(largestRow)" + + rebuildTiles(group: group) + + if let warn = viewModel.concentrationWarning { + warningLabel.text = warn + warningContainer.isHidden = false + } else { + warningContainer.isHidden = true + } + + for btn in splitButtons { + let isSelected = btn.tag == viewModel.splitInto + btn.backgroundColor = isSelected ? UIColor.main.brightTeal : UIColor.clear + btn.layer.borderColor = (isSelected + ? UIColor.main.brightTeal + : UIColor.white.withAlphaComponent(0.18)).cgColor + btn.setTitleColor(isSelected ? UIColor.main.marine : UIColor.white, for: .normal) + } + + let perOutputText = formattedAmount(real: grothToBeam(viewModel.perOutputGroth), unit: asset.unitName) + previewLeadingLabel.text = "\(viewModel.splitInto)x equal" + previewValueLabel.text = perOutputText + + feeValueLabel.text = formattedAmount(real: grothToBeam(viewModel.feeGroth), unit: "BEAM") + + ctaButton.isEnabled = viewModel.canSubmit + ctaButton.alpha = viewModel.canSubmit ? 1 : 0.5 + } + + private func rebuildTiles(group: AssetUTXOGroup) { + tileStack.arrangedSubviews.forEach { + tileStack.removeArrangedSubview($0) + $0.removeFromSuperview() + } + let visibleCount = min(4, group.utxos.count) + for i in 0.. 4 { + let remainder = group.utxos.count - 4 + let card = SplitCoinPreviewCard() + let label = Localizable.shared.strings.more_coins_format + .replacingOccurrences(of: "(count)", with: "\(remainder)") + card.configureMore(text: label) + tileStack.addArrangedSubview(card) + } + } + + private func grothToBeam(_ groth: UInt64) -> Double { + return Double(groth) / 100_000_000 + } + + private func formattedAmount(real: Double, unit: String) -> String { + return String.currency(value: real, name: unit) + } + + @objc private func onSplitCountTapped(_ sender: UIButton) { + viewModel.splitInto = sender.tag + } + + @objc private func onSplitTapped() { + if Settings.sharedManager().isNeedaskPasswordForSend { + let popover = UnlockPasswordPopover(event: .transaction) + popover.completion = { [weak self] ok in + if ok { self?.viewModel.submit() } + } + popover.modalPresentationStyle = .overFullScreen + popover.modalTransitionStyle = .crossDissolve + present(popover, animated: true, completion: nil) + } else { + viewModel.submit() + } + } + + @objc private func onCancel() { + dismissAnimated(completion: nil) + } + + @objc private func handleDragDown(_ pan: UIPanGestureRecognizer) { + let translation = pan.translation(in: view).y + let velocity = pan.velocity(in: view).y + switch pan.state { + case .changed: + let offset = max(0, translation) + card.transform = CGAffineTransform(translationX: 0, y: offset) + backdrop.alpha = 1 - min(1, offset / max(1, card.bounds.height)) * 0.5 + case .ended, .cancelled: + if translation > card.bounds.height * 0.25 || velocity > 800 { + dismissAnimated(completion: nil) + } else { + UIView.animate(withDuration: 0.22, delay: 0, options: [.curveEaseOut], animations: { + self.card.transform = .identity + self.backdrop.alpha = 1 + }) + } + default: + break + } + } + + private func dismissAnimated(completion: (() -> Void)?) { + UIView.animate(withDuration: 0.22, delay: 0, options: [.curveEaseIn], animations: { + self.backdrop.alpha = 0 + self.card.transform = CGAffineTransform(translationX: 0, y: self.card.bounds.height) + }, completion: { _ in + self.dismiss(animated: false, completion: completion) + }) + } + + private func alertWithMessage(_ message: String) { + alert(message: message) + } +} + +extension SplitCoinsViewController: UIGestureRecognizerDelegate { + func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { + guard let pan = gestureRecognizer as? UIPanGestureRecognizer else { return true } + let velocity = pan.velocity(in: view) + return scrollView.contentOffset.y <= 0 && velocity.y > abs(velocity.x) + } + + func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, + shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { + return true + } +} diff --git a/BeamWallet/ViewControllers/Main/UTXO/UTXODetailViewController.swift b/BeamWallet/ViewControllers/Main/UTXO/UTXODetailViewController.swift index 9f5d9a70..b932d856 100644 --- a/BeamWallet/ViewControllers/Main/UTXO/UTXODetailViewController.swift +++ b/BeamWallet/ViewControllers/Main/UTXO/UTXODetailViewController.swift @@ -2,7 +2,7 @@ // UTXODetailViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -75,12 +75,12 @@ class UTXODetailViewController: BaseTableViewController { @objc private func onMoreDetails() { viewModel.detailsExpand = !viewModel.detailsExpand - tableView.reloadSections(IndexSet(arrayLiteral: 1), with: .fade) + tableView.reloadSections([1], with: .fade) } - + @objc private func onMoreHistory() { viewModel.historyExpand = !viewModel.historyExpand - tableView.reloadSections(IndexSet(arrayLiteral: 2), with: .fade) + tableView.reloadSections([2], with: .fade) } } diff --git a/BeamWallet/ViewControllers/Main/UTXO/UTXOViewController.swift b/BeamWallet/ViewControllers/Main/UTXO/UTXOViewController.swift index cc5f13c7..86f6639d 100644 --- a/BeamWallet/ViewControllers/Main/UTXO/UTXOViewController.swift +++ b/BeamWallet/ViewControllers/Main/UTXO/UTXOViewController.swift @@ -2,7 +2,7 @@ // UTXOViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -19,186 +19,165 @@ import UIKit - class UTXOViewController: BaseTableViewController { - - private let pagingViewController = BMPagingViewController() - private var titles = [Localizable.shared.strings.available, Localizable.shared.strings.in_progress, Localizable.shared.strings.spent, Localizable.shared.strings.unavailable] - + private let viewModel = UTXOViewModel() + private var groups: [AssetUTXOGroup] = [] + private let emptyView: BMEmptyView = UIView.fromNib() private let hideUTXOView: BMEmptyView = UIView.fromNib() - private var _selectedIndex = 0 - public var selectedIndex:Int { - get{ - return _selectedIndex - } - set{ - _selectedIndex = newValue - } - } - - override func viewDidLoad() { + tableStyle = .grouped super.viewDidLoad() - + Settings.sharedManager().addDelegate(self) - + hideUTXOView.text = Localizable.shared.strings.secutiry_utxo hideUTXOView.image = IconUTXOSecurity() - + emptyView.text = Localizable.shared.strings.utxo_empty emptyView.image = IconUtxoEmpty() - - let pagingView = pagingViewController.view as! PagingView - pagingView.options.menuItemSpacing = 20 - - addChild(pagingViewController) - view.addSubview(pagingViewController.view) - pagingViewController.didMove(toParent: self) - - pagingViewController.dataSource = self - pagingViewController.delegate = self emptyView.isHidden = true emptyView.backgroundColor = view.backgroundColor view.addSubview(emptyView) - + hideUTXOView.isHidden = !Settings.sharedManager().isHideAmounts hideUTXOView.backgroundColor = view.backgroundColor view.addSubview(hideUTXOView) - + setGradientTopBar(mainColor: UIColor.main.peacockBlue, addedStatusView: true) - title = Localizable.shared.strings.utxo + tableView.register([UTXOCell.self]) + tableView.dataSource = self + tableView.delegate = self + tableView.sectionFooterHeight = 0 + tableView.estimatedSectionFooterHeight = 0 + if #available(iOS 15.0, *) { + tableView.sectionHeaderTopPadding = 0 + } + rightButton() } - + deinit { Settings.sharedManager().removeDelegate(self) } - + override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) - - checkIsEmpty() - + AppModel.sharedManager().addDelegate(self) AppModel.sharedManager().getUTXO() + reloadGroups() } - + override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) - + AppModel.sharedManager().removeDelegate(self) } - + override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() - - let frame = tableView.frame - // frame.origin.y = frame.origin.y + 130 - // frame.size.height = frame.size.height - 130 - - pagingViewController.view.frame = frame - emptyView.frame = frame - hideUTXOView.frame = frame - } - - private func checkIsEmpty() { - var allUtxos = [BMUTXO]() - - if let utxos = AppModel.sharedManager().utxos { - allUtxos.append(contentsOf: utxos as! [BMUTXO]) - } - - if let utxos = AppModel.sharedManager().shildedUtxos { - allUtxos.append(contentsOf: utxos as! [BMUTXO]) - } - - let count = allUtxos.count - if count == 0 { - pagingViewController.view.alpha = 0 - emptyView.isHidden = false - } - else{ - pagingViewController.view.alpha = 1 - emptyView.isHidden = true - } + emptyView.frame = tableView.frame + hideUTXOView.frame = tableView.frame } - + + private func reloadGroups() { + groups = viewModel.groupedByAsset() + emptyView.isHidden = !groups.isEmpty + tableView.reloadData() + } + private func rightButton() { - addRightButton(image: Settings.sharedManager().isHideAmounts ? IconShowBalance() : IconHideBalance(), target: self, selector: #selector(onHideAmounts)) + addRightButton( + image: Settings.sharedManager().isHideAmounts ? IconShowBalance() : IconHideBalance(), + target: self, + selector: #selector(onHideAmounts) + ) } - - private func menuOffset(for scrollView: UIScrollView) -> CGFloat { - return min(pagingViewController.options.menuHeight, max(0, scrollView.contentOffset.y)) + + private func presentSplit(for group: AssetUTXOGroup) { + let vm = SplitCoinsViewModel(group: group) + let vc = SplitCoinsViewController(viewModel: vm) + present(vc, animated: false, completion: nil) } } +extension UTXOViewController: UITableViewDataSource, UITableViewDelegate { -extension UTXOViewController: PagingViewControllerDataSource { - - func pagingViewController(_ pagingViewController: PagingViewController, viewControllerForIndex index: Int) -> UIViewController { - - let viewController = UTXOTableView() - viewController.view.backgroundColor = UIColor.clear - viewController.selectedIndex = index - - return viewController + func numberOfSections(in tableView: UITableView) -> Int { + return groups.count } - - func pagingViewController(_ pagingViewController: PagingViewController, pagingItemForIndex index: Int) -> T { - return PagingIndexItem(index: index, title: titles[index].uppercased()) as! T + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return groups[section].utxos.count } - - func numberOfViewControllers(in: PagingViewController) -> Int{ - return titles.count + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let utxo = groups[indexPath.section].utxos[indexPath.row] + let cell = tableView + .dequeueReusableCell(withType: UTXOCell.self, for: indexPath) + .configured(with: (row: indexPath.row, utxo: utxo)) + return cell + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + tableView.deselectRow(at: indexPath, animated: true) + let utxo = groups[indexPath.section].utxos[indexPath.row] + if let top = UIApplication.getTopMostViewController() { + let vc = UTXODetailViewController(utxo: utxo) + top.pushViewController(vc: vc) + } } -} -extension UTXOViewController : PagingViewControllerDelegate { - func pagingViewController(_ pagingViewController: PagingViewController, didScrollToItem pagingItem: T, startingViewController: UIViewController?, destinationViewController: UIViewController, transitionSuccessful: Bool) where T : PagingItem, T : Comparable, T : Hashable { + func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { + let group = groups[section] + let header = AssetUTXOSectionHeaderView(group: group) + header.onSplitTapped = { [weak self] in + self?.presentSplit(for: group) + } + return header + } + + func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { + return AssetUTXOSectionHeaderView.preferredHeight + } - let index = pagingItem as! PagingIndexItem - selectedIndex = index.index + func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { + return nil } - - func pagingViewController( - _ pagingViewController: PagingViewController, - widthForPagingItem pagingItem: T, - isSelected: Bool) -> CGFloat? { - - let index = pagingItem as! PagingIndexItem - let title = index.title - let size = title.boundingWidth(with: pagingViewController.options.font, kern: 1.5) - return size + 20 + + func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { + return CGFloat.leastNormalMagnitude } } -extension UTXOViewController : SettingsModelDelegate { +extension UTXOViewController: SettingsModelDelegate { func onChangeHideAmounts() { rightButton() - + hideUTXOView.isHidden = !Settings.sharedManager().isHideAmounts tableView.isUserInteractionEnabled = !Settings.sharedManager().isHideAmounts tableView.reloadData() } } -extension UTXOViewController : WalletModelDelegate { - - func onWalletStatusChange(_ status: BMWalletStatus) { +extension UTXOViewController: WalletModelDelegate { + func onWalletStatusChange(_ status: BMWalletStatus) { + DispatchQueue.main.async { [weak self] in + self?.reloadGroups() + } } - + func onReceivedUTXOs(_ utxos: [BMUTXO]) { - DispatchQueue.main.async { - self.checkIsEmpty() + DispatchQueue.main.async { [weak self] in + self?.reloadGroups() } } } - diff --git a/Resources/cs.lproj/Localizable.strings b/Resources/cs.lproj/Localizable.strings index 3f356434..100ee7f9 100644 --- a/Resources/cs.lproj/Localizable.strings +++ b/Resources/cs.lproj/Localizable.strings @@ -628,3 +628,20 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; + + +// MARK: Split Coins +"split" = "split"; +"split_coins_subtitle" = "Create smaller coins to prevent transaction failures"; +"split_coins_cta" = "split"; +"regular_balance" = "Regular Balance"; +"current_coins" = "Current Coins"; +"coin_count_format" = "(count) coins"; +"largest_coin_format" = "Largest (amount)"; +"more_coins_format" = "+(count) more"; +"split_into" = "Split Into"; +"preview" = "Preview"; +"nx_equal_format" = "(count)x equal · (amount)"; +"split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; +"split_too_small" = "Coin too small to split"; +"split_started_message" = "Your split transaction has been started"; diff --git a/Resources/en.lproj/Localizable.strings b/Resources/en.lproj/Localizable.strings index 1cb872bf..f83a451d 100644 --- a/Resources/en.lproj/Localizable.strings +++ b/Resources/en.lproj/Localizable.strings @@ -741,3 +741,20 @@ and never kept on the blockchain."; "sign_message" = "Sign message"; "verify_message" = "Verify message"; + + +// MARK: Split Coins +"split" = "split"; +"split_coins_subtitle" = "Create smaller coins to prevent transaction failures"; +"split_coins_cta" = "split"; +"regular_balance" = "Regular Balance"; +"current_coins" = "Current Coins"; +"coin_count_format" = "(count) coins"; +"largest_coin_format" = "Largest (amount)"; +"more_coins_format" = "+(count) more"; +"split_into" = "Split Into"; +"preview" = "Preview"; +"nx_equal_format" = "(count)x equal · (amount)"; +"split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; +"split_too_small" = "Coin too small to split"; +"split_started_message" = "Your split transaction has been started"; diff --git a/Resources/es.lproj/Localizable.strings b/Resources/es.lproj/Localizable.strings index 5ec03ef3..a49b1abf 100644 --- a/Resources/es.lproj/Localizable.strings +++ b/Resources/es.lproj/Localizable.strings @@ -628,3 +628,20 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; + + +// MARK: Split Coins +"split" = "split"; +"split_coins_subtitle" = "Create smaller coins to prevent transaction failures"; +"split_coins_cta" = "split"; +"regular_balance" = "Regular Balance"; +"current_coins" = "Current Coins"; +"coin_count_format" = "(count) coins"; +"largest_coin_format" = "Largest (amount)"; +"more_coins_format" = "+(count) more"; +"split_into" = "Split Into"; +"preview" = "Preview"; +"nx_equal_format" = "(count)x equal · (amount)"; +"split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; +"split_too_small" = "Coin too small to split"; +"split_started_message" = "Your split transaction has been started"; diff --git a/Resources/fi-FI.lproj/Localizable.strings b/Resources/fi-FI.lproj/Localizable.strings index 3f356434..100ee7f9 100644 --- a/Resources/fi-FI.lproj/Localizable.strings +++ b/Resources/fi-FI.lproj/Localizable.strings @@ -628,3 +628,20 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; + + +// MARK: Split Coins +"split" = "split"; +"split_coins_subtitle" = "Create smaller coins to prevent transaction failures"; +"split_coins_cta" = "split"; +"regular_balance" = "Regular Balance"; +"current_coins" = "Current Coins"; +"coin_count_format" = "(count) coins"; +"largest_coin_format" = "Largest (amount)"; +"more_coins_format" = "+(count) more"; +"split_into" = "Split Into"; +"preview" = "Preview"; +"nx_equal_format" = "(count)x equal · (amount)"; +"split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; +"split_too_small" = "Coin too small to split"; +"split_started_message" = "Your split transaction has been started"; diff --git a/Resources/fr.lproj/Localizable.strings b/Resources/fr.lproj/Localizable.strings index 3f356434..100ee7f9 100644 --- a/Resources/fr.lproj/Localizable.strings +++ b/Resources/fr.lproj/Localizable.strings @@ -628,3 +628,20 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; + + +// MARK: Split Coins +"split" = "split"; +"split_coins_subtitle" = "Create smaller coins to prevent transaction failures"; +"split_coins_cta" = "split"; +"regular_balance" = "Regular Balance"; +"current_coins" = "Current Coins"; +"coin_count_format" = "(count) coins"; +"largest_coin_format" = "Largest (amount)"; +"more_coins_format" = "+(count) more"; +"split_into" = "Split Into"; +"preview" = "Preview"; +"nx_equal_format" = "(count)x equal · (amount)"; +"split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; +"split_too_small" = "Coin too small to split"; +"split_started_message" = "Your split transaction has been started"; diff --git a/Resources/ko.lproj/Localizable.strings b/Resources/ko.lproj/Localizable.strings index 3f356434..100ee7f9 100644 --- a/Resources/ko.lproj/Localizable.strings +++ b/Resources/ko.lproj/Localizable.strings @@ -628,3 +628,20 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; + + +// MARK: Split Coins +"split" = "split"; +"split_coins_subtitle" = "Create smaller coins to prevent transaction failures"; +"split_coins_cta" = "split"; +"regular_balance" = "Regular Balance"; +"current_coins" = "Current Coins"; +"coin_count_format" = "(count) coins"; +"largest_coin_format" = "Largest (amount)"; +"more_coins_format" = "+(count) more"; +"split_into" = "Split Into"; +"preview" = "Preview"; +"nx_equal_format" = "(count)x equal · (amount)"; +"split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; +"split_too_small" = "Coin too small to split"; +"split_started_message" = "Your split transaction has been started"; diff --git a/Resources/nl.lproj/Localizable.strings b/Resources/nl.lproj/Localizable.strings index 5ec03ef3..a49b1abf 100644 --- a/Resources/nl.lproj/Localizable.strings +++ b/Resources/nl.lproj/Localizable.strings @@ -628,3 +628,20 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; + + +// MARK: Split Coins +"split" = "split"; +"split_coins_subtitle" = "Create smaller coins to prevent transaction failures"; +"split_coins_cta" = "split"; +"regular_balance" = "Regular Balance"; +"current_coins" = "Current Coins"; +"coin_count_format" = "(count) coins"; +"largest_coin_format" = "Largest (amount)"; +"more_coins_format" = "+(count) more"; +"split_into" = "Split Into"; +"preview" = "Preview"; +"nx_equal_format" = "(count)x equal · (amount)"; +"split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; +"split_too_small" = "Coin too small to split"; +"split_started_message" = "Your split transaction has been started"; diff --git a/Resources/ru.lproj/Localizable.strings b/Resources/ru.lproj/Localizable.strings index 3f356434..100ee7f9 100644 --- a/Resources/ru.lproj/Localizable.strings +++ b/Resources/ru.lproj/Localizable.strings @@ -628,3 +628,20 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; + + +// MARK: Split Coins +"split" = "split"; +"split_coins_subtitle" = "Create smaller coins to prevent transaction failures"; +"split_coins_cta" = "split"; +"regular_balance" = "Regular Balance"; +"current_coins" = "Current Coins"; +"coin_count_format" = "(count) coins"; +"largest_coin_format" = "Largest (amount)"; +"more_coins_format" = "+(count) more"; +"split_into" = "Split Into"; +"preview" = "Preview"; +"nx_equal_format" = "(count)x equal · (amount)"; +"split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; +"split_too_small" = "Coin too small to split"; +"split_started_message" = "Your split transaction has been started"; diff --git a/Resources/sv-SE.lproj/Localizable.strings b/Resources/sv-SE.lproj/Localizable.strings index 9eaf835a..caf46bae 100644 --- a/Resources/sv-SE.lproj/Localizable.strings +++ b/Resources/sv-SE.lproj/Localizable.strings @@ -672,3 +672,20 @@ "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; + + +// MARK: Split Coins +"split" = "split"; +"split_coins_subtitle" = "Create smaller coins to prevent transaction failures"; +"split_coins_cta" = "split"; +"regular_balance" = "Regular Balance"; +"current_coins" = "Current Coins"; +"coin_count_format" = "(count) coins"; +"largest_coin_format" = "Largest (amount)"; +"more_coins_format" = "+(count) more"; +"split_into" = "Split Into"; +"preview" = "Preview"; +"nx_equal_format" = "(count)x equal · (amount)"; +"split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; +"split_too_small" = "Coin too small to split"; +"split_started_message" = "Your split transaction has been started"; diff --git a/Resources/sv.lproj/Localizable.strings b/Resources/sv.lproj/Localizable.strings index 3f356434..100ee7f9 100644 --- a/Resources/sv.lproj/Localizable.strings +++ b/Resources/sv.lproj/Localizable.strings @@ -628,3 +628,20 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; + + +// MARK: Split Coins +"split" = "split"; +"split_coins_subtitle" = "Create smaller coins to prevent transaction failures"; +"split_coins_cta" = "split"; +"regular_balance" = "Regular Balance"; +"current_coins" = "Current Coins"; +"coin_count_format" = "(count) coins"; +"largest_coin_format" = "Largest (amount)"; +"more_coins_format" = "+(count) more"; +"split_into" = "Split Into"; +"preview" = "Preview"; +"nx_equal_format" = "(count)x equal · (amount)"; +"split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; +"split_too_small" = "Coin too small to split"; +"split_started_message" = "Your split transaction has been started"; diff --git a/Resources/th.lproj/Localizable.strings b/Resources/th.lproj/Localizable.strings index 3f356434..100ee7f9 100644 --- a/Resources/th.lproj/Localizable.strings +++ b/Resources/th.lproj/Localizable.strings @@ -628,3 +628,20 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; + + +// MARK: Split Coins +"split" = "split"; +"split_coins_subtitle" = "Create smaller coins to prevent transaction failures"; +"split_coins_cta" = "split"; +"regular_balance" = "Regular Balance"; +"current_coins" = "Current Coins"; +"coin_count_format" = "(count) coins"; +"largest_coin_format" = "Largest (amount)"; +"more_coins_format" = "+(count) more"; +"split_into" = "Split Into"; +"preview" = "Preview"; +"nx_equal_format" = "(count)x equal · (amount)"; +"split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; +"split_too_small" = "Coin too small to split"; +"split_started_message" = "Your split transaction has been started"; diff --git a/Resources/tr.lproj/Localizable.strings b/Resources/tr.lproj/Localizable.strings index 3f356434..100ee7f9 100644 --- a/Resources/tr.lproj/Localizable.strings +++ b/Resources/tr.lproj/Localizable.strings @@ -628,3 +628,20 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; + + +// MARK: Split Coins +"split" = "split"; +"split_coins_subtitle" = "Create smaller coins to prevent transaction failures"; +"split_coins_cta" = "split"; +"regular_balance" = "Regular Balance"; +"current_coins" = "Current Coins"; +"coin_count_format" = "(count) coins"; +"largest_coin_format" = "Largest (amount)"; +"more_coins_format" = "+(count) more"; +"split_into" = "Split Into"; +"preview" = "Preview"; +"nx_equal_format" = "(count)x equal · (amount)"; +"split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; +"split_too_small" = "Coin too small to split"; +"split_started_message" = "Your split transaction has been started"; diff --git a/Resources/vi.lproj/Localizable.strings b/Resources/vi.lproj/Localizable.strings index 3f356434..100ee7f9 100644 --- a/Resources/vi.lproj/Localizable.strings +++ b/Resources/vi.lproj/Localizable.strings @@ -628,3 +628,20 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; + + +// MARK: Split Coins +"split" = "split"; +"split_coins_subtitle" = "Create smaller coins to prevent transaction failures"; +"split_coins_cta" = "split"; +"regular_balance" = "Regular Balance"; +"current_coins" = "Current Coins"; +"coin_count_format" = "(count) coins"; +"largest_coin_format" = "Largest (amount)"; +"more_coins_format" = "+(count) more"; +"split_into" = "Split Into"; +"preview" = "Preview"; +"nx_equal_format" = "(count)x equal · (amount)"; +"split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; +"split_too_small" = "Coin too small to split"; +"split_started_message" = "Your split transaction has been started"; diff --git a/Resources/zh-Hans.lproj/Localizable.strings b/Resources/zh-Hans.lproj/Localizable.strings index d82a826e..2928c36c 100644 --- a/Resources/zh-Hans.lproj/Localizable.strings +++ b/Resources/zh-Hans.lproj/Localizable.strings @@ -627,3 +627,20 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; + + +// MARK: Split Coins +"split" = "split"; +"split_coins_subtitle" = "Create smaller coins to prevent transaction failures"; +"split_coins_cta" = "split"; +"regular_balance" = "Regular Balance"; +"current_coins" = "Current Coins"; +"coin_count_format" = "(count) coins"; +"largest_coin_format" = "Largest (amount)"; +"more_coins_format" = "+(count) more"; +"split_into" = "Split Into"; +"preview" = "Preview"; +"nx_equal_format" = "(count)x equal · (amount)"; +"split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; +"split_too_small" = "Coin too small to split"; +"split_started_message" = "Your split transaction has been started"; From 64456e3f15ae786f9cd295ba693792ed830782f2 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sat, 9 May 2026 17:27:43 +0200 Subject: [PATCH 22/48] fix(settings): dynamic version footer + uniform scroll bounce MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The main settings page left a large dead gap between the last row and the version/blockchain-height footer (especially on X devices, where the footer was hardcoded to 280pt with labels pinned to its bottom), forcing users to scroll to see content that should fit on screen. Compute the footer height dynamically from the remaining visible area instead, with a 70pt minimum, and anchor the labels to the bottom of the footer via Auto Layout so they always sit just above the safe-area inset. Also drop the stray space in "v 7.4" → "v7.4". Disable alwaysBounceVertical on BaseTableViewController so non- scrollable pages (settings, node selection, notifications, ...) no longer bob when content fits the screen. --- .../Base/BaseTableViewController.swift | 5 +- .../Settings/SettingsViewController.swift | 83 ++++++++++++------- 2 files changed, 57 insertions(+), 31 deletions(-) diff --git a/BeamWallet/ViewControllers/Base/BaseTableViewController.swift b/BeamWallet/ViewControllers/Base/BaseTableViewController.swift index c9ae920a..dfb34bca 100644 --- a/BeamWallet/ViewControllers/Base/BaseTableViewController.swift +++ b/BeamWallet/ViewControllers/Base/BaseTableViewController.swift @@ -2,7 +2,7 @@ // BaseTableViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -40,7 +40,8 @@ class BaseTableViewController: BaseViewController { tableView = UITableView(frame: self.view.bounds, style: tableStyle) tableView.backgroundColor = UIColor.main.marine tableView.separatorStyle = .none - + tableView.alwaysBounceVertical = false + self.view.addSubview(tableView) } diff --git a/BeamWallet/ViewControllers/Main/Settings/SettingsViewController.swift b/BeamWallet/ViewControllers/Main/Settings/SettingsViewController.swift index 07ad7c71..d91843ef 100644 --- a/BeamWallet/ViewControllers/Main/Settings/SettingsViewController.swift +++ b/BeamWallet/ViewControllers/Main/Settings/SettingsViewController.swift @@ -2,7 +2,7 @@ // WalletViewController.swift // BeamWallet // -// Copyright 2018 Beam Development +// Copyright 2026 Beam Development // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -20,10 +20,12 @@ import UIKit class SettingsViewController: BaseTableViewController { - + + private static let versionFooterMinHeight: CGFloat = 70 + private var viewModel:SettingsViewModel! private var type:SettingsViewModel.SettingsType! - + private var searchView:BMSearchView! init(type:SettingsViewModel.SettingsType) { @@ -60,6 +62,9 @@ class SettingsViewController: BaseTableViewController { self?.tableView.separatorStyle = .singleLine } self?.tableView.reloadData() + DispatchQueue.main.async { + self?.adjustVersionFooterIfNeeded() + } } tableView.register([SettingsCell.self, SettingsSubTitleCell.self, BMEmptyCell.self]) @@ -123,8 +128,26 @@ class SettingsViewController: BaseTableViewController { override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() - + tableView.frame = CGRect(x: 0, y: tableView.y - 5, width: self.view.bounds.width, height: tableView.h + 10) + + adjustVersionFooterIfNeeded() + } + + private func adjustVersionFooterIfNeeded() { + guard type == .main, let footer = tableView.tableFooterView else { return } + + let contentExcludingFooter = tableView.contentSize.height - footer.frame.height + let bottomInset = view.safeAreaInsets.bottom + let available = tableView.bounds.height - bottomInset - contentExcludingFooter + let desired = max(SettingsViewController.versionFooterMinHeight, available) + + if abs(footer.frame.height - desired) > 0.5 { + var newFrame = footer.frame + newFrame.size.height = desired + footer.frame = newFrame + tableView.tableFooterView = footer + } } override func viewDidDisappear(_ animated: Bool) { @@ -137,34 +160,36 @@ class SettingsViewController: BaseTableViewController { } private func versionView() -> UIView { - let view = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 70)) + let view = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: SettingsViewController.versionFooterMinHeight)) view.backgroundColor = UIColor.clear - - let v = UIApplication.appVersion() - let string = "v " + v - - let label = UILabel(frame: CGRect(x: 0, y: 35, width: UIScreen.main.bounds.size.width, height: 20)) - label.textAlignment = .center - label.font = BoldFont(size: 14) - label.textColor = UIColor.main.blueyGrey - label.text = string - view.addSubview(label) - + let bHeight = AppModel.sharedManager().walletStatus?.currentHeight ?? "" - let height = UILabel(frame: CGRect(x: 0, y: 5, width: UIScreen.main.bounds.size.width, height: 20)) - height.textAlignment = .center - height.font = RegularFont(size: 14) - height.textColor = UIColor.main.blueyGrey - height.text = Localizable.shared.strings.blockchain_height + ": " + bHeight - view.addSubview(height) - - if Device.isXDevice { - view.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 280) - label.frame = CGRect(x: 0, y: view.h - 60, width: UIScreen.main.bounds.size.width, height: 20) - height.frame = CGRect(x: 0, y: view.h - 90, width: UIScreen.main.bounds.size.width, height: 20) + let heightLabel = UILabel() + heightLabel.translatesAutoresizingMaskIntoConstraints = false + heightLabel.textAlignment = .center + heightLabel.font = RegularFont(size: 14) + heightLabel.textColor = UIColor.main.blueyGrey + heightLabel.text = Localizable.shared.strings.blockchain_height + ": " + bHeight + view.addSubview(heightLabel) + + let versionLabel = UILabel() + versionLabel.translatesAutoresizingMaskIntoConstraints = false + versionLabel.textAlignment = .center + versionLabel.font = BoldFont(size: 14) + versionLabel.textColor = UIColor.main.blueyGrey + versionLabel.text = "v" + UIApplication.appVersion() + view.addSubview(versionLabel) + + NSLayoutConstraint.activate([ + versionLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor), + versionLabel.trailingAnchor.constraint(equalTo: view.trailingAnchor), + versionLabel.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -15), + + heightLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor), + heightLabel.trailingAnchor.constraint(equalTo: view.trailingAnchor), + heightLabel.bottomAnchor.constraint(equalTo: versionLabel.topAnchor, constant: -5), + ]) - } - return view } } From c7334f9916da69f938f7db8734f5aec3a5f410b6 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sun, 10 May 2026 01:00:41 +0200 Subject: [PATCH 23/48] fix(navigation): restore edge-swipe back on every pushed sub-page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The custom swipe-back recognizer in BaseNavigationController denied the gesture for any top VC matching SettingsViewController / AddressesViewController / DAOAppsViewController / NotificationsViewController. Those classes are reused for pushed sub-pages too (Settings → General/Privacy/Utilities/Node, address detail), so the gesture was silently denied on every settings sub-page, the address detail page, and a handful of others. Replace the class allowlist with the actual intent: deny only when the top VC is the root of its nav stack (side-menu landing pages, which have nothing to pop to). Keep the BEAMX DAO carve-out — its embedded WebView horizontal pan still conflicts with the swipe. Net: 25 lines down to 7, no more "remember to add new root VCs to the allowlist" maintenance tax. --- .../Base/BaseNavigationController.swift | 30 +++++-------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/BeamWallet/ViewControllers/Base/BaseNavigationController.swift b/BeamWallet/ViewControllers/Base/BaseNavigationController.swift index 359c449a..c80e598c 100644 --- a/BeamWallet/ViewControllers/Base/BaseNavigationController.swift +++ b/BeamWallet/ViewControllers/Base/BaseNavigationController.swift @@ -129,29 +129,13 @@ class BaseNavigationController: UINavigationController, UINavigationControllerDe } func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { - if let top = UIApplication.getTopMostViewController() { - if top is WalletViewController { - return false - } - else if top is SettingsViewController { - return false - } - else if top is AddressesViewController { - return false - } - else if top is DAOAppsViewController { - return false - } - else if top is NotificationsViewController { - return false - } - else if top is DAOViewController { - if let dao = top as? DAOViewController { - if dao.app.name.uppercased() == "BEAMX DAO" { - return false - } - } - } + guard let top = UIApplication.getTopMostViewController(), + let nav = top.navigationController else { return true } + // Side-menu roots have nothing to pop to. + if nav.viewControllers.first === top { return false } + // BEAMX DAO embeds a WebView whose horizontal pan conflicts with the swipe. + if let dao = top as? DAOViewController, dao.app.name.uppercased() == "BEAMX DAO" { + return false } return true } From d3a2430669e93ce49f1cb33516dd1dcb5215baaf Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sun, 10 May 2026 01:00:58 +0200 Subject: [PATCH 24/48] feat(addresses): allow setting Edit Address expiry to Never MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The v7.4 wallet API accepts never/24h/auto/expired for an address's expiration value, and AppModel.editAddress: already mapped them correctly. The iOS edit screen had no UI affordance to pick "Never", though — its section-2 actions ("Extend" / "Active address") always re-armed to 24h unless the address was already on duration=0. Net effect: a never-expires address could only stay never; a 24h address could only stay 24h. No path between the two states. Make the section-0 expiry detail row tappable: it now pushes the already-scaffolded .address_expire data picker (Extend / Never), and the completion writes duration / isNowActiveDuration / isNowActive / isNowExpired / createTime so the existing Save path persists the new expiration. Switches the expiry row from the read-only BMMultiLinesCell to AddressExpiresCell, which already renders the right state-matrix label and shows a chevron advertising tappability. The existing section-2 shortcuts are kept — they still drive the same isNowActive* fields and remain useful. --- .../Addresses/EditAddressViewController.swift | 42 ++++++++++++++----- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/BeamWallet/ViewControllers/Main/Addresses/EditAddressViewController.swift b/BeamWallet/ViewControllers/Main/Addresses/EditAddressViewController.swift index e35e9183..1d884f7b 100644 --- a/BeamWallet/ViewControllers/Main/Addresses/EditAddressViewController.swift +++ b/BeamWallet/ViewControllers/Main/Addresses/EditAddressViewController.swift @@ -115,6 +115,34 @@ class EditAddressViewController: BaseTableViewController { back() } + private func presentExpiryPicker() { + guard !viewModel.isContact else { return } + if viewModel.newAddress.isExpired() && !viewModel.newAddress.isNowActive { return } + + let current: Int32 = (viewModel.newAddress.isNowActive ? viewModel.newAddress.isNowActiveDuration : viewModel.newAddress.duration) == 0 ? 0 : 24 + let picker = BMDataPickerViewController(type: .address_expire, selectedValue: current) + picker.completion = { [weak self] selected in + guard let self = self, let hours = selected as? Int32 else { return } + let duration: UInt64 = hours == 0 ? 0 : UInt64(Settings.sharedManager().maxAddressDurationSeconds) + + self.isNeverExpired = hours == 0 + self.canExtend = false + + self.viewModel.newAddress.createTime = UInt64(Date().timeIntervalSince1970) + self.viewModel.newAddress.duration = duration + self.viewModel.newAddress.isNowActiveDuration = duration + self.viewModel.newAddress.isNowActive = true + self.viewModel.newAddress.isNowExpired = false + + self.expireChanged = true + self.buttonSave.isEnabled = self.expireChanged || self.canSave + + self.fillAddressOptions() + self.tableView.reloadData() + } + pushViewController(vc: picker) + } + @objc private func fillAddressOptions() { hasActiveTransactions = AppModel.sharedManager().hasActiveTransactions(from: self.viewModel.address!) @@ -150,7 +178,7 @@ extension EditAddressViewController : UITableViewDelegate { tableView.deselectRow(at: indexPath, animated: true) if (indexPath.section == 0 && indexPath.row == 2) { - + presentExpiryPicker() } else if indexPath.row == addressOptions.count { @@ -244,17 +272,9 @@ extension EditAddressViewController : UITableViewDataSource { cell.topOffset?.constant = 20 return cell case 2: - - var detail = viewModel.newAddress.formattedDate() - - if viewModel.newAddress.isExpired() || viewModel.newAddress.isNowExpired { - detail = Localizable.shared.strings.this_address_expired - } - let cell = tableView - .dequeueReusableCell(withType: BMMultiLinesCell.self, for: indexPath) - .configured(with: BMMultiLineItem(title: Localizable.shared.strings.expires_on.uppercased(), detail:detail, detailFont: RegularFont(size: 16), detailColor: UIColor.white)) - cell.increaseSpace = true + .dequeueReusableCell(withType: AddressExpiresCell.self, for: indexPath) + .configured(with: viewModel.newAddress) return cell default: return BaseCell() From 60cf971074b988b257e77da1ef4a62b4a87d7ae9 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sun, 10 May 2026 01:01:20 +0200 Subject: [PATCH 25/48] refactor(base-table): unify bottom-anchored action bar across screens MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Settings, Select Node, Payment Proof and Asset Swaps each stuffed their fixed bottom UI (version label, action buttons, segmented header) into tableView.tableFooterView / tableHeaderView at hard-coded heights. When content + the fixed slot exceeded the screen, the table scrolled even though the visible content fit; on Face-ID devices the bottom row could land behind the home indicator. A previous commit (64456e3) papered over the symptom on Settings only with a measure-then-resize loop on every layout pass. Lift the bottom-anchored content out of the table entirely with a new shared BaseTableViewController.bottomAccessoryView hook. The accessory is pinned above the bottom safe area and the table is sized to the area above it — no measurement, no resize loop, no behind-the-home-indicator overlap. Adjacent fixes the new layout enables: - alwaysBounceVertical is toggled on while the keyboard is up so keyboardDismissMode = .interactive has something to grab on screens with no row overflow (Payment Proof input case). - viewDidLayoutSubviews reserves safeAreaInsets.bottom even without an accessory, so Utilities/General/Privacy stop overlapping the home indicator. - SettingsViewController hoists sectionHeaderHeight = 15 / sectionFooterHeight = 15 out of the .main branch so non-.main pages stop inheriting the ~36pt grouped-style defaults that wasted ~120pt of space on Utilities. - AssetSwapsViewController pins its segmented header outside the table view (was a tableHeaderView) so the tabs stay visually fixed instead of scrolling with the order rows. Net: ~50 lines of measure/resize/footer-rebuild machinery removed, ~12 lines of shared hook + frame math added. Pattern is now consistent and discoverable through the base class. --- .../Base/BaseTableViewController.swift | 47 +++++++++--- .../AssetSwaps/AssetSwapsViewController.swift | 24 ++++-- .../Settings/SelectNodeViewController.swift | 75 ++++++++----------- .../Settings/SettingsViewController.swift | 56 ++++---------- .../PaymentProofDetailViewController.swift | 41 +++++----- 5 files changed, 125 insertions(+), 118 deletions(-) diff --git a/BeamWallet/ViewControllers/Base/BaseTableViewController.swift b/BeamWallet/ViewControllers/Base/BaseTableViewController.swift index dfb34bca..92ea428a 100644 --- a/BeamWallet/ViewControllers/Base/BaseTableViewController.swift +++ b/BeamWallet/ViewControllers/Base/BaseTableViewController.swift @@ -33,7 +33,19 @@ class BaseTableViewController: BaseViewController { var tableView: UITableView! var tableStyle = UITableView.Style.plain - + + /// View pinned above the bottom safe area, outside the table. The table is + /// sized to fit the area above it, so content placed here never causes the + /// table to scroll. Subclasses set this from viewDidLoad. Toggle visibility + /// with `isHidden`; setting to nil removes it entirely. + var bottomAccessoryView: UIView? { + didSet { + oldValue?.removeFromSuperview() + if let v = bottomAccessoryView { view.addSubview(v) } + view.setNeedsLayout() + } + } + override func viewDidLoad() { super.viewDidLoad() @@ -61,18 +73,27 @@ class BaseTableViewController: BaseViewController { override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() - - var offset:CGFloat = 0 - + + var offset: CGFloat = 0 + if !isGradient { - offset = 30 + offset = 30 } else if isGradient && !isAddStatusView { offset = 30 } - + let y = navigationBarOffset - offset - tableView.frame = CGRect(x: 0, y: y , width: self.view.bounds.width, height: self.view.bounds.size.height - y) + let bottomSafe = view.safeAreaInsets.bottom + var bottomReserved: CGFloat = bottomSafe + if let acc = bottomAccessoryView, !acc.isHidden { + let h = acc.frame.height + acc.frame = CGRect(x: 0, y: view.bounds.height - bottomSafe - h, + width: view.bounds.width, height: h) + bottomReserved = h + bottomSafe + } + tableView.frame = CGRect(x: 0, y: y, width: view.bounds.width, + height: view.bounds.height - y - bottomReserved) } // public func footerView(buttons:[FooterButton]) -> UIView { @@ -102,13 +123,21 @@ extension BaseTableViewController { if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue { let keyboardRectangle = keyboardFrame.cgRectValue let keyboardHeight = keyboardRectangle.height - + tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: keyboardHeight, right: 0) + tableView.alwaysBounceVertical = true + + let lift = keyboardHeight - view.safeAreaInsets.bottom + if lift > 0 { + bottomAccessoryView?.transform = CGAffineTransform(translationX: 0, y: -lift) + } } } - + @objc func keyboardWillHide(notification: NSNotification) { tableView.contentInset = UIEdgeInsets.zero + tableView.alwaysBounceVertical = false + bottomAccessoryView?.transform = .identity } } diff --git a/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapsViewController.swift b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapsViewController.swift index 6584ebe0..7ab68caa 100644 --- a/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapsViewController.swift +++ b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapsViewController.swift @@ -27,7 +27,9 @@ class AssetSwapsViewController: BaseTableViewController { Localizable.shared.strings.asset_swap_my_orders, Localizable.shared.strings.asset_swap_history, ]) + private let segmentedHeader = UIView() private let emptyLabel = UILabel() + private let segmentedHeaderHeight: CGFloat = 60 override func viewDidLoad() { super.viewDidLoad() @@ -46,15 +48,13 @@ class AssetSwapsViewController: BaseTableViewController { segmented.setTitleTextAttributes([.foregroundColor: UIColor.main.marineOriginal], for: .selected) } - let header = UIView(frame: CGRect(x: 0, y: 0, width: view.bounds.width, height: 60)) - segmented.frame = CGRect(x: defaultX, y: 12, width: view.bounds.width - 2 * defaultX, height: 36) - segmented.autoresizingMask = [.flexibleWidth] - header.addSubview(segmented) + segmentedHeader.backgroundColor = UIColor.main.marine + segmentedHeader.addSubview(segmented) + view.addSubview(segmentedHeader) tableView.delegate = self tableView.dataSource = self tableView.separatorStyle = .none - tableView.tableHeaderView = header tableView.register(AssetSwapOrderCell.self, forCellReuseIdentifier: "AssetSwapOrderCell") tableView.addPullToRefresh(target: self, handler: #selector(refresh(_:))) @@ -82,6 +82,20 @@ class AssetSwapsViewController: BaseTableViewController { override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() + + let tableTop = tableView.frame.origin.y + let width = view.bounds.width + segmentedHeader.frame = CGRect(x: 0, y: tableTop, width: width, height: segmentedHeaderHeight) + segmented.frame = CGRect(x: defaultX, y: 12, width: width - 2 * defaultX, height: 36) + view.bringSubviewToFront(segmentedHeader) + + tableView.frame = CGRect( + x: tableView.frame.origin.x, + y: tableTop + segmentedHeaderHeight, + width: tableView.frame.width, + height: tableView.frame.height - segmentedHeaderHeight + ) + emptyLabel.frame = CGRect(x: 20, y: navigationBarOffset + 120, width: view.bounds.width - 40, height: 60) } diff --git a/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift b/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift index 3843ca62..6ae11481 100644 --- a/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift +++ b/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift @@ -32,51 +32,31 @@ class SelectNodeViewController: BaseTableViewController { private var items = [SelectNode]() private var inputField = BMField() private var oldSelected = 0 + private let actionButton = BMButton.defaultButton( + frame: CGRect(x: 0, y: 0, width: 220, height: 44), + color: UIColor.main.brightTeal) public var isNeedDisconnect = true public var isCreateWallet = false public var password:String? public var phrase:String? - + override var tableStyle: UITableView.Style { get { return .grouped } set { super.tableStyle = newValue } } - - private func footerView() -> UIView { - let view = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 155)) - - if !isCreateWallet && self.items[2].selected { - let nextButton = BMButton.defaultButton(frame: CGRect(x: (UIScreen.main.bounds.size.width-220)/2, y: 10, width: 220, height: 44), color: UIColor.main.brightTeal) - nextButton.setImage(IconNextBlue(), for: .normal) - nextButton.setTitle(Localizable.shared.strings.proceed.lowercased(), for: .normal) - nextButton.setTitleColor(UIColor.main.marineOriginal, for: .normal) - nextButton.setTitleColor(UIColor.main.marineOriginal.withAlphaComponent(0.5), for: .highlighted) - nextButton.addTarget(self, action: #selector(onNext), for: .touchUpInside) - view.addSubview(nextButton) - } - else if isCreateWallet { - let connectButton = BMButton.defaultButton(frame: CGRect(x: (UIScreen.main.bounds.size.width-220)/2, y: 25, width: 220, height: 44), color: UIColor.main.brightTeal) - connectButton.setImage(IconNextBlue(), for: .normal) - connectButton.setTitle(Localizable.shared.strings.start_using_wallet.lowercased(), for: .normal) - connectButton.setTitleColor(UIColor.main.marineOriginal, for: .normal) - connectButton.setTitleColor(UIColor.main.marineOriginal.withAlphaComponent(0.5), for: .highlighted) - connectButton.addTarget(self, action: #selector(onNext), for: .touchUpInside) - view.addSubview(connectButton) - } -// else if !isNeedDisconnect { -// let connectButton = BMButton.defaultButton(frame: CGRect(x: (UIScreen.main.bounds.size.width-220)/2, y: 80, width: 220, height: 44), color: UIColor.main.brightTeal) -// connectButton.setImage(IconDoneBlue(), for: .normal) -// connectButton.setTitle(Localizable.shared.strings.connect.lowercased(), for: .normal) -// connectButton.setTitleColor(UIColor.main.marineOriginal, for: .normal) -// connectButton.setTitleColor(UIColor.main.marineOriginal.withAlphaComponent(0.5), for: .highlighted) -// connectButton.addTarget(self, action: #selector(onNext), for: .touchUpInside) -// view.addSubview(connectButton) -// } - - return view + + private func refreshActionButton() { + let show = isCreateWallet || items[2].selected + bottomAccessoryView?.isHidden = !show + let title = isCreateWallet + ? Localizable.shared.strings.start_using_wallet.lowercased() + : Localizable.shared.strings.proceed.lowercased() + actionButton.setTitle(title, for: .normal) + view.setNeedsLayout() } - + + override func viewDidLoad() { super.viewDidLoad() @@ -118,9 +98,18 @@ class SelectNodeViewController: BaseTableViewController { tableView.contentInsetAdjustmentBehavior = .never tableView.tableHeaderView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 0.0, height: 20)) tableView.tableHeaderView?.backgroundColor = UIColor.main.marine - tableView.tableFooterView = footerView() tableView.backgroundColor = UIColor.main.marine tableView.keyboardDismissMode = .interactive + + actionButton.setImage(IconNextBlue(), for: .normal) + actionButton.setTitleColor(UIColor.main.marineOriginal, for: .normal) + actionButton.setTitleColor(UIColor.main.marineOriginal.withAlphaComponent(0.5), for: .highlighted) + actionButton.addTarget(self, action: #selector(onNext), for: .touchUpInside) + let accessory = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 70)) + actionButton.frame = CGRect(x: (accessory.bounds.width - 220) / 2, y: 13, width: 220, height: 44) + accessory.addSubview(actionButton) + bottomAccessoryView = accessory + refreshActionButton() inputField.setNormalColor(color: .white) inputField.keyboardType = .numbersAndPunctuation @@ -144,7 +133,7 @@ class SelectNodeViewController: BaseTableViewController { @objc private func onDisconnect() { isNeedDisconnect = false - tableView.tableFooterView = footerView() + refreshActionButton() tableView.reloadData() } @@ -197,7 +186,7 @@ class SelectNodeViewController: BaseTableViewController { @objc private func onNext() { isNeedDisconnect = true - tableView.tableFooterView = footerView() + refreshActionButton() tableView.reloadData() if items[0].selected { @@ -251,7 +240,7 @@ class SelectNodeViewController: BaseTableViewController { if let fullAddress = inputField.text { if fullAddress.isEmpty { isNeedDisconnect = false - tableView.tableFooterView = footerView() + refreshActionButton() tableView.reloadData() alert(title: Localizable.shared.strings.invalid_address_title, message: Localizable.shared.strings.enter_node_address, handler: nil) @@ -312,7 +301,7 @@ class SelectNodeViewController: BaseTableViewController { } else { isNeedDisconnect = false - tableView.tableFooterView = footerView() + refreshActionButton() tableView.reloadData() alert(title: Localizable.shared.strings.invalid_address_title, message: Localizable.shared.strings.invalid_address_text, handler: nil) @@ -426,10 +415,10 @@ extension SelectNodeViewController : UITableViewDelegate { for index in items.indices { items[index].selected = false } - + items[indexPath.section].selected = true - - tableView.tableFooterView = footerView() + + refreshActionButton() tableView.reloadData() } } diff --git a/BeamWallet/ViewControllers/Main/Settings/SettingsViewController.swift b/BeamWallet/ViewControllers/Main/Settings/SettingsViewController.swift index d91843ef..c8664f1b 100644 --- a/BeamWallet/ViewControllers/Main/Settings/SettingsViewController.swift +++ b/BeamWallet/ViewControllers/Main/Settings/SettingsViewController.swift @@ -21,8 +21,6 @@ import UIKit class SettingsViewController: BaseTableViewController { - private static let versionFooterMinHeight: CGFloat = 70 - private var viewModel:SettingsViewModel! private var type:SettingsViewModel.SettingsType! @@ -62,9 +60,6 @@ class SettingsViewController: BaseTableViewController { self?.tableView.separatorStyle = .singleLine } self?.tableView.reloadData() - DispatchQueue.main.async { - self?.adjustVersionFooterIfNeeded() - } } tableView.register([SettingsCell.self, SettingsSubTitleCell.self, BMEmptyCell.self]) @@ -73,6 +68,8 @@ class SettingsViewController: BaseTableViewController { tableView.dataSource = self tableView.delegate = self tableView.contentInsetAdjustmentBehavior = .never + tableView.sectionHeaderHeight = 15 + tableView.sectionFooterHeight = 15 tableView.tableHeaderView?.backgroundColor = UIColor.main.marine tableView.backgroundColor = UIColor.main.marine @@ -87,13 +84,14 @@ class SettingsViewController: BaseTableViewController { if !text.isEmpty { strongSelf.tableView.sectionHeaderHeight = 5 strongSelf.tableView.sectionFooterHeight = 5 - strongSelf.tableView.tableFooterView = nil + strongSelf.bottomAccessoryView?.isHidden = true } else { strongSelf.tableView.sectionHeaderHeight = 15 strongSelf.tableView.sectionFooterHeight = 15 - strongSelf.tableView.tableFooterView = strongSelf.versionView() + strongSelf.bottomAccessoryView?.isHidden = false } + strongSelf.view.setNeedsLayout() strongSelf.viewModel.searchString = text } searchView.onCancelSearch = { [weak self] in @@ -101,14 +99,15 @@ class SettingsViewController: BaseTableViewController { strongSelf.tableView.sectionHeaderHeight = 15 strongSelf.tableView.sectionFooterHeight = 15 strongSelf.viewModel.searchString = "" - strongSelf.tableView.tableFooterView = strongSelf.versionView() + strongSelf.bottomAccessoryView?.isHidden = false + strongSelf.view.setNeedsLayout() } - + let tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 70)) tableHeaderView.addSubview(searchView) - + tableView.tableHeaderView = tableHeaderView - tableView.tableFooterView = versionView() + bottomAccessoryView = makeVersionAccessory() } else { tableView.tableHeaderView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 0.0, height: 20)) @@ -120,36 +119,13 @@ class SettingsViewController: BaseTableViewController { override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) - + if type == .main { - tableView.tableFooterView = versionView() + bottomAccessoryView = makeVersionAccessory() } } - - override func viewDidLayoutSubviews() { - super.viewDidLayoutSubviews() - - tableView.frame = CGRect(x: 0, y: tableView.y - 5, width: self.view.bounds.width, height: tableView.h + 10) - - adjustVersionFooterIfNeeded() - } - private func adjustVersionFooterIfNeeded() { - guard type == .main, let footer = tableView.tableFooterView else { return } - let contentExcludingFooter = tableView.contentSize.height - footer.frame.height - let bottomInset = view.safeAreaInsets.bottom - let available = tableView.bounds.height - bottomInset - contentExcludingFooter - let desired = max(SettingsViewController.versionFooterMinHeight, available) - - if abs(footer.frame.height - desired) > 0.5 { - var newFrame = footer.frame - newFrame.size.height = desired - footer.frame = newFrame - tableView.tableFooterView = footer - } - } - override func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) @@ -159,8 +135,8 @@ class SettingsViewController: BaseTableViewController { } } - private func versionView() -> UIView { - let view = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: SettingsViewController.versionFooterMinHeight)) + private func makeVersionAccessory() -> UIView { + let view = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 70)) view.backgroundColor = UIColor.clear let bHeight = AppModel.sharedManager().walletStatus?.currentHeight ?? "" @@ -385,7 +361,7 @@ extension SettingsViewController : WalletModelDelegate { func onWalletStatusChange(_ status: BMWalletStatus) { DispatchQueue.main.async { if self.type == .main { - self.tableView.tableFooterView = self.versionView() + self.bottomAccessoryView = self.makeVersionAccessory() } } } @@ -397,7 +373,7 @@ extension SettingsViewController : SettingsModelDelegate { setGradientTopBar(mainColor: UIColor.main.peacockBlue, addedStatusView: true, menu: self.navigationController?.viewControllers.first == self) title = viewModel.title() if type == .main { - tableView.tableFooterView = versionView() + bottomAccessoryView = makeVersionAccessory() } viewModel.reload() tableView.reloadData() diff --git a/BeamWallet/ViewControllers/Main/Wallet/Transaction/PaymentProofDetailViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Transaction/PaymentProofDetailViewController.swift index e3ea56ad..e907aee0 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Transaction/PaymentProofDetailViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Transaction/PaymentProofDetailViewController.swift @@ -35,19 +35,18 @@ class PaymentProofDetailViewController: BaseTableViewController { @IBOutlet private weak var headerdHeight: NSLayoutConstraint! @IBOutlet private weak var keyKodeTitle: UILabel! - private lazy var footerView: UIView = { - var view = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 115)) - - var sendButton = BMButton.defaultButton(frame: CGRect(x: (UIScreen.main.bounds.size.width-143)/2, y: 30, width: 143, height: 44), color: UIColor.main.brightTeal) - sendButton.setImage(IconCopyBlue(), for: .normal) - sendButton.setTitle(Localizable.shared.strings.copy_details.lowercased(), for: .normal) - sendButton.setTitleColor(UIColor.main.marineOriginal, for: .normal) - sendButton.setTitleColor(UIColor.main.marineOriginal.withAlphaComponent(0.5), for: .highlighted) - sendButton.addTarget(self, action: #selector(onCopyCodeDetails), for: .touchUpInside) - view.addSubview(sendButton) - - - return view + private lazy var bottomAccessory: UIView = { + let container = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 70)) + + let copyButton = BMButton.defaultButton(frame: CGRect(x: (UIScreen.main.bounds.size.width - 143) / 2, y: 13, width: 143, height: 44), color: UIColor.main.brightTeal) + copyButton.setImage(IconCopyBlue(), for: .normal) + copyButton.setTitle(Localizable.shared.strings.copy_details.lowercased(), for: .normal) + copyButton.setTitleColor(UIColor.main.marineOriginal, for: .normal) + copyButton.setTitleColor(UIColor.main.marineOriginal.withAlphaComponent(0.5), for: .highlighted) + copyButton.addTarget(self, action: #selector(onCopyCodeDetails), for: .touchUpInside) + container.addSubview(copyButton) + + return container }() override var tableStyle: UITableView.Style { @@ -128,19 +127,19 @@ class PaymentProofDetailViewController: BaseTableViewController { if let paymentProof = self.paymentProof { var section_1 = [BMMultiLineItem]() section_1.append(BMMultiLineItem(title: Localizable.shared.strings.key_code.uppercased(), detail: paymentProof.code, detailFont: RegularFont(size: 16), detailColor: UIColor.white, copy: true)) - + details.append(section_1) - - tableView.tableFooterView = footerView + + bottomAccessoryView = bottomAccessory } - + if let info = AppModel.sharedManager().getPaymentProofInfo(self.paymentProof?.code ?? String.empty()){ self.fillInfoFromPaymentInfo(info: info) - tableView.tableFooterView = footerView + bottomAccessoryView = bottomAccessory } else { self.paymentInfo = nil - tableView.tableFooterView = nil + bottomAccessoryView = nil } } @@ -156,8 +155,8 @@ class PaymentProofDetailViewController: BaseTableViewController { section_2.append(BMMultiLineItem(title: Localizable.shared.strings.kernel_id.uppercased(), detail: info.kernelId, detailFont: RegularFont(size: 16), detailColor: UIColor.white, copy: true)) details.append(section_2) - - tableView.tableFooterView = footerView + + bottomAccessoryView = bottomAccessory } } From a717a390eb38b65785690419bdbb6ba63c2f6547 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sun, 10 May 2026 01:06:43 +0200 Subject: [PATCH 26/48] fix(wallet): collapse asset-info storm at startup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A fresh launch fired ~1,755 getAssetInfo calls in the first 40 seconds (195 unique asset IDs requested 7-9 times each), saturating the main thread enough to make Send/Receive feel unresponsive. Two interacting bugs in WalletModel.mm: 1. onAssetInfo extracted the asset's name into a local NSString but never wrote it onto bmAsset.name. The "needs metadata" check in onStatus then re-detected the asset as missing on every wallet-status tick and re-fired getAssetInfo for it. Wallet-status updates fire continuously during sync, hence the storm. 2. Even with bmAsset.name fixed, several onStatus callbacks can land before onAssetInfo responses come back, so each one queued a fresh round of N async requests for the same IDs. Fix: - onAssetInfo now writes bmAsset.name = name alongside the other bmAsset.X = X assignments, plus erases the ID from the pending set. - onStatus wraps the getAssetInfo call in an m_pendingAssetInfo.insert(...).second guard (new std::set member on WalletModel) so each ID can have at most one in-flight request. - onStatus also assigns asset.name = @"BEAM" in the assetId == 0 fast path so the BEAM row participates in the same invariant. After the fix a fresh launch produces ≤ 195 GET ASSET log lines total. --- BeamWallet/BeamSDK/WalletModel.h | 2 ++ BeamWallet/BeamSDK/WalletModel.mm | 10 +++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/BeamWallet/BeamSDK/WalletModel.h b/BeamWallet/BeamSDK/WalletModel.h index 76a79c72..66d937b9 100644 --- a/BeamWallet/BeamSDK/WalletModel.h +++ b/BeamWallet/BeamSDK/WalletModel.h @@ -42,6 +42,8 @@ class WalletModel : public beam::wallet::WalletClient std::map shieldedCoins; private: + std::set m_pendingAssetInfo; + NSString *GetAddressTo(beam::wallet::TxDescription transaction); NSString *GetAddressFrom(beam::wallet::TxDescription transaction); NSString *GetErrorString(beam::wallet::ErrorType type); diff --git a/BeamWallet/BeamSDK/WalletModel.mm b/BeamWallet/BeamSDK/WalletModel.mm index c047ee84..b4550b8c 100644 --- a/BeamWallet/BeamSDK/WalletModel.mm +++ b/BeamWallet/BeamSDK/WalletModel.mm @@ -162,9 +162,9 @@ static void ensureRulesOnCurrentThread() { for (int i=0;i<[[AssetsManager sharedManager]assets].count; i++) { BMAsset *asset = [[[AssetsManager sharedManager]assets] objectAtIndex:i]; if (asset.name == nil || asset.name.isEmpty) { - NSLog(@"GET ASSET %d",(uint)asset.assetId); if(asset.assetId == 0) { asset.assetId = 0; + asset.name = @"BEAM"; asset.nthUnitName = @"BEAM"; asset.unitName = @"BEAM"; asset.color = @"#00F6D2"; @@ -175,7 +175,8 @@ static void ensureRulesOnCurrentThread() { asset.paper = @""; [[[AssetsManager sharedManager]assets] replaceObjectAtIndex:i withObject:asset]; } - else { + else if (m_pendingAssetInfo.insert((beam::Asset::ID)asset.assetId).second) { + NSLog(@"GET ASSET %d",(uint)asset.assetId); this->getAsync()->getAssetInfo((uint)asset.assetId); } } @@ -1936,7 +1937,9 @@ static void ensureRulesOnCurrentThread() { void WalletModel::onAssetInfo(Asset::ID assetId, const WalletAsset& asset) { NSLog(@"onAssetInfo :%d", assetId); - + + m_pendingAssetInfo.erase(assetId); + auto info = WalletAssetMeta(asset); NSString *name = [NSString stringWithUTF8String:info.GetName().c_str()]; @@ -1966,6 +1969,7 @@ static void ensureRulesOnCurrentThread() { } bmAsset.assetId = UInt64(assetId); + bmAsset.name = name; bmAsset.nthUnitName = nthName; bmAsset.unitName = unitName; bmAsset.shortName = shortName; From ef77c100a27d7fe1407c2aa8b6d0d86fda56ce5e Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sun, 10 May 2026 01:11:57 +0200 Subject: [PATCH 27/48] fix(receive): generate a fresh wallet address per Receive open generateNewWalletAddressWithBlockAndAmount: passed false for the C++ core's newAddress flag when calling generateToken(TokenType::RegularNewStyle, ...). With newAddress = false the core falls back to walletDb->getDefaultAddressAlways(), which returns a stable default rather than creating a new address. As a result, opening Receive always re-tokenised the user's existing default address from the address book, never a new one. Flip the 5th argument of generateToken from false to true so the bridge method actually creates and persists a fresh wallet address per call. The companion bridge generateNewWalletAddressWithBlock: stays at false (correct for Send and Onboarding, which want the default address). The view-model side that re-tokenises (rather than re-creates) on amount keystrokes lands in the address-type-picker change. --- BeamWallet/BeamSDK/AppModel.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BeamWallet/BeamSDK/AppModel.mm b/BeamWallet/BeamSDK/AppModel.mm index ca459ad3..09e482c8 100644 --- a/BeamWallet/BeamSDK/AppModel.mm +++ b/BeamWallet/BeamSDK/AppModel.mm @@ -1711,7 +1711,7 @@ -(void)generateNewWalletAddressWithBlockAndAmount:(int)assetId amount:(double)am self->wallet->getAsync()->getAddresses(true); }; - wallet->getAsync()->generateToken(TokenType::RegularNewStyle, bAmount, bAsset, std::string(BEAM_LIB_VERSION), false, func); + wallet->getAsync()->generateToken(TokenType::RegularNewStyle, bAmount, bAsset, std::string(BEAM_LIB_VERSION), true, func); } } From b67605387982141879f55bf7b0293129844b3921 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sun, 10 May 2026 01:14:49 +0200 Subject: [PATCH 28/48] perf(assets): load full asset registry once per session MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ReceiveViewController.viewDidLoad called AppModel.loadFullAssetsList unconditionally on every Receive open. The bridge forwarded directly to wallet->getAsync()->loadFullAssetsList() with no idempotency, so the underlying RequestAssetsListAt(MaxHeight, …) round-trip + 194-asset ProcessAssetInfo walk + 194-callback storm fired every time. Same unguarded call lived in AssetSearchViewController and AssetSwapCreateViewModel. Add a didLoadFullAssetsList flag on AppModel, prefetch once at onWalledOpened, gate loadFullAssetsList on the flag, and reset it in all three teardown paths (resetOnlyWallet / restartWallet / resetWallet) so a fresh session re-fetches. The flag is set pre-dispatch (rather than in the callback) on purpose: that prevents in-flight duplication if call sites fire twice in the same runloop turn before the async response lands. Existing call sites in ReceiveViewController / AssetSearchViewController / AssetSwapCreateViewModel stay as no-op safety nets in case the user races the prefetch (e.g. via a deep-link). After the fix: one loadFullAssetsList round-trip and at most one onAssetInfo per asset per session. --- BeamWallet/BeamSDK/AppModel.h | 1 + BeamWallet/BeamSDK/AppModel.mm | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/BeamWallet/BeamSDK/AppModel.h b/BeamWallet/BeamSDK/AppModel.h index f553425c..57438aa7 100644 --- a/BeamWallet/BeamSDK/AppModel.h +++ b/BeamWallet/BeamSDK/AppModel.h @@ -119,6 +119,7 @@ typedef void(^ExportCSVBlock)(NSString * _Nonnull data, NSURL * _Nonnull url); @property (nonatomic,assign) BMRestoreType restoreType; @property (nonatomic,assign) BOOL isMaxPrivacyRequest; @property (nonatomic,assign) BOOL isConfigured; +@property (nonatomic,assign) BOOL didLoadFullAssetsList; @property (nonatomic,strong) BMWalletStatus* _Nullable walletStatus; diff --git a/BeamWallet/BeamSDK/AppModel.mm b/BeamWallet/BeamSDK/AppModel.mm index 09e482c8..7d57f411 100644 --- a/BeamWallet/BeamSDK/AppModel.mm +++ b/BeamWallet/BeamSDK/AppModel.mm @@ -728,7 +728,8 @@ -(void)abortCreateAndReset { -(void)resetOnlyWallet { isStarted = NO; isRunning = NO; - + self.didLoadFullAssetsList = NO; + if (wallet!=nil){ wallet.reset(); } @@ -737,10 +738,11 @@ -(void)resetOnlyWallet { -(void)restartWallet { BEAM_LOG_INFO() << "restart wallet"; - + isStarted = NO; isRunning = NO; - + self.didLoadFullAssetsList = NO; + if (wallet!=nil){ wallet.reset(); } @@ -769,6 +771,7 @@ -(void)resetWallet:(BOOL)removeDatabase { isStarted = NO; isRunning = NO; + self.didLoadFullAssetsList = NO; wallet.reset(); @@ -911,6 +914,11 @@ -(void)onWalledOpened:(const SecString&) pass { else if(self.isRestoreFlow && self.restoreType == BMRestoreManual && [Settings sharedManager].isChangedNode) { [self start]; } + + // Prefetch the full asset registry once per session so Receive / Asset + // Search / Asset Swap don't pay a network round-trip on first open. + // Idempotent: subsequent callers from those screens no-op via the flag. + [self loadFullAssetsList]; } -(void)restore:(NSString*_Nonnull)path{ @@ -1348,6 +1356,8 @@ -(void)getAssetInfoAsync:(int)assetId { -(void)loadFullAssetsList { if (wallet == nullptr) return; + if (self.didLoadFullAssetsList) return; + self.didLoadFullAssetsList = YES; wallet->getAsync()->loadFullAssetsList(); } From 4c4dcb6e46b4347e17cccc71014fa7688b13aebc Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sun, 10 May 2026 01:17:13 +0200 Subject: [PATCH 29/48] feat(receive): address-type picker + per-address voucher count MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaces the binary "Maximum Anonymity Set" toggle in Receive → Advanced with a 5-entry picker (SBBS / Regular / Max Privacy / Offline / Public Offline) that maps to the BEAM core TokenType enum and the v7.4 create_address API. The default-receive labels match the desktop wallet — Regular and Offline both produce TokenType::Offline tokens with different voucher counts. When the picker is on a voucher-capable type (Regular or Offline) a "Vouchers count" numeric input appears below it, validated to 1...30 and re-tokenising the address on every valid change. Defaults are per-type (Regular = 1, Offline = 10), matching desktop and BEAM core's GenerateOfflineToken default. The 30-cap is project policy. Bridge changes (AppModel): - generateSBBSAddress: / generatePublicOfflineAddress: mirror the existing generateMaxPrivacyAddress: pattern. - generateOfflineAddress: gains an offlineCount: parameter and switches from the async generateToken (which hardcodes 1 voucher in WalletClient::generateToken) to a synchronous GenerateOfflineToken call so the count is honored. - BMAddress gains nullable sbbsToken / publicOfflineToken properties. Voucher-count cache: AppModel.offlinePaymentsByWalletId is populated from WalletModel::onGetAddress (already invoked for Send's onMaxPrivacyTokensLeft). Per-walletId cache + idempotent requestOfflinePaymentsCountForWalletId: prevents fan-out during table scroll. New optional WalletModelDelegate method is broadcast only when a value changes — no reload thrash. UI: - BMDataPickerViewController: new .address_type case wired through the existing picker scaffolding. - ReceiveAddressViewModel.ReceiveTokenType drives generateTokens() dispatch (calls only the relevant bridge method) and exposes supportsVouchers / supportsOnlineReceive / defaultVouchers per type. - ReceiveViewController: picker tap on (3,1), voucher-count cell on (3,2) gated by supportsVouchers, per-type footer info text gating (sbbs → online-only copy; regular/offline → choice copy on own node; publicOffline → identifiability warning), section reload instead of ad-hoc insert/delete, currentToken used uniformly for copy/share/QR. - QRCodeSmallViewController: parallel isSbbsOnly / isPublicOffline flags so the modal caption matches the address card. Address-book + details: - BMAddressCell reuses the previously-hidden expiredLabel to show "Offline transactions left: N" for non-contact rows. - DetailAddressViewModel appends the count to the details list and re-renders only when its own walletId changes. - AddressViewModel re-fires onDataChanged on any cached count change. BMFieldCell: keyboardType getter/setter + setText(_:) helper, and textFieldShouldBeginEditing no longer nukes input accessory views on numeric/decimal-pad keyboards. Localization: 5 new Swift accessors (max_privacy_address, public_offline_address already-existed-as-keys; vouchers_count, vouchers_count_hint, vouchers_count_error are new) and the new voucher-count strings added to all 14 locales (English text used as placeholder per the existing convention). --- BeamWallet/BeamSDK/AppModel.h | 10 +- BeamWallet/BeamSDK/AppModel.mm | 93 +++++--- BeamWallet/BeamSDK/Objects/BMAddress.h | 2 + BeamWallet/BeamSDK/WalletModel.mm | 15 +- .../Controls/BMDataPickerViewController.swift | 20 +- BeamWallet/Controls/Cell/BMAddressCell.swift | 10 + BeamWallet/Controls/Cell/BMFieldCell.swift | 16 +- .../Model/Address/AddressViewModel.swift | 6 + .../Address/DetailAddressViewModel.swift | 28 ++- .../Address/ReceiveAddressViewModel.swift | 146 +++++++++--- BeamWallet/Protocols/LocalizableStrings.swift | 5 + .../QRCode/QRCodeSmallViewController.swift | 8 +- .../Receive/ReceiveViewController.swift | 225 +++++++++--------- Resources/cs.lproj/Localizable.strings | 4 + Resources/en.lproj/Localizable.strings | 4 + Resources/es.lproj/Localizable.strings | 4 + Resources/fi-FI.lproj/Localizable.strings | 4 + Resources/fr.lproj/Localizable.strings | 4 + Resources/ko.lproj/Localizable.strings | 4 + Resources/nl.lproj/Localizable.strings | 4 + Resources/ru.lproj/Localizable.strings | 4 + Resources/sv-SE.lproj/Localizable.strings | 4 + Resources/sv.lproj/Localizable.strings | 4 + Resources/th.lproj/Localizable.strings | 4 + Resources/tr.lproj/Localizable.strings | 4 + Resources/vi.lproj/Localizable.strings | 4 + Resources/zh-Hans.lproj/Localizable.strings | 4 + 27 files changed, 454 insertions(+), 186 deletions(-) diff --git a/BeamWallet/BeamSDK/AppModel.h b/BeamWallet/BeamSDK/AppModel.h index 57438aa7..9b53b503 100644 --- a/BeamWallet/BeamSDK/AppModel.h +++ b/BeamWallet/BeamSDK/AppModel.h @@ -82,6 +82,7 @@ typedef int BMRestoreType; -(void)onNotificationsChanged; -(void)onChangeCalculated:(double)amount; -(void)onMaxPrivacyTokensLeft:(int)tokens; +-(void)onOfflinePaymentsCountForWalletId:(NSString*_Nonnull)walletId count:(int)count; -(void)onAssetInfoChange; -(void)onDAPPsLoaded; -(void)onChatListChanged; @@ -139,6 +140,8 @@ typedef void(^ExportCSVBlock)(NSString * _Nonnull data, NSURL * _Nonnull url); @property (nonatomic,strong) NSMutableDictionary*>*_Nonnull messagesByPeer; @property (nonatomic,strong) NSMutableArray*_Nonnull dexOrders; +@property (nonatomic,strong) NSMutableDictionary*_Nonnull offlinePaymentsByWalletId; + @property (nonatomic, strong) NSTimer * _Nullable connectionTimer; @property (nonatomic, strong) NSTimer * _Nullable connectionAfterOnlineTimer; @@ -197,9 +200,14 @@ typedef void(^ExportCSVBlock)(NSString * _Nonnull data, NSURL * _Nonnull url); -(void)generateWithdrawAddress:(NewAddressGeneratedBlock _Nonnull )block; -(void)generateNewWalletAddressWithBlockAndAmount:(int)assetId amount:(double)amount result:(NewAddressGeneratedBlock _Nonnull)block; --(void)generateOfflineAddress:(NSString*_Nonnull)walletId assetId:(int)assetId amount:(double)amount result:(PublicAddressBlock _Nonnull)block; +-(void)generateOfflineAddress:(NSString*_Nonnull)walletId assetId:(int)assetId amount:(double)amount offlineCount:(uint32_t)offlineCount result:(PublicAddressBlock _Nonnull)block; -(NSString*_Nonnull)generateRegularAddress:(NSString*_Nonnull)walletId assetId:(int)assetId amount:(double)amount isPermanentAddress:(BOOL)isPermanentAddress; -(void)generateMaxPrivacyAddress:(NSString*_Nonnull)walletId assetId:(int)assetId amount:(double)amount result:(PublicAddressBlock _Nonnull)block; +-(void)generateSBBSAddress:(NSString*_Nonnull)walletId assetId:(int)assetId amount:(double)amount result:(PublicAddressBlock _Nonnull)block; +-(void)generatePublicOfflineAddress:(NSString*_Nonnull)walletId assetId:(int)assetId amount:(double)amount result:(PublicAddressBlock _Nonnull)block; + +-(int)offlinePaymentsCountForWalletId:(NSString*_Nonnull)walletId; +-(void)requestOfflinePaymentsCountForWalletId:(NSString*_Nonnull)walletId; // addresses diff --git a/BeamWallet/BeamSDK/AppModel.mm b/BeamWallet/BeamSDK/AppModel.mm index 7d57f411..7a5ca989 100644 --- a/BeamWallet/BeamSDK/AppModel.mm +++ b/BeamWallet/BeamSDK/AppModel.mm @@ -246,6 +246,7 @@ -(id)init{ _chats = [[NSMutableArray alloc] init]; _messagesByPeer = [[NSMutableDictionary alloc] init]; _dexOrders = [[NSMutableArray alloc] init]; + _offlinePaymentsByWalletId = [[NSMutableDictionary alloc] init]; NSData *dataStatus = [[NSUserDefaults standardUserDefaults] objectForKey:walletStatusKey]; if(dataStatus != nil) { @@ -797,6 +798,7 @@ -(void)resetWallet:(BOOL)removeDatabase { _walletStatus = [BMWalletStatus new]; [_transactions removeAllObjects]; [_notifications removeAllObjects]; + [_offlinePaymentsByWalletId removeAllObjects]; [[AssetsManager.sharedManager assets] removeAllObjects]; [[NSUserDefaults standardUserDefaults] removeObjectForKey:notificationsKey]; @@ -1275,43 +1277,19 @@ -(void)generateWithdrawAddress:(NewAddressGeneratedBlock _Nonnull )block { } --(void)generateOfflineAddress:(NSString*_Nonnull)walletId assetId:(int)assetId amount:(double)amount result:(PublicAddressBlock _Nonnull)block { - - if (wallet!=nil) { - uint32_t bAsset = (uint32_t)assetId; - uint64_t bAmount = round(amount * Rules::Coin); - - auto func = NewTokenGeneratedFunc(); - func.block = ^(std::string token) { - NSString *sToken = [NSString stringWithUTF8String:token.c_str()]; - block(sToken); - }; - wallet->getAsync()->generateToken(TokenType::Offline, bAmount, bAsset, std::string(BEAM_LIB_VERSION), false, func); - } - -// uint32_t bAsset = (uint32_t)assetId; -// uint64_t bAmount = round(amount * Rules::Coin); -// -// WalletID m_walletID(Zero); -// m_walletID.FromHex(walletId.string); -// -// auto address = walletDb->getAddress(m_walletID); -// auto lastVouchers = GenerateVoucherList(walletDb->get_KeyKeeper(), address->m_OwnID, 1); -// -// TxParameters offlineParameters; -// offlineParameters.SetParameter(TxParameterID::TransactionType, beam::wallet::TxType::PushTransaction); -// offlineParameters.SetParameter(TxParameterID::ShieldedVoucherList, lastVouchers); -// offlineParameters.SetParameter(TxParameterID::PeerAddr, address->m_BbsAddr); -// offlineParameters.SetParameter(TxParameterID::PeerEndpoint, address->m_Endpoint); -// offlineParameters.SetParameter(TxParameterID::IsPermanentPeerID, true); -// offlineParameters.SetParameter(TxParameterID::AssetID, beam::Asset::ID(bAsset)); -// if (bAmount > 0) { -// offlineParameters.SetParameter(TxParameterID::Amount, bAmount); -// } -// auto token = to_string(offlineParameters); -// block([NSString stringWithUTF8String:token.c_str()]); - - +-(void)generateOfflineAddress:(NSString*_Nonnull)walletId assetId:(int)assetId amount:(double)amount offlineCount:(uint32_t)offlineCount result:(PublicAddressBlock _Nonnull)block { + if (wallet == nil || walletDb == nullptr) return; + + WalletID wid(Zero); + if (!wid.FromHex(walletId.string)) return; + + auto address = walletDb->getAddress(wid); + if (!address) return; + + uint32_t bAsset = (uint32_t)assetId; + uint64_t bAmount = round(amount * Rules::Coin); + auto token = GenerateOfflineToken(*address, *walletDb, bAmount, bAsset, std::string(BEAM_LIB_VERSION), offlineCount); + block([NSString stringWithUTF8String:token.c_str()]); } -(NSString*_Nonnull)generateRegularAddress:(NSString*_Nonnull)walletId assetId:(int)assetId amount:(double)amount isPermanentAddress:(BOOL)isPermanentAddress { @@ -1350,6 +1328,47 @@ -(void)generateMaxPrivacyAddress:(NSString*_Nonnull)walletId assetId:(int)assetI // block([NSString stringWithUTF8String:maxPrivacyAddress.c_str()]); } +-(void)generateSBBSAddress:(NSString*_Nonnull)walletId assetId:(int)assetId amount:(double)amount result:(PublicAddressBlock _Nonnull)block { + if (wallet != nil) { + uint32_t bAsset = (uint32_t)assetId; + uint64_t bAmount = round(amount * Rules::Coin); + + auto func = NewTokenGeneratedFunc(); + func.block = ^(std::string token) { + NSString *sToken = [NSString stringWithUTF8String:token.c_str()]; + block(sToken); + }; + wallet->getAsync()->generateToken(TokenType::RegularOldStyle, bAmount, bAsset, std::string(BEAM_LIB_VERSION), false, func); + } +} + +-(void)generatePublicOfflineAddress:(NSString*_Nonnull)walletId assetId:(int)assetId amount:(double)amount result:(PublicAddressBlock _Nonnull)block { + if (wallet != nil) { + uint32_t bAsset = (uint32_t)assetId; + uint64_t bAmount = round(amount * Rules::Coin); + + auto func = NewTokenGeneratedFunc(); + func.block = ^(std::string token) { + NSString *sToken = [NSString stringWithUTF8String:token.c_str()]; + block(sToken); + }; + wallet->getAsync()->generateToken(TokenType::Public, bAmount, bAsset, std::string(BEAM_LIB_VERSION), false, func); + } +} + +-(int)offlinePaymentsCountForWalletId:(NSString*_Nonnull)walletId { + NSNumber *cached = self.offlinePaymentsByWalletId[walletId]; + return cached != nil ? cached.intValue : -1; +} + +-(void)requestOfflinePaymentsCountForWalletId:(NSString*_Nonnull)walletId { + if (wallet == nil || walletId.length == 0) return; + if (self.offlinePaymentsByWalletId[walletId] != nil) return; + WalletID wid(Zero); + if (!wid.FromHex(walletId.string)) return; + wallet->getAsync()->getAddress(wid); +} + -(void)getAssetInfoAsync:(int)assetId { wallet->getAsync()->getAssetInfo((uint)assetId); } diff --git a/BeamWallet/BeamSDK/Objects/BMAddress.h b/BeamWallet/BeamSDK/Objects/BMAddress.h index 15130a4b..4e666bf4 100644 --- a/BeamWallet/BeamSDK/Objects/BMAddress.h +++ b/BeamWallet/BeamSDK/Objects/BMAddress.h @@ -40,6 +40,8 @@ typedef int BMAddressType; @property (nonatomic,strong, getter = getWalletId) NSString * _Nonnull walletId; @property (nonatomic,strong) NSString * _Nullable offlineToken; @property (nonatomic,strong) NSString * _Nullable maxPrivacyToken; +@property (nonatomic,strong) NSString * _Nullable sbbsToken; +@property (nonatomic,strong) NSString * _Nullable publicOfflineToken; @property (nonatomic,strong) NSString * _Nullable address; @property (nonatomic,strong) NSString * _Nonnull label; diff --git a/BeamWallet/BeamSDK/WalletModel.mm b/BeamWallet/BeamSDK/WalletModel.mm index b4550b8c..70284b5d 100644 --- a/BeamWallet/BeamSDK/WalletModel.mm +++ b/BeamWallet/BeamSDK/WalletModel.mm @@ -1772,14 +1772,23 @@ static void ensureRulesOnCurrentThread() { } void WalletModel::onGetAddress(const beam::wallet::WalletID& wid, const boost::optional& address, size_t offlinePayments) { - + NSLog(@"onGetAddress: %d", (int)offlinePayments); - + + NSString *walletIdStr = [NSString stringWithUTF8String:to_string(wid).c_str()]; + int newCount = (int)offlinePayments; + NSNumber *prev = [AppModel sharedManager].offlinePaymentsByWalletId[walletIdStr]; + BOOL changed = (prev == nil || prev.intValue != newCount); + [AppModel sharedManager].offlinePaymentsByWalletId[walletIdStr] = @(newCount); + NSArray *delegates = [AppModel sharedManager].delegates.allObjects; for(id delegate in delegates) { if ([delegate respondsToSelector:@selector(onMaxPrivacyTokensLeft:)]) { - [delegate onMaxPrivacyTokensLeft:(int)offlinePayments]; + [delegate onMaxPrivacyTokensLeft:newCount]; + } + if (changed && [delegate respondsToSelector:@selector(onOfflinePaymentsCountForWalletId:count:)]) { + [delegate onOfflinePaymentsCountForWalletId:walletIdStr count:newCount]; } } } diff --git a/BeamWallet/Controls/BMDataPickerViewController.swift b/BeamWallet/Controls/BMDataPickerViewController.swift index 9d9f7372..52a1b3d6 100644 --- a/BeamWallet/Controls/BMDataPickerViewController.swift +++ b/BeamWallet/Controls/BMDataPickerViewController.swift @@ -32,6 +32,7 @@ class BMDataPickerViewController: BaseTableViewController { case sendCurrency case max_privacy_lock case confirmations + case address_type } private var type: DataType! @@ -90,6 +91,8 @@ class BMDataPickerViewController: BaseTableViewController { case .confirmations: title = Localizable.shared.strings.confirmations tableView.tableFooterView = footerView(text: Localizable.shared.strings.confirmations_hint) + case .address_type: + title = Localizable.shared.strings.address_type default: title = String.empty() } @@ -289,6 +292,18 @@ class BMDataPickerViewController: BaseTableViewController { let value = UInt32(n) values.append(BMPickerData(title: "\(n)", detail: nil, titleColor: UIColor.white, arrowType: (value == Settings.sharedManager().minConfirmations) ? BMPickerData.ArrowType.selected : BMPickerData.ArrowType.unselected, unique: value)) } + case .address_type: + let selected = (selectedValue as? Int) ?? 0 + let entries: [(Int, String)] = [ + (0, Localizable.shared.strings.sbbs_address), + (1, Localizable.shared.strings.regular_address), + (2, Localizable.shared.strings.max_privacy_address), + (3, Localizable.shared.strings.offline_address), + (4, Localizable.shared.strings.public_offline_address) + ] + for (raw, label) in entries { + values.append(BMPickerData(title: label, detail: nil, titleColor: UIColor.white, arrowType: (raw == selected) ? BMPickerData.ArrowType.selected : BMPickerData.ArrowType.unselected, unique: raw)) + } default: break @@ -350,7 +365,10 @@ class BMDataPickerViewController: BaseTableViewController { case .confirmations: completion?(data.unique) back() - + case .address_type: + completion?(data.unique) + back() + default: break } diff --git a/BeamWallet/Controls/Cell/BMAddressCell.swift b/BeamWallet/Controls/Cell/BMAddressCell.swift index 0ad786fc..464b991f 100644 --- a/BeamWallet/Controls/Cell/BMAddressCell.swift +++ b/BeamWallet/Controls/Cell/BMAddressCell.swift @@ -113,5 +113,15 @@ extension BMAddressCell: Configurable { } expiredLabel.isHidden = true + + if !options.address.isContact { + let walletId = options.address.walletId + AppModel.sharedManager().requestOfflinePaymentsCount(forWalletId: walletId) + let count = AppModel.sharedManager().offlinePaymentsCount(forWalletId: walletId) + if count > 0 { + expiredLabel.text = String(format: Localizable.shared.strings.offline_left_address, count) + expiredLabel.isHidden = false + } + } } } diff --git a/BeamWallet/Controls/Cell/BMFieldCell.swift b/BeamWallet/Controls/Cell/BMFieldCell.swift index aa9d3178..68c40f79 100644 --- a/BeamWallet/Controls/Cell/BMFieldCell.swift +++ b/BeamWallet/Controls/Cell/BMFieldCell.swift @@ -131,6 +131,15 @@ class BMFieldCell: BaseCell { } } } + + public var keyboardType: UIKeyboardType { + get { return textField.keyboardType } + set { textField.keyboardType = newValue } + } + + public func setText(_ value: String?) { + textField.text = value + } } extension BMFieldCell : UITextFieldDelegate { @@ -142,11 +151,9 @@ extension BMFieldCell : UITextFieldDelegate { } func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { - textField.inputAccessoryView = nil - if let copy = copyText { let inputBar = BMInputCopyBar(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 44), copy:copy) - + inputBar.completion = { (obj : String?) in if let text = obj { self.textField.text = text @@ -156,6 +163,9 @@ extension BMFieldCell : UITextFieldDelegate { } textField.inputAccessoryView = inputBar } + else if textField.keyboardType != .numberPad && textField.keyboardType != .decimalPad && textField.returnKeyType != .next { + textField.inputAccessoryView = nil + } return true } diff --git a/BeamWallet/Model/Address/AddressViewModel.swift b/BeamWallet/Model/Address/AddressViewModel.swift index 79aa5959..5993f550 100644 --- a/BeamWallet/Model/Address/AddressViewModel.swift +++ b/BeamWallet/Model/Address/AddressViewModel.swift @@ -331,4 +331,10 @@ extension AddressViewModel: WalletModelDelegate { self.filterAddresses() } } + + func onOfflinePaymentsCount(forWalletId walletId: String, count: Int32) { + DispatchQueue.main.async { + self.onDataChanged?() + } + } } diff --git a/BeamWallet/Model/Address/DetailAddressViewModel.swift b/BeamWallet/Model/Address/DetailAddressViewModel.swift index 99676b4d..db1ff37c 100644 --- a/BeamWallet/Model/Address/DetailAddressViewModel.swift +++ b/BeamWallet/Model/Address/DetailAddressViewModel.swift @@ -30,14 +30,18 @@ class DetailAddressViewModel: AddressViewModel { override init(address: BMAddress) { super.init(address: address) - + isContact = (AppModel.sharedManager().getContactFromId(address.walletId) != nil) transactionViewModel = TransactionViewModel(address: address) transactionViewModel.onDataChanged = { [weak self] in self?.onDataChanged?() } - + + if !isContact { + AppModel.sharedManager().requestOfflinePaymentsCount(forWalletId: address.walletId) + } + fillDetails() } @@ -83,7 +87,16 @@ class DetailAddressViewModel: AddressViewModel { identityItem.copiedText = Localizable.shared.strings.copied_to_clipboard details.append(identityItem) } - + + if !isContact, let walletId = self.address?.walletId { + let count = AppModel.sharedManager().offlinePaymentsCount(forWalletId: walletId) + if count >= 0 { + let detail = String(format: Localizable.shared.strings.offline_left_address, count) + let item = BMMultiLineItem(title: Localizable.shared.strings.offline_address.uppercased(), detail: detail, detailFont: RegularFont(size: 16), detailColor: UIColor.white) + details.append(item) + } + } + if self.address?.identity != nil && self.address?.identity?.isEmpty == false { let detail = self.address!.identity if detail!.count > 1 { @@ -107,6 +120,15 @@ class DetailAddressViewModel: AddressViewModel { // } } + override func onOfflinePaymentsCount(forWalletId walletId: String, count: Int32) { + DispatchQueue.main.async { + if walletId == self.address?.walletId { + self.fillDetails() + self.onDataChanged?() + } + } + } + public func actionItems() -> [BMPopoverMenu.BMPopoverMenuItem] { var items = [BMPopoverMenu.BMPopoverMenuItem(name: Localizable.shared.strings.show_qr_code, icon: nil, action: .show_qr_code), BMPopoverMenu.BMPopoverMenuItem(name: (isContact ? Localizable.shared.strings.copy_contact : Localizable.shared.strings.copy_address), icon: nil, action:.copy_address), BMPopoverMenu.BMPopoverMenuItem(name: (isContact ? Localizable.shared.strings.edit_contact : Localizable.shared.strings.edit_address), icon: nil, action:.edit_address), BMPopoverMenu.BMPopoverMenuItem(name: (isContact ? Localizable.shared.strings.delete_contact : Localizable.shared.strings.delete_address), icon: nil, action:.delete_address)] diff --git a/BeamWallet/Model/Address/ReceiveAddressViewModel.swift b/BeamWallet/Model/Address/ReceiveAddressViewModel.swift index 4edb7e73..f93e178f 100644 --- a/BeamWallet/Model/Address/ReceiveAddressViewModel.swift +++ b/BeamWallet/Model/Address/ReceiveAddressViewModel.swift @@ -25,34 +25,103 @@ class ReceiveAddressViewModel: NSObject { case regular = 0 case privacy = 1 } - + + enum ReceiveTokenType: Int { + case sbbs = 0 + case regular = 1 + case maxPrivacy = 2 + case offline = 3 + case publicOffline = 4 + + var localizedName: String { + switch self { + case .sbbs: return Localizable.shared.strings.sbbs_address + case .regular: return Localizable.shared.strings.regular_address + case .maxPrivacy: return Localizable.shared.strings.max_privacy_address + case .offline: return Localizable.shared.strings.offline_address + case .publicOffline: return Localizable.shared.strings.public_offline_address + } + } + + var supportsVouchers: Bool { + switch self { + case .regular, .offline: return true + default: return false + } + } + + var supportsOnlineReceive: Bool { + switch self { + case .sbbs, .regular, .offline: return true + default: return false + } + } + + var defaultVouchers: Int { + switch self { + case .offline: return 10 + default: return 1 + } + } + } + + static let maxVouchersCount = 30 + enum ExpireOptions: Int { case oneTime = 0 case parmanent = 1 } - + enum ReceiveAddressViewModelSaveState: Int { case none = 0 case new = 1 case edit = 2 } - + public var needReloadButtons = false public var transactionComment = String.empty() - + public var onAddressCreated: ((Error?) -> Void)? public var onDataChanged: (() -> Void)? public var onShared: (() -> Void)? public var onAddressUpdate: ((Error?) -> Void)? public var address: BMAddress! - public var transaction = TransactionOptions.regular - { + public var selectedTokenType: ReceiveTokenType = .regular { didSet { if isSavedAddress { isShared = true } + suppressVouchersRegen = true + vouchersCount = selectedTokenType.defaultVouchers + suppressVouchersRegen = false + } + } + + public var transaction: TransactionOptions { + return selectedTokenType == .maxPrivacy ? .privacy : .regular + } + + private var suppressVouchersRegen = false + + public var vouchersCount: Int = ReceiveTokenType.regular.defaultVouchers { + didSet { + if !suppressVouchersRegen && selectedTokenType.supportsVouchers { + generateTokens() + } + } + } + + public var currentToken: String { + let isOwn = AppModel.sharedManager().checkIsOwnNode() + if !isOwn { return address?.address ?? address?.walletId ?? "" } + switch selectedTokenType { + case .sbbs: return address?.sbbsToken ?? "" + case .regular: return address?.address ?? address?.walletId ?? "" + case .maxPrivacy: return address?.maxPrivacyToken ?? "" + case .offline: return address?.offlineToken ?? "" + case .publicOffline: return address?.publicOfflineToken ?? "" } } @@ -125,36 +194,59 @@ class ReceiveAddressViewModel: NSObject { public func generateTokens() { let isOwn = AppModel.sharedManager().checkIsOwnNode() - + let bamount = Double(amount ?? "0") ?? 0 - - if isOwn { - AppModel.sharedManager().generateMaxPrivacyAddress(address._id, assetId: Int32(selectedAssetId), amount: bamount) { (token) in - self.address.maxPrivacyToken = token + + let walletId = address._id + let assetId = Int32(selectedAssetId) + + if !isOwn { + let token = AppModel.sharedManager().generateRegularAddress(walletId, assetId: assetId, amount: bamount, isPermanentAddress: false) + address.address = token + DispatchQueue.main.async { + self.onAddressUpdate?(nil) } + return } - - if isOwn { - AppModel.sharedManager().generateOfflineAddress(address._id, assetId: Int32(selectedAssetId), amount: bamount) { (token) in + + switch selectedTokenType { + case .sbbs: + AppModel.sharedManager().generateSBBSAddress(walletId, assetId: assetId, amount: bamount) { token in DispatchQueue.main.async { - if self.address.offlineToken != nil { - self.address.offlineToken = token - self.onAddressUpdate?(nil) - } - else { - self.address.offlineToken = token + self.address.sbbsToken = token + self.onAddressUpdate?(nil) + } + } + case .regular: + AppModel.sharedManager().generateOfflineAddress(walletId, assetId: assetId, amount: bamount, offlineCount: UInt32(vouchersCount)) { token in + DispatchQueue.main.async { + self.address.address = token + self.onAddressUpdate?(nil) + } + } + case .maxPrivacy: + AppModel.sharedManager().generateMaxPrivacyAddress(walletId, assetId: assetId, amount: bamount) { token in + DispatchQueue.main.async { + self.address.maxPrivacyToken = token + self.onAddressUpdate?(nil) + } + } + case .offline: + AppModel.sharedManager().generateOfflineAddress(walletId, assetId: assetId, amount: bamount, offlineCount: UInt32(vouchersCount)) { token in + DispatchQueue.main.async { + let isFirst = (self.address.offlineToken == nil) + self.address.offlineToken = token + if isFirst { self.onAddressCreated?(nil) + } else { + self.onAddressUpdate?(nil) } } } - } - - if !isOwn { - AppModel.sharedManager().generateNewWalletAddress(withBlockAndAmount: Int32(selectedAssetId), amount: bamount) { address, _ in - if let result = address { - self.address = result - } + case .publicOffline: + AppModel.sharedManager().generatePublicOfflineAddress(walletId, assetId: assetId, amount: bamount) { token in DispatchQueue.main.async { + self.address.publicOfflineToken = token self.onAddressUpdate?(nil) } } diff --git a/BeamWallet/Protocols/LocalizableStrings.swift b/BeamWallet/Protocols/LocalizableStrings.swift index 26c3af99..1f2f2dad 100644 --- a/BeamWallet/Protocols/LocalizableStrings.swift +++ b/BeamWallet/Protocols/LocalizableStrings.swift @@ -479,7 +479,9 @@ class LocalizableStrings : NSObject { var offline_address = "offline_address".localized var public_offline_address_info = "public_offline_address_info".localized var public_offline = "public_offline".localized + var public_offline_address = "public_offline_address".localized var max_privacy = "max_privacy".localized + var max_privacy_address = "max_privacy_address".localized var tr_sent_public_offline = "tr_sent_public_offline".localized var tr_sent_offline = "tr_sent_offline".localized var tr_received_public_offline = "tr_received_public_offline".localized @@ -576,6 +578,9 @@ class LocalizableStrings : NSObject { var online_address = "online_address".localized var offline_left_address = "offline_left_address".localized var offline_left_address_warning = "offline_left_address_warning".localized + var vouchers_count = "vouchers_count".localized + var vouchers_count_hint = "vouchers_count_hint".localized + var vouchers_count_error = "vouchers_count_error".localized var send_offline_hint = "send_offline_hint".localized var send_max_privacy_title = "send_max_privacy_title".localized var send_notice_max_privacy = "send_notice_max_privacy".localized diff --git a/BeamWallet/ViewControllers/Main/QRCode/QRCodeSmallViewController.swift b/BeamWallet/ViewControllers/Main/QRCode/QRCodeSmallViewController.swift index e9342647..298ec8a9 100644 --- a/BeamWallet/ViewControllers/Main/QRCode/QRCodeSmallViewController.swift +++ b/BeamWallet/ViewControllers/Main/QRCode/QRCodeSmallViewController.swift @@ -25,6 +25,8 @@ class QRCodeSmallViewController: BaseViewController { weak var delegate: QRViewControllerDelegate? public var onShared : (() -> Void)? public var isMaxPrivacy = false + public var isSbbsOnly = false + public var isPublicOffline = false @IBOutlet weak private var infoLabel: UILabel! @IBOutlet weak private var codeConentView: UIView! @@ -70,8 +72,12 @@ class QRCodeSmallViewController: BaseViewController { infoLabel.text = text } + else if isPublicOffline { + infoLabel.text = Localizable.shared.strings.public_offline_address_info + } else { - if !AppModel.sharedManager().checkIsOwnNode() { + let isOwn = AppModel.sharedManager().checkIsOwnNode() + if isSbbsOnly || !isOwn { infoLabel.text = Localizable.shared.strings.receive_description_2 } else { diff --git a/BeamWallet/ViewControllers/Main/Wallet/Receive/ReceiveViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Receive/ReceiveViewController.swift index 360cd440..394abb0f 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Receive/ReceiveViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Receive/ReceiveViewController.swift @@ -63,6 +63,7 @@ class ReceiveViewController: BaseTableViewController { tableView.register([BMFieldCell.self, ReceiveTransactionTypeCell.self, BMExpandCell.self, BMAmountCell.self, ReceiveAddressButtonsCell.self]) tableView.register(ReceiveTokenCell.self, forCellReuseIdentifier: ReceiveTokenCell.reuseIdentifier) tableView.register(UINib(nibName: "BMPickerCell3", bundle: nil), forCellReuseIdentifier: "BMPickerCell3") + tableView.register(UINib(nibName: "BMPickerCell", bundle: nil), forCellReuseIdentifier: "BMPickerCell") tableView.keyboardDismissMode = .interactive tableView.contentInsetAdjustmentBehavior = .never @@ -107,7 +108,7 @@ class ReceiveViewController: BaseTableViewController { if token { let params = AppModel.sharedManager().getTransactionParameters(self?.viewModel.address.address ?? "") if params.newAddressType == BMAddressTypeMaxPrivacy { - self?.viewModel.transaction = .privacy + self?.viewModel.selectedTokenType = .maxPrivacy } } } @@ -130,20 +131,8 @@ class ReceiveViewController: BaseTableViewController { amoutnCell.setSecondAmount(amount: strongSelf.viewModel.secondAmount ?? "") } else if let tokenCell = cell as? ReceiveTokenCell { - let isOwn = AppModel.sharedManager().checkIsOwnNode() - - if !isOwn { - let token = strongSelf.viewModel.address.walletId - tokenCell.configure(with: token, title: Localizable.shared.strings.address.uppercased(), sbbsAddress: nil, showHint: false) - } - else if strongSelf.viewModel.transaction == .regular { - let token = strongSelf.viewModel.address.offlineToken ?? "" - tokenCell.configure(with: token, title: Localizable.shared.strings.address.uppercased(), sbbsAddress: strongSelf.sbbsAddress(for: token), showHint: false) - } - else { - let token = strongSelf.viewModel.address.maxPrivacyToken ?? "" - tokenCell.configure(with: token, title: "\(Localizable.shared.strings.address.uppercased()) (\(Localizable.shared.strings.maximum_anonymity.lowercased()))", sbbsAddress: strongSelf.sbbsAddress(for: token), showHint: false) - } + let token = strongSelf.viewModel.currentToken + tokenCell.configure(with: token, title: strongSelf.tokenCellTitle(), sbbsAddress: strongSelf.tokenCellSbbsAddress(for: token), showHint: false) } } strongSelf.tableView.endUpdates() @@ -214,6 +203,19 @@ class ReceiveViewController: BaseTableViewController { return sbbs.isEmpty ? nil : sbbs } + fileprivate func tokenCellTitle() -> String { + let base = Localizable.shared.strings.address.uppercased() + if viewModel.selectedTokenType == .maxPrivacy { + return "\(base) (\(Localizable.shared.strings.maximum_anonymity.lowercased()))" + } + return base + } + + fileprivate func tokenCellSbbsAddress(for token: String) -> String? { + if !AppModel.sharedManager().checkIsOwnNode() { return nil } + return sbbsAddress(for: token) + } + @objc private func onBack() { let state = viewModel.isNeedAskToSave() if state != .none { @@ -248,6 +250,20 @@ extension ReceiveViewController : UITableViewDelegate { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { tableView.deselectRow(at: indexPath, animated: true) + + if indexPath.section == 3 && indexPath.row == 1 && AppModel.sharedManager().checkIsOwnNode() { + let picker = BMDataPickerViewController(type: .address_type, selectedValue: viewModel.selectedTokenType.rawValue) + picker.completion = { [weak self] selected in + guard let self = self, + let raw = selected as? Int, + let type = ReceiveAddressViewModel.ReceiveTokenType(rawValue: raw) else { return } + self.view.endEditing(true) + self.viewModel.selectedTokenType = type + self.viewModel.generateTokens() + self.tableView.reloadSections(IndexSet([3, 4]), with: .fade) + } + pushViewController(vc: picker) + } } } @@ -272,7 +288,8 @@ extension ReceiveViewController : UITableViewDataSource { } } else if section == 3 { - return showAdvanced ? 2 : 1 + if !showAdvanced { return 1 } + return viewModel.selectedTokenType.supportsVouchers ? 3 : 2 } return 1 } @@ -284,20 +301,8 @@ extension ReceiveViewController : UITableViewDataSource { .dequeueReusableCell(withType: ReceiveTokenCell.self, for: indexPath) cell.contentView.backgroundColor = UIColor.main.marineThree cell.delegate = self - if viewModel.transaction == .regular { - if !AppModel.sharedManager().checkIsOwnNode() { - let token = viewModel.address.walletId - cell.configure(with: token, title: Localizable.shared.strings.address.uppercased(), sbbsAddress: nil, showHint: false) - } - else { - let token = viewModel.address.offlineToken ?? "" - cell.configure(with: token, title: Localizable.shared.strings.address.uppercased(), sbbsAddress: sbbsAddress(for: token), showHint: false) - } - } - else { - let token = viewModel.address.maxPrivacyToken ?? "" - cell.configure(with: token, title: "\(Localizable.shared.strings.address.uppercased()) (\(Localizable.shared.strings.maximum_anonymity.lowercased()))", sbbsAddress: sbbsAddress(for: token), showHint: false) - } + let token = viewModel.currentToken + cell.configure(with: token, title: tokenCellTitle(), sbbsAddress: tokenCellSbbsAddress(for: token), showHint: false) return cell } else if indexPath.section == 1 { @@ -378,23 +383,46 @@ extension ReceiveViewController : UITableViewDataSource { return cell } else if indexPath.row == 1 { - let detail = !AppModel.sharedManager().checkIsOwnNode() ? Localizable.shared.strings.connect_node_offline : nil - + let isOwn = AppModel.sharedManager().checkIsOwnNode() + let detail: String? = isOwn ? viewModel.selectedTokenType.localizedName : Localizable.shared.strings.connect_node_offline + let cell = tableView - .dequeueReusableCell(withIdentifier: "BMPickerCell3", for: indexPath) as! BMPickerCell - cell.configure(data: BMPickerData(title: Localizable.shared.strings.maximum_anonymity_set, detail: nil, titleColor: UIColor.white, arrowType: viewModel.transaction == .privacy ? BMPickerData.ArrowType.selected : BMPickerData.ArrowType.unselected, unique: 0, multiplie: false, isSwitch: true)) - - if detail != nil { + .dequeueReusableCell(withIdentifier: "BMPickerCell", for: indexPath) as! BMPickerCell + cell.configure(data: BMPickerData(title: Localizable.shared.strings.address_type, detail: detail, titleColor: UIColor.white, arrowType: BMPickerData.ArrowType.selected, unique: 0, multiplie: false, isSwitch: false)) + + if !isOwn { cell.titleLabel.alpha = 0.5 - cell.switchView.alpha = 0.5 cell.isUserInteractionEnabled = false + } else { + cell.titleLabel.alpha = 1 + cell.isUserInteractionEnabled = true } cell.botOffset?.constant = 20 - cell.delegate = self cell.backgroundColor = UIColor.clear cell.mainView.backgroundColor = UIColor.main.marineThree cell.contentView.backgroundColor = UIColor.main.marine + return cell + } + else if indexPath.row == 2 { + let isOwn = AppModel.sharedManager().checkIsOwnNode() + + let cell = tableView + .dequeueReusableCell(withType: BMFieldCell.self, for: indexPath) + .configured(with: (name: Localizable.shared.strings.vouchers_count.uppercased(), value: "\(viewModel.vouchersCount)")) + cell.delegate = self + cell.keyboardType = .numberPad + cell.contentView.backgroundColor = UIColor.main.marineThree + cell.info = String(format: Localizable.shared.strings.vouchers_count_hint, ReceiveAddressViewModel.maxVouchersCount) + + if !isOwn { + cell.alpha = 0.5 + cell.isUserInteractionEnabled = false + } else { + cell.alpha = 1 + cell.isUserInteractionEnabled = true + } + return cell } } @@ -402,27 +430,34 @@ extension ReceiveViewController : UITableViewDataSource { let cell = tableView .dequeueReusableCell(withType: ReceiveAddressButtonsCell.self, for: indexPath) cell.delegate = self - if viewModel.transaction == .privacy { + if viewModel.selectedTokenType == .maxPrivacy { var text = "\n\n" + Localizable.shared.strings.max_privacy_fee let locValue = Settings.sharedManager().currentMaxPrivacyLockValue() - + if locValue.hours == 0 { text = Localizable.shared.strings.transaction_indefinitely + text } else { text = String(format: Localizable.shared.strings.transaction_time, locValue.title) + text } - + cell.setText(text: text) } - else { - if !AppModel.sharedManager().checkIsOwnNode() { + else if viewModel.selectedTokenType.supportsOnlineReceive { + let isOwn = AppModel.sharedManager().checkIsOwnNode() + if viewModel.selectedTokenType == .sbbs || !isOwn { cell.setText(text: Localizable.shared.strings.receive_description_2) } else { cell.setText(text: Localizable.shared.strings.receive_description) } } + else if viewModel.selectedTokenType == .publicOffline { + cell.setText(text: Localizable.shared.strings.public_offline_address_info) + } + else { + cell.setText(text: "") + } return cell } @@ -460,11 +495,11 @@ extension ReceiveViewController : BMCellProtocol { if let path = tableView.indexPath(for: sender) { if path.section == 2 { viewModel.transactionComment = text - + } else if path.section == 1 { viewModel.amount = text - + UIView.performWithoutAnimation { tableView.beginUpdates() for cell in tableView.visibleCells { @@ -472,30 +507,36 @@ extension ReceiveViewController : BMCellProtocol { amoutnCell.setSecondAmount(amount: viewModel.secondAmount ?? "") } else if let tokenCell = cell as? ReceiveTokenCell { - if viewModel.transaction == .regular { - if !AppModel.sharedManager().checkIsOwnNode() { - let token = viewModel.address.walletId - tokenCell.configure(with: token, title: Localizable.shared.strings.address.uppercased(), sbbsAddress: nil, showHint: true) - } - else { - let token = viewModel.address.offlineToken ?? "" - tokenCell.configure(with: token, title: Localizable.shared.strings.address.uppercased(), sbbsAddress: sbbsAddress(for: token), showHint: true) - } - } - else { - let token = viewModel.address.maxPrivacyToken ?? "" - tokenCell.configure(with: token, title: "\(Localizable.shared.strings.address.uppercased()) (\(Localizable.shared.strings.maximum_anonymity.lowercased()))", sbbsAddress: sbbsAddress(for: token), showHint: false) - } + let token = viewModel.currentToken + tokenCell.configure(with: token, title: tokenCellTitle(), sbbsAddress: tokenCellSbbsAddress(for: token), showHint: viewModel.selectedTokenType != .maxPrivacy) } } tableView.endUpdates() } } + else if path.section == 3 && path.row == 2 { + guard let fieldCell = sender as? BMFieldCell else { return } + let trimmed = text.trimmingCharacters(in: .whitespaces) + if trimmed.isEmpty { + fieldCell.error = nil + return + } + if let value = Int(trimmed), (1...ReceiveAddressViewModel.maxVouchersCount).contains(value) { + fieldCell.error = nil + viewModel.vouchersCount = value + } else { + fieldCell.error = String(format: Localizable.shared.strings.vouchers_count_error, ReceiveAddressViewModel.maxVouchersCount) + } + } } } - - func textValueDidReturn(_ sender: UITableViewCell) { + func textValueDidReturn(_ sender: UITableViewCell) { + if let path = tableView.indexPath(for: sender), path.section == 3 && path.row == 2, + let fieldCell = sender as? BMFieldCell { + fieldCell.error = nil + fieldCell.setText("\(viewModel.vouchersCount)") + } } func onExpandCell(_ sender: UITableViewCell) { @@ -522,13 +563,7 @@ extension ReceiveViewController : BMCellProtocol { } else if path.section == 3 { showAdvanced = !showAdvanced - - if showAdvanced { - self.tableView.insertRows(at: [IndexPath(row: 1, section: 3)], with: .fade) - } - else{ - self.tableView.deleteRows(at: [IndexPath(row: 1, section: 3)], with: .fade) - } + self.tableView.reloadSections(IndexSet(integer: 3), with: .fade) } } } @@ -562,8 +597,7 @@ extension ReceiveViewController : BMCellProtocol { extension ReceiveViewController : ReceiveAddressTokensCellDelegate { @objc func onSwitchToPool() { - viewModel.transaction = .regular - // viewModel.expire = .parmanent + viewModel.selectedTokenType = .regular viewModel.needReloadButtons = true self.tableView.reloadData() } @@ -588,7 +622,9 @@ extension ReceiveViewController : ReceiveAddressTokensCellDelegate { modalViewController.onShared = { [weak self] in self?.onBack() } - modalViewController.isMaxPrivacy = viewModel.transaction == ReceiveAddressViewModel.TransactionOptions.privacy + modalViewController.isMaxPrivacy = viewModel.selectedTokenType == .maxPrivacy + modalViewController.isSbbsOnly = viewModel.selectedTokenType == .sbbs + modalViewController.isPublicOffline = viewModel.selectedTokenType == .publicOffline modalViewController.modalPresentationStyle = .overFullScreen modalViewController.modalTransitionStyle = .crossDissolve @@ -609,30 +645,11 @@ extension ReceiveViewController : ReceiveAddressTokensCellDelegate { } func onClickShare() { - if viewModel.transaction == .privacy { - onShareToken(token: viewModel.address.maxPrivacyToken ?? "") - } - else { - if !AppModel.sharedManager().checkIsOwnNode() { - onShareToken(token: viewModel.address.walletId) - } - else { - onShareToken(token: viewModel.address.offlineToken ?? "") - } - } + onShareToken(token: viewModel.currentToken) } func onClickCopyAndClose() { - let token: String - if viewModel.transaction == .privacy { - token = viewModel.address.maxPrivacyToken ?? "" - } - else if !AppModel.sharedManager().checkIsOwnNode() { - token = viewModel.address.walletId - } - else { - token = viewModel.address.offlineToken ?? "" - } + let token = viewModel.currentToken guard !token.isEmpty else { return } UIPasteboard.general.string = token viewModel.isShared = true @@ -641,33 +658,21 @@ extension ReceiveViewController : ReceiveAddressTokensCellDelegate { } } -extension ReceiveViewController : ReceiveTransactionTypeCellDelegate, BMPickerCellDelegate { - +extension ReceiveViewController : ReceiveTransactionTypeCellDelegate { + func onDidSelectTrasactionType(type: ReceiveAddressViewModel.TransactionOptions) { - viewModel.transaction = type - + viewModel.selectedTokenType = (type == .privacy) ? .maxPrivacy : .regular + viewModel.generateTokens() + UIView.performWithoutAnimation { self.tableView.reloadRow(ReceiveTokenCell.self, animated: false) self.tableView.reloadRow(ReceiveAddressButtonsCell.self, animated: false) } } - + func onShareToken() { viewModel.isShared = true } - - func onClickSwitch(value: Bool, cell: BMPickerCell) { - if value { - viewModel.transaction = .privacy - } - else { - viewModel.transaction = .regular - } - - UIView.performWithoutAnimation { - self.tableView.reloadData() - } - } } diff --git a/Resources/cs.lproj/Localizable.strings b/Resources/cs.lproj/Localizable.strings index 100ee7f9..e72f16e7 100644 --- a/Resources/cs.lproj/Localizable.strings +++ b/Resources/cs.lproj/Localizable.strings @@ -645,3 +645,7 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; + +"vouchers_count" = "Vouchers count"; +"vouchers_count_hint" = "Up to %d vouchers per address"; +"vouchers_count_error" = "Enter a value between 1 and %d"; diff --git a/Resources/en.lproj/Localizable.strings b/Resources/en.lproj/Localizable.strings index f83a451d..f706ebe3 100644 --- a/Resources/en.lproj/Localizable.strings +++ b/Resources/en.lproj/Localizable.strings @@ -758,3 +758,7 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; + +"vouchers_count" = "Vouchers count"; +"vouchers_count_hint" = "Up to %d vouchers per address"; +"vouchers_count_error" = "Enter a value between 1 and %d"; diff --git a/Resources/es.lproj/Localizable.strings b/Resources/es.lproj/Localizable.strings index a49b1abf..39458359 100644 --- a/Resources/es.lproj/Localizable.strings +++ b/Resources/es.lproj/Localizable.strings @@ -645,3 +645,7 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; + +"vouchers_count" = "Vouchers count"; +"vouchers_count_hint" = "Up to %d vouchers per address"; +"vouchers_count_error" = "Enter a value between 1 and %d"; diff --git a/Resources/fi-FI.lproj/Localizable.strings b/Resources/fi-FI.lproj/Localizable.strings index 100ee7f9..e72f16e7 100644 --- a/Resources/fi-FI.lproj/Localizable.strings +++ b/Resources/fi-FI.lproj/Localizable.strings @@ -645,3 +645,7 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; + +"vouchers_count" = "Vouchers count"; +"vouchers_count_hint" = "Up to %d vouchers per address"; +"vouchers_count_error" = "Enter a value between 1 and %d"; diff --git a/Resources/fr.lproj/Localizable.strings b/Resources/fr.lproj/Localizable.strings index 100ee7f9..e72f16e7 100644 --- a/Resources/fr.lproj/Localizable.strings +++ b/Resources/fr.lproj/Localizable.strings @@ -645,3 +645,7 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; + +"vouchers_count" = "Vouchers count"; +"vouchers_count_hint" = "Up to %d vouchers per address"; +"vouchers_count_error" = "Enter a value between 1 and %d"; diff --git a/Resources/ko.lproj/Localizable.strings b/Resources/ko.lproj/Localizable.strings index 100ee7f9..e72f16e7 100644 --- a/Resources/ko.lproj/Localizable.strings +++ b/Resources/ko.lproj/Localizable.strings @@ -645,3 +645,7 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; + +"vouchers_count" = "Vouchers count"; +"vouchers_count_hint" = "Up to %d vouchers per address"; +"vouchers_count_error" = "Enter a value between 1 and %d"; diff --git a/Resources/nl.lproj/Localizable.strings b/Resources/nl.lproj/Localizable.strings index a49b1abf..39458359 100644 --- a/Resources/nl.lproj/Localizable.strings +++ b/Resources/nl.lproj/Localizable.strings @@ -645,3 +645,7 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; + +"vouchers_count" = "Vouchers count"; +"vouchers_count_hint" = "Up to %d vouchers per address"; +"vouchers_count_error" = "Enter a value between 1 and %d"; diff --git a/Resources/ru.lproj/Localizable.strings b/Resources/ru.lproj/Localizable.strings index 100ee7f9..e72f16e7 100644 --- a/Resources/ru.lproj/Localizable.strings +++ b/Resources/ru.lproj/Localizable.strings @@ -645,3 +645,7 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; + +"vouchers_count" = "Vouchers count"; +"vouchers_count_hint" = "Up to %d vouchers per address"; +"vouchers_count_error" = "Enter a value between 1 and %d"; diff --git a/Resources/sv-SE.lproj/Localizable.strings b/Resources/sv-SE.lproj/Localizable.strings index caf46bae..4b6d952d 100644 --- a/Resources/sv-SE.lproj/Localizable.strings +++ b/Resources/sv-SE.lproj/Localizable.strings @@ -689,3 +689,7 @@ "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; + +"vouchers_count" = "Vouchers count"; +"vouchers_count_hint" = "Up to %d vouchers per address"; +"vouchers_count_error" = "Enter a value between 1 and %d"; diff --git a/Resources/sv.lproj/Localizable.strings b/Resources/sv.lproj/Localizable.strings index 100ee7f9..e72f16e7 100644 --- a/Resources/sv.lproj/Localizable.strings +++ b/Resources/sv.lproj/Localizable.strings @@ -645,3 +645,7 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; + +"vouchers_count" = "Vouchers count"; +"vouchers_count_hint" = "Up to %d vouchers per address"; +"vouchers_count_error" = "Enter a value between 1 and %d"; diff --git a/Resources/th.lproj/Localizable.strings b/Resources/th.lproj/Localizable.strings index 100ee7f9..e72f16e7 100644 --- a/Resources/th.lproj/Localizable.strings +++ b/Resources/th.lproj/Localizable.strings @@ -645,3 +645,7 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; + +"vouchers_count" = "Vouchers count"; +"vouchers_count_hint" = "Up to %d vouchers per address"; +"vouchers_count_error" = "Enter a value between 1 and %d"; diff --git a/Resources/tr.lproj/Localizable.strings b/Resources/tr.lproj/Localizable.strings index 100ee7f9..e72f16e7 100644 --- a/Resources/tr.lproj/Localizable.strings +++ b/Resources/tr.lproj/Localizable.strings @@ -645,3 +645,7 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; + +"vouchers_count" = "Vouchers count"; +"vouchers_count_hint" = "Up to %d vouchers per address"; +"vouchers_count_error" = "Enter a value between 1 and %d"; diff --git a/Resources/vi.lproj/Localizable.strings b/Resources/vi.lproj/Localizable.strings index 100ee7f9..e72f16e7 100644 --- a/Resources/vi.lproj/Localizable.strings +++ b/Resources/vi.lproj/Localizable.strings @@ -645,3 +645,7 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; + +"vouchers_count" = "Vouchers count"; +"vouchers_count_hint" = "Up to %d vouchers per address"; +"vouchers_count_error" = "Enter a value between 1 and %d"; diff --git a/Resources/zh-Hans.lproj/Localizable.strings b/Resources/zh-Hans.lproj/Localizable.strings index 2928c36c..0a35dfbf 100644 --- a/Resources/zh-Hans.lproj/Localizable.strings +++ b/Resources/zh-Hans.lproj/Localizable.strings @@ -644,3 +644,7 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; + +"vouchers_count" = "Vouchers count"; +"vouchers_count_hint" = "Up to %d vouchers per address"; +"vouchers_count_error" = "Enter a value between 1 and %d"; From 9190461dc980d1abb21e50c8937d605b2be94e89 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sun, 10 May 2026 01:17:41 +0200 Subject: [PATCH 30/48] fix(asset-swaps): pre-flight balance check + sticky footer on details MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three issues on Asset Swap Details: 1. Tapping "Accept Offer" without enough of the asset being sold silently popped back to the orders list. AppModel.acceptDexOrder returned YES synchronously after queueing the C++ tx, with no pre-flight balance check anywhere on the accept path. Users thought the swap had been submitted; it failed asynchronously in the background with no surfacing. 2. Cancel and Accept buttons were inside the scroll view's contentView with bottomAnchor pinned to contentView (not the safe area), so on smaller devices they sat below the home indicator and required a scroll to reach. 3. The page scrolled even when content fit because of #2. Fixes: AssetSwapDetailsViewModel gains validationError, mirroring the create flow's existing check — guards canAccept, returns asset_swap_insufficient_funds when the local user can't fund the order's send side. Cancellation (mine + active) doesn't require funds, so the guard returns nil for that case. Also adds sendAsset / receiveAsset / statusColor / isExpiringSoon helpers used by the redesigned VC. AssetSwapDetailsViewController is restructured: footer is pinned to view.safeAreaLayoutGuide.bottomAnchor (not inside the scroll view), the scroll view's bottomAnchor anchors to the footer's topAnchor (so content that fits never scrolls), and the body is laid out into a header card (icons + amounts), rate strip, and details card with an expandable technical-details section (created date, peer SBBS, order ID). onAccept now calls alert(message:) on a non-nil validationError and returns without popping; the user sees the error and the page stays on screen. Localization: 6 new keys (asset_swap_created / _expires_in / _peer_id / _order_id / _show_details / _hide_details) added to all 14 locales (English text used as placeholder per the existing convention). Deliberately not in scope: wiring the VC into WalletModelDelegate to wait for an async tx-status callback after Accept. The dominant silent-close case is "not enough funds" and the pre-flight covers it; network-level failures still surface through the regular transactions list. --- .../AssetSwapDetailsViewModel.swift | 36 + BeamWallet/Protocols/LocalizableStrings.swift | 6 + .../AssetSwapDetailsViewController.swift | 623 ++++++++++++++++-- Resources/cs.lproj/Localizable.strings | 6 + Resources/en.lproj/Localizable.strings | 6 + Resources/es.lproj/Localizable.strings | 6 + Resources/fi-FI.lproj/Localizable.strings | 6 + Resources/fr.lproj/Localizable.strings | 6 + Resources/ko.lproj/Localizable.strings | 6 + Resources/nl.lproj/Localizable.strings | 6 + Resources/ru.lproj/Localizable.strings | 6 + Resources/sv-SE.lproj/Localizable.strings | 6 + Resources/sv.lproj/Localizable.strings | 6 + Resources/th.lproj/Localizable.strings | 6 + Resources/tr.lproj/Localizable.strings | 6 + Resources/vi.lproj/Localizable.strings | 6 + Resources/zh-Hans.lproj/Localizable.strings | 6 + 17 files changed, 683 insertions(+), 66 deletions(-) diff --git a/BeamWallet/Model/AssetSwaps/AssetSwapDetailsViewModel.swift b/BeamWallet/Model/AssetSwaps/AssetSwapDetailsViewModel.swift index d2034844..b5e85bc6 100644 --- a/BeamWallet/Model/AssetSwaps/AssetSwapDetailsViewModel.swift +++ b/BeamWallet/Model/AssetSwaps/AssetSwapDetailsViewModel.swift @@ -36,6 +36,42 @@ class AssetSwapDetailsViewModel: NSObject { return !order.isMine && order.isActive() } + public var sendAsset: BMAsset? { + return AssetsManager.shared().getAsset(Int32(order.sendAssetId)) + } + + public var receiveAsset: BMAsset? { + return AssetsManager.shared().getAsset(Int32(order.receiveAssetId)) + } + + public var statusColor: UIColor { + if order.isExpired() { + return UIColor.main.red + } + if order.isCompleted || order.isCanceled { + return UIColor.main.steelGrey + } + return UIColor.main.brightTeal + } + + public var isExpiringSoon: Bool { + guard order.isActive() else { return false } + let now = UInt64(Date().timeIntervalSince1970) + guard order.expireTimestamp > now else { return false } + return order.expireTimestamp - now < 3600 + } + + public var validationError: String? { + guard canAccept else { return nil } + guard let sendAsset = AssetsManager.shared().getAsset(Int32(order.sendAssetId)) else { + return Localizable.shared.strings.asset_swap_insufficient_funds + } + if sendAsset.available < order.sendAmount { + return Localizable.shared.strings.asset_swap_insufficient_funds + } + return nil + } + public func cancel() { AppModel.sharedManager().cancelDexOrder(withID: order.orderID) } diff --git a/BeamWallet/Protocols/LocalizableStrings.swift b/BeamWallet/Protocols/LocalizableStrings.swift index 1f2f2dad..bc363429 100644 --- a/BeamWallet/Protocols/LocalizableStrings.swift +++ b/BeamWallet/Protocols/LocalizableStrings.swift @@ -97,6 +97,12 @@ class LocalizableStrings : NSObject { var asset_swap_insufficient_funds = "asset_swap_insufficient_funds".localized var asset_swap_same_asset_error = "asset_swap_same_asset_error".localized var asset_swap_confirm_cancel = "asset_swap_confirm_cancel".localized + var asset_swap_created = "asset_swap_created".localized + var asset_swap_expires_in = "asset_swap_expires_in".localized + var asset_swap_peer_id = "asset_swap_peer_id".localized + var asset_swap_order_id = "asset_swap_order_id".localized + var asset_swap_show_details = "asset_swap_show_details".localized + var asset_swap_hide_details = "asset_swap_hide_details".localized var transactions = "transactions".localized var export = "export".localized var activate = "activate".localized diff --git a/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapDetailsViewController.swift b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapDetailsViewController.swift index 52caf05d..3ee7a3b4 100644 --- a/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapDetailsViewController.swift +++ b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapDetailsViewController.swift @@ -25,15 +25,17 @@ class AssetSwapDetailsViewController: BaseViewController { private let scrollView = UIScrollView() private let contentView = UIView() + private let footerContainer = UIView() - private let amountsLabel = UILabel() - private let rateLabel = UILabel() - private let statusValueLabel = UILabel() - private let createdValueLabel = UILabel() - private let expiresValueLabel = UILabel() - private let peerValueLabel = UILabel() + private let sendIconView = AssetIconView(frame: CGRect(x: 0, y: 0, width: 48, height: 48)) + private let receiveIconView = AssetIconView(frame: CGRect(x: 0, y: 0, width: 48, height: 48)) - private let actionButton = BMButton.defaultButton(frame: CGRect(x: 0, y: 0, width: 240, height: 44), color: UIColor.main.brightTeal) + private let detailsCard = UIView() + private let technicalContainer = UIView() + private let disclosureLabel = UILabel() + private let disclosureChevron = UIImageView(image: UIImage(named: "iconDownArrow")) + + private var technicalExpanded = false init(order: BMDexOrder) { self.viewModel = AssetSwapDetailsViewModel(order: order) @@ -50,99 +52,584 @@ class AssetSwapDetailsViewController: BaseViewController { setGradientTopBar(mainColor: UIColor.main.peacockBlue, addedStatusView: true) title = Localizable.shared.strings.asset_swap_details - configureLabels() - layoutContent() - configureActionButton() - } + layoutFooter() + layoutScrollView() - private func configureLabels() { - amountsLabel.font = BoldFont(size: 18) - amountsLabel.textColor = UIColor.white - amountsLabel.textAlignment = .center - amountsLabel.numberOfLines = 0 - amountsLabel.text = "\(viewModel.order.displaySendAmount())\n→\n\(viewModel.order.displayReceiveAmount())" + let header = makeSwapHeaderCard() + let rateStrip = makeRateStrip() + let details = makeDetailsCard() - rateLabel.font = RegularFont(size: 14) - rateLabel.textColor = UIColor.main.steelGrey - rateLabel.textAlignment = .center - rateLabel.text = viewModel.order.displayRate() + let stack = UIStackView(arrangedSubviews: [header, rateStrip, details]) + stack.translatesAutoresizingMaskIntoConstraints = false + stack.axis = .vertical + stack.spacing = 18 + stack.alignment = .fill + contentView.addSubview(stack) - statusValueLabel.font = SemiboldFont(size: 14) - statusValueLabel.textColor = UIColor.main.brightTeal - statusValueLabel.text = "\(Localizable.shared.strings.asset_swap_status): \(viewModel.order.displayStatus())" + NSLayoutConstraint.activate([ + stack.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: defaultX), + stack.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -defaultX), + stack.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 24), + stack.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -24) + ]) + } - createdValueLabel.font = RegularFont(size: 14) - createdValueLabel.textColor = UIColor.main.steelGrey - createdValueLabel.text = viewModel.order.displayCreatedDate() + // MARK: - Footer (sticky, pinned to safe area) - expiresValueLabel.font = RegularFont(size: 14) - expiresValueLabel.textColor = UIColor.main.steelGrey - expiresValueLabel.text = "\(Localizable.shared.strings.asset_swap_expiration): \(viewModel.order.displayExpiresIn())" + private func layoutFooter() { + footerContainer.translatesAutoresizingMaskIntoConstraints = false + footerContainer.backgroundColor = view.backgroundColor + view.addSubview(footerContainer) - peerValueLabel.font = RegularFont(size: 12) - peerValueLabel.textColor = UIColor.main.steelGrey - peerValueLabel.numberOfLines = 0 - peerValueLabel.lineBreakMode = .byCharWrapping - peerValueLabel.text = viewModel.order.sbbsID + NSLayoutConstraint.activate([ + footerContainer.leadingAnchor.constraint(equalTo: view.leadingAnchor), + footerContainer.trailingAnchor.constraint(equalTo: view.trailingAnchor), + footerContainer.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor) + ]) + + populateFooter(footerContainer) } - private func layoutContent() { + // MARK: - Scroll container + + private func layoutScrollView() { scrollView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(scrollView) contentView.translatesAutoresizingMaskIntoConstraints = false scrollView.addSubview(contentView) - let stack = UIStackView(arrangedSubviews: [amountsLabel, rateLabel, statusValueLabel, createdValueLabel, expiresValueLabel, peerValueLabel]) - stack.translatesAutoresizingMaskIntoConstraints = false - stack.axis = .vertical - stack.spacing = 14 - stack.alignment = .center - contentView.addSubview(stack) - NSLayoutConstraint.activate([ scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor), scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor), scrollView.topAnchor.constraint(equalTo: view.topAnchor, constant: navigationBarOffset), - scrollView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor), + scrollView.bottomAnchor.constraint(equalTo: footerContainer.topAnchor), contentView.leadingAnchor.constraint(equalTo: scrollView.contentLayoutGuide.leadingAnchor), contentView.trailingAnchor.constraint(equalTo: scrollView.contentLayoutGuide.trailingAnchor), contentView.topAnchor.constraint(equalTo: scrollView.contentLayoutGuide.topAnchor), contentView.bottomAnchor.constraint(equalTo: scrollView.contentLayoutGuide.bottomAnchor), - contentView.widthAnchor.constraint(equalTo: scrollView.frameLayoutGuide.widthAnchor), + contentView.widthAnchor.constraint(equalTo: scrollView.frameLayoutGuide.widthAnchor) + ]) + } - stack.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: defaultX), - stack.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -defaultX), - stack.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 28), + // MARK: - Swap header card (you send / you receive) + + private func makeSwapHeaderCard() -> UIView { + let card = UIView() + card.translatesAutoresizingMaskIntoConstraints = false + card.backgroundColor = UIColor.main.cellBackgroundColor + card.layer.cornerRadius = 12 + card.layer.masksToBounds = true + + let sendRow = makeAssetRow( + iconView: sendIconView, + asset: viewModel.sendAsset, + caption: Localizable.shared.strings.asset_swap_send, + amount: viewModel.order.displaySendAmount(), + assetSymbol: viewModel.order.sendAssetSName + ) + + let receiveRow = makeAssetRow( + iconView: receiveIconView, + asset: viewModel.receiveAsset, + caption: Localizable.shared.strings.asset_swap_receive, + amount: viewModel.order.displayReceiveAmount(), + assetSymbol: viewModel.order.receiveAssetSName + ) + + let separator = UIView() + separator.translatesAutoresizingMaskIntoConstraints = false + separator.backgroundColor = UIColor.main.marineOriginal.withAlphaComponent(0.4) + + let arrow = UIView() + arrow.translatesAutoresizingMaskIntoConstraints = false + arrow.backgroundColor = UIColor.main.marineOriginal + arrow.layer.cornerRadius = 16 + arrow.layer.borderWidth = 2 + arrow.layer.borderColor = UIColor.main.cellBackgroundColor.cgColor + + let arrowGlyph = UILabel() + arrowGlyph.translatesAutoresizingMaskIntoConstraints = false + arrowGlyph.text = "↓" + arrowGlyph.font = BoldFont(size: 18) + arrowGlyph.textColor = UIColor.main.brightTeal + arrowGlyph.textAlignment = .center + arrow.addSubview(arrowGlyph) + + card.addSubview(sendRow) + card.addSubview(separator) + card.addSubview(receiveRow) + card.addSubview(arrow) + + NSLayoutConstraint.activate([ + sendRow.leadingAnchor.constraint(equalTo: card.leadingAnchor, constant: 16), + sendRow.trailingAnchor.constraint(equalTo: card.trailingAnchor, constant: -16), + sendRow.topAnchor.constraint(equalTo: card.topAnchor, constant: 18), + + separator.leadingAnchor.constraint(equalTo: card.leadingAnchor, constant: 16), + separator.trailingAnchor.constraint(equalTo: card.trailingAnchor, constant: -16), + separator.topAnchor.constraint(equalTo: sendRow.bottomAnchor, constant: 18), + separator.heightAnchor.constraint(equalToConstant: 1), + + receiveRow.leadingAnchor.constraint(equalTo: card.leadingAnchor, constant: 16), + receiveRow.trailingAnchor.constraint(equalTo: card.trailingAnchor, constant: -16), + receiveRow.topAnchor.constraint(equalTo: separator.bottomAnchor, constant: 18), + receiveRow.bottomAnchor.constraint(equalTo: card.bottomAnchor, constant: -18), + + arrow.centerXAnchor.constraint(equalTo: card.centerXAnchor), + arrow.centerYAnchor.constraint(equalTo: separator.centerYAnchor), + arrow.widthAnchor.constraint(equalToConstant: 32), + arrow.heightAnchor.constraint(equalToConstant: 32), + + arrowGlyph.centerXAnchor.constraint(equalTo: arrow.centerXAnchor), + arrowGlyph.centerYAnchor.constraint(equalTo: arrow.centerYAnchor, constant: -1) ]) - actionButton.translatesAutoresizingMaskIntoConstraints = false - contentView.addSubview(actionButton) + return card + } + + private func makeAssetRow(iconView: AssetIconView, asset: BMAsset?, caption: String, amount: String, assetSymbol: String) -> UIView { + let row = UIView() + row.translatesAutoresizingMaskIntoConstraints = false + + iconView.translatesAutoresizingMaskIntoConstraints = false + if let asset = asset { + iconView.setAsset(asset) + } + row.addSubview(iconView) + + let captionLabel = UILabel() + captionLabel.translatesAutoresizingMaskIntoConstraints = false + captionLabel.font = RegularFont(size: 11) + captionLabel.textColor = UIColor.main.steelGrey + captionLabel.attributedText = NSAttributedString(string: caption.uppercased(), attributes: [.kern: 1.0]) + row.addSubview(captionLabel) + + let symbolLabel = UILabel() + symbolLabel.translatesAutoresizingMaskIntoConstraints = false + symbolLabel.font = SemiboldFont(size: 15) + symbolLabel.textColor = UIColor.white + symbolLabel.text = assetSymbol + row.addSubview(symbolLabel) + + let amountLabel = UILabel() + amountLabel.translatesAutoresizingMaskIntoConstraints = false + amountLabel.font = BoldFont(size: 22) + amountLabel.textColor = UIColor.white + amountLabel.textAlignment = .right + amountLabel.adjustsFontSizeToFitWidth = true + amountLabel.minimumScaleFactor = 0.6 + amountLabel.text = amount + row.addSubview(amountLabel) + + NSLayoutConstraint.activate([ + iconView.leadingAnchor.constraint(equalTo: row.leadingAnchor), + iconView.centerYAnchor.constraint(equalTo: row.centerYAnchor), + iconView.widthAnchor.constraint(equalToConstant: 48), + iconView.heightAnchor.constraint(equalToConstant: 48), + + captionLabel.leadingAnchor.constraint(equalTo: iconView.trailingAnchor, constant: 12), + captionLabel.topAnchor.constraint(equalTo: iconView.topAnchor, constant: 4), + captionLabel.trailingAnchor.constraint(lessThanOrEqualTo: amountLabel.leadingAnchor, constant: -8), + + symbolLabel.leadingAnchor.constraint(equalTo: captionLabel.leadingAnchor), + symbolLabel.topAnchor.constraint(equalTo: captionLabel.bottomAnchor, constant: 4), + symbolLabel.trailingAnchor.constraint(lessThanOrEqualTo: amountLabel.leadingAnchor, constant: -8), + + amountLabel.trailingAnchor.constraint(equalTo: row.trailingAnchor), + amountLabel.centerYAnchor.constraint(equalTo: row.centerYAnchor), + + row.heightAnchor.constraint(greaterThanOrEqualToConstant: 48) + ]) + + return row + } + + // MARK: - Rate strip + + private func makeRateStrip() -> UIView { + let strip = UIView() + strip.translatesAutoresizingMaskIntoConstraints = false + + let captionLabel = UILabel() + captionLabel.translatesAutoresizingMaskIntoConstraints = false + captionLabel.font = RegularFont(size: 11) + captionLabel.textColor = UIColor.main.steelGrey + captionLabel.attributedText = NSAttributedString( + string: Localizable.shared.strings.asset_swap_rate.uppercased(), + attributes: [.kern: 1.0] + ) + strip.addSubview(captionLabel) + + let valueLabel = UILabel() + valueLabel.translatesAutoresizingMaskIntoConstraints = false + valueLabel.font = SemiboldFont(size: 13) + valueLabel.textColor = UIColor.main.brightTeal + valueLabel.textAlignment = .right + valueLabel.adjustsFontSizeToFitWidth = true + valueLabel.minimumScaleFactor = 0.7 + valueLabel.text = viewModel.order.displayRate() + strip.addSubview(valueLabel) + NSLayoutConstraint.activate([ - actionButton.centerXAnchor.constraint(equalTo: contentView.centerXAnchor), - actionButton.topAnchor.constraint(equalTo: stack.bottomAnchor, constant: 36), - actionButton.widthAnchor.constraint(equalToConstant: 240), - actionButton.heightAnchor.constraint(equalToConstant: 44), - actionButton.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -30), + captionLabel.leadingAnchor.constraint(equalTo: strip.leadingAnchor, constant: 4), + captionLabel.centerYAnchor.constraint(equalTo: strip.centerYAnchor), + + valueLabel.trailingAnchor.constraint(equalTo: strip.trailingAnchor, constant: -4), + valueLabel.centerYAnchor.constraint(equalTo: strip.centerYAnchor), + valueLabel.leadingAnchor.constraint(greaterThanOrEqualTo: captionLabel.trailingAnchor, constant: 12), + + strip.heightAnchor.constraint(equalToConstant: 24) ]) + + return strip } - private func configureActionButton() { - actionButton.titleLabel?.font = BoldFont(size: 14) - actionButton.setTitleColor(UIColor.main.marineOriginal, for: .normal) - actionButton.setTitleColor(UIColor.main.marineOriginal.withAlphaComponent(0.5), for: .highlighted) + // MARK: - Details card (status / created / expires + collapsible technical) + + private func makeDetailsCard() -> UIView { + detailsCard.translatesAutoresizingMaskIntoConstraints = false + detailsCard.backgroundColor = UIColor.main.cellBackgroundColor + detailsCard.layer.cornerRadius = 12 + detailsCard.layer.masksToBounds = true + + let order = viewModel.order + + var visibleRows: [UIView] = [] + + let statusRow = makeDetailRow( + label: Localizable.shared.strings.asset_swap_status, + value: order.displayStatus().capitalized, + valueColor: viewModel.statusColor + ) + visibleRows.append(statusRow) + + let createdRow = makeDetailRow( + label: Localizable.shared.strings.asset_swap_created, + value: order.displayCreatedDate(), + valueColor: UIColor.white + ) + visibleRows.append(createdRow) + + if order.isActive() { + let expiresRow = makeDetailRow( + label: Localizable.shared.strings.asset_swap_expires_in, + value: order.displayExpiresIn(), + valueColor: viewModel.isExpiringSoon ? UIColor.main.coral : UIColor.white + ) + visibleRows.append(expiresRow) + } + + let primaryStack = UIStackView(arrangedSubviews: visibleRows) + primaryStack.translatesAutoresizingMaskIntoConstraints = false + primaryStack.axis = .vertical + primaryStack.spacing = 0 + addRowSeparators(to: primaryStack) + detailsCard.addSubview(primaryStack) + + // Disclosure + let disclosure = makeDisclosureRow() + detailsCard.addSubview(disclosure) + + // Technical section (initially hidden) + technicalContainer.translatesAutoresizingMaskIntoConstraints = false + technicalContainer.isHidden = true + technicalContainer.alpha = 0 + detailsCard.addSubview(technicalContainer) + + var techRows: [UIView] = [] + + if !order.sbbsID.isEmpty { + techRows.append(makeCopyableRow( + label: Localizable.shared.strings.asset_swap_peer_id, + value: order.sbbsID, + copyToast: Localizable.shared.strings.copied_to_clipboard + )) + } + techRows.append(makeCopyableRow( + label: Localizable.shared.strings.asset_swap_order_id, + value: order.orderID, + copyToast: Localizable.shared.strings.copied_to_clipboard + )) + + let techStack = UIStackView(arrangedSubviews: techRows) + techStack.translatesAutoresizingMaskIntoConstraints = false + techStack.axis = .vertical + techStack.spacing = 0 + addRowSeparators(to: techStack) + let techTopSeparator = UIView() + techTopSeparator.translatesAutoresizingMaskIntoConstraints = false + techTopSeparator.backgroundColor = UIColor.main.marineOriginal.withAlphaComponent(0.4) + + technicalContainer.addSubview(techTopSeparator) + technicalContainer.addSubview(techStack) + + NSLayoutConstraint.activate([ + techTopSeparator.leadingAnchor.constraint(equalTo: technicalContainer.leadingAnchor, constant: 16), + techTopSeparator.trailingAnchor.constraint(equalTo: technicalContainer.trailingAnchor, constant: -16), + techTopSeparator.topAnchor.constraint(equalTo: technicalContainer.topAnchor), + techTopSeparator.heightAnchor.constraint(equalToConstant: 1), + + techStack.leadingAnchor.constraint(equalTo: technicalContainer.leadingAnchor), + techStack.trailingAnchor.constraint(equalTo: technicalContainer.trailingAnchor), + techStack.topAnchor.constraint(equalTo: techTopSeparator.bottomAnchor), + techStack.bottomAnchor.constraint(equalTo: technicalContainer.bottomAnchor) + ]) + + NSLayoutConstraint.activate([ + primaryStack.leadingAnchor.constraint(equalTo: detailsCard.leadingAnchor), + primaryStack.trailingAnchor.constraint(equalTo: detailsCard.trailingAnchor), + primaryStack.topAnchor.constraint(equalTo: detailsCard.topAnchor, constant: 6), + + disclosure.leadingAnchor.constraint(equalTo: detailsCard.leadingAnchor), + disclosure.trailingAnchor.constraint(equalTo: detailsCard.trailingAnchor), + disclosure.topAnchor.constraint(equalTo: primaryStack.bottomAnchor), + + technicalContainer.leadingAnchor.constraint(equalTo: detailsCard.leadingAnchor), + technicalContainer.trailingAnchor.constraint(equalTo: detailsCard.trailingAnchor), + technicalContainer.topAnchor.constraint(equalTo: disclosure.bottomAnchor), + technicalContainer.bottomAnchor.constraint(equalTo: detailsCard.bottomAnchor, constant: -6) + ]) + + return detailsCard + } + + private func makeDetailRow(label: String, value: String, valueColor: UIColor) -> UIView { + let row = UIView() + row.translatesAutoresizingMaskIntoConstraints = false + + let labelView = UILabel() + labelView.translatesAutoresizingMaskIntoConstraints = false + labelView.font = RegularFont(size: 13) + labelView.textColor = UIColor.main.steelGrey + labelView.text = label + row.addSubview(labelView) + + let valueView = UILabel() + valueView.translatesAutoresizingMaskIntoConstraints = false + valueView.font = SemiboldFont(size: 13) + valueView.textColor = valueColor + valueView.text = value + valueView.textAlignment = .right + valueView.adjustsFontSizeToFitWidth = true + valueView.minimumScaleFactor = 0.7 + row.addSubview(valueView) + + NSLayoutConstraint.activate([ + labelView.leadingAnchor.constraint(equalTo: row.leadingAnchor, constant: 16), + labelView.centerYAnchor.constraint(equalTo: row.centerYAnchor), + + valueView.trailingAnchor.constraint(equalTo: row.trailingAnchor, constant: -16), + valueView.centerYAnchor.constraint(equalTo: row.centerYAnchor), + valueView.leadingAnchor.constraint(greaterThanOrEqualTo: labelView.trailingAnchor, constant: 12), + + row.heightAnchor.constraint(equalToConstant: 44) + ]) + + return row + } + + private func makeCopyableRow(label: String, value: String, copyToast: String) -> UIView { + let row = UIView() + row.translatesAutoresizingMaskIntoConstraints = false + + let labelView = UILabel() + labelView.translatesAutoresizingMaskIntoConstraints = false + labelView.font = RegularFont(size: 13) + labelView.textColor = UIColor.main.steelGrey + labelView.text = label + row.addSubview(labelView) + + let valueView = UILabel() + valueView.translatesAutoresizingMaskIntoConstraints = false + valueView.font = RegularFont(size: 11) + valueView.textColor = UIColor.main.steelGrey + valueView.text = value + valueView.numberOfLines = 2 + valueView.lineBreakMode = .byTruncatingMiddle + valueView.textAlignment = .right + row.addSubview(valueView) + + let copyButton = UIButton(type: .system) + copyButton.translatesAutoresizingMaskIntoConstraints = false + copyButton.setImage(UIImage(named: "iconCopyBlue"), for: .normal) + copyButton.tintColor = UIColor.main.brightTeal + copyButton.contentEdgeInsets = UIEdgeInsets(top: 4, left: 4, bottom: 4, right: 4) + copyButton.accessibilityLabel = copyToast + copyButton.addAction(UIAction { _ in + UIPasteboard.general.string = value + BMToast.show(text: copyToast) + }, for: .touchUpInside) + row.addSubview(copyButton) + + NSLayoutConstraint.activate([ + labelView.leadingAnchor.constraint(equalTo: row.leadingAnchor, constant: 16), + labelView.topAnchor.constraint(equalTo: row.topAnchor, constant: 12), + + copyButton.trailingAnchor.constraint(equalTo: row.trailingAnchor, constant: -10), + copyButton.centerYAnchor.constraint(equalTo: labelView.centerYAnchor), + copyButton.widthAnchor.constraint(equalToConstant: 28), + copyButton.heightAnchor.constraint(equalToConstant: 28), + + valueView.leadingAnchor.constraint(equalTo: labelView.trailingAnchor, constant: 12), + valueView.trailingAnchor.constraint(equalTo: copyButton.leadingAnchor, constant: -8), + valueView.centerYAnchor.constraint(equalTo: labelView.centerYAnchor), + + row.bottomAnchor.constraint(equalTo: valueView.bottomAnchor, constant: 12), + row.heightAnchor.constraint(greaterThanOrEqualToConstant: 48) + ]) + + return row + } + + private func addRowSeparators(to stack: UIStackView) { + let rows = stack.arrangedSubviews + for index in 1.. UIView { + let row = UIControl() + row.translatesAutoresizingMaskIntoConstraints = false + row.addTarget(self, action: #selector(toggleTechnical), for: .touchUpInside) + + disclosureLabel.translatesAutoresizingMaskIntoConstraints = false + disclosureLabel.font = SemiboldFont(size: 12) + disclosureLabel.textColor = UIColor.main.brightTeal + disclosureLabel.text = Localizable.shared.strings.asset_swap_show_details.uppercased() + row.addSubview(disclosureLabel) + + disclosureChevron.translatesAutoresizingMaskIntoConstraints = false + disclosureChevron.tintColor = UIColor.main.brightTeal + disclosureChevron.contentMode = .scaleAspectFit + row.addSubview(disclosureChevron) + + NSLayoutConstraint.activate([ + disclosureLabel.leadingAnchor.constraint(equalTo: row.leadingAnchor, constant: 16), + disclosureLabel.centerYAnchor.constraint(equalTo: row.centerYAnchor), + + disclosureChevron.leadingAnchor.constraint(equalTo: disclosureLabel.trailingAnchor, constant: 6), + disclosureChevron.centerYAnchor.constraint(equalTo: row.centerYAnchor), + disclosureChevron.widthAnchor.constraint(equalToConstant: 12), + disclosureChevron.heightAnchor.constraint(equalToConstant: 12), + + row.heightAnchor.constraint(equalToConstant: 44) + ]) + + return row + } + + @objc private func toggleTechnical() { + technicalExpanded.toggle() + + let strings = Localizable.shared.strings + let title = (technicalExpanded ? strings.asset_swap_hide_details : strings.asset_swap_show_details).uppercased() + + UIView.animate(withDuration: 0.25) { + self.disclosureLabel.text = title + self.disclosureChevron.transform = self.technicalExpanded + ? CGAffineTransform(rotationAngle: .pi) + : .identity + self.technicalContainer.isHidden = !self.technicalExpanded + self.technicalContainer.alpha = self.technicalExpanded ? 1 : 0 + self.view.layoutIfNeeded() + } + } + + // MARK: - Footer + + private func populateFooter(_ footer: UIView) { + if !viewModel.canAccept && !viewModel.canCancel { + return + } + + let separator = UIView() + separator.translatesAutoresizingMaskIntoConstraints = false + separator.backgroundColor = UIColor.main.marineOriginal.withAlphaComponent(0.4) + footer.addSubview(separator) + + let leftButton = makeOutlineButton(title: Localizable.shared.strings.cancel) + let rightButton: BMButton if viewModel.canCancel { - actionButton.backgroundColor = UIColor.main.red - actionButton.setTitle(Localizable.shared.strings.asset_swap_cancel_order.lowercased(), for: .normal) - actionButton.addTarget(self, action: #selector(onCancel), for: .touchUpInside) - } else if viewModel.canAccept { - actionButton.setTitle(Localizable.shared.strings.asset_swap_accept.lowercased(), for: .normal) - actionButton.addTarget(self, action: #selector(onAccept), for: .touchUpInside) + rightButton = BMButton.defaultButton( + frame: CGRect(x: 0, y: 0, width: 0, height: 44), + color: UIColor.main.red + ) + rightButton.setTitle(Localizable.shared.strings.asset_swap_cancel_order, for: .normal) + rightButton.setTitleColor(UIColor.white, for: .normal) + rightButton.setTitleColor(UIColor.white.withAlphaComponent(0.5), for: .highlighted) + rightButton.titleLabel?.font = BoldFont(size: 14) + rightButton.addTarget(self, action: #selector(onCancel), for: .touchUpInside) } else { - actionButton.isHidden = true + rightButton = BMButton.defaultButton( + frame: CGRect(x: 0, y: 0, width: 0, height: 44), + color: UIColor.main.brightTeal + ) + rightButton.setTitle(Localizable.shared.strings.asset_swap_accept, for: .normal) + rightButton.setTitleColor(UIColor.main.marineOriginal, for: .normal) + rightButton.setTitleColor(UIColor.main.marineOriginal.withAlphaComponent(0.5), for: .highlighted) + rightButton.titleLabel?.font = BoldFont(size: 14) + rightButton.addTarget(self, action: #selector(onAccept), for: .touchUpInside) } + + leftButton.addTarget(self, action: #selector(onLeftButton), for: .touchUpInside) + + leftButton.translatesAutoresizingMaskIntoConstraints = false + rightButton.translatesAutoresizingMaskIntoConstraints = false + footer.addSubview(leftButton) + footer.addSubview(rightButton) + + NSLayoutConstraint.activate([ + separator.leadingAnchor.constraint(equalTo: footer.leadingAnchor), + separator.trailingAnchor.constraint(equalTo: footer.trailingAnchor), + separator.topAnchor.constraint(equalTo: footer.topAnchor), + separator.heightAnchor.constraint(equalToConstant: 1), + + leftButton.leadingAnchor.constraint(equalTo: footer.leadingAnchor, constant: defaultX), + leftButton.topAnchor.constraint(equalTo: separator.bottomAnchor, constant: 16), + leftButton.heightAnchor.constraint(equalToConstant: 44), + + rightButton.trailingAnchor.constraint(equalTo: footer.trailingAnchor, constant: -defaultX), + rightButton.topAnchor.constraint(equalTo: leftButton.topAnchor), + rightButton.heightAnchor.constraint(equalToConstant: 44), + + rightButton.leadingAnchor.constraint(equalTo: leftButton.trailingAnchor, constant: defaultX), + leftButton.widthAnchor.constraint(equalTo: rightButton.widthAnchor), + + footer.bottomAnchor.constraint(equalTo: leftButton.bottomAnchor, constant: 12) + ]) + } + + private func makeOutlineButton(title: String) -> BMButton { + let button = BMButton(frame: CGRect(x: 0, y: 0, width: 0, height: 44)) + button.cornerRadius = 22 + button.layer.borderWidth = 1 + button.layer.borderColor = UIColor.white.cgColor + button.setTitle(title, for: .normal) + button.setTitleColor(UIColor.white, for: .normal) + button.setTitleColor(UIColor.white.withAlphaComponent(0.5), for: .highlighted) + button.titleLabel?.font = BoldFont(size: 14) + button.adjustFontSize = true + button.titleEdgeInsets = .zero + button.imageEdgeInsets = .zero + return button + } + + // MARK: - Actions + + @objc private func onLeftButton() { + navigationController?.popViewController(animated: true) } @objc private func onCancel() { @@ -156,6 +643,10 @@ class AssetSwapDetailsViewController: BaseViewController { } @objc private func onAccept() { + if let error = viewModel.validationError { + alert(message: error) + return + } if viewModel.accept() { navigationController?.popViewController(animated: true) } diff --git a/Resources/cs.lproj/Localizable.strings b/Resources/cs.lproj/Localizable.strings index e72f16e7..26c43145 100644 --- a/Resources/cs.lproj/Localizable.strings +++ b/Resources/cs.lproj/Localizable.strings @@ -628,6 +628,12 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; +"asset_swap_created" = "Created"; +"asset_swap_expires_in" = "Expires in"; +"asset_swap_peer_id" = "Peer ID"; +"asset_swap_order_id" = "Order ID"; +"asset_swap_show_details" = "Show technical details"; +"asset_swap_hide_details" = "Hide technical details"; // MARK: Split Coins diff --git a/Resources/en.lproj/Localizable.strings b/Resources/en.lproj/Localizable.strings index f706ebe3..d4fb0af9 100644 --- a/Resources/en.lproj/Localizable.strings +++ b/Resources/en.lproj/Localizable.strings @@ -738,6 +738,12 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; +"asset_swap_created" = "Created"; +"asset_swap_expires_in" = "Expires in"; +"asset_swap_peer_id" = "Peer ID"; +"asset_swap_order_id" = "Order ID"; +"asset_swap_show_details" = "Show technical details"; +"asset_swap_hide_details" = "Hide technical details"; "sign_message" = "Sign message"; "verify_message" = "Verify message"; diff --git a/Resources/es.lproj/Localizable.strings b/Resources/es.lproj/Localizable.strings index 39458359..f93cf515 100644 --- a/Resources/es.lproj/Localizable.strings +++ b/Resources/es.lproj/Localizable.strings @@ -628,6 +628,12 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; +"asset_swap_created" = "Created"; +"asset_swap_expires_in" = "Expires in"; +"asset_swap_peer_id" = "Peer ID"; +"asset_swap_order_id" = "Order ID"; +"asset_swap_show_details" = "Show technical details"; +"asset_swap_hide_details" = "Hide technical details"; // MARK: Split Coins diff --git a/Resources/fi-FI.lproj/Localizable.strings b/Resources/fi-FI.lproj/Localizable.strings index e72f16e7..26c43145 100644 --- a/Resources/fi-FI.lproj/Localizable.strings +++ b/Resources/fi-FI.lproj/Localizable.strings @@ -628,6 +628,12 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; +"asset_swap_created" = "Created"; +"asset_swap_expires_in" = "Expires in"; +"asset_swap_peer_id" = "Peer ID"; +"asset_swap_order_id" = "Order ID"; +"asset_swap_show_details" = "Show technical details"; +"asset_swap_hide_details" = "Hide technical details"; // MARK: Split Coins diff --git a/Resources/fr.lproj/Localizable.strings b/Resources/fr.lproj/Localizable.strings index e72f16e7..26c43145 100644 --- a/Resources/fr.lproj/Localizable.strings +++ b/Resources/fr.lproj/Localizable.strings @@ -628,6 +628,12 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; +"asset_swap_created" = "Created"; +"asset_swap_expires_in" = "Expires in"; +"asset_swap_peer_id" = "Peer ID"; +"asset_swap_order_id" = "Order ID"; +"asset_swap_show_details" = "Show technical details"; +"asset_swap_hide_details" = "Hide technical details"; // MARK: Split Coins diff --git a/Resources/ko.lproj/Localizable.strings b/Resources/ko.lproj/Localizable.strings index e72f16e7..26c43145 100644 --- a/Resources/ko.lproj/Localizable.strings +++ b/Resources/ko.lproj/Localizable.strings @@ -628,6 +628,12 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; +"asset_swap_created" = "Created"; +"asset_swap_expires_in" = "Expires in"; +"asset_swap_peer_id" = "Peer ID"; +"asset_swap_order_id" = "Order ID"; +"asset_swap_show_details" = "Show technical details"; +"asset_swap_hide_details" = "Hide technical details"; // MARK: Split Coins diff --git a/Resources/nl.lproj/Localizable.strings b/Resources/nl.lproj/Localizable.strings index 39458359..f93cf515 100644 --- a/Resources/nl.lproj/Localizable.strings +++ b/Resources/nl.lproj/Localizable.strings @@ -628,6 +628,12 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; +"asset_swap_created" = "Created"; +"asset_swap_expires_in" = "Expires in"; +"asset_swap_peer_id" = "Peer ID"; +"asset_swap_order_id" = "Order ID"; +"asset_swap_show_details" = "Show technical details"; +"asset_swap_hide_details" = "Hide technical details"; // MARK: Split Coins diff --git a/Resources/ru.lproj/Localizable.strings b/Resources/ru.lproj/Localizable.strings index e72f16e7..26c43145 100644 --- a/Resources/ru.lproj/Localizable.strings +++ b/Resources/ru.lproj/Localizable.strings @@ -628,6 +628,12 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; +"asset_swap_created" = "Created"; +"asset_swap_expires_in" = "Expires in"; +"asset_swap_peer_id" = "Peer ID"; +"asset_swap_order_id" = "Order ID"; +"asset_swap_show_details" = "Show technical details"; +"asset_swap_hide_details" = "Hide technical details"; // MARK: Split Coins diff --git a/Resources/sv-SE.lproj/Localizable.strings b/Resources/sv-SE.lproj/Localizable.strings index 4b6d952d..b72129cd 100644 --- a/Resources/sv-SE.lproj/Localizable.strings +++ b/Resources/sv-SE.lproj/Localizable.strings @@ -672,6 +672,12 @@ "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; +"asset_swap_created" = "Created"; +"asset_swap_expires_in" = "Expires in"; +"asset_swap_peer_id" = "Peer ID"; +"asset_swap_order_id" = "Order ID"; +"asset_swap_show_details" = "Show technical details"; +"asset_swap_hide_details" = "Hide technical details"; // MARK: Split Coins diff --git a/Resources/sv.lproj/Localizable.strings b/Resources/sv.lproj/Localizable.strings index e72f16e7..26c43145 100644 --- a/Resources/sv.lproj/Localizable.strings +++ b/Resources/sv.lproj/Localizable.strings @@ -628,6 +628,12 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; +"asset_swap_created" = "Created"; +"asset_swap_expires_in" = "Expires in"; +"asset_swap_peer_id" = "Peer ID"; +"asset_swap_order_id" = "Order ID"; +"asset_swap_show_details" = "Show technical details"; +"asset_swap_hide_details" = "Hide technical details"; // MARK: Split Coins diff --git a/Resources/th.lproj/Localizable.strings b/Resources/th.lproj/Localizable.strings index e72f16e7..26c43145 100644 --- a/Resources/th.lproj/Localizable.strings +++ b/Resources/th.lproj/Localizable.strings @@ -628,6 +628,12 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; +"asset_swap_created" = "Created"; +"asset_swap_expires_in" = "Expires in"; +"asset_swap_peer_id" = "Peer ID"; +"asset_swap_order_id" = "Order ID"; +"asset_swap_show_details" = "Show technical details"; +"asset_swap_hide_details" = "Hide technical details"; // MARK: Split Coins diff --git a/Resources/tr.lproj/Localizable.strings b/Resources/tr.lproj/Localizable.strings index e72f16e7..26c43145 100644 --- a/Resources/tr.lproj/Localizable.strings +++ b/Resources/tr.lproj/Localizable.strings @@ -628,6 +628,12 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; +"asset_swap_created" = "Created"; +"asset_swap_expires_in" = "Expires in"; +"asset_swap_peer_id" = "Peer ID"; +"asset_swap_order_id" = "Order ID"; +"asset_swap_show_details" = "Show technical details"; +"asset_swap_hide_details" = "Hide technical details"; // MARK: Split Coins diff --git a/Resources/vi.lproj/Localizable.strings b/Resources/vi.lproj/Localizable.strings index e72f16e7..26c43145 100644 --- a/Resources/vi.lproj/Localizable.strings +++ b/Resources/vi.lproj/Localizable.strings @@ -628,6 +628,12 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; +"asset_swap_created" = "Created"; +"asset_swap_expires_in" = "Expires in"; +"asset_swap_peer_id" = "Peer ID"; +"asset_swap_order_id" = "Order ID"; +"asset_swap_show_details" = "Show technical details"; +"asset_swap_hide_details" = "Hide technical details"; // MARK: Split Coins diff --git a/Resources/zh-Hans.lproj/Localizable.strings b/Resources/zh-Hans.lproj/Localizable.strings index 0a35dfbf..9a6b45dd 100644 --- a/Resources/zh-Hans.lproj/Localizable.strings +++ b/Resources/zh-Hans.lproj/Localizable.strings @@ -627,6 +627,12 @@ and never kept on the blockchain."; "asset_swap_insufficient_funds" = "Insufficient funds for this swap"; "asset_swap_same_asset_error" = "Send and receive assets must differ"; "asset_swap_confirm_cancel" = "Cancel this offer?"; +"asset_swap_created" = "Created"; +"asset_swap_expires_in" = "Expires in"; +"asset_swap_peer_id" = "Peer ID"; +"asset_swap_order_id" = "Order ID"; +"asset_swap_show_details" = "Show technical details"; +"asset_swap_hide_details" = "Hide technical details"; // MARK: Split Coins From 2919cf38fa76e16b79340e077d3dc1e676fbdac1 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sun, 10 May 2026 11:05:58 +0200 Subject: [PATCH 31/48] disable scroll/bobbing in the sidebar --- .../ViewControllers/Main/Menu/LeftMenuViewController.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift b/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift index ae0406fa..9b09f5af 100644 --- a/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift +++ b/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift @@ -75,6 +75,9 @@ class LeftMenuViewController: BaseTableViewController { tableView.delegate = self tableView.dataSource = self + tableView.isScrollEnabled = false + tableView.bounces = false + tableView.alwaysBounceVertical = false var height:CGFloat = 180 var offset:CGFloat = 20 From f69af11e446c8c093ded2204c41f198fcd2fcfd8 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sun, 10 May 2026 14:04:57 +0200 Subject: [PATCH 32/48] feat(settings): restructure Node settings + add Peers screen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Settings → Node now opens a grouped list (Node type / Node peers / Owner key); Owner Key relocated out of Privacy. New NodePeersViewController shows active-node status + last-seen and the random-pool peers in random mode. Adds +[AppModel defaultPeerAddresses] and lastConnectionChangedAt on the bridge. --- BeamWallet.xcodeproj/project.pbxproj | 27 +-- BeamWallet/BeamSDK/AppModel.h | 3 + BeamWallet/BeamSDK/AppModel.mm | 36 ++-- .../Model/Settings/SettingsViewModel.swift | 48 +++-- BeamWallet/Protocols/LocalizableStrings.swift | 8 + .../Settings/NodePeersViewController.swift | 182 ++++++++++++++++++ .../Settings/SelectNodeViewController.swift | 8 +- .../Settings/SettingsViewController.swift | 2 +- Resources/cs.lproj/Localizable.strings | 8 + Resources/en.lproj/Localizable.strings | 8 + Resources/es.lproj/Localizable.strings | 8 + Resources/fi-FI.lproj/Localizable.strings | 8 + Resources/fr.lproj/Localizable.strings | 8 + Resources/ko.lproj/Localizable.strings | 8 + Resources/nl.lproj/Localizable.strings | 8 + Resources/ru.lproj/Localizable.strings | 8 + Resources/sv-SE.lproj/Localizable.strings | 8 + Resources/sv.lproj/Localizable.strings | 8 + Resources/th.lproj/Localizable.strings | 8 + Resources/tr.lproj/Localizable.strings | 8 + Resources/vi.lproj/Localizable.strings | 8 + Resources/zh-Hans.lproj/Localizable.strings | 8 + 22 files changed, 369 insertions(+), 57 deletions(-) create mode 100644 BeamWallet/ViewControllers/Main/Settings/NodePeersViewController.swift diff --git a/BeamWallet.xcodeproj/project.pbxproj b/BeamWallet.xcodeproj/project.pbxproj index d071f8fe..f9aeaa05 100644 --- a/BeamWallet.xcodeproj/project.pbxproj +++ b/BeamWallet.xcodeproj/project.pbxproj @@ -1409,6 +1409,7 @@ B4FE33729385D12603589437 /* AssetSwapDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A467070BE6633F1B715DAD /* AssetSwapDetailsViewController.swift */; }; B5E7CC16D70E7D12DD9315FC /* MessengerConversationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A439F6A64EB61AD3DF6945B /* MessengerConversationViewModel.swift */; }; B6037162941C5AB71A356FF3 /* AssetSwapDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A467070BE6633F1B715DAD /* AssetSwapDetailsViewController.swift */; }; + B93707F60996A4898F0B88E2 /* NodePeersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13188DF7FB2332EDBB6929F5 /* NodePeersViewController.swift */; }; BCB254DF739D2FA8FF92C672 /* AssetSwapDetailsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92C9307A797CCA7FEAABBFD8 /* AssetSwapDetailsViewModel.swift */; }; BE96C4A71A3D47721D003ACF /* AssetSwapOrderCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CDD341D6CFC3AD26C3F4374 /* AssetSwapOrderCell.swift */; }; BFF9839E0FE16D5A8645D394 /* SplitCoinsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A5FD8229312777D1D2BB813 /* SplitCoinsViewController.swift */; }; @@ -1416,6 +1417,7 @@ C6FB138B2A261CBC43626204 /* SplitCoinsStripeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 603CF8C20147C7F9E087C33D /* SplitCoinsStripeView.swift */; }; CA7E68B52D3092D76CBACF7C /* SplitCoinsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A5FD8229312777D1D2BB813 /* SplitCoinsViewController.swift */; }; CCB34673E007AADB0D649F2C /* libdex_board.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F426BB6F15C2E08A3E81B87D /* libdex_board.a */; }; + CDEA498CC695D89B35B0678E /* NodePeersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13188DF7FB2332EDBB6929F5 /* NodePeersViewController.swift */; }; DAFECCA6179EA6FE92C0ABC7 /* SplitCoinPreviewCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B33EC6A5FD1571ED9D1EFFB /* SplitCoinPreviewCard.swift */; }; DEF279257A2A5B949FBA8B01 /* libdex.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D7E7F685327E2CAB9E7C69 /* libdex.a */; }; DFC07B98C98F293C31F86A8C /* MessengerChatListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DFF1052A687C5F2265E618F /* MessengerChatListViewController.swift */; }; @@ -1430,6 +1432,7 @@ F0F0F0F0AAAA0002ABCD0001 /* AssetSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */; }; F0F0F0F0AAAA0003ABCD0001 /* AssetSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */; }; F0F0F0F0AAAA0004ABCD0001 /* AssetSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */; }; + F5BD7F278CC7CCFADF63E7AF /* NodePeersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13188DF7FB2332EDBB6929F5 /* NodePeersViewController.swift */; }; F9C79FBC040297C8E235C660 /* libdex_board.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F426BB6F15C2E08A3E81B87D /* libdex_board.a */; }; FD87FA1DDA9C27F19451AB4B /* MessengerBubbleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E08B41CEDA5A06EBFD775E76 /* MessengerBubbleCell.swift */; }; /* End PBXBuildFile section */ @@ -1512,17 +1515,18 @@ /* Begin PBXFileReference section */ 024109A68A03B9C8D11B9895 /* Pods-BeamWallet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeamWallet.release.xcconfig"; path = "Target Support Files/Pods-BeamWallet/Pods-BeamWallet.release.xcconfig"; sourceTree = ""; }; + 13188DF7FB2332EDBB6929F5 /* NodePeersViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NodePeersViewController.swift; sourceTree = ""; }; 13CF5C205DC060CADA96F025 /* MessengerNewChatViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerNewChatViewController.swift; sourceTree = ""; }; 18CF009621EA8E5970DA1D87 /* Pods_BeamWalletMasterNet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_BeamWalletMasterNet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1A5FD8229312777D1D2BB813 /* SplitCoinsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SplitCoinsViewController.swift; sourceTree = ""; }; - 20B7F5341703980CD2D3941F /* BMInstantMessage.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = BMInstantMessage.mm; sourceTree = ""; }; + 20B7F5341703980CD2D3941F /* BMInstantMessage.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; path = BMInstantMessage.mm; sourceTree = ""; }; 21968CB26C3B977852247761 /* AssetSwapsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSwapsViewController.swift; sourceTree = ""; }; 35296D58A729F092AFF0C821 /* BMChat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BMChat.h; sourceTree = ""; }; 36A85446EDA45DA6335930C5 /* Pods_BeamWalletTestNet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_BeamWalletTestNet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 390F813D5F08AC3C0F47183F /* MessengerChatCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerChatCell.swift; sourceTree = ""; }; 3B5894AC3136298FE0B7E8E3 /* Pods_BeamWallet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_BeamWallet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 456B838BA83C92E05D36B091 /* Pods-BeamWalletTestNet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeamWalletTestNet.release.xcconfig"; path = "Target Support Files/Pods-BeamWalletTestNet/Pods-BeamWalletTestNet.release.xcconfig"; sourceTree = ""; }; - 46577647151F6240CBA9CE2D /* BMDexOrder.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = BMDexOrder.mm; sourceTree = ""; }; + 46577647151F6240CBA9CE2D /* BMDexOrder.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; path = BMDexOrder.mm; sourceTree = ""; }; 46CAE6BC4C48E30E26AE304F /* BMInstantMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BMInstantMessage.h; sourceTree = ""; }; 4A6A43055CFB5C5820B099A1 /* AssetSwapCreateViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSwapCreateViewController.swift; sourceTree = ""; }; 4B33EC6A5FD1571ED9D1EFFB /* SplitCoinPreviewCard.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SplitCoinPreviewCard.swift; sourceTree = ""; }; @@ -1534,7 +1538,7 @@ 7A439F6A64EB61AD3DF6945B /* MessengerConversationViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerConversationViewModel.swift; sourceTree = ""; }; 7CDD341D6CFC3AD26C3F4374 /* AssetSwapOrderCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSwapOrderCell.swift; sourceTree = ""; }; 8865BEE3DDBE9806B38DDE04 /* AssetUTXOSectionHeaderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetUTXOSectionHeaderView.swift; sourceTree = ""; }; - 8C5EB5519EB54866BA8DB9A4 /* BMChat.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = BMChat.mm; sourceTree = ""; }; + 8C5EB5519EB54866BA8DB9A4 /* BMChat.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; path = BMChat.mm; sourceTree = ""; }; 8DFF1052A687C5F2265E618F /* MessengerChatListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerChatListViewController.swift; sourceTree = ""; }; 9205284E237B11F1001F8E31 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = ""; }; 9205284F237B11F1001F8E31 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -2232,7 +2236,6 @@ 4A6A43055CFB5C5820B099A1 /* AssetSwapCreateViewController.swift */, 75A467070BE6633F1B715DAD /* AssetSwapDetailsViewController.swift */, ); - name = AssetSwaps; path = AssetSwaps; sourceTree = ""; }; @@ -2245,7 +2248,6 @@ E08B41CEDA5A06EBFD775E76 /* MessengerBubbleCell.swift */, 390F813D5F08AC3C0F47183F /* MessengerChatCell.swift */, ); - name = Messenger; path = Messenger; sourceTree = ""; }; @@ -2256,7 +2258,6 @@ B5B1E2B05648164FC49C46F7 /* AssetSwapCreateViewModel.swift */, 92C9307A797CCA7FEAABBFD8 /* AssetSwapDetailsViewModel.swift */, ); - name = AssetSwaps; path = AssetSwaps; sourceTree = ""; }; @@ -2653,6 +2654,7 @@ 92C00D2222A00E2A00DDB579 /* OwnerKeyViewController.xib */, 92B7DA2E22D63EFB00D4F88B /* TrustedNodeViewController.swift */, 92302046262F22C5001A1883 /* SelectNodeViewController.swift */, + 13188DF7FB2332EDBB6929F5 /* NodePeersViewController.swift */, ); path = Settings; sourceTree = ""; @@ -3413,7 +3415,6 @@ AFF464435B3D65DCFC432FA3 /* MessengerChatListViewModel.swift */, 7A439F6A64EB61AD3DF6945B /* MessengerConversationViewModel.swift */, ); - name = Messenger; path = Messenger; sourceTree = ""; }; @@ -3422,7 +3423,6 @@ children = ( 7CDD341D6CFC3AD26C3F4374 /* AssetSwapOrderCell.swift */, ); - name = Cells; path = Cells; sourceTree = ""; }; @@ -4431,6 +4431,7 @@ 0EC9234AAD2DC0A1BF7600B4 /* AssetUTXOSectionHeaderView.swift in Sources */, C6FB138B2A261CBC43626204 /* SplitCoinsStripeView.swift in Sources */, AC3CF90BF3C1ED7E2D19D65A /* SplitCoinPreviewCard.swift in Sources */, + CDEA498CC695D89B35B0678E /* NodePeersViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4779,6 +4780,7 @@ 5101D1DB95B6BECFE333B53C /* AssetUTXOSectionHeaderView.swift in Sources */, 6854C506C6836F88B8F8484E /* SplitCoinsStripeView.swift in Sources */, ECF8F9E33148D1833480ADFA /* SplitCoinPreviewCard.swift in Sources */, + F5BD7F278CC7CCFADF63E7AF /* NodePeersViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5127,6 +5129,7 @@ 532955652A405010EC21607C /* AssetUTXOSectionHeaderView.swift in Sources */, 6EA6E49364A07F3740D84921 /* SplitCoinsStripeView.swift in Sources */, DAFECCA6179EA6FE92C0ABC7 /* SplitCoinPreviewCard.swift in Sources */, + B93707F60996A4898F0B88E2 /* NodePeersViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5258,7 +5261,7 @@ GCC_WARN_UNUSED_FUNCTION = NO; GCC_WARN_UNUSED_VALUE = NO; GCC_WARN_UNUSED_VARIABLE = NO; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -5324,7 +5327,7 @@ GCC_WARN_UNUSED_FUNCTION = NO; GCC_WARN_UNUSED_VALUE = NO; GCC_WARN_UNUSED_VARIABLE = NO; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; OTHER_LDFLAGS = "-w"; @@ -5371,7 +5374,7 @@ "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/keykeeper\"", ); INFOPLIST_FILE = "$(SRCROOT)/Resources/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -5452,7 +5455,7 @@ "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/keykeeper\"", ); INFOPLIST_FILE = "$(SRCROOT)/Resources/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/BeamWallet/BeamSDK/AppModel.h b/BeamWallet/BeamSDK/AppModel.h index 9b53b503..bcccd330 100644 --- a/BeamWallet/BeamSDK/AppModel.h +++ b/BeamWallet/BeamSDK/AppModel.h @@ -145,6 +145,8 @@ typedef void(^ExportCSVBlock)(NSString * _Nonnull data, NSURL * _Nonnull url); @property (nonatomic, strong) NSTimer * _Nullable connectionTimer; @property (nonatomic, strong) NSTimer * _Nullable connectionAfterOnlineTimer; +@property (nonatomic, strong, readonly) NSDate * _Nullable lastConnectionChangedAt; + @property (nonatomic, strong) NSString * _Nullable addressGeneratedID; -(void)handleTimer; @@ -153,6 +155,7 @@ typedef void(^ExportCSVBlock)(NSString * _Nonnull data, NSURL * _Nonnull url); +(AppModel*_Nonnull)sharedManager; +(NSString*_Nonnull)chooseRandomNode; ++(NSArray*_Nonnull)defaultPeerAddresses; // delegates -(void)addDelegate:(id_Nullable) delegate; diff --git a/BeamWallet/BeamSDK/AppModel.mm b/BeamWallet/BeamSDK/AppModel.mm index 7a5ca989..73264945 100644 --- a/BeamWallet/BeamSDK/AppModel.mm +++ b/BeamWallet/BeamSDK/AppModel.mm @@ -358,28 +358,33 @@ +(NSString*_Nonnull)chooseRandomNodeWithoutNodes:(NSArray*)nodes { return @""; } -+(NSString*_Nonnull)chooseRandomNode { ++(NSArray*_Nonnull)defaultPeerAddresses { // Settings.init calls this class method before AppModel.init runs, so the // BEAM library hasn't been initialized yet — install Rules first. beam::Rules::s_pInstance = &getConfiguredRules(); auto peers = getDefaultPeers(); - - NSMutableArray *array = [NSMutableArray array]; - + + NSMutableArray *array = [NSMutableArray array]; + for (const auto& item : peers) { NSString *address = [NSString stringWithUTF8String:item.c_str()]; - if([address rangeOfString:@"shanghai"].location == NSNotFound - && [address rangeOfString:@"raskul"].location == NSNotFound - && [address rangeOfString:@"45."].location == NSNotFound) { + if ([address rangeOfString:@"shanghai"].location == NSNotFound + && [address rangeOfString:@"raskul"].location == NSNotFound + && [address rangeOfString:@"45."].location == NSNotFound) { [array addObject:address]; } } - - srand([[NSDate date] timeIntervalSince1970]); - - int inx = rand()%[array count]; - - return [array objectAtIndex:inx]; + + return array; +} + ++(NSString*_Nonnull)chooseRandomNode { + NSArray *array = [AppModel defaultPeerAddresses]; + if (array.count == 0) { + return @""; + } + srand([[NSDate date] timeIntervalSince1970]); + return array[rand() % array.count]; } -(void)setWalletAddresses:(NSMutableArray *)walletAddresses { @@ -499,8 +504,11 @@ -(void)setIsConnected:(BOOL)isConnected { [self getWalletStatus]; [self getUTXO]; } + if (_isConnected != isConnected) { + _lastConnectionChangedAt = [NSDate date]; + } _isConnected = isConnected; - + if (wallet != nil) { _isConfigured = wallet->isConnectionTrusted(); } diff --git a/BeamWallet/Model/Settings/SettingsViewModel.swift b/BeamWallet/Model/Settings/SettingsViewModel.swift index 2a74ae6d..82383ff1 100644 --- a/BeamWallet/Model/Settings/SettingsViewModel.swift +++ b/BeamWallet/Model/Settings/SettingsViewModel.swift @@ -69,6 +69,18 @@ class SettingsViewModel: NSObject { case confirmations = 37 case sign_message = 38 case verify_message = 39 + case node_peers = 40 + case node_type = 41 + } + + private static func currentNodeTypeLabel() -> String { + if Settings.sharedManager().isNodeProtocolEnabled { + return Localizable.shared.strings.mobile_node_title + } + if !Settings.sharedManager().connectToRandomNode { + return Localizable.shared.strings.own_node_title + } + return Localizable.shared.strings.random_node_title } class SettingsItem { @@ -254,27 +266,10 @@ class SettingsViewModel: NSObject { items.append(section_1) case .node: var section_0 = [SettingsItem]() - section_0.append(SettingsItem(title: Localizable.shared.strings.random_node, detail: nil, isSwitch: Settings.sharedManager().connectToRandomNode, type: .random_node, hasArrow: false)) - section_0.append(SettingsItem(title: Localizable.shared.strings.ip_port, detail: Settings.sharedManager().nodeAddress, isSwitch: nil, type: .ip_port, hasArrow: true)) + section_0.append(SettingsItem(title: Localizable.shared.strings.node_type, detail: SettingsViewModel.currentNodeTypeLabel(), isSwitch: nil, type: .node_type, hasArrow: true)) + section_0.append(SettingsItem(title: Localizable.shared.strings.node_peers, detail: nil, isSwitch: nil, type: .node_peers, hasArrow: true)) + section_0.append(SettingsItem(title: Localizable.shared.strings.show_owner_key, detail: nil, isSwitch: nil, type: .show_owner_key, hasArrow: true)) items.append(section_0) - - let detail = NSMutableAttributedString(string: "\(Localizable.shared.strings.mobile_node_title)\nspace\n\(Localizable.shared.strings.mobile_node_text)") - - let rangeDetail = (detail.string as NSString).range(of: String(Localizable.shared.strings.mobile_node_text)) - let spaceRange = (detail.string as NSString).range(of: String("space")) - - detail.addAttribute(NSAttributedString.Key.font, value: ItalicFont(size: 14), range: rangeDetail) - detail.addAttribute(NSAttributedString.Key.foregroundColor, value: Settings.sharedManager().isDarkMode ? UIColor.main.steel : UIColor.main.steelGrey, range: rangeDetail) - - detail.addAttribute(NSAttributedString.Key.font, value: LightFont(size: 5), range: spaceRange) - detail.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.clear, range: spaceRange) - - let mobileItem = SettingsItem(title: Localizable.shared.strings.mobile_node_title, detail: nil, isSwitch: Settings.sharedManager().isNodeProtocolEnabled, type: .mobile_node, hasArrow: false) - mobileItem.titleAttributed = detail - - var section_1 = [SettingsItem]() - section_1.append(mobileItem) - items.append(section_1) case .privacy: var section_0 = [SettingsItem]() section_0.append(SettingsItem(title: Localizable.shared.strings.ask_password, detail: nil, isSwitch: Settings.sharedManager().isNeedaskPasswordForSend, type: .ask_password, hasArrow: false)) @@ -286,10 +281,6 @@ class SettingsViewModel: NSObject { if OnboardManager.shared.isSkipedSeed() == true { section_0.append(SettingsItem(title: Localizable.shared.strings.complete_seed_verification, detail: nil, isSwitch: nil, type: .verification, hasArrow: true)) } - section_0.append(SettingsItem(title: Localizable.shared.strings.show_owner_key, detail: nil, isSwitch: nil, type: .show_owner_key, hasArrow: true)) - // if OnboardManager.shared.isSkipedSeed() == true { - // section_0.append(SettingsItem(title: Localizable.shared.strings.show_seed_phrase, detail: nil, isSwitch: nil, type: .show_seed, hasArrow: true)) - // } section_0.append(SettingsItem(title: Localizable.shared.strings.change_password, detail: nil, isSwitch: nil, type: .change_password, hasArrow: true)) items.append(section_0) case .utilites: @@ -351,12 +342,12 @@ class SettingsViewModel: NSObject { public func didSelectItem(item: SettingsItem) { switch item.type { - case .general, .privacy, .tags, .utilites: + case .general, .privacy, .tags, .utilites, .node: if let top = UIApplication.getTopMostViewController() { let vc = SettingsViewController(type: SettingsType(rawValue: item.type.rawValue)!) top.pushViewController(vc: vc) } - case .node: + case .node_type: if let top = UIApplication.getTopMostViewController() { let vc = SelectNodeViewController() top.pushViewController(vc: vc) @@ -409,6 +400,11 @@ class SettingsViewModel: NSObject { onShowUTXO() case .confirmations: onConfirmationsScreen() + case .node_peers: + if let top = UIApplication.getTopMostViewController() { + let vc = NodePeersViewController() + top.pushViewController(vc: vc) + } default: return } diff --git a/BeamWallet/Protocols/LocalizableStrings.swift b/BeamWallet/Protocols/LocalizableStrings.swift index bc363429..8392d7ee 100644 --- a/BeamWallet/Protocols/LocalizableStrings.swift +++ b/BeamWallet/Protocols/LocalizableStrings.swift @@ -340,6 +340,14 @@ class LocalizableStrings : NSObject { var manual_restore_warning = "manual_restore_warning".localized var search_transactions = "search_transactions".localized var random_node = "random_node".localized + var node_peers = "node_peers".localized + var node_type = "node_type".localized + var node_peer_active = "node_peer_active".localized + var node_peer_pool = "node_peer_pool".localized + var node_peer_connected = "node_peer_connected".localized + var node_peer_connecting = "node_peer_connecting".localized + var node_peer_disconnected = "node_peer_disconnected".localized + var node_peer_last_seen = "node_peer_last_seen".localized var restore_create_title = "restore_create_title".localized var restore_create_text = "restore_create_text".localized diff --git a/BeamWallet/ViewControllers/Main/Settings/NodePeersViewController.swift b/BeamWallet/ViewControllers/Main/Settings/NodePeersViewController.swift new file mode 100644 index 00000000..e1428abd --- /dev/null +++ b/BeamWallet/ViewControllers/Main/Settings/NodePeersViewController.swift @@ -0,0 +1,182 @@ +// +// NodePeersViewController.swift +// BeamWallet +// +// Copyright 2026 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +private class NodePeerCell: UITableViewCell { + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: .subtitle, reuseIdentifier: reuseIdentifier) + } + required init?(coder: NSCoder) { + fatalError(Localizable.shared.strings.fatalInitCoderError) + } +} + +class NodePeersViewController: BaseTableViewController { + + private static let cellId = "NodePeerCell" + + private var poolAddresses: [String] = [] + + private static let lastSeenFormatter: DateFormatter = { + let f = DateFormatter() + f.dateStyle = .none + f.timeStyle = .medium + return f + }() + + override var tableStyle: UITableView.Style { + get { return .grouped } + set { super.tableStyle = newValue } + } + + override func viewDidLoad() { + super.viewDidLoad() + + setGradientTopBar(mainColor: UIColor.main.peacockBlue, addedStatusView: AppModel.sharedManager().isLoggedin) + title = Localizable.shared.strings.node_peers + + tableView.register(NodePeerCell.self, forCellReuseIdentifier: NodePeersViewController.cellId) + tableView.dataSource = self + tableView.delegate = self + tableView.backgroundColor = UIColor.main.marine + tableView.separatorColor = UIColor.white.withAlphaComponent(0.13) + tableView.separatorStyle = .singleLine + tableView.contentInsetAdjustmentBehavior = .never + tableView.sectionHeaderHeight = UITableView.automaticDimension + tableView.estimatedSectionHeaderHeight = 30 + tableView.sectionFooterHeight = 15 + tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: 20)) + + reloadPool() + AppModel.sharedManager().addDelegate(self) + } + + override func viewDidDisappear(_ animated: Bool) { + super.viewDidDisappear(animated) + + if isMovingFromParent { + AppModel.sharedManager().removeDelegate(self) + } + } + + private func reloadPool() { + if Settings.sharedManager().connectToRandomNode { + let active = Settings.sharedManager().nodeAddress ?? "" + poolAddresses = AppModel.defaultPeerAddresses().filter { $0 != active } + } else { + poolAddresses = [] + } + } + + private func statusText() -> (text: String, color: UIColor) { + let app = AppModel.sharedManager() + if app.isConnected { + return (Localizable.shared.strings.node_peer_connected, UIColor.main.brightTeal) + } + if app.isConnecting { + return (Localizable.shared.strings.node_peer_connecting, UIColor.main.heliotrope) + } + return (Localizable.shared.strings.node_peer_disconnected, UIColor.main.coral) + } + + private func lastSeenText() -> String? { + guard let date = AppModel.sharedManager().lastConnectionChangedAt else { return nil } + let stamp = NodePeersViewController.lastSeenFormatter.string(from: date) + return String(format: Localizable.shared.strings.node_peer_last_seen, stamp) + } +} + +extension NodePeersViewController: UITableViewDataSource, UITableViewDelegate { + + func numberOfSections(in tableView: UITableView) -> Int { + return poolAddresses.isEmpty ? 1 : 2 + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return section == 0 ? 1 : poolAddresses.count + } + + func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { + if section == 0 { + return Localizable.shared.strings.node_peer_active.uppercased() + } + return Localizable.shared.strings.node_peer_pool.uppercased() + } + + func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { + if let header = view as? UITableViewHeaderFooterView { + header.textLabel?.font = BoldFont(size: 13) + header.textLabel?.textColor = Settings.sharedManager().isDarkMode ? UIColor.main.steel : UIColor.main.steelGrey + } + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: NodePeersViewController.cellId, for: indexPath) + cell.backgroundColor = UIColor.main.cellBackgroundColor + cell.contentView.backgroundColor = UIColor.main.cellBackgroundColor + cell.selectionStyle = .none + cell.textLabel?.textColor = UIColor.white + cell.textLabel?.font = RegularFont(size: 16) + cell.textLabel?.numberOfLines = 0 + cell.detailTextLabel?.numberOfLines = 0 + cell.detailTextLabel?.font = RegularFont(size: 13) + + if indexPath.section == 0 { + cell.textLabel?.text = Settings.sharedManager().nodeAddress + let status = statusText() + let detail = NSMutableAttributedString( + string: status.text, + attributes: [ + .foregroundColor: status.color, + .font: BoldFont(size: 13) + ] + ) + if let last = lastSeenText() { + detail.append(NSAttributedString( + string: "\n" + last, + attributes: [ + .foregroundColor: Settings.sharedManager().isDarkMode ? UIColor.main.steel : UIColor.main.steelGrey, + .font: RegularFont(size: 13) + ] + )) + } + cell.detailTextLabel?.attributedText = detail + } else { + cell.textLabel?.text = poolAddresses[indexPath.row] + cell.detailTextLabel?.text = nil + } + return cell + } +} + +extension NodePeersViewController: WalletModelDelegate { + + private func refreshFromNetworkChange() { + DispatchQueue.main.async { [weak self] in + guard let self = self else { return } + self.reloadPool() + self.tableView.reloadData() + } + } + + func onNetwotkStatusChange(_ connected: Bool) { refreshFromNetworkChange() } + func onNetwotkStartConnecting(_ connecting: Bool) { refreshFromNetworkChange() } + func onNetwotkStartReconnecting() { refreshFromNetworkChange() } +} diff --git a/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift b/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift index 6ae11481..b21a09e7 100644 --- a/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift +++ b/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift @@ -337,7 +337,7 @@ extension SelectNodeViewController : UITableViewDelegate { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { tableView.deselectRow(at: indexPath, animated: true) - + if isCreateWallet { self.onNextSelected(indexPath: indexPath) } @@ -444,16 +444,16 @@ extension SelectNodeViewController : UITableViewDataSource { func numberOfSections(in tableView: UITableView) -> Int { return items.count } - + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if section == 2 { return items[section].selected ? 2 : 1 } return 1 } - + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - + if indexPath.row == 1 { var cell = tableView.dequeueReusableCell(withIdentifier: "Cell") if cell == nil { diff --git a/BeamWallet/ViewControllers/Main/Settings/SettingsViewController.swift b/BeamWallet/ViewControllers/Main/Settings/SettingsViewController.swift index c8664f1b..f5a341c2 100644 --- a/BeamWallet/ViewControllers/Main/Settings/SettingsViewController.swift +++ b/BeamWallet/ViewControllers/Main/Settings/SettingsViewController.swift @@ -352,7 +352,7 @@ extension SettingsViewController : WalletModelDelegate { func onNetwotkStartReconnecting() { DispatchQueue.main.async { if self.type == SettingsViewModel.SettingsType.node { - self.viewModel.items[0][1].detail = Settings.sharedManager().nodeAddress + self.viewModel.reload() self.tableView.reloadData() } } diff --git a/Resources/cs.lproj/Localizable.strings b/Resources/cs.lproj/Localizable.strings index 26c43145..206fdf8a 100644 --- a/Resources/cs.lproj/Localizable.strings +++ b/Resources/cs.lproj/Localizable.strings @@ -332,6 +332,14 @@ and never kept on the blockchain."; "NSCameraUsageDescription" = "The camera is needed to scan QR codes"; "search_transactions" = "Search by transaction or kernel ID, comment, address or contact"; "random_node" = "Connect to random node"; +"node_peers" = "Node peers"; +"node_type" = "Node type"; +"node_peer_active" = "Active node"; +"node_peer_pool" = "Random node pool"; +"node_peer_connected" = "Connected"; +"node_peer_connecting" = "Connecting…"; +"node_peer_disconnected" = "Disconnected"; +"node_peer_last_seen" = "Last seen %@"; "restore_create_title" = "Restore wallet or create new one"; "restore_create_text" = "If you'll restore a wallet all transaction history and addresses will be lost."; "proceed" = "Proceed"; diff --git a/Resources/en.lproj/Localizable.strings b/Resources/en.lproj/Localizable.strings index d4fb0af9..fa312017 100644 --- a/Resources/en.lproj/Localizable.strings +++ b/Resources/en.lproj/Localizable.strings @@ -338,6 +338,14 @@ and never kept on the blockchain."; "NSCameraUsageDescription" = "The camera is needed to scan QR codes"; "search_transactions" = "Search by transaction or kernel ID, comment, address or contact"; "random_node" = "Connect to random node"; +"node_peers" = "Node peers"; +"node_type" = "Node type"; +"node_peer_active" = "Active node"; +"node_peer_pool" = "Random node pool"; +"node_peer_connected" = "Connected"; +"node_peer_connecting" = "Connecting…"; +"node_peer_disconnected" = "Disconnected"; +"node_peer_last_seen" = "Last seen %@"; "restore_create_title" = "Restore wallet or create new one"; "restore_create_text" = "If you'll restore a wallet all transaction history and addresses will be lost."; "proceed" = "Proceed"; diff --git a/Resources/es.lproj/Localizable.strings b/Resources/es.lproj/Localizable.strings index f93cf515..c7bad864 100644 --- a/Resources/es.lproj/Localizable.strings +++ b/Resources/es.lproj/Localizable.strings @@ -333,6 +333,14 @@ and never kept on the blockchain."; "NSCameraUsageDescription" = "The camera is needed to scan QR codes"; "search_transactions" = "Search by transaction or kernel ID, comment, address or contact"; "random_node" = "Connect to random node"; +"node_peers" = "Node peers"; +"node_type" = "Node type"; +"node_peer_active" = "Active node"; +"node_peer_pool" = "Random node pool"; +"node_peer_connected" = "Connected"; +"node_peer_connecting" = "Connecting…"; +"node_peer_disconnected" = "Disconnected"; +"node_peer_last_seen" = "Last seen %@"; "restore_create_title" = "Restore wallet or create new one"; "restore_create_text" = "If you'll restore a wallet all transaction history and addresses will be lost."; "proceed" = "Proceed"; diff --git a/Resources/fi-FI.lproj/Localizable.strings b/Resources/fi-FI.lproj/Localizable.strings index 26c43145..206fdf8a 100644 --- a/Resources/fi-FI.lproj/Localizable.strings +++ b/Resources/fi-FI.lproj/Localizable.strings @@ -332,6 +332,14 @@ and never kept on the blockchain."; "NSCameraUsageDescription" = "The camera is needed to scan QR codes"; "search_transactions" = "Search by transaction or kernel ID, comment, address or contact"; "random_node" = "Connect to random node"; +"node_peers" = "Node peers"; +"node_type" = "Node type"; +"node_peer_active" = "Active node"; +"node_peer_pool" = "Random node pool"; +"node_peer_connected" = "Connected"; +"node_peer_connecting" = "Connecting…"; +"node_peer_disconnected" = "Disconnected"; +"node_peer_last_seen" = "Last seen %@"; "restore_create_title" = "Restore wallet or create new one"; "restore_create_text" = "If you'll restore a wallet all transaction history and addresses will be lost."; "proceed" = "Proceed"; diff --git a/Resources/fr.lproj/Localizable.strings b/Resources/fr.lproj/Localizable.strings index 26c43145..206fdf8a 100644 --- a/Resources/fr.lproj/Localizable.strings +++ b/Resources/fr.lproj/Localizable.strings @@ -332,6 +332,14 @@ and never kept on the blockchain."; "NSCameraUsageDescription" = "The camera is needed to scan QR codes"; "search_transactions" = "Search by transaction or kernel ID, comment, address or contact"; "random_node" = "Connect to random node"; +"node_peers" = "Node peers"; +"node_type" = "Node type"; +"node_peer_active" = "Active node"; +"node_peer_pool" = "Random node pool"; +"node_peer_connected" = "Connected"; +"node_peer_connecting" = "Connecting…"; +"node_peer_disconnected" = "Disconnected"; +"node_peer_last_seen" = "Last seen %@"; "restore_create_title" = "Restore wallet or create new one"; "restore_create_text" = "If you'll restore a wallet all transaction history and addresses will be lost."; "proceed" = "Proceed"; diff --git a/Resources/ko.lproj/Localizable.strings b/Resources/ko.lproj/Localizable.strings index 26c43145..206fdf8a 100644 --- a/Resources/ko.lproj/Localizable.strings +++ b/Resources/ko.lproj/Localizable.strings @@ -332,6 +332,14 @@ and never kept on the blockchain."; "NSCameraUsageDescription" = "The camera is needed to scan QR codes"; "search_transactions" = "Search by transaction or kernel ID, comment, address or contact"; "random_node" = "Connect to random node"; +"node_peers" = "Node peers"; +"node_type" = "Node type"; +"node_peer_active" = "Active node"; +"node_peer_pool" = "Random node pool"; +"node_peer_connected" = "Connected"; +"node_peer_connecting" = "Connecting…"; +"node_peer_disconnected" = "Disconnected"; +"node_peer_last_seen" = "Last seen %@"; "restore_create_title" = "Restore wallet or create new one"; "restore_create_text" = "If you'll restore a wallet all transaction history and addresses will be lost."; "proceed" = "Proceed"; diff --git a/Resources/nl.lproj/Localizable.strings b/Resources/nl.lproj/Localizable.strings index f93cf515..c7bad864 100644 --- a/Resources/nl.lproj/Localizable.strings +++ b/Resources/nl.lproj/Localizable.strings @@ -333,6 +333,14 @@ and never kept on the blockchain."; "NSCameraUsageDescription" = "The camera is needed to scan QR codes"; "search_transactions" = "Search by transaction or kernel ID, comment, address or contact"; "random_node" = "Connect to random node"; +"node_peers" = "Node peers"; +"node_type" = "Node type"; +"node_peer_active" = "Active node"; +"node_peer_pool" = "Random node pool"; +"node_peer_connected" = "Connected"; +"node_peer_connecting" = "Connecting…"; +"node_peer_disconnected" = "Disconnected"; +"node_peer_last_seen" = "Last seen %@"; "restore_create_title" = "Restore wallet or create new one"; "restore_create_text" = "If you'll restore a wallet all transaction history and addresses will be lost."; "proceed" = "Proceed"; diff --git a/Resources/ru.lproj/Localizable.strings b/Resources/ru.lproj/Localizable.strings index 26c43145..206fdf8a 100644 --- a/Resources/ru.lproj/Localizable.strings +++ b/Resources/ru.lproj/Localizable.strings @@ -332,6 +332,14 @@ and never kept on the blockchain."; "NSCameraUsageDescription" = "The camera is needed to scan QR codes"; "search_transactions" = "Search by transaction or kernel ID, comment, address or contact"; "random_node" = "Connect to random node"; +"node_peers" = "Node peers"; +"node_type" = "Node type"; +"node_peer_active" = "Active node"; +"node_peer_pool" = "Random node pool"; +"node_peer_connected" = "Connected"; +"node_peer_connecting" = "Connecting…"; +"node_peer_disconnected" = "Disconnected"; +"node_peer_last_seen" = "Last seen %@"; "restore_create_title" = "Restore wallet or create new one"; "restore_create_text" = "If you'll restore a wallet all transaction history and addresses will be lost."; "proceed" = "Proceed"; diff --git a/Resources/sv-SE.lproj/Localizable.strings b/Resources/sv-SE.lproj/Localizable.strings index b72129cd..588b678d 100644 --- a/Resources/sv-SE.lproj/Localizable.strings +++ b/Resources/sv-SE.lproj/Localizable.strings @@ -425,6 +425,14 @@ "NSCameraUsageDescription" = "Kameran behövs för att scanna QR-koder"; "search_transactions" = "Sök med transaktions eller kernel-ID, kommentar, adress eller kontakt"; "random_node" = "Anslut till slumpmässig nod"; +"node_peers" = "Node peers"; +"node_type" = "Node type"; +"node_peer_active" = "Active node"; +"node_peer_pool" = "Random node pool"; +"node_peer_connected" = "Connected"; +"node_peer_connecting" = "Connecting…"; +"node_peer_disconnected" = "Disconnected"; +"node_peer_last_seen" = "Last seen %@"; "restore_create_title" = "Återställ plånbok eller skapa en ny"; "restore_create_text" = "Om du återställer en plånbok så kommer all transaktionshistorik och adresser att förloras."; "proceed" = "Fortsätt"; diff --git a/Resources/sv.lproj/Localizable.strings b/Resources/sv.lproj/Localizable.strings index 26c43145..206fdf8a 100644 --- a/Resources/sv.lproj/Localizable.strings +++ b/Resources/sv.lproj/Localizable.strings @@ -332,6 +332,14 @@ and never kept on the blockchain."; "NSCameraUsageDescription" = "The camera is needed to scan QR codes"; "search_transactions" = "Search by transaction or kernel ID, comment, address or contact"; "random_node" = "Connect to random node"; +"node_peers" = "Node peers"; +"node_type" = "Node type"; +"node_peer_active" = "Active node"; +"node_peer_pool" = "Random node pool"; +"node_peer_connected" = "Connected"; +"node_peer_connecting" = "Connecting…"; +"node_peer_disconnected" = "Disconnected"; +"node_peer_last_seen" = "Last seen %@"; "restore_create_title" = "Restore wallet or create new one"; "restore_create_text" = "If you'll restore a wallet all transaction history and addresses will be lost."; "proceed" = "Proceed"; diff --git a/Resources/th.lproj/Localizable.strings b/Resources/th.lproj/Localizable.strings index 26c43145..206fdf8a 100644 --- a/Resources/th.lproj/Localizable.strings +++ b/Resources/th.lproj/Localizable.strings @@ -332,6 +332,14 @@ and never kept on the blockchain."; "NSCameraUsageDescription" = "The camera is needed to scan QR codes"; "search_transactions" = "Search by transaction or kernel ID, comment, address or contact"; "random_node" = "Connect to random node"; +"node_peers" = "Node peers"; +"node_type" = "Node type"; +"node_peer_active" = "Active node"; +"node_peer_pool" = "Random node pool"; +"node_peer_connected" = "Connected"; +"node_peer_connecting" = "Connecting…"; +"node_peer_disconnected" = "Disconnected"; +"node_peer_last_seen" = "Last seen %@"; "restore_create_title" = "Restore wallet or create new one"; "restore_create_text" = "If you'll restore a wallet all transaction history and addresses will be lost."; "proceed" = "Proceed"; diff --git a/Resources/tr.lproj/Localizable.strings b/Resources/tr.lproj/Localizable.strings index 26c43145..206fdf8a 100644 --- a/Resources/tr.lproj/Localizable.strings +++ b/Resources/tr.lproj/Localizable.strings @@ -332,6 +332,14 @@ and never kept on the blockchain."; "NSCameraUsageDescription" = "The camera is needed to scan QR codes"; "search_transactions" = "Search by transaction or kernel ID, comment, address or contact"; "random_node" = "Connect to random node"; +"node_peers" = "Node peers"; +"node_type" = "Node type"; +"node_peer_active" = "Active node"; +"node_peer_pool" = "Random node pool"; +"node_peer_connected" = "Connected"; +"node_peer_connecting" = "Connecting…"; +"node_peer_disconnected" = "Disconnected"; +"node_peer_last_seen" = "Last seen %@"; "restore_create_title" = "Restore wallet or create new one"; "restore_create_text" = "If you'll restore a wallet all transaction history and addresses will be lost."; "proceed" = "Proceed"; diff --git a/Resources/vi.lproj/Localizable.strings b/Resources/vi.lproj/Localizable.strings index 26c43145..206fdf8a 100644 --- a/Resources/vi.lproj/Localizable.strings +++ b/Resources/vi.lproj/Localizable.strings @@ -332,6 +332,14 @@ and never kept on the blockchain."; "NSCameraUsageDescription" = "The camera is needed to scan QR codes"; "search_transactions" = "Search by transaction or kernel ID, comment, address or contact"; "random_node" = "Connect to random node"; +"node_peers" = "Node peers"; +"node_type" = "Node type"; +"node_peer_active" = "Active node"; +"node_peer_pool" = "Random node pool"; +"node_peer_connected" = "Connected"; +"node_peer_connecting" = "Connecting…"; +"node_peer_disconnected" = "Disconnected"; +"node_peer_last_seen" = "Last seen %@"; "restore_create_title" = "Restore wallet or create new one"; "restore_create_text" = "If you'll restore a wallet all transaction history and addresses will be lost."; "proceed" = "Proceed"; diff --git a/Resources/zh-Hans.lproj/Localizable.strings b/Resources/zh-Hans.lproj/Localizable.strings index 9a6b45dd..ad554844 100644 --- a/Resources/zh-Hans.lproj/Localizable.strings +++ b/Resources/zh-Hans.lproj/Localizable.strings @@ -332,6 +332,14 @@ and never kept on the blockchain."; "NSCameraUsageDescription" = "The camera is needed to scan QR codes"; "search_transactions" = "Search by transaction or kernel ID, comment, address or contact"; "random_node" = "Connect to random node"; +"node_peers" = "Node peers"; +"node_type" = "Node type"; +"node_peer_active" = "Active node"; +"node_peer_pool" = "Random node pool"; +"node_peer_connected" = "Connected"; +"node_peer_connecting" = "Connecting…"; +"node_peer_disconnected" = "Disconnected"; +"node_peer_last_seen" = "Last seen %@"; "restore_create_title" = "Restore wallet or create new one"; "restore_create_text" = "If you'll restore a wallet all transaction history and addresses will be lost."; "proceed" = "Proceed"; From f20eb627a83603906ca81908142ce2723183b9fd Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Sun, 10 May 2026 14:05:13 +0200 Subject: [PATCH 33/48] feat(sync): phase-aware messages + stabilization window on resume MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds a 500 ms quiet window at the start of the onlyConnect path so near-synced wallets skip the 0% → 100% flash and slide straight into the main page; otherwise commits to rendering and replays the last snapshot. New SyncPhase resolver swaps the percent line for descriptive copy at the boundaries (connecting / reconnecting / almost done / finalizing) and wires the previously-unused onNetwotkStartConnecting / onNetwotkStartReconnecting delegate methods. --- BeamWallet/Protocols/LocalizableStrings.swift | 4 + .../OpenWalletProgressViewController.swift | 145 ++++++++++++++++-- Resources/cs.lproj/Localizable.strings | 4 + Resources/en.lproj/Localizable.strings | 4 + Resources/es.lproj/Localizable.strings | 4 + Resources/fi-FI.lproj/Localizable.strings | 4 + Resources/fr.lproj/Localizable.strings | 4 + Resources/ko.lproj/Localizable.strings | 4 + Resources/nl.lproj/Localizable.strings | 4 + Resources/ru.lproj/Localizable.strings | 4 + Resources/sv-SE.lproj/Localizable.strings | 4 + Resources/sv.lproj/Localizable.strings | 4 + Resources/th.lproj/Localizable.strings | 4 + Resources/tr.lproj/Localizable.strings | 4 + Resources/vi.lproj/Localizable.strings | 4 + Resources/zh-Hans.lproj/Localizable.strings | 4 + 16 files changed, 189 insertions(+), 16 deletions(-) diff --git a/BeamWallet/Protocols/LocalizableStrings.swift b/BeamWallet/Protocols/LocalizableStrings.swift index 8392d7ee..9290b9b1 100644 --- a/BeamWallet/Protocols/LocalizableStrings.swift +++ b/BeamWallet/Protocols/LocalizableStrings.swift @@ -539,6 +539,10 @@ class LocalizableStrings : NSObject { var connect_to_mobilenode = "connect_to_mobilenode".localized var syncing_with_blockchain = "syncing_with_blockchain".localized + var sync_phase_connecting = "sync_phase_connecting".localized + var sync_phase_reconnecting = "sync_phase_reconnecting".localized + var sync_phase_almost_done = "sync_phase_almost_done".localized + var sync_phase_finalizing = "sync_phase_finalizing".localized var please_no_lock = "please_no_lock".localized var wallet_connected_to_mobile_node = "wallet_connected_to_mobile_node".localized var disconnect = "disconnect".localized diff --git a/BeamWallet/ViewControllers/Login/OpenWalletProgressViewController.swift b/BeamWallet/ViewControllers/Login/OpenWalletProgressViewController.swift index 88d98c4f..e93170ad 100644 --- a/BeamWallet/ViewControllers/Login/OpenWalletProgressViewController.swift +++ b/BeamWallet/ViewControllers/Login/OpenWalletProgressViewController.swift @@ -44,9 +44,22 @@ class OpenWalletProgressViewController: BaseViewController { public var isRescan = false private var backgroundTaskID: UIBackgroundTaskIdentifier! - + private let displayProgress = true + // Stabilization window: on the `onlyConnect` resume path the wallet often + // jumps from total=1,done=0 → total=1,done=1 in one tick, which renders as + // a useless 0% → 100% flash. Suppress the percent UI for the first 500 ms + // and decide once: either open the main page (if sync resolved or only a + // trivial number of requests remain) or commit to rendering progress. + private static let kStabilizationDelay: TimeInterval = 0.5 + private static let kTrivialSyncThreshold: Int32 = 2 + + private var stabilizationTimer: Timer? + private var pendingSnapshot: (done: Int32, total: Int32)? + private var hasConnected = false + private var isReconnecting = false + init(password:String, phrase:String?) { super.init(nibName: nil, bundle: nil) @@ -115,23 +128,22 @@ class OpenWalletProgressViewController: BaseViewController { else { progressTitleLabel.text = Localizable.shared.strings.loading_wallet } - - if displayProgress { - progressValueLabel.text = Localizable.shared.strings.syncing_with_blockchain + " 0%" - } - else { - progressValueLabel.text = Localizable.shared.strings.syncing_with_blockchain + ": " - } - - + + // Hide the percent label until the stabilization window closes — + // otherwise we'd flash "0%" before either committing to a real + // progress render or skipping straight to the main page. + progressValueLabel.text = Localizable.shared.strings.sync_phase_connecting + progressValueLabel.isHidden = false + restotingInfoLabel.text = Localizable.shared.strings.please_no_lock - + progressTimeValueLabel.text = Localizable.shared.strings.calc_estimate_time progressTimeValueLabel.isHidden = false - - progressValueLabel.isHidden = false + cancelButton.isHidden = false restotingInfoLabel.isHidden = true + + startStabilizationWindow() } else if AppModel.sharedManager().isRestoreFlow { progressTitleLabel.text = Localizable.shared.strings.restoring_wallet @@ -203,8 +215,10 @@ class OpenWalletProgressViewController: BaseViewController { UIApplication.shared.endBackgroundTask(self.backgroundTaskID) self.backgroundTaskID = UIBackgroundTaskIdentifier.invalid - + timeoutTimer?.invalidate() + stabilizationTimer?.invalidate() + stabilizationTimer = nil if isMovingFromParent { AppModel.sharedManager().removeDelegate(self) @@ -444,8 +458,68 @@ class OpenWalletProgressViewController: BaseViewController { self.pushViewController(vc: vc) } + // MARK: Sync phase / stabilization + + private enum SyncPhase { + case connecting + case reconnecting + case almostDone + case finalizing + } + + private func resolveBoundaryPhase(done: Int32, total: Int32) -> SyncPhase? { + if !hasConnected { return .connecting } + if isReconnecting { return .reconnecting } + if total > 0 && done == total && !AppModel.sharedManager().isSynced() { + return .finalizing + } + if total > 0 && (total - done) <= OpenWalletProgressViewController.kTrivialSyncThreshold { + return .almostDone + } + return nil + } + + private func progressCopy(for phase: SyncPhase) -> String { + switch phase { + case .connecting: return Localizable.shared.strings.sync_phase_connecting + case .reconnecting: return Localizable.shared.strings.sync_phase_reconnecting + case .almostDone: return Localizable.shared.strings.sync_phase_almost_done + case .finalizing: return Localizable.shared.strings.sync_phase_finalizing + } + } + + private func startStabilizationWindow() { + stabilizationTimer?.invalidate() + stabilizationTimer = Timer.scheduledTimer( + timeInterval: OpenWalletProgressViewController.kStabilizationDelay, + target: self, + selector: #selector(onStabilizationFinished), + userInfo: nil, + repeats: false + ) + } + + @objc private func onStabilizationFinished() { + stabilizationTimer = nil + + if AppModel.sharedManager().isSynced() { + openMainPage() + return + } + if let snap = pendingSnapshot, + snap.total > 0, + snap.total - snap.done <= OpenWalletProgressViewController.kTrivialSyncThreshold { + openMainPage() + return + } + + if let snap = pendingSnapshot { + onSyncProgressUpdated(snap.done, total: snap.total) + } + } + // MARK: IBAction - + @IBAction func onCancel(sender :UIButton) { AppModel.sharedManager().removeDelegate(self) @@ -485,6 +559,8 @@ extension OpenWalletProgressViewController : WalletModelDelegate { if connected { strongSelf.errorLabel.isHidden = true + strongSelf.hasConnected = true + strongSelf.isReconnecting = false } if !strongSelf.onlyConnect && connected && !AppModel.sharedManager().isRestoreFlow @@ -498,6 +574,26 @@ extension OpenWalletProgressViewController : WalletModelDelegate { } } + func onNetwotkStartConnecting(_ connecting: Bool) { + DispatchQueue.main.async { [weak self] in + guard let strongSelf = self else { return } + // Only show "Connecting…" before we've ever rendered a percent — + // once real progress is visible, flipping back to the connecting + // copy mid-sync would be misleading. + if connecting && !strongSelf.hasConnected && strongSelf.stabilizationTimer != nil { + strongSelf.progressValueLabel.text = Localizable.shared.strings.sync_phase_connecting + } + } + } + + func onNetwotkStartReconnecting() { + DispatchQueue.main.async { [weak self] in + guard let strongSelf = self else { return } + strongSelf.isReconnecting = true + strongSelf.progressValueLabel.text = Localizable.shared.strings.sync_phase_reconnecting + } + } + func onNoInternetConnection() { DispatchQueue.main.async { [weak self] in guard let strongSelf = self else { return } @@ -589,7 +685,16 @@ extension OpenWalletProgressViewController : WalletModelDelegate { DispatchQueue.main.async { [weak self] in guard let strongSelf = self else { return } strongSelf.hideErrorIfOnline() - + + // Stabilization: on the resume path, suppress percent rendering + // until either the timer fires or the workload is non-trivial. + // Recovery (`isWaitingRestore`) and the seed-restore flows are + // unaffected — they have real work to display from frame one. + if strongSelf.onlyConnect && strongSelf.stabilizationTimer != nil && !strongSelf.isWaitingRestore { + strongSelf.pendingSnapshot = (done, total) + return + } + if done > 0 { if (strongSelf.onlyConnect || strongSelf.isRescan || strongSelf.phrase == nil) || (strongSelf.phrase != nil){ @@ -627,6 +732,14 @@ extension OpenWalletProgressViewController : WalletModelDelegate { } } + // Phase-aware overlay: replace the generic percent copy with a more + // descriptive line at the boundaries of sync (reconnecting, almost + // done, finalizing). Steady-state (resolver returns nil) keeps the + // percent visible during the bulk of the work. + if let phase = strongSelf.resolveBoundaryPhase(done: done, total: total) { + strongSelf.progressValueLabel.text = strongSelf.progressCopy(for: phase) + } + if strongSelf.isWaitingRestore && (total == done || AppModel.sharedManager().isSynced()) { strongSelf.isWaitingRestore = false strongSelf.openMainPage() diff --git a/Resources/cs.lproj/Localizable.strings b/Resources/cs.lproj/Localizable.strings index 206fdf8a..c332a0a5 100644 --- a/Resources/cs.lproj/Localizable.strings +++ b/Resources/cs.lproj/Localizable.strings @@ -663,3 +663,7 @@ and never kept on the blockchain."; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; "vouchers_count_error" = "Enter a value between 1 and %d"; +"sync_phase_connecting" = "Connecting to node…"; +"sync_phase_reconnecting" = "Reconnecting to node…"; +"sync_phase_almost_done" = "Almost done…"; +"sync_phase_finalizing" = "Finalizing…"; diff --git a/Resources/en.lproj/Localizable.strings b/Resources/en.lproj/Localizable.strings index fa312017..cc8eee59 100644 --- a/Resources/en.lproj/Localizable.strings +++ b/Resources/en.lproj/Localizable.strings @@ -575,6 +575,10 @@ and never kept on the blockchain."; "own_node_text" = "For those who run a node configured with the wallet’s Owner Key."; "connect_to_mobilenode" = "Connecting to Mobile node"; "syncing_with_blockchain" = "Syncing with the blockchain"; +"sync_phase_connecting" = "Connecting to node…"; +"sync_phase_reconnecting" = "Reconnecting to node…"; +"sync_phase_almost_done" = "Almost done…"; +"sync_phase_finalizing" = "Finalizing…"; "please_no_lock" = "Please do not lock your phone and do not close the wallet."; "wallet_connected_to_mobile_node" = "Wallet connected to Mobile node"; "disconnect" = "Disconnect"; diff --git a/Resources/es.lproj/Localizable.strings b/Resources/es.lproj/Localizable.strings index c7bad864..bc038a21 100644 --- a/Resources/es.lproj/Localizable.strings +++ b/Resources/es.lproj/Localizable.strings @@ -663,3 +663,7 @@ and never kept on the blockchain."; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; "vouchers_count_error" = "Enter a value between 1 and %d"; +"sync_phase_connecting" = "Connecting to node…"; +"sync_phase_reconnecting" = "Reconnecting to node…"; +"sync_phase_almost_done" = "Almost done…"; +"sync_phase_finalizing" = "Finalizing…"; diff --git a/Resources/fi-FI.lproj/Localizable.strings b/Resources/fi-FI.lproj/Localizable.strings index 206fdf8a..c332a0a5 100644 --- a/Resources/fi-FI.lproj/Localizable.strings +++ b/Resources/fi-FI.lproj/Localizable.strings @@ -663,3 +663,7 @@ and never kept on the blockchain."; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; "vouchers_count_error" = "Enter a value between 1 and %d"; +"sync_phase_connecting" = "Connecting to node…"; +"sync_phase_reconnecting" = "Reconnecting to node…"; +"sync_phase_almost_done" = "Almost done…"; +"sync_phase_finalizing" = "Finalizing…"; diff --git a/Resources/fr.lproj/Localizable.strings b/Resources/fr.lproj/Localizable.strings index 206fdf8a..c332a0a5 100644 --- a/Resources/fr.lproj/Localizable.strings +++ b/Resources/fr.lproj/Localizable.strings @@ -663,3 +663,7 @@ and never kept on the blockchain."; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; "vouchers_count_error" = "Enter a value between 1 and %d"; +"sync_phase_connecting" = "Connecting to node…"; +"sync_phase_reconnecting" = "Reconnecting to node…"; +"sync_phase_almost_done" = "Almost done…"; +"sync_phase_finalizing" = "Finalizing…"; diff --git a/Resources/ko.lproj/Localizable.strings b/Resources/ko.lproj/Localizable.strings index 206fdf8a..c332a0a5 100644 --- a/Resources/ko.lproj/Localizable.strings +++ b/Resources/ko.lproj/Localizable.strings @@ -663,3 +663,7 @@ and never kept on the blockchain."; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; "vouchers_count_error" = "Enter a value between 1 and %d"; +"sync_phase_connecting" = "Connecting to node…"; +"sync_phase_reconnecting" = "Reconnecting to node…"; +"sync_phase_almost_done" = "Almost done…"; +"sync_phase_finalizing" = "Finalizing…"; diff --git a/Resources/nl.lproj/Localizable.strings b/Resources/nl.lproj/Localizable.strings index c7bad864..bc038a21 100644 --- a/Resources/nl.lproj/Localizable.strings +++ b/Resources/nl.lproj/Localizable.strings @@ -663,3 +663,7 @@ and never kept on the blockchain."; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; "vouchers_count_error" = "Enter a value between 1 and %d"; +"sync_phase_connecting" = "Connecting to node…"; +"sync_phase_reconnecting" = "Reconnecting to node…"; +"sync_phase_almost_done" = "Almost done…"; +"sync_phase_finalizing" = "Finalizing…"; diff --git a/Resources/ru.lproj/Localizable.strings b/Resources/ru.lproj/Localizable.strings index 206fdf8a..c332a0a5 100644 --- a/Resources/ru.lproj/Localizable.strings +++ b/Resources/ru.lproj/Localizable.strings @@ -663,3 +663,7 @@ and never kept on the blockchain."; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; "vouchers_count_error" = "Enter a value between 1 and %d"; +"sync_phase_connecting" = "Connecting to node…"; +"sync_phase_reconnecting" = "Reconnecting to node…"; +"sync_phase_almost_done" = "Almost done…"; +"sync_phase_finalizing" = "Finalizing…"; diff --git a/Resources/sv-SE.lproj/Localizable.strings b/Resources/sv-SE.lproj/Localizable.strings index 588b678d..3758c168 100644 --- a/Resources/sv-SE.lproj/Localizable.strings +++ b/Resources/sv-SE.lproj/Localizable.strings @@ -707,3 +707,7 @@ "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; "vouchers_count_error" = "Enter a value between 1 and %d"; +"sync_phase_connecting" = "Connecting to node…"; +"sync_phase_reconnecting" = "Reconnecting to node…"; +"sync_phase_almost_done" = "Almost done…"; +"sync_phase_finalizing" = "Finalizing…"; diff --git a/Resources/sv.lproj/Localizable.strings b/Resources/sv.lproj/Localizable.strings index 206fdf8a..c332a0a5 100644 --- a/Resources/sv.lproj/Localizable.strings +++ b/Resources/sv.lproj/Localizable.strings @@ -663,3 +663,7 @@ and never kept on the blockchain."; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; "vouchers_count_error" = "Enter a value between 1 and %d"; +"sync_phase_connecting" = "Connecting to node…"; +"sync_phase_reconnecting" = "Reconnecting to node…"; +"sync_phase_almost_done" = "Almost done…"; +"sync_phase_finalizing" = "Finalizing…"; diff --git a/Resources/th.lproj/Localizable.strings b/Resources/th.lproj/Localizable.strings index 206fdf8a..c332a0a5 100644 --- a/Resources/th.lproj/Localizable.strings +++ b/Resources/th.lproj/Localizable.strings @@ -663,3 +663,7 @@ and never kept on the blockchain."; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; "vouchers_count_error" = "Enter a value between 1 and %d"; +"sync_phase_connecting" = "Connecting to node…"; +"sync_phase_reconnecting" = "Reconnecting to node…"; +"sync_phase_almost_done" = "Almost done…"; +"sync_phase_finalizing" = "Finalizing…"; diff --git a/Resources/tr.lproj/Localizable.strings b/Resources/tr.lproj/Localizable.strings index 206fdf8a..c332a0a5 100644 --- a/Resources/tr.lproj/Localizable.strings +++ b/Resources/tr.lproj/Localizable.strings @@ -663,3 +663,7 @@ and never kept on the blockchain."; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; "vouchers_count_error" = "Enter a value between 1 and %d"; +"sync_phase_connecting" = "Connecting to node…"; +"sync_phase_reconnecting" = "Reconnecting to node…"; +"sync_phase_almost_done" = "Almost done…"; +"sync_phase_finalizing" = "Finalizing…"; diff --git a/Resources/vi.lproj/Localizable.strings b/Resources/vi.lproj/Localizable.strings index 206fdf8a..c332a0a5 100644 --- a/Resources/vi.lproj/Localizable.strings +++ b/Resources/vi.lproj/Localizable.strings @@ -663,3 +663,7 @@ and never kept on the blockchain."; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; "vouchers_count_error" = "Enter a value between 1 and %d"; +"sync_phase_connecting" = "Connecting to node…"; +"sync_phase_reconnecting" = "Reconnecting to node…"; +"sync_phase_almost_done" = "Almost done…"; +"sync_phase_finalizing" = "Finalizing…"; diff --git a/Resources/zh-Hans.lproj/Localizable.strings b/Resources/zh-Hans.lproj/Localizable.strings index ad554844..5e098aa8 100644 --- a/Resources/zh-Hans.lproj/Localizable.strings +++ b/Resources/zh-Hans.lproj/Localizable.strings @@ -662,3 +662,7 @@ and never kept on the blockchain."; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; "vouchers_count_error" = "Enter a value between 1 and %d"; +"sync_phase_connecting" = "Connecting to node…"; +"sync_phase_reconnecting" = "Reconnecting to node…"; +"sync_phase_almost_done" = "Almost done…"; +"sync_phase_finalizing" = "Finalizing…"; From 3884c8664ee806f1bc27a1990443f5efb283f8a8 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Mon, 11 May 2026 20:24:45 +0200 Subject: [PATCH 34/48] fix(wallet): prevent upgrade-path wipe and double createWallet on random-node create MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AppDelegate routed users to the "Reset and retry" alert on first launch of v7.4 because `needsRecovery` keyed off `isWalletInitializedFlag`, which is only written inside `onWalledOpened` — existing v7.3 installs upgrading to v7.4 had never written it, so the prompt fired and `resetWallet(true)` wiped the DB + seed-keychain. Backfill the flag in AppDelegate before the recovery check when `isWalletAlreadyAdded()` and the flag is unset. Separately, the random-node create branch in SelectNodeViewController called createWalletForCurrentNode() and then pushed OpenWalletProgressViewController, whose viewDidLoad reruns createWallet. The second call short-circuits today on `walletDb != nil` but onWalledOpened still runs twice and any future failure path lands in abortCreateAndReset(), deleting the DB just made. Drop the redundant call; let OpenWalletProgressViewController own creation. --- BeamWallet/AppDelegate.swift | 8 ++++++++ .../Main/Settings/SelectNodeViewController.swift | 10 ++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/BeamWallet/AppDelegate.swift b/BeamWallet/AppDelegate.swift index 9dfa7282..8d1f9e44 100644 --- a/BeamWallet/AppDelegate.swift +++ b/BeamWallet/AppDelegate.swift @@ -76,6 +76,14 @@ class AppDelegate: UIResponder, UIApplicationDelegate { let added = AppModel.sharedManager().isWalletAlreadyAdded() + // Backfill the integrity marker for installs that predate the flag + // (v7.3 → v7.4 upgrade): if the DB file is on disk, the wallet was + // healthy before the upgrade — set the flag so the recovery prompt + // below doesn't wipe their data on first launch. + if added && !OnboardManager.shared.isWalletInitializedFlag() { + OnboardManager.shared.markWalletInitialized() + } + // DB file present but integrity marker missing implies a crash between // DB init and onWalledOpened — fall back to onboarding with a recovery prompt. let needsRecovery = added && !OnboardManager.shared.isWalletInitializedFlag() diff --git a/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift b/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift index b21a09e7..baf3245c 100644 --- a/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift +++ b/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift @@ -203,10 +203,12 @@ class SelectNodeViewController: BaseTableViewController { AppModel.sharedManager().changeNodeAddress() if isCreateWallet { - if createWalletForCurrentNode() { - let vc = OpenWalletProgressViewController(password: self.password ?? "", phrase: self.phrase) - self.pushViewController(vc: vc) - } + // OpenWalletProgressViewController owns creation when phrase + // is non-nil (see startCreateWallet). Calling createWallet here + // too would run it twice and any future failure path would + // land in abortCreateAndReset(), wiping the DB we just made. + let vc = OpenWalletProgressViewController(password: self.password ?? "", phrase: self.phrase) + self.pushViewController(vc: vc) } } else if items[1].selected { From 58eb94c0159516c12aed392376731ffa31aa0540 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Mon, 11 May 2026 20:25:00 +0200 Subject: [PATCH 35/48] fix(bridge): prefetch assets after start, single-shot sqlite temp-dir, watchdog gate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit loadFullAssetsList was called from onWalledOpened before `start` runs in the manual-restore branch, so `wallet` was null and the prefetch silently no-op'd while didLoadFullAssetsList stayed false in spirit. Move the call into -[AppModel start] after wallet->start, where wallet is guaranteed non-null. sqlite3_temp_directory was set inside createWallet via sqlite3_mprintf with no sqlite3_free on the prior value (leak on retry), and not set at all in openWallet / canOpenWallet — existing-install opens could still SQLITE_MISUSE on temp spill. Centralize in ensureSqliteTempDir() guarded by dispatch_once; call it from +load and at the top of the three DB entry points. OpenWalletProgressViewController.onTimeOut unconditionally advanced to the main page; on flaky networks during a fresh-install random-node create the user got dumped into a zero-balance wallet, indistinguishable from a wipe. Gate the advance on isPresented || isSynced() || isChangedNode(); on bare timeout surface the existing wallet_not_opened alert that pops to root. --- BeamWallet/BeamSDK/AppModel.mm | 62 +++++++++++++++---- .../OpenWalletProgressViewController.swift | 36 ++++++++++- 2 files changed, 85 insertions(+), 13 deletions(-) diff --git a/BeamWallet/BeamSDK/AppModel.mm b/BeamWallet/BeamSDK/AppModel.mm index 73264945..35174d88 100644 --- a/BeamWallet/BeamSDK/AppModel.mm +++ b/BeamWallet/BeamSDK/AppModel.mm @@ -118,6 +118,24 @@ const bool isSecondCurrencyEnabled = true; typedef void(^NewGenerateVaucherBlock)(ShieldedVoucherList v); +// BEAM's bundled sqlite needs a writable temp dir; iOS sandbox blocks /tmp. +// Point sqlite3_temp_directory at the app's NSTemporaryDirectory once per +// process, before any DB open, so CREATE TABLE / journaling has a place to +// spill — otherwise WalletDB::open / WalletDB::init can fail with +// SQLITE_MISUSE on existing installs as well as fresh creates. +// dispatch_once guarantees a single sqlite3_mprintf allocation; no +// sqlite3_free needed because the value is owned for the lifetime of the +// process. +static void ensureSqliteTempDir(void) { + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSString *tmpDir = NSTemporaryDirectory(); + if (tmpDir.length > 0) { + sqlite3_temp_directory = sqlite3_mprintf("%s", [tmpDir UTF8String]); + } + }); +} + struct GenerateVaucherFunc { NewGenerateVaucherBlock newGenerateVaucherBlock; @@ -195,6 +213,12 @@ @implementation AppModel { RecoveryProgress recoveryProgress; } ++ (void)load { + // Set sqlite3_temp_directory before any code (incl. AppDelegate's + // canOpenWallet probe on warm-launch) touches the BEAM SQLite handle. + ensureSqliteTempDir(); +} + + (AppModel*_Nonnull)sharedManager { static AppModel *sharedMyManager = nil; @@ -576,6 +600,11 @@ -(BOOL)isWalletAlreadyAdded { } -(BOOL)openWallet:(NSString*)pass { + // Belt-and-braces: +load already set this, but cover the case where a + // future caller skips +load (e.g. unit harness) so the DB always sees a + // writable temp dir. + ensureSqliteTempDir(); + // BEAM 7.5.14432+ rejects WalletDB::open with SQLITE_MISUSE when the // current reactor has been scoped in/out previously (e.g. the one created // in AppModel.init). Drop and recreate so open runs against a fresh one. @@ -608,6 +637,9 @@ -(BOOL)openWallet:(NSString*)pass { } -(BOOL)canOpenWallet:(NSString*)pass { + // Same temp-dir guarantee as openWallet:; idempotent via dispatch_once. + ensureSqliteTempDir(); + // See openWallet: BEAM 7.5.14432+ requires a fresh reactor here. walletReactor.reset(); walletReactor = Reactor::create(); @@ -687,13 +719,12 @@ -(BOOL)createWallet:(NSString*)phrase pass:(NSString*)pass { [fm removeItemAtPath:[dbPath stringByAppendingString:@"-shm"] error:nil]; [fm removeItemAtPath:[dbPath stringByAppendingString:@"-journal"] error:nil]; - // BEAM's sqlite needs a writable temp dir; iOS sandbox blocks /tmp. Point - // it at the app's NSTemporaryDirectory so CREATE TABLE / journaling has a - // place to spill — otherwise WalletDB::init can fail with SQLITE_MISUSE. + // BEAM's bundled sqlite needs a writable temp dir; iOS sandbox blocks + // /tmp. ensureSqliteTempDir() sets sqlite3_temp_directory once per + // process so CREATE TABLE / journaling has a place to spill — + // otherwise WalletDB::init can fail with SQLITE_MISUSE. + ensureSqliteTempDir(); NSString *tmpDir = NSTemporaryDirectory(); - if (tmpDir.length > 0) { - sqlite3_temp_directory = sqlite3_mprintf("%s", [tmpDir UTF8String]); - } BEAM_LOG_INFO() << "createWallet preflight" << " path=" << dbFilePath @@ -924,11 +955,6 @@ -(void)onWalledOpened:(const SecString&) pass { else if(self.isRestoreFlow && self.restoreType == BMRestoreManual && [Settings sharedManager].isChangedNode) { [self start]; } - - // Prefetch the full asset registry once per session so Receive / Asset - // Search / Asset Swap don't pay a network round-trip on first open. - // Idempotent: subsequent callers from those screens no-op via the flag. - [self loadFullAssetsList]; } -(void)restore:(NSString*_Nonnull)path{ @@ -1059,6 +1085,13 @@ -(void)start { isRunning = YES; isStarted = YES; + // Prefetch the full asset registry once per session so Receive / + // Asset Search / Asset Swap don't pay a network round-trip on + // first open. Must run after wallet->start() so `wallet` is + // non-null — otherwise loadFullAssetsList short-circuits and the + // didLoadFullAssetsList flag is never set on the restore path. + [self loadFullAssetsList]; + daoManager = [[DAOManager alloc] initWithWallet:wallet]; } catch (const std::exception& e) { @@ -3606,6 +3639,10 @@ -(NSString*_Nonnull)resolvedPeerWalletId:(NSString*_Nonnull)peerWalletId { } -(void)addChatStub:(NSString*_Nonnull)peerWalletId contactName:(NSString*_Nullable)contactName myWalletId:(NSString*_Nullable)myWalletId { + // UI-only entry point (called from MessengerNewChatViewController on the + // main thread). The reactor-thread paths in WalletModel.mm now also hop + // to main before mutating self.chats / self.messagesByPeer, so all writes + // serialize on main. NSString *resolved = [self resolvedPeerWalletId:peerWalletId]; BOOL changed = NO; BMChat *existing = nil; @@ -3682,6 +3719,9 @@ -(void)sendInstantMessage:(NSString*_Nonnull)peerWalletId } -(void)markChatAsRead:(NSString*_Nonnull)peerWalletId { + // Always invoked from the UI thread (no reactor-side caller); pairs with + // the dispatch-on-main writes in WalletModel.mm so cache mutations remain + // serialized on the main queue. if (wallet == nil) return; WalletID peerID; if (!parseMessengerWalletID(peerWalletId, peerID)) return; diff --git a/BeamWallet/ViewControllers/Login/OpenWalletProgressViewController.swift b/BeamWallet/ViewControllers/Login/OpenWalletProgressViewController.swift index e93170ad..2cd321e3 100644 --- a/BeamWallet/ViewControllers/Login/OpenWalletProgressViewController.swift +++ b/BeamWallet/ViewControllers/Login/OpenWalletProgressViewController.swift @@ -177,8 +177,13 @@ class OpenWalletProgressViewController: BaseViewController { cancelButton.isHidden = true } else { + // Fresh-install random-node create. Use onTimeOut (not + // openMainPage directly) so a flaky network won't silently + // drop the user into a zero-balance wallet — onTimeOut gates + // on isSynced / isChangedNode / isPresented and otherwise + // surfaces an error. timeoutTimer?.invalidate() - timeoutTimer = Timer.scheduledTimer(timeInterval: 10.0, target: self, selector: #selector(openMainPage), userInfo: nil, repeats: false) + timeoutTimer = Timer.scheduledTimer(timeInterval: 10.0, target: self, selector: #selector(onTimeOut), userInfo: nil, repeats: false) } } @@ -541,7 +546,34 @@ class OpenWalletProgressViewController: BaseViewController { } @objc private func onTimeOut() { - self.openMainPage() + // Don't surface an error if the underlying flow has already + // succeeded or is being handled elsewhere — `isPresented` means + // openMainPage already ran, `isSynced` means the wallet is good to + // go, and `isChangedNode` means the user is mid-node-swap and + // openMainPage is the legitimate next step. + if isPresented + || AppModel.sharedManager().isSynced() + || Settings.sharedManager().isChangedNode() { + openMainPage() + return + } + + // Watchdog fired without progress on a fresh open / random-node + // create. Previously we silently advanced into the wallet, which on + // a flaky network is indistinguishable from a wipe (zero balance, + // no error). Surface the failure and let the user retry from the + // login screen instead of guessing. + // TODO: dedicated "Connection timed out / Retry" copy. Reusing + // wallet_not_opened (already localized in every .lproj) until that + // string lands. + timeoutTimer?.invalidate() + errorLabel.isHidden = false + errorLabel.text = Localizable.shared.strings.no_internet + + self.alert(title: Localizable.shared.strings.error, + message: Localizable.shared.strings.wallet_not_opened) { [weak self] _ in + self?.navigationController?.popToRootViewController(animated: true) + } } fileprivate func hideErrorIfOnline() { From 30b9cfea0569aeff0a31eb6609d9dd6935b6de3f Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Mon, 11 May 2026 20:36:46 +0200 Subject: [PATCH 36/48] fix(asset-swaps): submit idempotency + grothFrom overflow + BMFieldCell reuse Publish and Accept on Asset Swaps both called the C++ tx and then animated popViewController; a fast double-tap re-entered before the pop completed and fired a duplicate publishDexOrder / acceptDexOrder. Add an isSubmitting flag per VC, disable the trigger button on entry, reset on the error branch. AssetSwapCreateViewModel.grothFrom did `UInt64(beam * 1e8)` with no range check; values beyond ~1.85e11 BEAM crashed the app on every keystroke. Guard with isFinite / non-negative / < UInt64.max before the cast and return 0 on overflow (validationError treats 0 as amount-invalid). BMFieldCell never reset copyText or keyboardType in prepareForReuse, so a cell that previously had a copy bar could install BMInputCopyBar over the numeric voucher pad after recycling. Override prepareForReuse to clear both. --- BeamWallet/Controls/Cell/BMFieldCell.swift | 8 +++++++- .../Model/AssetSwaps/AssetSwapCreateViewModel.swift | 4 +++- .../AssetSwaps/AssetSwapCreateViewController.swift | 7 +++++++ .../AssetSwaps/AssetSwapDetailsViewController.swift | 10 ++++++++++ 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/BeamWallet/Controls/Cell/BMFieldCell.swift b/BeamWallet/Controls/Cell/BMFieldCell.swift index 68c40f79..d81b9df0 100644 --- a/BeamWallet/Controls/Cell/BMFieldCell.swift +++ b/BeamWallet/Controls/Cell/BMFieldCell.swift @@ -67,9 +67,15 @@ class BMFieldCell: BaseCell { } } + override func prepareForReuse() { + super.prepareForReuse() + copyText = nil + keyboardType = .default + } + override func awakeFromNib() { super.awakeFromNib() - + selectionStyle = .none nameLabel.isUserInteractionEnabled = true diff --git a/BeamWallet/Model/AssetSwaps/AssetSwapCreateViewModel.swift b/BeamWallet/Model/AssetSwaps/AssetSwapCreateViewModel.swift index 8c7e95c8..bce7b772 100644 --- a/BeamWallet/Model/AssetSwaps/AssetSwapCreateViewModel.swift +++ b/BeamWallet/Model/AssetSwaps/AssetSwapCreateViewModel.swift @@ -90,6 +90,8 @@ class AssetSwapCreateViewModel: NSObject { private func grothFrom(_ string: String) -> UInt64 { let normalized = string.replacingOccurrences(of: ",", with: ".") guard let beam = Double(normalized), beam > 0 else { return 0 } - return UInt64(beam * 100_000_000.0) + let scaled = beam * 100_000_000.0 + guard scaled.isFinite, scaled >= 0, scaled < Double(UInt64.max) else { return 0 } + return UInt64(scaled) } } diff --git a/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapCreateViewController.swift b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapCreateViewController.swift index a6303c80..62216cc0 100644 --- a/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapCreateViewController.swift +++ b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapCreateViewController.swift @@ -40,6 +40,8 @@ class AssetSwapCreateViewController: BaseViewController { private let rateValueLabel = UILabel() private let errorLabel = UILabel() + private var isSubmitting = false + private lazy var publishButton: BMButton = { let button = BMButton.defaultButton(frame: CGRect(x: 0, y: 0, width: 240, height: 44), color: UIColor.main.brightTeal) button.setTitle(Localizable.shared.strings.asset_swap_publish.lowercased(), for: .normal) @@ -290,11 +292,16 @@ class AssetSwapCreateViewController: BaseViewController { } @objc private func onPublish() { + guard !isSubmitting else { return } guard viewModel.canSubmit else { return } + isSubmitting = true + publishButton.isEnabled = false if viewModel.submit() { navigationController?.popViewController(animated: true) } else { errorLabel.text = Localizable.shared.strings.error + isSubmitting = false + publishButton.isEnabled = true } } } diff --git a/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapDetailsViewController.swift b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapDetailsViewController.swift index 3ee7a3b4..67ba954a 100644 --- a/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapDetailsViewController.swift +++ b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapDetailsViewController.swift @@ -37,6 +37,9 @@ class AssetSwapDetailsViewController: BaseViewController { private var technicalExpanded = false + private var isSubmitting = false + private weak var acceptButton: BMButton? + init(order: BMDexOrder) { self.viewModel = AssetSwapDetailsViewModel(order: order) super.init(nibName: nil, bundle: nil) @@ -581,6 +584,7 @@ class AssetSwapDetailsViewController: BaseViewController { rightButton.setTitleColor(UIColor.main.marineOriginal.withAlphaComponent(0.5), for: .highlighted) rightButton.titleLabel?.font = BoldFont(size: 14) rightButton.addTarget(self, action: #selector(onAccept), for: .touchUpInside) + acceptButton = rightButton } leftButton.addTarget(self, action: #selector(onLeftButton), for: .touchUpInside) @@ -643,12 +647,18 @@ class AssetSwapDetailsViewController: BaseViewController { } @objc private func onAccept() { + guard !isSubmitting else { return } if let error = viewModel.validationError { alert(message: error) return } + isSubmitting = true + acceptButton?.isEnabled = false if viewModel.accept() { navigationController?.popViewController(animated: true) + } else { + isSubmitting = false + acceptButton?.isEnabled = true } } } From 08b10ceb44e67bd4e5fa3eb721a63ce198085430 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Mon, 11 May 2026 20:38:35 +0200 Subject: [PATCH 37/48] fix(threading): main-dispatch caches, BEAM split fee, dark-mode lock, bounce restore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Messenger and offline-payment-count callbacks (onInstantMessage, onGetChatList, onGetChatMessages, onChatRemoved, onGetAddress) mutated NSMutableArray/NSMutableDictionary on the reactor thread while UI read them on main — would eventually crash with "collection mutated while being enumerated". Wrap each mutate-and-broadcast body in a main-queue dispatch, mirroring the existing addressbook pattern. SplitCoinsViewModel's output slices summed to exactly the largest UTXO; for BEAM the wallet had to pay fee from other UTXOs, but if the largest was the dominant BEAM coin the C++ tx failed silently in coin-selection. Subtract feeGroth from the last slice when assetId == 0; surface validationError if no slice has headroom. Settings.setDefaultDarkMode short-circuited on isSetDarkModeKey presence, so users from before that marker existed (with darkModeKey already set) got retroactively flipped to light. Pre-empt: if darkModeKey is present but the marker isn't, write the marker now and honour the persisted value. BaseTableViewController.keyboardWillHide always set alwaysBounceVertical = false, stomping any subclass that opted in. Save the pre-keyboard value on show, restore on hide. AssetSwapCreateViewModel.submit() clamps expirationMinutes to min(value, 720) before the bridge call — SBBS bulletins TTL out at ~12h so anything larger is unreachable. --- BeamWallet/BeamSDK/Settings.m | 22 +- BeamWallet/BeamSDK/WalletModel.mm | 284 ++++++++++-------- .../AssetSwaps/AssetSwapCreateViewModel.swift | 6 +- .../Model/UTXO/SplitCoinsViewModel.swift | 22 ++ .../Base/BaseTableViewController.swift | 11 +- 5 files changed, 214 insertions(+), 131 deletions(-) diff --git a/BeamWallet/BeamSDK/Settings.m b/BeamWallet/BeamSDK/Settings.m index 9b3f6592..81f99029 100644 --- a/BeamWallet/BeamSDK/Settings.m +++ b/BeamWallet/BeamSDK/Settings.m @@ -327,14 +327,26 @@ -(void)setConnectToRandomNode:(BOOL)connectToRandomNode { } -(void)setDefaultDarkMode:(BOOL)isSystemMode { - if (![[NSUserDefaults standardUserDefaults] objectForKey:isSetDarkModeKey]) { + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + // Pre-isSetDarkModeKey installs already had darkModeKey persisted; if we + // see one without the marker, lock the existing preference in place so + // the fresh-install branch below doesn't retroactively flip them. + if ([defaults objectForKey:darkModeKey] != nil && + [defaults objectForKey:isSetDarkModeKey] == nil) { + [defaults setObject:@"1" forKey:isSetDarkModeKey]; + [defaults synchronize]; + _isDarkMode = [[defaults objectForKey:darkModeKey] boolValue]; + return; + } + + if (![defaults objectForKey:isSetDarkModeKey]) { self.isDarkMode = isSystemMode; - - [[NSUserDefaults standardUserDefaults] setObject:@"1" forKey:isSetDarkModeKey]; - [[NSUserDefaults standardUserDefaults] synchronize]; + + [defaults setObject:@"1" forKey:isSetDarkModeKey]; + [defaults synchronize]; } else{ - _isDarkMode = [[[NSUserDefaults standardUserDefaults] objectForKey:darkModeKey] boolValue]; + _isDarkMode = [[defaults objectForKey:darkModeKey] boolValue]; } } diff --git a/BeamWallet/BeamSDK/WalletModel.mm b/BeamWallet/BeamSDK/WalletModel.mm index 70284b5d..3b28d6f8 100644 --- a/BeamWallet/BeamSDK/WalletModel.mm +++ b/BeamWallet/BeamSDK/WalletModel.mm @@ -1016,118 +1016,139 @@ static void ensureRulesOnCurrentThread() { } NSLog(@"[Messenger] onInstantMessage peer=%@ income=%d len=%lu", peer, isIncome ? 1 : 0, (unsigned long)text.length); - BMInstantMessage *bmMessage = [[BMInstantMessage alloc] init]; - bmMessage.timestamp = (UInt64)time; - bmMessage.peerWalletId = peer; - bmMessage.message = text; - bmMessage.isIncome = isIncome ? YES : NO; - bmMessage.isRead = isIncome ? NO : YES; - bmMessage.myWalletId = @""; - - NSMutableDictionary *byPeer = [AppModel sharedManager].messagesByPeer; - NSMutableArray *list = byPeer[peer]; - if (list == nil) { - list = [NSMutableArray new]; - byPeer[peer] = list; - } - [list addObject:bmMessage]; - - NSMutableArray *chats = [AppModel sharedManager].chats; - BMChat *existing = nil; - for (BMChat *c in chats) { - if ([c.peerWalletId isEqualToString:peer]) { - existing = c; - break; + UInt64 timestamp = (UInt64)time; + BOOL isIncomeFlag = isIncome ? YES : NO; + + // Mutate the messagesByPeer / chats caches and broadcast on main; UI reads + // these unguarded (NSMutableArray / NSMutableDictionary) so reactor-thread + // writes will eventually crash with `collection mutated while being + // enumerated`. Mirrors the dispatch-on-main pattern used by the DEX path. + dispatch_async(dispatch_get_main_queue(), ^{ + BMInstantMessage *bmMessage = [[BMInstantMessage alloc] init]; + bmMessage.timestamp = timestamp; + bmMessage.peerWalletId = peer; + bmMessage.message = text; + bmMessage.isIncome = isIncomeFlag; + bmMessage.isRead = isIncomeFlag ? NO : YES; + bmMessage.myWalletId = @""; + + NSMutableDictionary *byPeer = [AppModel sharedManager].messagesByPeer; + NSMutableArray *list = byPeer[peer]; + if (list == nil) { + list = [NSMutableArray new]; + byPeer[peer] = list; + } + [list addObject:bmMessage]; + + NSMutableArray *chats = [AppModel sharedManager].chats; + BMChat *existing = nil; + for (BMChat *c in chats) { + if ([c.peerWalletId isEqualToString:peer]) { + existing = c; + break; + } } - } - if (existing == nil) { - existing = [[BMChat alloc] init]; - existing.peerWalletId = peer; - BMContact *contact = [[AppModel sharedManager] getContactFromId:peer]; - if (contact != nil) { - existing.contactName = contact.name; + if (existing == nil) { + existing = [[BMChat alloc] init]; + existing.peerWalletId = peer; + BMContact *contact = [[AppModel sharedManager] getContactFromId:peer]; + if (contact != nil) { + existing.contactName = contact.name; + } + [chats addObject:existing]; } - [chats addObject:existing]; - } - existing.lastMessagePreview = text; - existing.lastMessageTimestamp = (UInt64)time; - if (isIncome) { - existing.hasUnread = YES; - } - - NSArray *delegates = [AppModel sharedManager].delegates.allObjects; - for (id delegate in delegates) { - if ([delegate respondsToSelector:@selector(onInstantMessageReceived:)]) { - [delegate onInstantMessageReceived:bmMessage]; + existing.lastMessagePreview = text; + existing.lastMessageTimestamp = timestamp; + if (isIncomeFlag) { + existing.hasUnread = YES; } - if ([delegate respondsToSelector:@selector(onChatListChanged)]) { - [delegate onChatListChanged]; + + NSArray *delegates = [AppModel sharedManager].delegates.allObjects; + for (id delegate in delegates) { + if ([delegate respondsToSelector:@selector(onInstantMessageReceived:)]) { + [delegate onInstantMessageReceived:bmMessage]; + } + if ([delegate respondsToSelector:@selector(onChatListChanged)]) { + [delegate onChatListChanged]; + } } - } + }); } void WalletModel::onGetChatList(const std::vector>& chats) { - NSMutableDictionary*> *byPeer = [AppModel sharedManager].messagesByPeer; + // Decode WalletIDs into ObjC strings up-front; the rest of the work + // (cache mutation + delegate broadcast) hops to main to avoid racing UI + // reads of `messagesByPeer` / `chats`. + NSMutableArray *entries = [NSMutableArray arrayWithCapacity:chats.size()]; + for (const auto& entry : chats) { + NSString *peer = [NSString stringWithUTF8String:to_string(entry.first).c_str()]; + [entries addObject:@{ @"peer": peer, @"unread": @(entry.second) }]; + } - NSArray *previousChats = [[AppModel sharedManager].chats copy]; - NSMutableSet *peersFromDB = [NSMutableSet new]; + dispatch_async(dispatch_get_main_queue(), ^{ + NSMutableDictionary*> *byPeer = [AppModel sharedManager].messagesByPeer; - NSMutableArray *result = [NSMutableArray new]; + NSArray *previousChats = [[AppModel sharedManager].chats copy]; + NSMutableSet *peersFromDB = [NSMutableSet new]; - for (const auto& entry : chats) { - NSString *peer = [NSString stringWithUTF8String:to_string(entry.first).c_str()]; - [peersFromDB addObject:peer]; + NSMutableArray *result = [NSMutableArray new]; - BMChat *chat = [[BMChat alloc] init]; - chat.peerWalletId = peer; - chat.hasUnread = entry.second ? YES : NO; + for (NSDictionary *entry in entries) { + NSString *peer = entry[@"peer"]; + BOOL unread = [entry[@"unread"] boolValue]; + [peersFromDB addObject:peer]; - BMContact *contact = [[AppModel sharedManager] getContactFromId:peer]; - if (contact != nil) { - chat.contactName = contact.name; - } - for (BMChat *prev in previousChats) { - if ([prev.peerWalletId isEqualToString:peer]) { - if (prev.contactName.length > 0 && chat.contactName.length == 0) { - chat.contactName = prev.contactName; - } - if (prev.myWalletId.length > 0) { - chat.myWalletId = prev.myWalletId; + BMChat *chat = [[BMChat alloc] init]; + chat.peerWalletId = peer; + chat.hasUnread = unread ? YES : NO; + + BMContact *contact = [[AppModel sharedManager] getContactFromId:peer]; + if (contact != nil) { + chat.contactName = contact.name; + } + for (BMChat *prev in previousChats) { + if ([prev.peerWalletId isEqualToString:peer]) { + if (prev.contactName.length > 0 && chat.contactName.length == 0) { + chat.contactName = prev.contactName; + } + if (prev.myWalletId.length > 0) { + chat.myWalletId = prev.myWalletId; + } + break; } - break; } - } - NSArray *cached = byPeer[peer]; - BMInstantMessage *latest = cached.lastObject; - if (latest != nil) { - chat.lastMessagePreview = latest.message; - chat.lastMessageTimestamp = latest.timestamp; - } + NSArray *cached = byPeer[peer]; + BMInstantMessage *latest = cached.lastObject; + if (latest != nil) { + chat.lastMessagePreview = latest.message; + chat.lastMessageTimestamp = latest.timestamp; + } - [result addObject:chat]; - } + [result addObject:chat]; + } - for (BMChat *prev in previousChats) { - if (![peersFromDB containsObject:prev.peerWalletId]) { - [result addObject:prev]; + for (BMChat *prev in previousChats) { + if (![peersFromDB containsObject:prev.peerWalletId]) { + [result addObject:prev]; + } } - } - [result sortUsingComparator:^NSComparisonResult(BMChat *a, BMChat *b) { - if (a.lastMessageTimestamp == b.lastMessageTimestamp) return NSOrderedSame; - return a.lastMessageTimestamp < b.lastMessageTimestamp ? NSOrderedDescending : NSOrderedAscending; - }]; + [result sortUsingComparator:^NSComparisonResult(BMChat *a, BMChat *b) { + if (a.lastMessageTimestamp == b.lastMessageTimestamp) return NSOrderedSame; + return a.lastMessageTimestamp < b.lastMessageTimestamp ? NSOrderedDescending : NSOrderedAscending; + }]; - [[AppModel sharedManager].chats removeAllObjects]; - [[AppModel sharedManager].chats addObjectsFromArray:result]; + [[AppModel sharedManager].chats removeAllObjects]; + [[AppModel sharedManager].chats addObjectsFromArray:result]; - NSArray *delegates = [AppModel sharedManager].delegates.allObjects; - for (id delegate in delegates) { - if ([delegate respondsToSelector:@selector(onChatListChanged)]) { - [delegate onChatListChanged]; + NSArray *delegates = [AppModel sharedManager].delegates.allObjects; + for (id delegate in delegates) { + if ([delegate respondsToSelector:@selector(onChatListChanged)]) { + [delegate onChatListChanged]; + } } - } + }); } void WalletModel::onGetChatMessages(const std::vector& messages) { @@ -1135,6 +1156,9 @@ static void ensureRulesOnCurrentThread() { NSString *peer = [NSString stringWithUTF8String:to_string(messages.front().m_counterpart).c_str()]; + // Build the BMInstantMessage list off-main (no shared state touched), then + // assign the result and broadcast on main so UI readers of messagesByPeer + // never observe a half-mutated container. NSMutableArray *result = [NSMutableArray new]; for (const auto& im : messages) { BMInstantMessage *bmMessage = [[BMInstantMessage alloc] init]; @@ -1156,38 +1180,43 @@ static void ensureRulesOnCurrentThread() { return a.timestamp < b.timestamp ? NSOrderedAscending : NSOrderedDescending; }]; - [AppModel sharedManager].messagesByPeer[peer] = result; + dispatch_async(dispatch_get_main_queue(), ^{ + [AppModel sharedManager].messagesByPeer[peer] = result; - NSArray *delegates = [AppModel sharedManager].delegates.allObjects; - for (id delegate in delegates) { - if ([delegate respondsToSelector:@selector(onChatMessagesLoaded:messages:)]) { - [delegate onChatMessagesLoaded:peer messages:result]; + NSArray *delegates = [AppModel sharedManager].delegates.allObjects; + for (id delegate in delegates) { + if ([delegate respondsToSelector:@selector(onChatMessagesLoaded:messages:)]) { + [delegate onChatMessagesLoaded:peer messages:result]; + } } - } + }); } void WalletModel::onChatRemoved(const beam::wallet::WalletID& counterpart) { NSString *peer = [NSString stringWithUTF8String:to_string(counterpart).c_str()]; - NSMutableArray *chats = [AppModel sharedManager].chats; - NSMutableIndexSet *indexes = [NSMutableIndexSet new]; - for (NSUInteger i = 0; i < chats.count; i++) { - if ([chats[i].peerWalletId isEqualToString:peer]) { - [indexes addIndex:i]; + // Mutate chats / messagesByPeer on main; UI iterates these unguarded. + dispatch_async(dispatch_get_main_queue(), ^{ + NSMutableArray *chats = [AppModel sharedManager].chats; + NSMutableIndexSet *indexes = [NSMutableIndexSet new]; + for (NSUInteger i = 0; i < chats.count; i++) { + if ([chats[i].peerWalletId isEqualToString:peer]) { + [indexes addIndex:i]; + } } - } - [chats removeObjectsAtIndexes:indexes]; - [[AppModel sharedManager].messagesByPeer removeObjectForKey:peer]; + [chats removeObjectsAtIndexes:indexes]; + [[AppModel sharedManager].messagesByPeer removeObjectForKey:peer]; - NSArray *delegates = [AppModel sharedManager].delegates.allObjects; - for (id delegate in delegates) { - if ([delegate respondsToSelector:@selector(onChatRemoved:)]) { - [delegate onChatRemoved:peer]; - } - if ([delegate respondsToSelector:@selector(onChatListChanged)]) { - [delegate onChatListChanged]; + NSArray *delegates = [AppModel sharedManager].delegates.allObjects; + for (id delegate in delegates) { + if ([delegate respondsToSelector:@selector(onChatRemoved:)]) { + [delegate onChatRemoved:peer]; + } + if ([delegate respondsToSelector:@selector(onChatListChanged)]) { + [delegate onChatListChanged]; + } } - } + }); } #ifdef BEAM_ASSET_SWAP_SUPPORT @@ -1777,20 +1806,27 @@ static void ensureRulesOnCurrentThread() { NSString *walletIdStr = [NSString stringWithUTF8String:to_string(wid).c_str()]; int newCount = (int)offlinePayments; - NSNumber *prev = [AppModel sharedManager].offlinePaymentsByWalletId[walletIdStr]; - BOOL changed = (prev == nil || prev.intValue != newCount); - [AppModel sharedManager].offlinePaymentsByWalletId[walletIdStr] = @(newCount); - NSArray *delegates = [AppModel sharedManager].delegates.allObjects; - for(id delegate in delegates) - { - if ([delegate respondsToSelector:@selector(onMaxPrivacyTokensLeft:)]) { - [delegate onMaxPrivacyTokensLeft:newCount]; - } - if (changed && [delegate respondsToSelector:@selector(onOfflinePaymentsCountForWalletId:count:)]) { - [delegate onOfflinePaymentsCountForWalletId:walletIdStr count:newCount]; + // offlinePaymentsByWalletId is read on main from + // AppModel.offlinePaymentsCountForWalletId:; mutate + broadcast on main + // so the dictionary is never written from the reactor thread while UI + // enumerates it. + dispatch_async(dispatch_get_main_queue(), ^{ + NSNumber *prev = [AppModel sharedManager].offlinePaymentsByWalletId[walletIdStr]; + BOOL changed = (prev == nil || prev.intValue != newCount); + [AppModel sharedManager].offlinePaymentsByWalletId[walletIdStr] = @(newCount); + + NSArray *delegates = [AppModel sharedManager].delegates.allObjects; + for(id delegate in delegates) + { + if ([delegate respondsToSelector:@selector(onMaxPrivacyTokensLeft:)]) { + [delegate onMaxPrivacyTokensLeft:newCount]; + } + if (changed && [delegate respondsToSelector:@selector(onOfflinePaymentsCountForWalletId:count:)]) { + [delegate onOfflinePaymentsCountForWalletId:walletIdStr count:newCount]; + } } - } + }); } void WalletModel::onShieldedCoinChanged(beam::wallet::ChangeAction action, const std::vector& items) { diff --git a/BeamWallet/Model/AssetSwaps/AssetSwapCreateViewModel.swift b/BeamWallet/Model/AssetSwaps/AssetSwapCreateViewModel.swift index bce7b772..db6aa345 100644 --- a/BeamWallet/Model/AssetSwaps/AssetSwapCreateViewModel.swift +++ b/BeamWallet/Model/AssetSwaps/AssetSwapCreateViewModel.swift @@ -79,12 +79,16 @@ class AssetSwapCreateViewModel: NSObject { guard canSubmit, let send = sendAsset, let receive = receiveAsset else { return false } + // SBBS message TTL caps the order lifetime at 12h regardless of what + // the picker offers; clamp at the model boundary as defense in depth + // against any caller writing a larger value. + let clampedExpiration = min(expirationMinutes, 720) return AppModel.sharedManager().publishDexOrder( withSendAsset: UInt32(send.assetId), sendAmount: grothFrom(sendAmountString), receiveAsset: UInt32(receive.assetId), receiveAmount: grothFrom(receiveAmountString), - expirationMinutes: expirationMinutes) + expirationMinutes: clampedExpiration) } private func grothFrom(_ string: String) -> UInt64 { diff --git a/BeamWallet/Model/UTXO/SplitCoinsViewModel.swift b/BeamWallet/Model/UTXO/SplitCoinsViewModel.swift index b45755ac..cd228edd 100644 --- a/BeamWallet/Model/UTXO/SplitCoinsViewModel.swift +++ b/BeamWallet/Model/UTXO/SplitCoinsViewModel.swift @@ -59,6 +59,17 @@ final class SplitCoinsViewModel: NSObject { if !arr.isEmpty { arr[arr.count - 1] += remainder } + // For BEAM (assetId == 0) the fee is paid in BEAM from the same UTXO + // we are splitting. If we keep the slices summing to largestGroth the + // wallet has no headroom for the fee; coin-selection then silently + // fails. Subtract the fee from the last slice. Caller is gated on + // validationError, which already guards `largestGroth > feeGroth`, so + // the subtraction is safe; the > 0 guard is belt-and-braces. + if assetId == 0 && !arr.isEmpty && feeGroth > 0 { + let last = arr[arr.count - 1] + guard last > feeGroth else { return [] } + arr[arr.count - 1] = last - feeGroth + } return arr } @@ -80,6 +91,17 @@ final class SplitCoinsViewModel: NSObject { if assetId == 0 && largestGroth <= feeGroth { return Localizable.shared.strings.asset_swap_insufficient_funds } + // For BEAM the fee comes off the last slice (see outputAmounts); if + // the per-split base + remainder doesn't leave room for the fee, the + // resulting tx would be invalid. + if assetId == 0 && splitInto > 0 { + let count = UInt64(splitInto) + let base = largestGroth / count + let remainder = largestGroth - base * count + if base + remainder <= feeGroth { + return Localizable.shared.strings.asset_swap_insufficient_funds + } + } return nil } diff --git a/BeamWallet/ViewControllers/Base/BaseTableViewController.swift b/BeamWallet/ViewControllers/Base/BaseTableViewController.swift index 92ea428a..69942d1a 100644 --- a/BeamWallet/ViewControllers/Base/BaseTableViewController.swift +++ b/BeamWallet/ViewControllers/Base/BaseTableViewController.swift @@ -34,6 +34,11 @@ class BaseTableViewController: BaseViewController { var tableView: UITableView! var tableStyle = UITableView.Style.plain + /// Snapshot of `tableView.alwaysBounceVertical` taken before the keyboard + /// shows; restored on hide so subclasses that opt into bouncing aren't + /// silently flipped off whenever a field unfocuses. + private var savedAlwaysBounce: Bool? + /// View pinned above the bottom safe area, outside the table. The table is /// sized to fit the area above it, so content placed here never causes the /// table to scroll. Subclasses set this from viewDidLoad. Toggle visibility @@ -125,6 +130,9 @@ extension BaseTableViewController { let keyboardHeight = keyboardRectangle.height tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: keyboardHeight, right: 0) + if savedAlwaysBounce == nil { + savedAlwaysBounce = tableView.alwaysBounceVertical + } tableView.alwaysBounceVertical = true let lift = keyboardHeight - view.safeAreaInsets.bottom @@ -136,7 +144,8 @@ extension BaseTableViewController { @objc func keyboardWillHide(notification: NSNotification) { tableView.contentInset = UIEdgeInsets.zero - tableView.alwaysBounceVertical = false + tableView.alwaysBounceVertical = savedAlwaysBounce ?? false + savedAlwaysBounce = nil bottomAccessoryView?.transform = .identity } } From a8f6869b7199eaed12964ed8f64afe7b10f80e3c Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Mon, 11 May 2026 20:38:48 +0200 Subject: [PATCH 38/48] chore(cleanup): retain cycles, dead inspectables, gesture guard, voucher clamp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ReceiveAddressViewModel.generateTokens: five token-generation completion handlers now capture self weakly. - BMField: lineColor / lineHeight are KVC-compatible stubs only; added a TODO so the next reader doesn't expect them to render. - AssetSearchCell: remove manual iconView.awakeFromNib() call — AssetIconView's init(frame:) already runs commonInit(). - BaseNavigationController.gestureRecognizerShouldBegin: split the combined guard so a missing navigationController returns false rather than falling through to true. - ReceiveAddressViewModel.vouchersCount setter clamps to 1...maxVouchersCount; matches the VC-side clamp. - RecoveryProgress.OnProgress early-returns when total == 0 so the initial 0/0 callback no longer fires the delegate with a fake 0%. --- BeamWallet/BeamSDK/RecoveryProgress.mm | 9 +++++-- BeamWallet/Controls/BMField.swift | 3 +++ .../Address/ReceiveAddressViewModel.swift | 26 ++++++++++++++----- .../Base/BaseNavigationController.swift | 6 +++-- .../Receive/AssetSearchViewController.swift | 1 - 5 files changed, 33 insertions(+), 12 deletions(-) diff --git a/BeamWallet/BeamSDK/RecoveryProgress.mm b/BeamWallet/BeamSDK/RecoveryProgress.mm index 62cf807c..8611f52b 100644 --- a/BeamWallet/BeamSDK/RecoveryProgress.mm +++ b/BeamWallet/BeamSDK/RecoveryProgress.mm @@ -187,8 +187,13 @@ // unless integer percent advanced or we just hit completion — otherwise the // dispatch_async-per-callback on the iOS side accumulates blocks on the main // queue faster than UIKit can drain them, blowing past the highwater limit. - int percent = (total > 0) ? (int)((done * 100) / total) : 0; - bool atCompletion = (total > 0 && done >= total); + if (total == 0) { + // No useful 0/0 update to forward — would just push a meaningless + // delegate callback before any real progress has been reported. + return [AppModel sharedManager].isRestoreFlow; + } + int percent = (int)((done * 100) / total); + bool atCompletion = (done >= total); if (percent == m_lastReportedPercent && !atCompletion) { return [AppModel sharedManager].isRestoreFlow; } diff --git a/BeamWallet/Controls/BMField.swift b/BeamWallet/Controls/BMField.swift index b15f632c..d2b6db7c 100644 --- a/BeamWallet/Controls/BMField.swift +++ b/BeamWallet/Controls/BMField.swift @@ -108,6 +108,9 @@ class BMField: BMClearField { } } + // TODO: stored only to satisfy KVC for legacy xibs that still reference these + // keys; the values are not rendered. Do not remove the properties without + // also stripping the bindings from every xib that uses BMField. @IBInspectable var lineColor: UIColor? @IBInspectable var lineHeight: CGFloat = 0 diff --git a/BeamWallet/Model/Address/ReceiveAddressViewModel.swift b/BeamWallet/Model/Address/ReceiveAddressViewModel.swift index f93e178f..38aa742c 100644 --- a/BeamWallet/Model/Address/ReceiveAddressViewModel.swift +++ b/BeamWallet/Model/Address/ReceiveAddressViewModel.swift @@ -105,8 +105,15 @@ class ReceiveAddressViewModel: NSObject { private var suppressVouchersRegen = false - public var vouchersCount: Int = ReceiveTokenType.regular.defaultVouchers { - didSet { + private var _vouchersCount: Int = ReceiveTokenType.regular.defaultVouchers + public var vouchersCount: Int { + get { _vouchersCount } + set { + // Mirror the VC's 1...maxVouchersCount clamp so direct/programmatic + // writes can't bypass validation. + let clamped = max(1, min(ReceiveAddressViewModel.maxVouchersCount, newValue)) + guard clamped != _vouchersCount else { return } + _vouchersCount = clamped if !suppressVouchersRegen && selectedTokenType.supportsVouchers { generateTokens() } @@ -211,29 +218,33 @@ class ReceiveAddressViewModel: NSObject { switch selectedTokenType { case .sbbs: - AppModel.sharedManager().generateSBBSAddress(walletId, assetId: assetId, amount: bamount) { token in + AppModel.sharedManager().generateSBBSAddress(walletId, assetId: assetId, amount: bamount) { [weak self] token in DispatchQueue.main.async { + guard let self = self else { return } self.address.sbbsToken = token self.onAddressUpdate?(nil) } } case .regular: - AppModel.sharedManager().generateOfflineAddress(walletId, assetId: assetId, amount: bamount, offlineCount: UInt32(vouchersCount)) { token in + AppModel.sharedManager().generateOfflineAddress(walletId, assetId: assetId, amount: bamount, offlineCount: UInt32(vouchersCount)) { [weak self] token in DispatchQueue.main.async { + guard let self = self else { return } self.address.address = token self.onAddressUpdate?(nil) } } case .maxPrivacy: - AppModel.sharedManager().generateMaxPrivacyAddress(walletId, assetId: assetId, amount: bamount) { token in + AppModel.sharedManager().generateMaxPrivacyAddress(walletId, assetId: assetId, amount: bamount) { [weak self] token in DispatchQueue.main.async { + guard let self = self else { return } self.address.maxPrivacyToken = token self.onAddressUpdate?(nil) } } case .offline: - AppModel.sharedManager().generateOfflineAddress(walletId, assetId: assetId, amount: bamount, offlineCount: UInt32(vouchersCount)) { token in + AppModel.sharedManager().generateOfflineAddress(walletId, assetId: assetId, amount: bamount, offlineCount: UInt32(vouchersCount)) { [weak self] token in DispatchQueue.main.async { + guard let self = self else { return } let isFirst = (self.address.offlineToken == nil) self.address.offlineToken = token if isFirst { @@ -244,8 +255,9 @@ class ReceiveAddressViewModel: NSObject { } } case .publicOffline: - AppModel.sharedManager().generatePublicOfflineAddress(walletId, assetId: assetId, amount: bamount) { token in + AppModel.sharedManager().generatePublicOfflineAddress(walletId, assetId: assetId, amount: bamount) { [weak self] token in DispatchQueue.main.async { + guard let self = self else { return } self.address.publicOfflineToken = token self.onAddressUpdate?(nil) } diff --git a/BeamWallet/ViewControllers/Base/BaseNavigationController.swift b/BeamWallet/ViewControllers/Base/BaseNavigationController.swift index c80e598c..1cbe975a 100644 --- a/BeamWallet/ViewControllers/Base/BaseNavigationController.swift +++ b/BeamWallet/ViewControllers/Base/BaseNavigationController.swift @@ -129,8 +129,10 @@ class BaseNavigationController: UINavigationController, UINavigationControllerDe } func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { - guard let top = UIApplication.getTopMostViewController(), - let nav = top.navigationController else { return true } + guard let top = UIApplication.getTopMostViewController() else { return true } + // No nav stack means there's nothing to pop — and a transient nil during + // a transition shouldn't be treated as "this is a root, allow swipe". + guard let nav = top.navigationController else { return false } // Side-menu roots have nothing to pop to. if nav.viewControllers.first === top { return false } // BEAMX DAO embeds a WebView whose horizontal pan conflicts with the swipe. diff --git a/BeamWallet/ViewControllers/Main/Wallet/Receive/AssetSearchViewController.swift b/BeamWallet/ViewControllers/Main/Wallet/Receive/AssetSearchViewController.swift index c65de7b0..3ed8fe6c 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Receive/AssetSearchViewController.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Receive/AssetSearchViewController.swift @@ -150,7 +150,6 @@ private final class AssetSearchCell: UITableViewCell { iconView.frame = CGRect(x: 0, y: 0, width: 26, height: 26) iconView.translatesAutoresizingMaskIntoConstraints = false contentView.addSubview(iconView) - iconView.awakeFromNib() unitLabel.font = BoldFont(size: 16) unitLabel.textColor = .white From 2b474a843aa57b2201e4e0f65a2befe0e6c1a71a Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Mon, 11 May 2026 20:39:13 +0200 Subject: [PATCH 39/48] fix(create-flow): drop redundant createWallet from mobile/own-node paths; thread DEX callbacks on main MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The mobile-node (items[1]) and own-node create branches in SelectNodeViewController still called createWalletForCurrentNode() before pushing OpenWalletProgressViewController, whose viewDidLoad reruns createWallet. The second call short-circuits on `walletDb != nil` today but onWalledOpened still runs twice and any future failure path would land in abortCreateAndReset(), wiping the DB just made. Drop the redundant call from both branches; since the random-node branch already migrated and no callers remain, delete the createWalletForCurrentNode() method entirely. WalletModel::onDexOrdersChanged and onFindDexOrder mutated [AppModel sharedManager].dexOrders on the reactor thread while UI read them from main — same race class as the messenger callbacks. Snapshot the C++ vector off-main, then move the mutate-and-broadcast inside dispatch_async(dispatch_get_main_queue()). --- BeamWallet/BeamSDK/WalletModel.mm | 95 +++++++++++-------- .../Settings/SelectNodeViewController.swift | 39 +++----- 2 files changed, 66 insertions(+), 68 deletions(-) diff --git a/BeamWallet/BeamSDK/WalletModel.mm b/BeamWallet/BeamSDK/WalletModel.mm index 3b28d6f8..66305983 100644 --- a/BeamWallet/BeamSDK/WalletModel.mm +++ b/BeamWallet/BeamSDK/WalletModel.mm @@ -1239,41 +1239,50 @@ static void ensureRulesOnCurrentThread() { } void WalletModel::onDexOrdersChanged(beam::wallet::ChangeAction action, const std::vector& orders) { - NSMutableArray *cache = [AppModel sharedManager].dexOrders; - - if (action == beam::wallet::ChangeAction::Reset) { - [cache removeAllObjects]; + // Snapshot the C++ vector into BMDexOrder objects on the reactor thread + // (DexOrder is reactor-thread-only), then mutate the shared `dexOrders` + // cache and broadcast on main. UI reads `dexOrders` unguarded, so the + // cache mutation must not race with main-thread enumeration. Mirrors the + // dispatch-on-main pattern used by the messenger callbacks. + NSMutableArray *converted = [NSMutableArray arrayWithCapacity:orders.size()]; + for (const auto& order : orders) { + [converted addObject:MakeBMDexOrder(order)]; } + BOOL isReset = (action == beam::wallet::ChangeAction::Reset); + BOOL isRemoved = (action == beam::wallet::ChangeAction::Removed); - for (const auto& order : orders) { - NSString *orderID = [NSString stringWithUTF8String:order.getID().to_string().c_str()]; + dispatch_async(dispatch_get_main_queue(), ^{ + NSMutableArray *cache = [AppModel sharedManager].dexOrders; - NSUInteger existingIdx = NSNotFound; - for (NSUInteger i = 0; i < cache.count; i++) { - if ([cache[i].orderID isEqualToString:orderID]) { - existingIdx = i; - break; - } + if (isReset) { + [cache removeAllObjects]; } - if (action == beam::wallet::ChangeAction::Removed) { - if (existingIdx != NSNotFound) { - [cache removeObjectAtIndex:existingIdx]; + for (BMDexOrder *bmo in converted) { + NSUInteger existingIdx = NSNotFound; + for (NSUInteger i = 0; i < cache.count; i++) { + if ([cache[i].orderID isEqualToString:bmo.orderID]) { + existingIdx = i; + break; + } } - continue; - } - BMDexOrder *bmo = MakeBMDexOrder(order); - if (existingIdx != NSNotFound) { - [cache replaceObjectAtIndex:existingIdx withObject:bmo]; - } else { - [cache addObject:bmo]; + if (isRemoved) { + if (existingIdx != NSNotFound) { + [cache removeObjectAtIndex:existingIdx]; + } + continue; + } + + if (existingIdx != NSNotFound) { + [cache replaceObjectAtIndex:existingIdx withObject:bmo]; + } else { + [cache addObject:bmo]; + } } - } - NSArray *delegates = [AppModel sharedManager].delegates.allObjects; - NSArray *snapshot = [cache copy]; - dispatch_async(dispatch_get_main_queue(), ^{ + NSArray *snapshot = [cache copy]; + NSArray *delegates = [AppModel sharedManager].delegates.allObjects; for (id delegate in delegates) { if ([delegate respondsToSelector:@selector(onDexOrdersChanged:)]) { [delegate onDexOrdersChanged:snapshot]; @@ -1283,24 +1292,28 @@ static void ensureRulesOnCurrentThread() { } void WalletModel::onFindDexOrder(const beam::wallet::DexOrder& order) { + // Build the BMDexOrder off-main (no shared state touched), then mutate + // the `dexOrders` cache and broadcast on main. UI reads the cache + // unguarded, so the mutation must not race with main-thread enumeration. BMDexOrder *bmo = MakeBMDexOrder(order); - NSMutableArray *cache = [AppModel sharedManager].dexOrders; - NSUInteger existingIdx = NSNotFound; - for (NSUInteger i = 0; i < cache.count; i++) { - if ([cache[i].orderID isEqualToString:bmo.orderID]) { - existingIdx = i; - break; - } - } - if (existingIdx != NSNotFound) { - [cache replaceObjectAtIndex:existingIdx withObject:bmo]; - } else { - [cache addObject:bmo]; - } - NSArray *delegates = [AppModel sharedManager].delegates.allObjects; - NSArray *snapshot = [cache copy]; dispatch_async(dispatch_get_main_queue(), ^{ + NSMutableArray *cache = [AppModel sharedManager].dexOrders; + NSUInteger existingIdx = NSNotFound; + for (NSUInteger i = 0; i < cache.count; i++) { + if ([cache[i].orderID isEqualToString:bmo.orderID]) { + existingIdx = i; + break; + } + } + if (existingIdx != NSNotFound) { + [cache replaceObjectAtIndex:existingIdx withObject:bmo]; + } else { + [cache addObject:bmo]; + } + + NSArray *snapshot = [cache copy]; + NSArray *delegates = [AppModel sharedManager].delegates.allObjects; for (id delegate in delegates) { if ([delegate respondsToSelector:@selector(onDexOrdersChanged:)]) { [delegate onDexOrdersChanged:snapshot]; diff --git a/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift b/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift index baf3245c..c171985f 100644 --- a/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift +++ b/BeamWallet/ViewControllers/Main/Settings/SelectNodeViewController.swift @@ -165,25 +165,6 @@ class SelectNodeViewController: BaseTableViewController { BMLockScreen.shared.onTapEvent() } - /// Create-flow only: builds the wallet DB now that the chosen node has been - /// committed to Settings. createWallet → onWalledOpened → start() must run - /// inside the same io::Reactor::Scope, so we defer this to here rather than - /// running it earlier in CreateWalletPasswordViewController. - private func createWalletForCurrentNode() -> Bool { - guard let phrase = phrase, let pass = password else { return false } - let created = AppModel.sharedManager().createWallet(phrase, pass: pass) - if !created { - AppModel.sharedManager().abortCreateAndReset() - self.alert(title: Localizable.shared.strings.error, message: Localizable.shared.strings.wallet_not_created) { _ in - self.navigationController?.popToRootViewController(animated: true) - } - return false - } - OnboardManager.shared.saveSeed(seed: phrase) - _ = KeychainManager.addPassword(password: pass) - return true - } - @objc private func onNext() { isNeedDisconnect = true refreshActionButton() @@ -223,10 +204,12 @@ class SelectNodeViewController: BaseTableViewController { AppModel.sharedManager().enableBodyRequests(true) if isCreateWallet { - if createWalletForCurrentNode() { - let vc = OpenWalletProgressViewController(password: self.password ?? "", phrase: self.phrase) - self.pushViewController(vc: vc) - } + // OpenWalletProgressViewController owns creation when phrase + // is non-nil (see startCreateWallet). Calling createWallet here + // too would run it twice and any future failure path would + // land in abortCreateAndReset(), wiping the DB we just made. + let vc = OpenWalletProgressViewController(password: self.password ?? "", phrase: self.phrase) + self.pushViewController(vc: vc) } else { let vc = OpenWalletProgressViewController(onlyConnect: true) @@ -258,10 +241,12 @@ class SelectNodeViewController: BaseTableViewController { Settings.sharedManager().nodeAddress = fullAddress AppModel.sharedManager().changeNodeAddress() - if createWalletForCurrentNode() { - let vc = OpenWalletProgressViewController(password: self.password ?? "", phrase: self.phrase) - self.pushViewController(vc: vc) - } + // OpenWalletProgressViewController owns creation when phrase + // is non-nil (see startCreateWallet). Calling createWallet here + // too would run it twice and any future failure path would + // land in abortCreateAndReset(), wiping the DB we just made. + let vc = OpenWalletProgressViewController(password: self.password ?? "", phrase: self.phrase) + self.pushViewController(vc: vc) } else { if oldSelected == 0 { From 37c1784eec4e0fada27f6d41254adf261e321f0b Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Mon, 11 May 2026 21:31:42 +0200 Subject: [PATCH 40/48] fix(asset-swaps): surface asset IDs across create/list/details; stop wide amounts clipping the row caption Append `(assetId)` to the asset symbol on the swap create fields, orders-list amounts, and the details header rows so two assets sharing a short name are distinguishable end-to-end (matches the existing picker format). In the details asset row, lock caption/symbol horizontal compression resistance to required and drop the amount label's to defaultLow so Auto Layout squeezes the amount frame on long values. adjustsFontSizeToFitWidth then scales the amount text instead of overrunning the "YOU SEND" / "YOU RECEIVE" captions. --- .../AssetSwaps/AssetSwapCreateViewController.swift | 4 ++-- .../AssetSwaps/AssetSwapDetailsViewController.swift | 13 +++++++++++-- .../Main/AssetSwaps/Cells/AssetSwapOrderCell.swift | 4 +++- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapCreateViewController.swift b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapCreateViewController.swift index 62216cc0..d9d6828d 100644 --- a/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapCreateViewController.swift +++ b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapCreateViewController.swift @@ -221,8 +221,8 @@ class AssetSwapCreateViewController: BaseViewController { } private func refresh() { - sendAssetField.text = viewModel.sendAsset.map { "\($0.unitName)" } ?? "" - receiveAssetField.text = viewModel.receiveAsset.map { "\($0.unitName)" } ?? "" + sendAssetField.text = viewModel.sendAsset.map { "\($0.unitName) (\($0.assetId))" } ?? "" + receiveAssetField.text = viewModel.receiveAsset.map { "\($0.unitName) (\($0.assetId))" } ?? "" expirationField.text = expirationDisplayString(viewModel.expirationMinutes) rateValueLabel.text = "\(Localizable.shared.strings.asset_swap_rate): \(viewModel.displayRate())" errorLabel.text = viewModel.validationError ?? "" diff --git a/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapDetailsViewController.swift b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapDetailsViewController.swift index 67ba954a..594ed745 100644 --- a/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapDetailsViewController.swift +++ b/BeamWallet/ViewControllers/Main/AssetSwaps/AssetSwapDetailsViewController.swift @@ -130,7 +130,7 @@ class AssetSwapDetailsViewController: BaseViewController { asset: viewModel.sendAsset, caption: Localizable.shared.strings.asset_swap_send, amount: viewModel.order.displaySendAmount(), - assetSymbol: viewModel.order.sendAssetSName + assetSymbol: "\(viewModel.order.sendAssetSName) (\(viewModel.order.sendAssetId))" ) let receiveRow = makeAssetRow( @@ -138,7 +138,7 @@ class AssetSwapDetailsViewController: BaseViewController { asset: viewModel.receiveAsset, caption: Localizable.shared.strings.asset_swap_receive, amount: viewModel.order.displayReceiveAmount(), - assetSymbol: viewModel.order.receiveAssetSName + assetSymbol: "\(viewModel.order.receiveAssetSName) (\(viewModel.order.receiveAssetId))" ) let separator = UIView() @@ -206,14 +206,20 @@ class AssetSwapDetailsViewController: BaseViewController { captionLabel.translatesAutoresizingMaskIntoConstraints = false captionLabel.font = RegularFont(size: 11) captionLabel.textColor = UIColor.main.steelGrey + captionLabel.numberOfLines = 1 captionLabel.attributedText = NSAttributedString(string: caption.uppercased(), attributes: [.kern: 1.0]) + captionLabel.setContentCompressionResistancePriority(.required, for: .horizontal) + captionLabel.setContentHuggingPriority(.required, for: .horizontal) row.addSubview(captionLabel) let symbolLabel = UILabel() symbolLabel.translatesAutoresizingMaskIntoConstraints = false symbolLabel.font = SemiboldFont(size: 15) symbolLabel.textColor = UIColor.white + symbolLabel.numberOfLines = 1 symbolLabel.text = assetSymbol + symbolLabel.setContentCompressionResistancePriority(.required, for: .horizontal) + symbolLabel.setContentHuggingPriority(.required, for: .horizontal) row.addSubview(symbolLabel) let amountLabel = UILabel() @@ -221,9 +227,12 @@ class AssetSwapDetailsViewController: BaseViewController { amountLabel.font = BoldFont(size: 22) amountLabel.textColor = UIColor.white amountLabel.textAlignment = .right + amountLabel.numberOfLines = 1 amountLabel.adjustsFontSizeToFitWidth = true amountLabel.minimumScaleFactor = 0.6 amountLabel.text = amount + amountLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal) + amountLabel.setContentHuggingPriority(.defaultLow, for: .horizontal) row.addSubview(amountLabel) NSLayoutConstraint.activate([ diff --git a/BeamWallet/ViewControllers/Main/AssetSwaps/Cells/AssetSwapOrderCell.swift b/BeamWallet/ViewControllers/Main/AssetSwaps/Cells/AssetSwapOrderCell.swift index 710f9add..abf39731 100644 --- a/BeamWallet/ViewControllers/Main/AssetSwaps/Cells/AssetSwapOrderCell.swift +++ b/BeamWallet/ViewControllers/Main/AssetSwaps/Cells/AssetSwapOrderCell.swift @@ -88,7 +88,9 @@ class AssetSwapOrderCell: RippleCell { } func configure(with order: BMDexOrder, row: Int) { - amountsLabel.text = "\(order.displaySendAmount()) → \(order.displayReceiveAmount())" + let sendText = "\(order.displaySendAmount()) (\(order.sendAssetId))" + let receiveText = "\(order.displayReceiveAmount()) (\(order.receiveAssetId))" + amountsLabel.text = "\(sendText) → \(receiveText)" rateLabel.text = order.displayRate() if order.isCompleted { From 8dd8865fff04726af2d748100621edb4e3262f66 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Tue, 12 May 2026 01:09:07 +0200 Subject: [PATCH 41/48] feat(utxo): per-asset drill-down + consolidate via Split sheet MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - UTXO settings page now lists one row per asset and pushes a per-asset UTXO list on tap, so wallets with many assets scroll cleanly. - Row reuses AssetAvailableCell with an opt-in "N coins ›" accessory (lazy, hidden by default — wallet/assets pages unchanged). - AssetUTXOListViewController shows the UTXOs of a single asset; the section header gains a Consolidate pill next to Split. - Consolidate reuses the Split sheet via SplitCoinsViewModel.Mode (.split / .consolidate). Outputs collapse to [total - fee] (BEAM) or [total]; SplitCoinsViewController branches title / CTA / preview and hides the split-into selector in consolidate mode. - 4 new locale keys (consolidate, consolidate_coins_subtitle, consolidate_coins_cta, consolidate_started_message) copied across all 13 locales. --- BeamWallet.xcodeproj/project.pbxproj | 8 + .../Model/UTXO/SplitCoinsViewModel.swift | 88 ++++++--- BeamWallet/Protocols/LocalizableStrings.swift | 5 + .../UTXO/AssetUTXOListViewController.swift | 187 ++++++++++++++++++ .../Cells/AssetUTXOSectionHeaderView.swift | 61 ++++-- .../Main/UTXO/SplitCoinsViewController.swift | 37 +++- .../Main/UTXO/UTXOViewController.swift | 60 ++---- .../Wallet/Cells/AssetAvailableCell.swift | 47 ++++- Resources/cs.lproj/Localizable.strings | 4 + Resources/en.lproj/Localizable.strings | 4 + Resources/es.lproj/Localizable.strings | 4 + Resources/fi-FI.lproj/Localizable.strings | 4 + Resources/fr.lproj/Localizable.strings | 4 + Resources/ko.lproj/Localizable.strings | 4 + Resources/nl.lproj/Localizable.strings | 4 + Resources/ru.lproj/Localizable.strings | 4 + Resources/sv-SE.lproj/Localizable.strings | 4 + Resources/sv.lproj/Localizable.strings | 4 + Resources/th.lproj/Localizable.strings | 4 + Resources/tr.lproj/Localizable.strings | 4 + Resources/vi.lproj/Localizable.strings | 4 + Resources/zh-Hans.lproj/Localizable.strings | 4 + 22 files changed, 443 insertions(+), 106 deletions(-) create mode 100644 BeamWallet/ViewControllers/Main/UTXO/AssetUTXOListViewController.swift diff --git a/BeamWallet.xcodeproj/project.pbxproj b/BeamWallet.xcodeproj/project.pbxproj index f9aeaa05..96855e78 100644 --- a/BeamWallet.xcodeproj/project.pbxproj +++ b/BeamWallet.xcodeproj/project.pbxproj @@ -16,7 +16,9 @@ 0EC9234AAD2DC0A1BF7600B4 /* AssetUTXOSectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8865BEE3DDBE9806B38DDE04 /* AssetUTXOSectionHeaderView.swift */; }; 14458CA45E1281FAF80D496D /* MessengerNewChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13CF5C205DC060CADA96F025 /* MessengerNewChatViewController.swift */; }; 15A094B1963EAE81E9B86B33 /* BMDexOrder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 46577647151F6240CBA9CE2D /* BMDexOrder.mm */; }; + 187B4E604FD2814B8018C796 /* AssetUTXOListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0AA87DBB7C958778D72096C /* AssetUTXOListViewController.swift */; }; 215454B3AA22BD789F53A90C /* BMChat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8C5EB5519EB54866BA8DB9A4 /* BMChat.mm */; }; + 21C1E1B8354DCDBDB0A9ABB8 /* AssetUTXOListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0AA87DBB7C958778D72096C /* AssetUTXOListViewController.swift */; }; 2361D1F909D78EC50B8C5D5C /* MessengerConversationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A439F6A64EB61AD3DF6945B /* MessengerConversationViewModel.swift */; }; 275E60FB3A8D4704581DF986 /* SplitCoinsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A5FD8229312777D1D2BB813 /* SplitCoinsViewController.swift */; }; 2C2D70373756666705D14FDE /* AssetSwapCreateViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5B1E2B05648164FC49C46F7 /* AssetSwapCreateViewModel.swift */; }; @@ -26,6 +28,7 @@ 3C4B4023BBF6C6624DDC279E /* BMOptionPickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53ECF740A61C5F0D941B8B36 /* BMOptionPickerViewController.swift */; }; 434CC206E4AD461CECAD5DFB /* BMInstantMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = 20B7F5341703980CD2D3941F /* BMInstantMessage.mm */; }; 492305E92FA7A41129BF7346 /* MessengerBubbleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E08B41CEDA5A06EBFD775E76 /* MessengerBubbleCell.swift */; }; + 4B72CD41AF6A8F47020BC536 /* AssetUTXOListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0AA87DBB7C958778D72096C /* AssetUTXOListViewController.swift */; }; 4D7C86E3D4DAAAD7DDFE22E7 /* MessengerChatListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DFF1052A687C5F2265E618F /* MessengerChatListViewController.swift */; }; 5101D1DB95B6BECFE333B53C /* AssetUTXOSectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8865BEE3DDBE9806B38DDE04 /* AssetUTXOSectionHeaderView.swift */; }; 532955652A405010EC21607C /* AssetUTXOSectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8865BEE3DDBE9806B38DDE04 /* AssetUTXOSectionHeaderView.swift */; }; @@ -2085,6 +2088,7 @@ E08B41CEDA5A06EBFD775E76 /* MessengerBubbleCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerBubbleCell.swift; sourceTree = ""; }; E23EA93CE3207A2EBB4D17FD /* SplitCoinsViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SplitCoinsViewModel.swift; sourceTree = ""; }; EAEED72AAED404575AB9A6E5 /* Pods-BeamWalletMasterNet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeamWalletMasterNet.release.xcconfig"; path = "Target Support Files/Pods-BeamWalletMasterNet/Pods-BeamWalletMasterNet.release.xcconfig"; sourceTree = ""; }; + F0AA87DBB7C958778D72096C /* AssetUTXOListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetUTXOListViewController.swift; sourceTree = ""; }; F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetSearchViewController.swift; sourceTree = ""; }; F426BB6F15C2E08A3E81B87D /* libdex_board.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; path = libdex_board.a; sourceTree = ""; }; F9E4020D11686B93F29A46DA /* MessengerChatViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerChatViewController.swift; sourceTree = ""; }; @@ -2667,6 +2671,7 @@ 92F68C762244E37200197D4D /* UTXODetailViewController.swift */, 9212DBAC22E0A1730053FC99 /* UTXOTableView.swift */, 1A5FD8229312777D1D2BB813 /* SplitCoinsViewController.swift */, + F0AA87DBB7C958778D72096C /* AssetUTXOListViewController.swift */, ); path = UTXO; sourceTree = ""; @@ -4432,6 +4437,7 @@ C6FB138B2A261CBC43626204 /* SplitCoinsStripeView.swift in Sources */, AC3CF90BF3C1ED7E2D19D65A /* SplitCoinPreviewCard.swift in Sources */, CDEA498CC695D89B35B0678E /* NodePeersViewController.swift in Sources */, + 187B4E604FD2814B8018C796 /* AssetUTXOListViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4781,6 +4787,7 @@ 6854C506C6836F88B8F8484E /* SplitCoinsStripeView.swift in Sources */, ECF8F9E33148D1833480ADFA /* SplitCoinPreviewCard.swift in Sources */, F5BD7F278CC7CCFADF63E7AF /* NodePeersViewController.swift in Sources */, + 21C1E1B8354DCDBDB0A9ABB8 /* AssetUTXOListViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5130,6 +5137,7 @@ 6EA6E49364A07F3740D84921 /* SplitCoinsStripeView.swift in Sources */, DAFECCA6179EA6FE92C0ABC7 /* SplitCoinPreviewCard.swift in Sources */, B93707F60996A4898F0B88E2 /* NodePeersViewController.swift in Sources */, + 4B72CD41AF6A8F47020BC536 /* AssetUTXOListViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/BeamWallet/Model/UTXO/SplitCoinsViewModel.swift b/BeamWallet/Model/UTXO/SplitCoinsViewModel.swift index cd228edd..35e1c96f 100644 --- a/BeamWallet/Model/UTXO/SplitCoinsViewModel.swift +++ b/BeamWallet/Model/UTXO/SplitCoinsViewModel.swift @@ -21,7 +21,13 @@ import Foundation final class SplitCoinsViewModel: NSObject { + enum Mode { + case split + case consolidate + } + let group: AssetUTXOGroup + let mode: Mode let allowedSplitCounts: [Int] = [2, 3, 5, 8, 10] var splitInto: Int { @@ -39,10 +45,11 @@ final class SplitCoinsViewModel: NSObject { var onError: ((String) -> Void)? var onSubmitted: (() -> Void)? - init(group: AssetUTXOGroup) { + init(group: AssetUTXOGroup, mode: Mode = .split) { self.group = group + self.mode = mode let suggested = SplitCoinsViewModel.suggestedSplitCount(for: group, allowed: [2, 3, 5, 8, 10]) - self.splitInto = group.isConcentrated ? suggested : 3 + self.splitInto = (mode == .consolidate) ? 1 : (group.isConcentrated ? suggested : 3) super.init() feeGroth = UInt64(AppModel.sharedManager().getDefaultFeeInGroth()) } @@ -50,33 +57,50 @@ final class SplitCoinsViewModel: NSObject { var assetId: Int32 { group.assetId } var largestGroth: UInt64 { group.largestUtxo?.amount ?? 0 } + // The pool we're rebalancing: largest UTXO for split, total available for + // consolidate (coin-selection picks the actual inputs in either case). + private var sourceGroth: UInt64 { + mode == .consolidate ? group.totalAvailableGroth : largestGroth + } + var outputAmounts: [UInt64] { - guard splitInto > 0, largestGroth > 0 else { return [] } - let count = UInt64(splitInto) - let base = largestGroth / count - let remainder = largestGroth - base * count - var arr = Array(repeating: base, count: splitInto) - if !arr.isEmpty { - arr[arr.count - 1] += remainder - } - // For BEAM (assetId == 0) the fee is paid in BEAM from the same UTXO - // we are splitting. If we keep the slices summing to largestGroth the - // wallet has no headroom for the fee; coin-selection then silently - // fails. Subtract the fee from the last slice. Caller is gated on - // validationError, which already guards `largestGroth > feeGroth`, so - // the subtraction is safe; the > 0 guard is belt-and-braces. - if assetId == 0 && !arr.isEmpty && feeGroth > 0 { - let last = arr[arr.count - 1] - guard last > feeGroth else { return [] } - arr[arr.count - 1] = last - feeGroth + switch mode { + case .consolidate: + guard group.utxos.count >= 2, sourceGroth > 0 else { return [] } + if assetId == 0 { + guard sourceGroth > feeGroth else { return [] } + return [sourceGroth - feeGroth] + } + return [sourceGroth] + + case .split: + guard splitInto > 0, sourceGroth > 0 else { return [] } + let count = UInt64(splitInto) + let base = sourceGroth / count + let remainder = sourceGroth - base * count + var arr = Array(repeating: base, count: splitInto) + if !arr.isEmpty { + arr[arr.count - 1] += remainder + } + // For BEAM (assetId == 0) the fee is paid in BEAM from the same UTXO + // we are splitting. If we keep the slices summing to sourceGroth the + // wallet has no headroom for the fee; coin-selection then silently + // fails. Subtract the fee from the last slice. Caller is gated on + // validationError, which already guards `sourceGroth > feeGroth`, so + // the subtraction is safe; the > 0 guard is belt-and-braces. + if assetId == 0 && !arr.isEmpty && feeGroth > 0 { + let last = arr[arr.count - 1] + guard last > feeGroth else { return [] } + arr[arr.count - 1] = last - feeGroth + } + return arr } - return arr } var perOutputGroth: UInt64 { outputAmounts.first ?? 0 } var concentrationWarning: String? { - guard group.isConcentrated else { return nil } + guard mode == .split, group.isConcentrated else { return nil } let percent = Int((group.concentrationRatio * 100).rounded()) let suggested = SplitCoinsViewModel.suggestedSplitCount(for: group, allowed: allowedSplitCounts) return Localizable.shared.strings.split_concentration_warning_format @@ -85,10 +109,17 @@ final class SplitCoinsViewModel: NSObject { } var validationError: String? { - if largestGroth < UInt64(splitInto) { + if mode == .consolidate { + if group.utxos.count < 2 { return "" } + if assetId == 0 && sourceGroth <= feeGroth { + return Localizable.shared.strings.asset_swap_insufficient_funds + } + return nil + } + if sourceGroth < UInt64(splitInto) { return Localizable.shared.strings.split_too_small } - if assetId == 0 && largestGroth <= feeGroth { + if assetId == 0 && sourceGroth <= feeGroth { return Localizable.shared.strings.asset_swap_insufficient_funds } // For BEAM the fee comes off the last slice (see outputAmounts); if @@ -96,8 +127,8 @@ final class SplitCoinsViewModel: NSObject { // resulting tx would be invalid. if assetId == 0 && splitInto > 0 { let count = UInt64(splitInto) - let base = largestGroth / count - let remainder = largestGroth - base * count + let base = sourceGroth / count + let remainder = sourceGroth - base * count if base + remainder <= feeGroth { return Localizable.shared.strings.asset_swap_insufficient_funds } @@ -106,11 +137,12 @@ final class SplitCoinsViewModel: NSObject { } var canSubmit: Bool { - validationError == nil && largestGroth > 0 && group.canSplit + guard validationError == nil, sourceGroth > 0 else { return false } + return mode == .consolidate ? group.utxos.count >= 2 : group.canSplit } func recalculateFee() { - let realAmount = Double(largestGroth) / 100_000_000 + let realAmount = Double(sourceGroth) / 100_000_000 let defaultFee = Double(AppModel.sharedManager().getDefaultFeeInGroth()) AppModel.sharedManager().calculateFee( realAmount, diff --git a/BeamWallet/Protocols/LocalizableStrings.swift b/BeamWallet/Protocols/LocalizableStrings.swift index 9290b9b1..266bfff0 100644 --- a/BeamWallet/Protocols/LocalizableStrings.swift +++ b/BeamWallet/Protocols/LocalizableStrings.swift @@ -625,6 +625,11 @@ class LocalizableStrings : NSObject { var split_too_small = "split_too_small".localized var split_started_message = "split_started_message".localized + var consolidate = "consolidate".localized + var consolidate_coins_subtitle = "consolidate_coins_subtitle".localized + var consolidate_coins_cta = "consolidate_coins_cta".localized + var consolidate_started_message = "consolidate_started_message".localized + var confirm_accept = "confirm_accept".localized var will_take_funds = "will_take_funds".localized var will_send_funds = "will_send_funds".localized diff --git a/BeamWallet/ViewControllers/Main/UTXO/AssetUTXOListViewController.swift b/BeamWallet/ViewControllers/Main/UTXO/AssetUTXOListViewController.swift new file mode 100644 index 00000000..97be48a4 --- /dev/null +++ b/BeamWallet/ViewControllers/Main/UTXO/AssetUTXOListViewController.swift @@ -0,0 +1,187 @@ +// +// AssetUTXOListViewController.swift +// BeamWallet +// +// Copyright 2026 Beam Development +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import UIKit + +final class AssetUTXOListViewController: BaseTableViewController { + + private let assetId: Int32 + private var group: AssetUTXOGroup? + + private let emptyView: BMEmptyView = UIView.fromNib() + private let hideUTXOView: BMEmptyView = UIView.fromNib() + + init(assetId: Int32) { + self.assetId = assetId + super.init(nibName: nil, bundle: nil) + } + + required init?(coder: NSCoder) { + fatalError(Localizable.shared.strings.fatalInitCoderError) + } + + override func viewDidLoad() { + tableStyle = .grouped + super.viewDidLoad() + + Settings.sharedManager().addDelegate(self) + + hideUTXOView.text = Localizable.shared.strings.secutiry_utxo + hideUTXOView.image = IconUTXOSecurity() + + emptyView.text = Localizable.shared.strings.utxo_empty + emptyView.image = IconUtxoEmpty() + + emptyView.isHidden = true + emptyView.backgroundColor = view.backgroundColor + view.addSubview(emptyView) + + hideUTXOView.isHidden = !Settings.sharedManager().isHideAmounts + hideUTXOView.backgroundColor = view.backgroundColor + view.addSubview(hideUTXOView) + + setGradientTopBar(mainColor: UIColor.main.peacockBlue, addedStatusView: true) + + tableView.register([UTXOCell.self]) + tableView.dataSource = self + tableView.delegate = self + tableView.sectionFooterHeight = 0 + tableView.estimatedSectionFooterHeight = 0 + if #available(iOS 15.0, *) { + tableView.sectionHeaderTopPadding = 0 + } + } + + deinit { + Settings.sharedManager().removeDelegate(self) + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + AppModel.sharedManager().addDelegate(self) + AppModel.sharedManager().getUTXO() + reload() + } + + override func viewWillDisappear(_ animated: Bool) { + super.viewWillDisappear(animated) + + AppModel.sharedManager().removeDelegate(self) + } + + override func viewDidLayoutSubviews() { + super.viewDidLayoutSubviews() + + emptyView.frame = tableView.frame + hideUTXOView.frame = tableView.frame + } + + private func reload() { + let match = UTXOViewModel().groupedByAsset().first { $0.assetId == assetId } + group = match + + if let asset = match?.asset ?? AssetsManager.shared().getAsset(assetId) { + title = asset.unitName.uppercased() + } + + emptyView.isHidden = match != nil + tableView.reloadData() + } + + private func presentSheet(mode: SplitCoinsViewModel.Mode) { + guard let group = group else { return } + let vm = SplitCoinsViewModel(group: group, mode: mode) + let vc = SplitCoinsViewController(viewModel: vm) + present(vc, animated: false, completion: nil) + } +} + +extension AssetUTXOListViewController: UITableViewDataSource, UITableViewDelegate { + + func numberOfSections(in tableView: UITableView) -> Int { + return group == nil ? 0 : 1 + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return group?.utxos.count ?? 0 + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + guard let utxo = group?.utxos[indexPath.row] else { return UITableViewCell() } + let cell = tableView + .dequeueReusableCell(withType: UTXOCell.self, for: indexPath) + .configured(with: (row: indexPath.row, utxo: utxo)) + return cell + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + tableView.deselectRow(at: indexPath, animated: true) + guard let utxo = group?.utxos[indexPath.row] else { return } + let vc = UTXODetailViewController(utxo: utxo) + pushViewController(vc: vc) + } + + func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { + guard let group = group else { return nil } + let header = AssetUTXOSectionHeaderView(group: group) + header.onSplitTapped = { [weak self] in + self?.presentSheet(mode: .split) + } + header.onConsolidateTapped = { [weak self] in + self?.presentSheet(mode: .consolidate) + } + return header + } + + func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { + return group == nil ? CGFloat.leastNormalMagnitude : AssetUTXOSectionHeaderView.preferredHeight + } + + func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { + return nil + } + + func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { + return CGFloat.leastNormalMagnitude + } +} + +extension AssetUTXOListViewController: SettingsModelDelegate { + func onChangeHideAmounts() { + hideUTXOView.isHidden = !Settings.sharedManager().isHideAmounts + tableView.isUserInteractionEnabled = !Settings.sharedManager().isHideAmounts + tableView.reloadData() + } +} + +extension AssetUTXOListViewController: WalletModelDelegate { + + func onWalletStatusChange(_ status: BMWalletStatus) { + DispatchQueue.main.async { [weak self] in + self?.reload() + } + } + + func onReceivedUTXOs(_ utxos: [BMUTXO]) { + DispatchQueue.main.async { [weak self] in + self?.reload() + } + } +} diff --git a/BeamWallet/ViewControllers/Main/UTXO/Cells/AssetUTXOSectionHeaderView.swift b/BeamWallet/ViewControllers/Main/UTXO/Cells/AssetUTXOSectionHeaderView.swift index e0a3a42a..ab543f6c 100644 --- a/BeamWallet/ViewControllers/Main/UTXO/Cells/AssetUTXOSectionHeaderView.swift +++ b/BeamWallet/ViewControllers/Main/UTXO/Cells/AssetUTXOSectionHeaderView.swift @@ -21,7 +21,7 @@ import UIKit final class AssetUTXOSectionHeaderView: UIView { - static let preferredHeight: CGFloat = 76 + static let preferredHeight: CGFloat = 116 private static let iconSize: CGFloat = 36 private let card = UIView() @@ -30,9 +30,12 @@ final class AssetUTXOSectionHeaderView: UIView { private let nameLabel = UILabel() private let subtitleLabel = UILabel() private let labelStack = UIStackView() - private let splitButton = UIButton(type: .system) + private let splitButton = makePillButton(title: Localizable.shared.strings.split) + private let consolidateButton = makePillButton(title: Localizable.shared.strings.consolidate) + private let buttonRow = UIStackView() var onSplitTapped: (() -> Void)? + var onConsolidateTapped: (() -> Void)? init(group: AssetUTXOGroup) { self.iconView = AssetIconView(frame: CGRect(x: 0, y: 0, width: Self.iconSize, height: Self.iconSize)) @@ -45,6 +48,20 @@ final class AssetUTXOSectionHeaderView: UIView { fatalError("init(coder:) has not been implemented") } + private static func makePillButton(title: String) -> UIButton { + let btn = UIButton(type: .system) + btn.setTitle(title.uppercased(), for: .normal) + btn.titleLabel?.font = BoldFont(size: 12) + btn.setTitleColor(UIColor.main.brightTeal, for: .normal) + btn.setTitleColor(UIColor.main.brightTeal.withAlphaComponent(0.4), for: .disabled) + btn.layer.borderColor = UIColor.main.brightTeal.cgColor + btn.layer.borderWidth = 1 + btn.layer.cornerRadius = 16 + btn.contentEdgeInsets = UIEdgeInsets(top: 6, left: 14, bottom: 6, right: 14) + btn.translatesAutoresizingMaskIntoConstraints = false + return btn + } + private func setupViews() { backgroundColor = .clear @@ -72,17 +89,16 @@ final class AssetUTXOSectionHeaderView: UIView { labelStack.addArrangedSubview(subtitleLabel) card.addSubview(labelStack) - splitButton.setTitle(Localizable.shared.strings.split.uppercased(), for: .normal) - splitButton.titleLabel?.font = BoldFont(size: 12) - splitButton.setTitleColor(UIColor.main.brightTeal, for: .normal) - splitButton.setTitleColor(UIColor.main.brightTeal.withAlphaComponent(0.4), for: .disabled) - splitButton.layer.borderColor = UIColor.main.brightTeal.cgColor - splitButton.layer.borderWidth = 1 - splitButton.layer.cornerRadius = 16 - splitButton.contentEdgeInsets = UIEdgeInsets(top: 6, left: 14, bottom: 6, right: 14) - splitButton.translatesAutoresizingMaskIntoConstraints = false splitButton.addTarget(self, action: #selector(onSplit), for: .touchUpInside) - card.addSubview(splitButton) + consolidateButton.addTarget(self, action: #selector(onConsolidate), for: .touchUpInside) + + buttonRow.axis = .horizontal + buttonRow.distribution = .fillEqually + buttonRow.spacing = 10 + buttonRow.translatesAutoresizingMaskIntoConstraints = false + buttonRow.addArrangedSubview(splitButton) + buttonRow.addArrangedSubview(consolidateButton) + card.addSubview(buttonRow) NSLayoutConstraint.activate([ card.topAnchor.constraint(equalTo: topAnchor, constant: 6), @@ -91,17 +107,19 @@ final class AssetUTXOSectionHeaderView: UIView { card.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -16), iconHost.leadingAnchor.constraint(equalTo: card.leadingAnchor, constant: 14), - iconHost.centerYAnchor.constraint(equalTo: card.centerYAnchor), + iconHost.topAnchor.constraint(equalTo: card.topAnchor, constant: 14), iconHost.widthAnchor.constraint(equalToConstant: Self.iconSize), iconHost.heightAnchor.constraint(equalToConstant: Self.iconSize), labelStack.leadingAnchor.constraint(equalTo: iconHost.trailingAnchor, constant: 12), - labelStack.centerYAnchor.constraint(equalTo: card.centerYAnchor), - labelStack.trailingAnchor.constraint(lessThanOrEqualTo: splitButton.leadingAnchor, constant: -8), - - splitButton.trailingAnchor.constraint(equalTo: card.trailingAnchor, constant: -14), - splitButton.centerYAnchor.constraint(equalTo: card.centerYAnchor), - splitButton.heightAnchor.constraint(equalToConstant: 32), + labelStack.centerYAnchor.constraint(equalTo: iconHost.centerYAnchor), + labelStack.trailingAnchor.constraint(lessThanOrEqualTo: card.trailingAnchor, constant: -14), + + buttonRow.leadingAnchor.constraint(equalTo: card.leadingAnchor, constant: 14), + buttonRow.trailingAnchor.constraint(equalTo: card.trailingAnchor, constant: -14), + buttonRow.topAnchor.constraint(equalTo: iconHost.bottomAnchor, constant: 12), + buttonRow.bottomAnchor.constraint(equalTo: card.bottomAnchor, constant: -14), + buttonRow.heightAnchor.constraint(equalToConstant: 32), ]) } @@ -110,9 +128,14 @@ final class AssetUTXOSectionHeaderView: UIView { subtitleLabel.text = group.asset.name iconView.setAsset(group.asset) splitButton.isEnabled = group.canSplit + consolidateButton.isEnabled = group.utxos.count >= 2 } @objc private func onSplit() { onSplitTapped?() } + + @objc private func onConsolidate() { + onConsolidateTapped?() + } } diff --git a/BeamWallet/ViewControllers/Main/UTXO/SplitCoinsViewController.swift b/BeamWallet/ViewControllers/Main/UTXO/SplitCoinsViewController.swift index 992d57be..79ea3cc1 100644 --- a/BeamWallet/ViewControllers/Main/UTXO/SplitCoinsViewController.swift +++ b/BeamWallet/ViewControllers/Main/UTXO/SplitCoinsViewController.swift @@ -77,9 +77,12 @@ final class SplitCoinsViewController: UIViewController { viewModel.onError = { [weak self] msg in self?.alertWithMessage(msg) } viewModel.onSubmitted = { [weak self] in guard let self = self else { return } + let message = self.viewModel.mode == .consolidate + ? Localizable.shared.strings.consolidate_started_message + : Localizable.shared.strings.split_started_message let presenter = self.presentingViewController self.dismissAnimated { - presenter?.alert(message: Localizable.shared.strings.split_started_message) + presenter?.alert(message: message) } } @@ -150,8 +153,11 @@ final class SplitCoinsViewController: UIViewController { contentStack.translatesAutoresizingMaskIntoConstraints = false scrollView.addSubview(contentStack) + let ctaTitle = viewModel.mode == .consolidate + ? Localizable.shared.strings.consolidate_coins_cta + : Localizable.shared.strings.split_coins_cta ctaButton.translatesAutoresizingMaskIntoConstraints = false - ctaButton.setTitle(Localizable.shared.strings.split_coins_cta.uppercased(), for: .normal) + ctaButton.setTitle(ctaTitle.uppercased(), for: .normal) ctaButton.setTitleColor(UIColor.main.marine, for: .normal) ctaButton.addTarget(self, action: #selector(onSplitTapped), for: .touchUpInside) card.addSubview(ctaButton) @@ -328,20 +334,30 @@ final class SplitCoinsViewController: UIViewController { private func refresh() { let group = viewModel.group let asset = group.asset + let isConsolidate = viewModel.mode == .consolidate - titleLabel.text = "\(Localizable.shared.strings.split.capitalized) \(asset.unitName.uppercased())" - subtitleLabel.text = Localizable.shared.strings.split_coins_subtitle + let actionWord = isConsolidate + ? Localizable.shared.strings.consolidate + : Localizable.shared.strings.split + titleLabel.text = "\(actionWord.capitalized) \(asset.unitName.uppercased())" + subtitleLabel.text = isConsolidate + ? Localizable.shared.strings.consolidate_coins_subtitle + : Localizable.shared.strings.split_coins_subtitle balanceValueLabel.text = formattedAmount(real: asset.realAmount, unit: asset.unitName) stripeView.setAmounts(group.utxos.map { $0.amount }) - let largestText = formattedAmount(real: group.largestUtxo?.realAmount ?? 0, unit: asset.unitName) let countText = Localizable.shared.strings.coin_count_format .replacingOccurrences(of: "(count)", with: "\(group.utxos.count)") - let largestRow = Localizable.shared.strings.largest_coin_format - .replacingOccurrences(of: "(amount)", with: largestText) - summaryLabel.text = "\(countText) · \(largestRow)" + if isConsolidate { + summaryLabel.text = countText + } else { + let largestText = formattedAmount(real: group.largestUtxo?.realAmount ?? 0, unit: asset.unitName) + let largestRow = Localizable.shared.strings.largest_coin_format + .replacingOccurrences(of: "(amount)", with: largestText) + summaryLabel.text = "\(countText) · \(largestRow)" + } rebuildTiles(group: group) @@ -352,6 +368,9 @@ final class SplitCoinsViewController: UIViewController { warningContainer.isHidden = true } + splitIntoLabel.isHidden = isConsolidate + splitIntoStack.isHidden = isConsolidate + for btn in splitButtons { let isSelected = btn.tag == viewModel.splitInto btn.backgroundColor = isSelected ? UIColor.main.brightTeal : UIColor.clear @@ -362,7 +381,7 @@ final class SplitCoinsViewController: UIViewController { } let perOutputText = formattedAmount(real: grothToBeam(viewModel.perOutputGroth), unit: asset.unitName) - previewLeadingLabel.text = "\(viewModel.splitInto)x equal" + previewLeadingLabel.text = isConsolidate ? "" : "\(viewModel.splitInto)x equal" previewValueLabel.text = perOutputText feeValueLabel.text = formattedAmount(real: grothToBeam(viewModel.feeGroth), unit: "BEAM") diff --git a/BeamWallet/ViewControllers/Main/UTXO/UTXOViewController.swift b/BeamWallet/ViewControllers/Main/UTXO/UTXOViewController.swift index 86f6639d..e66abfde 100644 --- a/BeamWallet/ViewControllers/Main/UTXO/UTXOViewController.swift +++ b/BeamWallet/ViewControllers/Main/UTXO/UTXOViewController.swift @@ -28,7 +28,7 @@ class UTXOViewController: BaseTableViewController { private let hideUTXOView: BMEmptyView = UIView.fromNib() override func viewDidLoad() { - tableStyle = .grouped + tableStyle = .plain super.viewDidLoad() Settings.sharedManager().addDelegate(self) @@ -50,14 +50,11 @@ class UTXOViewController: BaseTableViewController { setGradientTopBar(mainColor: UIColor.main.peacockBlue, addedStatusView: true) title = Localizable.shared.strings.utxo - tableView.register([UTXOCell.self]) + tableView.register([AssetAvailableCell.self]) tableView.dataSource = self tableView.delegate = self - tableView.sectionFooterHeight = 0 - tableView.estimatedSectionFooterHeight = 0 - if #available(iOS 15.0, *) { - tableView.sectionHeaderTopPadding = 0 - } + tableView.rowHeight = UITableView.automaticDimension + tableView.estimatedRowHeight = 120 rightButton() } @@ -100,60 +97,27 @@ class UTXOViewController: BaseTableViewController { selector: #selector(onHideAmounts) ) } - - private func presentSplit(for group: AssetUTXOGroup) { - let vm = SplitCoinsViewModel(group: group) - let vc = SplitCoinsViewController(viewModel: vm) - present(vc, animated: false, completion: nil) - } } extension UTXOViewController: UITableViewDataSource, UITableViewDelegate { - func numberOfSections(in tableView: UITableView) -> Int { - return groups.count - } - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return groups[section].utxos.count + return groups.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let utxo = groups[indexPath.section].utxos[indexPath.row] - let cell = tableView - .dequeueReusableCell(withType: UTXOCell.self, for: indexPath) - .configured(with: (row: indexPath.row, utxo: utxo)) + let group = groups[indexPath.row] + let cell = tableView.dequeueReusableCell(withType: AssetAvailableCell.self, for: indexPath) + cell.setAsset(group.asset) + cell.setUTXOAccessory(count: group.utxos.count) return cell } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { tableView.deselectRow(at: indexPath, animated: true) - let utxo = groups[indexPath.section].utxos[indexPath.row] - if let top = UIApplication.getTopMostViewController() { - let vc = UTXODetailViewController(utxo: utxo) - top.pushViewController(vc: vc) - } - } - - func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { - let group = groups[section] - let header = AssetUTXOSectionHeaderView(group: group) - header.onSplitTapped = { [weak self] in - self?.presentSplit(for: group) - } - return header - } - - func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { - return AssetUTXOSectionHeaderView.preferredHeight - } - - func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { - return nil - } - - func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { - return CGFloat.leastNormalMagnitude + let group = groups[indexPath.row] + let vc = AssetUTXOListViewController(assetId: group.assetId) + pushViewController(vc: vc) } } diff --git a/BeamWallet/ViewControllers/Main/Wallet/Cells/AssetAvailableCell.swift b/BeamWallet/ViewControllers/Main/Wallet/Cells/AssetAvailableCell.swift index 2478e825..16444677 100644 --- a/BeamWallet/ViewControllers/Main/Wallet/Cells/AssetAvailableCell.swift +++ b/BeamWallet/ViewControllers/Main/Wallet/Cells/AssetAvailableCell.swift @@ -40,13 +40,56 @@ class AssetAvailableCell: RippleCell { UIApplication.getTopMostViewController()?.openUrl(url: url) } } - + + private var utxoAccessory: UIStackView? + private var utxoCountLabel: UILabel? + override func awakeFromNib() { super.awakeFromNib() - + assedIdStackView.isUserInteractionEnabled = true assedIdStackView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(onAssetIdClicked))) } + + override func prepareForReuse() { + super.prepareForReuse() + utxoAccessory?.isHidden = true + } + + func setUTXOAccessory(count: Int?) { + guard let count = count else { + utxoAccessory?.isHidden = true + return + } + if utxoAccessory == nil { + let label = UILabel() + label.font = RegularFont(size: 12) + label.textColor = UIColor.white.withAlphaComponent(0.7) + + let arrow = UIImageView(image: IconNextArrow()) + arrow.contentMode = .scaleAspectFit + arrow.translatesAutoresizingMaskIntoConstraints = false + arrow.widthAnchor.constraint(equalToConstant: 6).isActive = true + arrow.heightAnchor.constraint(equalToConstant: 10).isActive = true + + let stack = UIStackView(arrangedSubviews: [label, arrow]) + stack.axis = .horizontal + stack.alignment = .center + stack.spacing = 6 + stack.translatesAutoresizingMaskIntoConstraints = false + mainView.addSubview(stack) + NSLayoutConstraint.activate([ + stack.trailingAnchor.constraint(equalTo: mainView.trailingAnchor, constant: -15), + stack.bottomAnchor.constraint(equalTo: mainView.bottomAnchor, constant: -15), + ]) + + utxoAccessory = stack + utxoCountLabel = label + } + utxoAccessory?.isHidden = false + utxoCountLabel?.text = Localizable.shared.strings.coin_count_format + .replacingOccurrences(of: "(count)", with: "\(count)") + } public func setAsset(_ asset:BMAsset) { assetId = Int(asset.assetId) diff --git a/Resources/cs.lproj/Localizable.strings b/Resources/cs.lproj/Localizable.strings index c332a0a5..a1d0e735 100644 --- a/Resources/cs.lproj/Localizable.strings +++ b/Resources/cs.lproj/Localizable.strings @@ -659,6 +659,10 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; +"consolidate" = "Consolidate"; +"consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; +"consolidate_coins_cta" = "Consolidate now"; +"consolidate_started_message" = "Your consolidate transaction has been started"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/en.lproj/Localizable.strings b/Resources/en.lproj/Localizable.strings index cc8eee59..68b1ef04 100644 --- a/Resources/en.lproj/Localizable.strings +++ b/Resources/en.lproj/Localizable.strings @@ -776,6 +776,10 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; +"consolidate" = "Consolidate"; +"consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; +"consolidate_coins_cta" = "Consolidate now"; +"consolidate_started_message" = "Your consolidate transaction has been started"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/es.lproj/Localizable.strings b/Resources/es.lproj/Localizable.strings index bc038a21..370f0a1c 100644 --- a/Resources/es.lproj/Localizable.strings +++ b/Resources/es.lproj/Localizable.strings @@ -659,6 +659,10 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; +"consolidate" = "Consolidate"; +"consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; +"consolidate_coins_cta" = "Consolidate now"; +"consolidate_started_message" = "Your consolidate transaction has been started"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/fi-FI.lproj/Localizable.strings b/Resources/fi-FI.lproj/Localizable.strings index c332a0a5..a1d0e735 100644 --- a/Resources/fi-FI.lproj/Localizable.strings +++ b/Resources/fi-FI.lproj/Localizable.strings @@ -659,6 +659,10 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; +"consolidate" = "Consolidate"; +"consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; +"consolidate_coins_cta" = "Consolidate now"; +"consolidate_started_message" = "Your consolidate transaction has been started"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/fr.lproj/Localizable.strings b/Resources/fr.lproj/Localizable.strings index c332a0a5..a1d0e735 100644 --- a/Resources/fr.lproj/Localizable.strings +++ b/Resources/fr.lproj/Localizable.strings @@ -659,6 +659,10 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; +"consolidate" = "Consolidate"; +"consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; +"consolidate_coins_cta" = "Consolidate now"; +"consolidate_started_message" = "Your consolidate transaction has been started"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/ko.lproj/Localizable.strings b/Resources/ko.lproj/Localizable.strings index c332a0a5..a1d0e735 100644 --- a/Resources/ko.lproj/Localizable.strings +++ b/Resources/ko.lproj/Localizable.strings @@ -659,6 +659,10 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; +"consolidate" = "Consolidate"; +"consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; +"consolidate_coins_cta" = "Consolidate now"; +"consolidate_started_message" = "Your consolidate transaction has been started"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/nl.lproj/Localizable.strings b/Resources/nl.lproj/Localizable.strings index bc038a21..370f0a1c 100644 --- a/Resources/nl.lproj/Localizable.strings +++ b/Resources/nl.lproj/Localizable.strings @@ -659,6 +659,10 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; +"consolidate" = "Consolidate"; +"consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; +"consolidate_coins_cta" = "Consolidate now"; +"consolidate_started_message" = "Your consolidate transaction has been started"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/ru.lproj/Localizable.strings b/Resources/ru.lproj/Localizable.strings index c332a0a5..a1d0e735 100644 --- a/Resources/ru.lproj/Localizable.strings +++ b/Resources/ru.lproj/Localizable.strings @@ -659,6 +659,10 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; +"consolidate" = "Consolidate"; +"consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; +"consolidate_coins_cta" = "Consolidate now"; +"consolidate_started_message" = "Your consolidate transaction has been started"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/sv-SE.lproj/Localizable.strings b/Resources/sv-SE.lproj/Localizable.strings index 3758c168..607d074c 100644 --- a/Resources/sv-SE.lproj/Localizable.strings +++ b/Resources/sv-SE.lproj/Localizable.strings @@ -703,6 +703,10 @@ "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; +"consolidate" = "Consolidate"; +"consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; +"consolidate_coins_cta" = "Consolidate now"; +"consolidate_started_message" = "Your consolidate transaction has been started"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/sv.lproj/Localizable.strings b/Resources/sv.lproj/Localizable.strings index c332a0a5..a1d0e735 100644 --- a/Resources/sv.lproj/Localizable.strings +++ b/Resources/sv.lproj/Localizable.strings @@ -659,6 +659,10 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; +"consolidate" = "Consolidate"; +"consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; +"consolidate_coins_cta" = "Consolidate now"; +"consolidate_started_message" = "Your consolidate transaction has been started"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/th.lproj/Localizable.strings b/Resources/th.lproj/Localizable.strings index c332a0a5..a1d0e735 100644 --- a/Resources/th.lproj/Localizable.strings +++ b/Resources/th.lproj/Localizable.strings @@ -659,6 +659,10 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; +"consolidate" = "Consolidate"; +"consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; +"consolidate_coins_cta" = "Consolidate now"; +"consolidate_started_message" = "Your consolidate transaction has been started"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/tr.lproj/Localizable.strings b/Resources/tr.lproj/Localizable.strings index c332a0a5..a1d0e735 100644 --- a/Resources/tr.lproj/Localizable.strings +++ b/Resources/tr.lproj/Localizable.strings @@ -659,6 +659,10 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; +"consolidate" = "Consolidate"; +"consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; +"consolidate_coins_cta" = "Consolidate now"; +"consolidate_started_message" = "Your consolidate transaction has been started"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/vi.lproj/Localizable.strings b/Resources/vi.lproj/Localizable.strings index c332a0a5..a1d0e735 100644 --- a/Resources/vi.lproj/Localizable.strings +++ b/Resources/vi.lproj/Localizable.strings @@ -659,6 +659,10 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; +"consolidate" = "Consolidate"; +"consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; +"consolidate_coins_cta" = "Consolidate now"; +"consolidate_started_message" = "Your consolidate transaction has been started"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/zh-Hans.lproj/Localizable.strings b/Resources/zh-Hans.lproj/Localizable.strings index 5e098aa8..a554ee0f 100644 --- a/Resources/zh-Hans.lproj/Localizable.strings +++ b/Resources/zh-Hans.lproj/Localizable.strings @@ -658,6 +658,10 @@ and never kept on the blockchain."; "split_concentration_warning_format" = "(percent)% in one coin — split into (count) for safety"; "split_too_small" = "Coin too small to split"; "split_started_message" = "Your split transaction has been started"; +"consolidate" = "Consolidate"; +"consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; +"consolidate_coins_cta" = "Consolidate now"; +"consolidate_started_message" = "Your consolidate transaction has been started"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; From 8b22b596135d4f412f2f6017475c265cea319cb1 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Tue, 12 May 2026 13:57:07 +0200 Subject: [PATCH 42/48] feat(utxo): offline (Lelantus) toggle for split + consolidate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds an opt-in switch on the Split / Consolidate sheet that routes the operation through a Lelantus push tx to a self-generated offline address instead of producing public UTXOs. Increases the shielded anonymity set and breaks input/output linkability. - SplitCoinsViewModel: sendOffline flag with mode-agnostic isShielded; outputAmounts / validationError collapse to a single shielded output (sourceGroth - fee for BEAM, sourceGroth otherwise); recalculateFee switches to getMinMaxPrivacyFeeInGroth + isShielded:true. - submitShielded() resolves the wallet's default own address via generateNewWalletAddress (uses _id, the underlying hex WalletID — the walletId getter falls back to the token string, which FromHex rejects), generates a self offline-token, and sends with isOffline:true. - SplitCoinsViewController: toggle row always visible; split-into selector + concentration warning collapse when shielded; preview leading label clears so only the resulting amount shows. - 2 new locale keys (consolidate_offline_toggle, consolidate_offline_hint) across all 13 locales. --- .../Model/UTXO/SplitCoinsViewModel.swift | 105 +++++++++++++++++- BeamWallet/Protocols/LocalizableStrings.swift | 2 + .../Main/UTXO/SplitCoinsViewController.swift | 65 ++++++++++- Resources/cs.lproj/Localizable.strings | 2 + Resources/en.lproj/Localizable.strings | 2 + Resources/es.lproj/Localizable.strings | 2 + Resources/fi-FI.lproj/Localizable.strings | 2 + Resources/fr.lproj/Localizable.strings | 2 + Resources/ko.lproj/Localizable.strings | 2 + Resources/nl.lproj/Localizable.strings | 2 + Resources/ru.lproj/Localizable.strings | 2 + Resources/sv-SE.lproj/Localizable.strings | 2 + Resources/sv.lproj/Localizable.strings | 2 + Resources/th.lproj/Localizable.strings | 2 + Resources/tr.lproj/Localizable.strings | 2 + Resources/vi.lproj/Localizable.strings | 2 + Resources/zh-Hans.lproj/Localizable.strings | 2 + 17 files changed, 191 insertions(+), 9 deletions(-) diff --git a/BeamWallet/Model/UTXO/SplitCoinsViewModel.swift b/BeamWallet/Model/UTXO/SplitCoinsViewModel.swift index 35e1c96f..b7650ceb 100644 --- a/BeamWallet/Model/UTXO/SplitCoinsViewModel.swift +++ b/BeamWallet/Model/UTXO/SplitCoinsViewModel.swift @@ -41,6 +41,19 @@ final class SplitCoinsViewModel: NSObject { private(set) var feeGroth: UInt64 = 0 + // When on, the operation is routed through a Lelantus push tx to a + // self-generated offline address instead of splitting/consolidating in + // the public pool — breaking input/output linkability and growing the + // shielded anonymity set. + var sendOffline: Bool = false { + didSet { + if sendOffline != oldValue { + recalculateFee() + onDataChanged?() + } + } + } + var onDataChanged: (() -> Void)? var onError: ((String) -> Void)? var onSubmitted: (() -> Void)? @@ -54,6 +67,12 @@ final class SplitCoinsViewModel: NSObject { feeGroth = UInt64(AppModel.sharedManager().getDefaultFeeInGroth()) } + // Lelantus push: applies to both modes. In split-offline the largest + // UTXO is pushed into the shielded pool; in consolidate-offline the + // entire available pool is pushed. Either way the on-chain result is a + // single shielded output, so the split-into selector is meaningless. + var isShielded: Bool { sendOffline } + var assetId: Int32 { group.assetId } var largestGroth: UInt64 { group.largestUtxo?.amount ?? 0 } @@ -64,9 +83,22 @@ final class SplitCoinsViewModel: NSObject { } var outputAmounts: [UInt64] { + guard sourceGroth > 0 else { return [] } + + // Shielded path is the same shape regardless of mode: a single + // shielded output equal to the source minus the BEAM fee (or the + // full source for non-BEAM assets, where the fee is paid separately). + if isShielded { + if assetId == 0 { + guard sourceGroth > feeGroth else { return [] } + return [sourceGroth - feeGroth] + } + return [sourceGroth] + } + switch mode { case .consolidate: - guard group.utxos.count >= 2, sourceGroth > 0 else { return [] } + guard group.utxos.count >= 2 else { return [] } if assetId == 0 { guard sourceGroth > feeGroth else { return [] } return [sourceGroth - feeGroth] @@ -74,7 +106,7 @@ final class SplitCoinsViewModel: NSObject { return [sourceGroth] case .split: - guard splitInto > 0, sourceGroth > 0 else { return [] } + guard splitInto > 0 else { return [] } let count = UInt64(splitInto) let base = sourceGroth / count let remainder = sourceGroth - base * count @@ -100,7 +132,7 @@ final class SplitCoinsViewModel: NSObject { var perOutputGroth: UInt64 { outputAmounts.first ?? 0 } var concentrationWarning: String? { - guard mode == .split, group.isConcentrated else { return nil } + guard mode == .split, !isShielded, group.isConcentrated else { return nil } let percent = Int((group.concentrationRatio * 100).rounded()) let suggested = SplitCoinsViewModel.suggestedSplitCount(for: group, allowed: allowedSplitCounts) return Localizable.shared.strings.split_concentration_warning_format @@ -109,6 +141,12 @@ final class SplitCoinsViewModel: NSObject { } var validationError: String? { + if isShielded { + if assetId == 0 && sourceGroth <= feeGroth { + return Localizable.shared.strings.asset_swap_insufficient_funds + } + return nil + } if mode == .consolidate { if group.utxos.count < 2 { return "" } if assetId == 0 && sourceGroth <= feeGroth { @@ -143,12 +181,15 @@ final class SplitCoinsViewModel: NSObject { func recalculateFee() { let realAmount = Double(sourceGroth) / 100_000_000 - let defaultFee = Double(AppModel.sharedManager().getDefaultFeeInGroth()) - AppModel.sharedManager().calculateFee( + let app = AppModel.sharedManager() + let defaultFee = isShielded + ? Double(app.getMinMaxPrivacyFeeInGroth()) + : Double(app.getDefaultFeeInGroth()) + app.calculateFee( realAmount, assetId: assetId, fee: defaultFee, - isShielded: false + isShielded: isShielded ) { [weak self] fee, _, _, _ in DispatchQueue.main.async { guard let self = self else { return } @@ -163,6 +204,10 @@ final class SplitCoinsViewModel: NSObject { onError?(validationError ?? "") return } + if isShielded { + submitShielded() + return + } let groths = outputAmounts.map { NSNumber(value: $0) } AppModel.sharedManager().splitCoins( assetId, @@ -172,6 +217,54 @@ final class SplitCoinsViewModel: NSObject { onSubmitted?() } + private func submitShielded() { + let outGroth = perOutputGroth + guard outGroth > 0 else { + onError?(validationError ?? Localizable.shared.strings.error) + return + } + let realAmount = Double(outGroth) / 100_000_000 + let assetIdCopy = assetId + let feeReal = Double(feeGroth) + + // Reuse the wallet's default own address (created on demand by + // generateToken / getDefaultAddressAlways). `_id` is the hex WalletID + // that generateOfflineAddress expects; the public `walletId` getter + // returns the token string and would fail FromHex parsing. + AppModel.sharedManager().generateNewWalletAddress { [weak self] address, _ in + DispatchQueue.main.async { + guard let self = self, + let walletIdHex = address?._id, !walletIdHex.isEmpty else { + self?.onError?(Localizable.shared.strings.error) + return + } + AppModel.sharedManager().generateOfflineAddress( + walletIdHex, + assetId: assetIdCopy, + amount: realAmount, + offlineCount: 1 + ) { token in + DispatchQueue.main.async { + guard !token.isEmpty else { + self.onError?(Localizable.shared.strings.error) + return + } + AppModel.sharedManager().send( + realAmount, + fee: feeReal, + assetId: assetIdCopy, + to: token, + from: walletIdHex, + comment: "", + isOffline: true + ) + self.onSubmitted?() + } + } + } + } + } + private static func suggestedSplitCount(for group: AssetUTXOGroup, allowed: [Int]) -> Int { guard group.totalAvailableGroth > 0 else { return allowed.first ?? 2 } let ratio = group.concentrationRatio diff --git a/BeamWallet/Protocols/LocalizableStrings.swift b/BeamWallet/Protocols/LocalizableStrings.swift index 266bfff0..c09a59bb 100644 --- a/BeamWallet/Protocols/LocalizableStrings.swift +++ b/BeamWallet/Protocols/LocalizableStrings.swift @@ -629,6 +629,8 @@ class LocalizableStrings : NSObject { var consolidate_coins_subtitle = "consolidate_coins_subtitle".localized var consolidate_coins_cta = "consolidate_coins_cta".localized var consolidate_started_message = "consolidate_started_message".localized + var consolidate_offline_toggle = "consolidate_offline_toggle".localized + var consolidate_offline_hint = "consolidate_offline_hint".localized var confirm_accept = "confirm_accept".localized var will_take_funds = "will_take_funds".localized diff --git a/BeamWallet/ViewControllers/Main/UTXO/SplitCoinsViewController.swift b/BeamWallet/ViewControllers/Main/UTXO/SplitCoinsViewController.swift index 79ea3cc1..0bc62e47 100644 --- a/BeamWallet/ViewControllers/Main/UTXO/SplitCoinsViewController.swift +++ b/BeamWallet/ViewControllers/Main/UTXO/SplitCoinsViewController.swift @@ -46,6 +46,10 @@ final class SplitCoinsViewController: UIViewController { private let feeTitleLabel = UILabel() private let feeValueLabel = UILabel() private let previewLeadingLabel = UILabel() + private let offlineContainer = UIView() + private let offlineTitleLabel = UILabel() + private let offlineHintLabel = UILabel() + private let offlineSwitch = UISwitch() private let ctaButton: BMButton private var splitButtons: [UIButton] = [] @@ -254,6 +258,8 @@ final class SplitCoinsViewController: UIViewController { contentStack.addArrangedSubview(warningContainer) contentStack.setCustomSpacing(20, after: warningContainer) + setupOfflineToggle() + splitIntoLabel.font = BoldFont(size: 11) splitIntoLabel.textColor = UIColor.main.blueyGrey splitIntoLabel.letterSpacing = 2 @@ -317,6 +323,48 @@ final class SplitCoinsViewController: UIViewController { contentStack.setCustomSpacing(20, after: feeRow) } + private func setupOfflineToggle() { + offlineContainer.translatesAutoresizingMaskIntoConstraints = false + offlineContainer.backgroundColor = UIColor.white.withAlphaComponent(0.04) + offlineContainer.layer.cornerRadius = 10 + + offlineTitleLabel.font = SemiboldFont(size: 14) + offlineTitleLabel.textColor = UIColor.white + offlineTitleLabel.text = Localizable.shared.strings.consolidate_offline_toggle + offlineTitleLabel.translatesAutoresizingMaskIntoConstraints = false + + offlineHintLabel.font = RegularFont(size: 12) + offlineHintLabel.textColor = UIColor.main.blueyGrey + offlineHintLabel.numberOfLines = 0 + offlineHintLabel.text = Localizable.shared.strings.consolidate_offline_hint + offlineHintLabel.translatesAutoresizingMaskIntoConstraints = false + + offlineSwitch.onTintColor = UIColor.main.brightTeal + offlineSwitch.translatesAutoresizingMaskIntoConstraints = false + offlineSwitch.addTarget(self, action: #selector(onOfflineToggleChanged(_:)), for: .valueChanged) + + offlineContainer.addSubview(offlineTitleLabel) + offlineContainer.addSubview(offlineHintLabel) + offlineContainer.addSubview(offlineSwitch) + + NSLayoutConstraint.activate([ + offlineTitleLabel.topAnchor.constraint(equalTo: offlineContainer.topAnchor, constant: 12), + offlineTitleLabel.leadingAnchor.constraint(equalTo: offlineContainer.leadingAnchor, constant: 14), + offlineTitleLabel.trailingAnchor.constraint(lessThanOrEqualTo: offlineSwitch.leadingAnchor, constant: -8), + + offlineHintLabel.topAnchor.constraint(equalTo: offlineTitleLabel.bottomAnchor, constant: 2), + offlineHintLabel.leadingAnchor.constraint(equalTo: offlineTitleLabel.leadingAnchor), + offlineHintLabel.trailingAnchor.constraint(lessThanOrEqualTo: offlineSwitch.leadingAnchor, constant: -8), + offlineHintLabel.bottomAnchor.constraint(equalTo: offlineContainer.bottomAnchor, constant: -12), + + offlineSwitch.trailingAnchor.constraint(equalTo: offlineContainer.trailingAnchor, constant: -14), + offlineSwitch.centerYAnchor.constraint(equalTo: offlineContainer.centerYAnchor), + ]) + + contentStack.addArrangedSubview(offlineContainer) + contentStack.setCustomSpacing(20, after: offlineContainer) + } + private func makeSplitCountButton(count: Int) -> UIButton { let btn = UIButton(type: .system) btn.tag = count @@ -368,8 +416,13 @@ final class SplitCoinsViewController: UIViewController { warningContainer.isHidden = true } - splitIntoLabel.isHidden = isConsolidate - splitIntoStack.isHidden = isConsolidate + // Hide the split-into selector in consolidate mode or whenever the + // shielded toggle collapses the output to a single push. + let hideSplitInto = isConsolidate || viewModel.isShielded + splitIntoLabel.isHidden = hideSplitInto + splitIntoStack.isHidden = hideSplitInto + offlineContainer.isHidden = false + offlineSwitch.isOn = viewModel.sendOffline for btn in splitButtons { let isSelected = btn.tag == viewModel.splitInto @@ -381,7 +434,9 @@ final class SplitCoinsViewController: UIViewController { } let perOutputText = formattedAmount(real: grothToBeam(viewModel.perOutputGroth), unit: asset.unitName) - previewLeadingLabel.text = isConsolidate ? "" : "\(viewModel.splitInto)x equal" + previewLeadingLabel.text = (isConsolidate || viewModel.isShielded) + ? "" + : "\(viewModel.splitInto)x equal" previewValueLabel.text = perOutputText feeValueLabel.text = formattedAmount(real: grothToBeam(viewModel.feeGroth), unit: "BEAM") @@ -428,6 +483,10 @@ final class SplitCoinsViewController: UIViewController { viewModel.splitInto = sender.tag } + @objc private func onOfflineToggleChanged(_ sender: UISwitch) { + viewModel.sendOffline = sender.isOn + } + @objc private func onSplitTapped() { if Settings.sharedManager().isNeedaskPasswordForSend { let popover = UnlockPasswordPopover(event: .transaction) diff --git a/Resources/cs.lproj/Localizable.strings b/Resources/cs.lproj/Localizable.strings index a1d0e735..8091af1d 100644 --- a/Resources/cs.lproj/Localizable.strings +++ b/Resources/cs.lproj/Localizable.strings @@ -663,6 +663,8 @@ and never kept on the blockchain."; "consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; "consolidate_coins_cta" = "Consolidate now"; "consolidate_started_message" = "Your consolidate transaction has been started"; +"consolidate_offline_toggle" = "Send to shielded pool"; +"consolidate_offline_hint" = "Increases Lelantus pool size and breaks linkability"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/en.lproj/Localizable.strings b/Resources/en.lproj/Localizable.strings index 68b1ef04..3261ac07 100644 --- a/Resources/en.lproj/Localizable.strings +++ b/Resources/en.lproj/Localizable.strings @@ -780,6 +780,8 @@ and never kept on the blockchain."; "consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; "consolidate_coins_cta" = "Consolidate now"; "consolidate_started_message" = "Your consolidate transaction has been started"; +"consolidate_offline_toggle" = "Send to shielded pool"; +"consolidate_offline_hint" = "Increases Lelantus pool size and breaks linkability"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/es.lproj/Localizable.strings b/Resources/es.lproj/Localizable.strings index 370f0a1c..1a749241 100644 --- a/Resources/es.lproj/Localizable.strings +++ b/Resources/es.lproj/Localizable.strings @@ -663,6 +663,8 @@ and never kept on the blockchain."; "consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; "consolidate_coins_cta" = "Consolidate now"; "consolidate_started_message" = "Your consolidate transaction has been started"; +"consolidate_offline_toggle" = "Send to shielded pool"; +"consolidate_offline_hint" = "Increases Lelantus pool size and breaks linkability"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/fi-FI.lproj/Localizable.strings b/Resources/fi-FI.lproj/Localizable.strings index a1d0e735..8091af1d 100644 --- a/Resources/fi-FI.lproj/Localizable.strings +++ b/Resources/fi-FI.lproj/Localizable.strings @@ -663,6 +663,8 @@ and never kept on the blockchain."; "consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; "consolidate_coins_cta" = "Consolidate now"; "consolidate_started_message" = "Your consolidate transaction has been started"; +"consolidate_offline_toggle" = "Send to shielded pool"; +"consolidate_offline_hint" = "Increases Lelantus pool size and breaks linkability"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/fr.lproj/Localizable.strings b/Resources/fr.lproj/Localizable.strings index a1d0e735..8091af1d 100644 --- a/Resources/fr.lproj/Localizable.strings +++ b/Resources/fr.lproj/Localizable.strings @@ -663,6 +663,8 @@ and never kept on the blockchain."; "consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; "consolidate_coins_cta" = "Consolidate now"; "consolidate_started_message" = "Your consolidate transaction has been started"; +"consolidate_offline_toggle" = "Send to shielded pool"; +"consolidate_offline_hint" = "Increases Lelantus pool size and breaks linkability"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/ko.lproj/Localizable.strings b/Resources/ko.lproj/Localizable.strings index a1d0e735..8091af1d 100644 --- a/Resources/ko.lproj/Localizable.strings +++ b/Resources/ko.lproj/Localizable.strings @@ -663,6 +663,8 @@ and never kept on the blockchain."; "consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; "consolidate_coins_cta" = "Consolidate now"; "consolidate_started_message" = "Your consolidate transaction has been started"; +"consolidate_offline_toggle" = "Send to shielded pool"; +"consolidate_offline_hint" = "Increases Lelantus pool size and breaks linkability"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/nl.lproj/Localizable.strings b/Resources/nl.lproj/Localizable.strings index 370f0a1c..1a749241 100644 --- a/Resources/nl.lproj/Localizable.strings +++ b/Resources/nl.lproj/Localizable.strings @@ -663,6 +663,8 @@ and never kept on the blockchain."; "consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; "consolidate_coins_cta" = "Consolidate now"; "consolidate_started_message" = "Your consolidate transaction has been started"; +"consolidate_offline_toggle" = "Send to shielded pool"; +"consolidate_offline_hint" = "Increases Lelantus pool size and breaks linkability"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/ru.lproj/Localizable.strings b/Resources/ru.lproj/Localizable.strings index a1d0e735..8091af1d 100644 --- a/Resources/ru.lproj/Localizable.strings +++ b/Resources/ru.lproj/Localizable.strings @@ -663,6 +663,8 @@ and never kept on the blockchain."; "consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; "consolidate_coins_cta" = "Consolidate now"; "consolidate_started_message" = "Your consolidate transaction has been started"; +"consolidate_offline_toggle" = "Send to shielded pool"; +"consolidate_offline_hint" = "Increases Lelantus pool size and breaks linkability"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/sv-SE.lproj/Localizable.strings b/Resources/sv-SE.lproj/Localizable.strings index 607d074c..b0b74f68 100644 --- a/Resources/sv-SE.lproj/Localizable.strings +++ b/Resources/sv-SE.lproj/Localizable.strings @@ -707,6 +707,8 @@ "consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; "consolidate_coins_cta" = "Consolidate now"; "consolidate_started_message" = "Your consolidate transaction has been started"; +"consolidate_offline_toggle" = "Send to shielded pool"; +"consolidate_offline_hint" = "Increases Lelantus pool size and breaks linkability"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/sv.lproj/Localizable.strings b/Resources/sv.lproj/Localizable.strings index a1d0e735..8091af1d 100644 --- a/Resources/sv.lproj/Localizable.strings +++ b/Resources/sv.lproj/Localizable.strings @@ -663,6 +663,8 @@ and never kept on the blockchain."; "consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; "consolidate_coins_cta" = "Consolidate now"; "consolidate_started_message" = "Your consolidate transaction has been started"; +"consolidate_offline_toggle" = "Send to shielded pool"; +"consolidate_offline_hint" = "Increases Lelantus pool size and breaks linkability"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/th.lproj/Localizable.strings b/Resources/th.lproj/Localizable.strings index a1d0e735..8091af1d 100644 --- a/Resources/th.lproj/Localizable.strings +++ b/Resources/th.lproj/Localizable.strings @@ -663,6 +663,8 @@ and never kept on the blockchain."; "consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; "consolidate_coins_cta" = "Consolidate now"; "consolidate_started_message" = "Your consolidate transaction has been started"; +"consolidate_offline_toggle" = "Send to shielded pool"; +"consolidate_offline_hint" = "Increases Lelantus pool size and breaks linkability"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/tr.lproj/Localizable.strings b/Resources/tr.lproj/Localizable.strings index a1d0e735..8091af1d 100644 --- a/Resources/tr.lproj/Localizable.strings +++ b/Resources/tr.lproj/Localizable.strings @@ -663,6 +663,8 @@ and never kept on the blockchain."; "consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; "consolidate_coins_cta" = "Consolidate now"; "consolidate_started_message" = "Your consolidate transaction has been started"; +"consolidate_offline_toggle" = "Send to shielded pool"; +"consolidate_offline_hint" = "Increases Lelantus pool size and breaks linkability"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/vi.lproj/Localizable.strings b/Resources/vi.lproj/Localizable.strings index a1d0e735..8091af1d 100644 --- a/Resources/vi.lproj/Localizable.strings +++ b/Resources/vi.lproj/Localizable.strings @@ -663,6 +663,8 @@ and never kept on the blockchain."; "consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; "consolidate_coins_cta" = "Consolidate now"; "consolidate_started_message" = "Your consolidate transaction has been started"; +"consolidate_offline_toggle" = "Send to shielded pool"; +"consolidate_offline_hint" = "Increases Lelantus pool size and breaks linkability"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; diff --git a/Resources/zh-Hans.lproj/Localizable.strings b/Resources/zh-Hans.lproj/Localizable.strings index a554ee0f..1be1dc49 100644 --- a/Resources/zh-Hans.lproj/Localizable.strings +++ b/Resources/zh-Hans.lproj/Localizable.strings @@ -662,6 +662,8 @@ and never kept on the blockchain."; "consolidate_coins_subtitle" = "Combine all UTXOs of this asset into one"; "consolidate_coins_cta" = "Consolidate now"; "consolidate_started_message" = "Your consolidate transaction has been started"; +"consolidate_offline_toggle" = "Send to shielded pool"; +"consolidate_offline_hint" = "Increases Lelantus pool size and breaks linkability"; "vouchers_count" = "Vouchers count"; "vouchers_count_hint" = "Up to %d vouchers per address"; From 0e290b47b33d518a482abd60e274aac3bb671355 Mon Sep 17 00:00:00 2001 From: Maxnflaxl Date: Wed, 13 May 2026 14:22:07 +0200 Subject: [PATCH 43/48] feat(dapps): DApp store, sideloaded install, and My DApps screen Adds the install/uninstall pipeline (WalletAPIClient over the embedded IPFS node, DAppManager, DAppStore), the My DApps and Publishers screens, the dapp:// WKURLSchemeHandler that gives WKWebView proper HTTP status codes, MIME types, and CORS for installed apps (native file:// returns status 0 to XHR and rejects fetch(), which breaks the Utils.download("./*.wasm") path Beam DApps use to ship shader bytes into invoke_contract), and sideloaded .dapp open-URL handling from Files / iCloud Drive. BeamX DAO and BeamX DAO Voting ship as bundled .dapp packages. Embedded go-ipfs node is brought up at wallet-open time; swarm key is derived from beam::Rules::Network in BEAM core so dappnet / testnet / mainnet / masternet each join the right private swarm. A wallet-owned AppsApiUI client (distinct from the per-DApp one used by DAOViewController) handles store / IPFS / oracle calls with call IDs >= 1_000_000; AppModel.sendDAOApiResult: routes by call ID. The Oracle start/stop hooks ride along here because they're intermixed with the WalletAPIClient setup in AppModel.mm restore: / start: / resetWallet:. Bundles localization for the v7.4 string sweep (oracle, public-offline retirement, dapps_* additions across 14 locales) so the index stays clean behind this commit. --- BeamWallet.xcodeproj/project.pbxproj | 324 +++++++++++---- BeamWallet/AppDelegate.swift | 28 +- BeamWallet/BeamSDK/AppModel.h | 7 + BeamWallet/BeamSDK/AppModel.mm | 85 +++- .../BeamSDK/DAO/WalletAPIClient+Internal.h | 17 + BeamWallet/BeamSDK/DAO/WalletAPIClient.h | 42 ++ BeamWallet/BeamSDK/DAO/WalletAPIClient.mm | 185 +++++++++ BeamWallet/BeamSDK/DAO/WebAPICreator.mm | 8 +- BeamWallet/BeamSDK/Objects/BMAvailableDApp.h | 24 ++ BeamWallet/BeamSDK/Objects/BMAvailableDApp.m | 26 ++ BeamWallet/BeamSDK/Objects/BMInstalledDApp.h | 25 ++ BeamWallet/BeamSDK/Objects/BMInstalledDApp.m | 59 +++ BeamWallet/BeamSDK/Objects/BMPublisher.h | 24 ++ BeamWallet/BeamSDK/Objects/BMPublisher.m | 26 ++ BeamWallet/BeamWallet-Bridging-Header.h | 4 + BeamWallet/Model/DAppManager.swift | 203 ++++++++++ BeamWallet/Model/DAppStore.swift | 369 ++++++++++++++++++ BeamWallet/Protocols/LocalizableStrings.swift | 36 +- .../Main/DAO/Cell/DAppStoreCells.swift | 319 +++++++++++++++ .../Main/DAO/DAOViewController.swift | 70 +++- .../Main/DAO/JS/DAppURLSchemeHandler.swift | 220 +++++++++++ .../Main/DAO/MyDAppsViewController.swift | 334 ++++++++++++++++ .../Main/DAO/PublishersViewController.swift | 91 +++++ .../Main/Menu/LeftMenuViewController.swift | 4 + Resources/cs.lproj/Localizable.strings | 34 +- Resources/dao-core-app.dapp | Bin 0 -> 198455 bytes Resources/dao-voting-app.dapp | Bin 0 -> 2911424 bytes Resources/dapps_store_app.wasm | Bin 0 -> 9788 bytes Resources/en.lproj/Localizable.strings | 35 +- Resources/es.lproj/Localizable.strings | 34 +- Resources/fi-FI.lproj/Localizable.strings | 34 +- Resources/fr.lproj/Localizable.strings | 34 +- Resources/ko.lproj/Localizable.strings | 34 +- Resources/nl.lproj/Localizable.strings | 34 +- Resources/ru.lproj/Localizable.strings | 34 +- Resources/sv-SE.lproj/Localizable.strings | 34 +- Resources/sv.lproj/Localizable.strings | 34 +- Resources/th.lproj/Localizable.strings | 34 +- Resources/tr.lproj/Localizable.strings | 34 +- Resources/vi.lproj/Localizable.strings | 34 +- Resources/zh-Hans.lproj/Localizable.strings | 34 +- 41 files changed, 2877 insertions(+), 130 deletions(-) create mode 100644 BeamWallet/BeamSDK/DAO/WalletAPIClient+Internal.h create mode 100644 BeamWallet/BeamSDK/DAO/WalletAPIClient.h create mode 100644 BeamWallet/BeamSDK/DAO/WalletAPIClient.mm create mode 100644 BeamWallet/BeamSDK/Objects/BMAvailableDApp.h create mode 100644 BeamWallet/BeamSDK/Objects/BMAvailableDApp.m create mode 100644 BeamWallet/BeamSDK/Objects/BMInstalledDApp.h create mode 100644 BeamWallet/BeamSDK/Objects/BMInstalledDApp.m create mode 100644 BeamWallet/BeamSDK/Objects/BMPublisher.h create mode 100644 BeamWallet/BeamSDK/Objects/BMPublisher.m create mode 100644 BeamWallet/Model/DAppManager.swift create mode 100644 BeamWallet/Model/DAppStore.swift create mode 100644 BeamWallet/ViewControllers/Main/DAO/Cell/DAppStoreCells.swift create mode 100644 BeamWallet/ViewControllers/Main/DAO/JS/DAppURLSchemeHandler.swift create mode 100644 BeamWallet/ViewControllers/Main/DAO/MyDAppsViewController.swift create mode 100644 BeamWallet/ViewControllers/Main/DAO/PublishersViewController.swift create mode 100644 Resources/dao-core-app.dapp create mode 100644 Resources/dao-voting-app.dapp create mode 100644 Resources/dapps_store_app.wasm diff --git a/BeamWallet.xcodeproj/project.pbxproj b/BeamWallet.xcodeproj/project.pbxproj index 96855e78..211af0ce 100644 --- a/BeamWallet.xcodeproj/project.pbxproj +++ b/BeamWallet.xcodeproj/project.pbxproj @@ -9,50 +9,78 @@ /* Begin PBXBuildFile section */ 000A92658A9461591881CE8C /* SplitCoinsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = E23EA93CE3207A2EBB4D17FD /* SplitCoinsViewModel.swift */; }; 00947887B27F2F825E1E67CC /* MessengerNewChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13CF5C205DC060CADA96F025 /* MessengerNewChatViewController.swift */; }; + 010A73D4AEEB9251461112AB /* dapps_store_app.wasm in Resources */ = {isa = PBXBuildFile; fileRef = 5FEED174B3A5FDB8D14C9963 /* dapps_store_app.wasm */; }; + 042BE224A8CF0171B513BED0 /* OraclePriceManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BE8E2F17C9FA369F86F60DB /* OraclePriceManager.swift */; }; 05548629568C6211F87DA630 /* MessengerChatListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DFF1052A687C5F2265E618F /* MessengerChatListViewController.swift */; }; 066620C96ABA1816759B7AE3 /* MessengerConversationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A439F6A64EB61AD3DF6945B /* MessengerConversationViewModel.swift */; }; 09BB8194C318850B9C687050 /* Pods_BeamWallet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B5894AC3136298FE0B7E8E3 /* Pods_BeamWallet.framework */; }; + 0A44DCF3575DA823BA60DEC5 /* OraclePriceManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BE8E2F17C9FA369F86F60DB /* OraclePriceManager.swift */; }; + 0DB9711D993CFA1D225B53BA /* BMInstalledDApp.m in Sources */ = {isa = PBXBuildFile; fileRef = 788AE10382B92E35A434F2E3 /* BMInstalledDApp.m */; }; 0E952497DFB46C7621546999 /* Pods_BeamWalletTestNet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 36A85446EDA45DA6335930C5 /* Pods_BeamWalletTestNet.framework */; }; 0EC9234AAD2DC0A1BF7600B4 /* AssetUTXOSectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8865BEE3DDBE9806B38DDE04 /* AssetUTXOSectionHeaderView.swift */; }; + 11476E71A287700B5F7CBB8F /* libasio-ipfs.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C08DFF83966F34F6D7F6AFC /* libasio-ipfs.a */; }; + 138076EB2F04AEFB33F90387 /* libasio-ipfs.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C08DFF83966F34F6D7F6AFC /* libasio-ipfs.a */; }; 14458CA45E1281FAF80D496D /* MessengerNewChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13CF5C205DC060CADA96F025 /* MessengerNewChatViewController.swift */; }; 15A094B1963EAE81E9B86B33 /* BMDexOrder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 46577647151F6240CBA9CE2D /* BMDexOrder.mm */; }; 187B4E604FD2814B8018C796 /* AssetUTXOListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0AA87DBB7C958778D72096C /* AssetUTXOListViewController.swift */; }; + 1A6B80C9C9EDCE967358F721 /* BMPublisher.m in Sources */ = {isa = PBXBuildFile; fileRef = 5947BB8B40C5D62DAA9D01BF /* BMPublisher.m */; }; + 1C28371060472F1EFAF00E7B /* DAppStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 969B64630C2A5874889F91FC /* DAppStore.swift */; }; 215454B3AA22BD789F53A90C /* BMChat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8C5EB5519EB54866BA8DB9A4 /* BMChat.mm */; }; 21C1E1B8354DCDBDB0A9ABB8 /* AssetUTXOListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0AA87DBB7C958778D72096C /* AssetUTXOListViewController.swift */; }; 2361D1F909D78EC50B8C5D5C /* MessengerConversationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A439F6A64EB61AD3DF6945B /* MessengerConversationViewModel.swift */; }; + 26D73AAEC26B985DD2704C90 /* BMAvailableDApp.m in Sources */ = {isa = PBXBuildFile; fileRef = 17A4C97F6AE81EDDEC7DB4B9 /* BMAvailableDApp.m */; }; 275E60FB3A8D4704581DF986 /* SplitCoinsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A5FD8229312777D1D2BB813 /* SplitCoinsViewController.swift */; }; + 28B1AF7C15F50CEC869952BD /* DAppManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B86688612ED1A5FF45D1BAD /* DAppManager.swift */; }; + 2964ED046A04435DB6FD977D /* BMAlertViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C2A22B96525EB07D51F607 /* BMAlertViewController.swift */; }; + 2B7C41C938A0B67A9D143E3D /* MyDAppsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 008792DADDD5C9FF28341A31 /* MyDAppsViewController.swift */; }; 2C2D70373756666705D14FDE /* AssetSwapCreateViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5B1E2B05648164FC49C46F7 /* AssetSwapCreateViewModel.swift */; }; + 2F81D3CC162C2FD8201B35C0 /* libipfs-bindings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 344F317D8FBFA32FFDA811F2 /* libipfs-bindings.a */; }; 30BE993E2DFFA6452A536125 /* BMInstantMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = 20B7F5341703980CD2D3941F /* BMInstantMessage.mm */; }; 31509E4F991BC56BF7F10098 /* AssetSwapDetailsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92C9307A797CCA7FEAABBFD8 /* AssetSwapDetailsViewModel.swift */; }; 35726BA6BFE79F50A19E7054 /* MessengerChatCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390F813D5F08AC3C0F47183F /* MessengerChatCell.swift */; }; 3C4B4023BBF6C6624DDC279E /* BMOptionPickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53ECF740A61C5F0D941B8B36 /* BMOptionPickerViewController.swift */; }; 434CC206E4AD461CECAD5DFB /* BMInstantMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = 20B7F5341703980CD2D3941F /* BMInstantMessage.mm */; }; + 46E422749DE0BAE1BCF8B4EB /* BMPublisher.m in Sources */ = {isa = PBXBuildFile; fileRef = 5947BB8B40C5D62DAA9D01BF /* BMPublisher.m */; }; 492305E92FA7A41129BF7346 /* MessengerBubbleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E08B41CEDA5A06EBFD775E76 /* MessengerBubbleCell.swift */; }; + 4B2FC15209C14B359E3651BD /* dapps_store_app.wasm in Resources */ = {isa = PBXBuildFile; fileRef = 5FEED174B3A5FDB8D14C9963 /* dapps_store_app.wasm */; }; 4B72CD41AF6A8F47020BC536 /* AssetUTXOListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0AA87DBB7C958778D72096C /* AssetUTXOListViewController.swift */; }; 4D7C86E3D4DAAAD7DDFE22E7 /* MessengerChatListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DFF1052A687C5F2265E618F /* MessengerChatListViewController.swift */; }; + 50B804DB7153D959B75A9D13 /* BMAlertViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C2A22B96525EB07D51F607 /* BMAlertViewController.swift */; }; 5101D1DB95B6BECFE333B53C /* AssetUTXOSectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8865BEE3DDBE9806B38DDE04 /* AssetUTXOSectionHeaderView.swift */; }; 532955652A405010EC21607C /* AssetUTXOSectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8865BEE3DDBE9806B38DDE04 /* AssetUTXOSectionHeaderView.swift */; }; 53E3D6F8F19BD21A69380CBA /* Pods_BeamWalletMasterNet.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18CF009621EA8E5970DA1D87 /* Pods_BeamWalletMasterNet.framework */; }; + 56DCA641FEC90020A7C2686E /* PublishersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6831B2B28CCBD5D776DCF34B /* PublishersViewController.swift */; }; 59D5C848EC6C80442BC6A8A3 /* BMOptionPickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53ECF740A61C5F0D941B8B36 /* BMOptionPickerViewController.swift */; }; 5A1A647678A2061222332D16 /* MessengerChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E4020D11686B93F29A46DA /* MessengerChatViewController.swift */; }; 5A4A0ACB5C6CA50F1E5FCBE8 /* MessengerChatListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFF464435B3D65DCFC432FA3 /* MessengerChatListViewModel.swift */; }; 5DAA3CCCB00AECEACD182FBF /* AssetSwapOrderCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CDD341D6CFC3AD26C3F4374 /* AssetSwapOrderCell.swift */; }; + 6029A6A13D53093CF6EC2FB6 /* dapps_store_app.wasm in Resources */ = {isa = PBXBuildFile; fileRef = 5FEED174B3A5FDB8D14C9963 /* dapps_store_app.wasm */; }; 610B9971C155D841609ACE0F /* libdex.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D7E7F685327E2CAB9E7C69 /* libdex.a */; }; 62D6B4FFAD6FCD00C5206630 /* AssetSwapsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21968CB26C3B977852247761 /* AssetSwapsViewController.swift */; }; 6315A76D06343C9CEDE2EF77 /* AssetSwapsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21968CB26C3B977852247761 /* AssetSwapsViewController.swift */; }; + 65A9895370E84E09300D7548 /* PublishersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6831B2B28CCBD5D776DCF34B /* PublishersViewController.swift */; }; 6854C506C6836F88B8F8484E /* SplitCoinsStripeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 603CF8C20147C7F9E087C33D /* SplitCoinsStripeView.swift */; }; 69B13BFFB153BF4611F30888 /* MessengerNewChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13CF5C205DC060CADA96F025 /* MessengerNewChatViewController.swift */; }; 6EA6E49364A07F3740D84921 /* SplitCoinsStripeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 603CF8C20147C7F9E087C33D /* SplitCoinsStripeView.swift */; }; + 6F6101D0D3E633F1D68554F9 /* DAppStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 969B64630C2A5874889F91FC /* DAppStore.swift */; }; 705F9944DC83B6CC6816678F /* BMOptionPickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53ECF740A61C5F0D941B8B36 /* BMOptionPickerViewController.swift */; }; + 7076239CA6CBD5D923ED8EE8 /* libipfs-bindings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 344F317D8FBFA32FFDA811F2 /* libipfs-bindings.a */; }; + 7209CB87405DF7AC0B7CBE89 /* dao-core-app.dapp in Resources */ = {isa = PBXBuildFile; fileRef = 9CC651F674E6883AFB9709D5 /* dao-core-app.dapp */; }; 75516585C510BB694A1B9AED /* MessengerBubbleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E08B41CEDA5A06EBFD775E76 /* MessengerBubbleCell.swift */; }; 75B069A9EC9A517ABCACFC1E /* MessengerChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E4020D11686B93F29A46DA /* MessengerChatViewController.swift */; }; 77CF51BBE36DCCD780857772 /* AssetSwapCreateViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A6A43055CFB5C5820B099A1 /* AssetSwapCreateViewController.swift */; }; + 7A9AD3ED311827FB6EF39D54 /* BMAvailableDApp.m in Sources */ = {isa = PBXBuildFile; fileRef = 17A4C97F6AE81EDDEC7DB4B9 /* BMAvailableDApp.m */; }; + 7AB2A2A48540A9D102F56D7C /* DAppManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B86688612ED1A5FF45D1BAD /* DAppManager.swift */; }; 7ED2D2980F560C573C46D8CC /* AssetSwapsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFDAF01730E8C754AA8C5175 /* AssetSwapsViewModel.swift */; }; + 82EC6CA54D5C74FD16085DE0 /* DAppStoreCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7E72505C417B965A57BB066 /* DAppStoreCells.swift */; }; + 8313E7C13424087CE8545F59 /* PublishersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6831B2B28CCBD5D776DCF34B /* PublishersViewController.swift */; }; 83EC213430E0CFD381D45A13 /* AssetSwapDetailsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92C9307A797CCA7FEAABBFD8 /* AssetSwapDetailsViewModel.swift */; }; 84D2719B950F43294039957A /* AssetSwapOrderCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CDD341D6CFC3AD26C3F4374 /* AssetSwapOrderCell.swift */; }; 87B508D6F91B6BCDE6EC712F /* BMInstantMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = 20B7F5341703980CD2D3941F /* BMInstantMessage.mm */; }; 88D6972926A283D03D289A48 /* AssetSwapsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFDAF01730E8C754AA8C5175 /* AssetSwapsViewModel.swift */; }; + 8B70C9ED979CE8D4574FC1EA /* libwallet_ipfs.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AC8EF915253F6CCEA3788BE /* libwallet_ipfs.a */; }; 8E6EABD786898410576636A4 /* BMChat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8C5EB5519EB54866BA8DB9A4 /* BMChat.mm */; }; + 8F9D17159CF9400338FE47EB /* oracle2-app.wasm in Resources */ = {isa = PBXBuildFile; fileRef = 3149E0903940C330CAE827F5 /* oracle2-app.wasm */; }; 911AF3DF99FDD7FFD07F4830 /* AssetUTXOGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F9B63F6E98BA8303EE2FEAD /* AssetUTXOGroup.swift */; }; 9207DD8726778DF900250E80 /* AssetsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9207DD8626778DF900250E80 /* AssetsViewController.swift */; }; 9207DD8826778DF900250E80 /* AssetsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9207DD8626778DF900250E80 /* AssetsViewController.swift */; }; @@ -414,9 +442,6 @@ 9244A5102A01465E007B03D0 /* libkeykeeper.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9244A4E82A014656007B03D0 /* libkeykeeper.a */; }; 9244A5112A01465E007B03D0 /* libkeykeeper.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9244A4E82A014656007B03D0 /* libkeykeeper.a */; }; 9244A5122A01465E007B03D0 /* libkeykeeper.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9244A4E82A014656007B03D0 /* libkeykeeper.a */; }; - 9244A5132A01465E007B03D0 /* libwallet_api_no_ipfs.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9244A4E92A014656007B03D0 /* libwallet_api_no_ipfs.a */; }; - 9244A5142A01465E007B03D0 /* libwallet_api_no_ipfs.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9244A4E92A014656007B03D0 /* libwallet_api_no_ipfs.a */; }; - 9244A5152A01465E007B03D0 /* libwallet_api_no_ipfs.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9244A4E92A014656007B03D0 /* libwallet_api_no_ipfs.a */; }; 9244A5162A01465E007B03D0 /* libre2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9244A4EA2A014656007B03D0 /* libre2.a */; }; 9244A5172A01465E007B03D0 /* libre2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9244A4EA2A014656007B03D0 /* libre2.a */; }; 9244A5182A01465E007B03D0 /* libre2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9244A4EA2A014656007B03D0 /* libre2.a */; }; @@ -492,9 +517,6 @@ 9244A55E2A01465E007B03D0 /* libkeccak.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9244A5022A01465D007B03D0 /* libkeccak.a */; }; 9244A55F2A01465E007B03D0 /* libkeccak.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9244A5022A01465D007B03D0 /* libkeccak.a */; }; 9244A5602A01465E007B03D0 /* libkeccak.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9244A5022A01465D007B03D0 /* libkeccak.a */; }; - 9244A5612A01465E007B03D0 /* libwallet_client_no_ipfs.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9244A5032A01465E007B03D0 /* libwallet_client_no_ipfs.a */; }; - 9244A5622A01465E007B03D0 /* libwallet_client_no_ipfs.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9244A5032A01465E007B03D0 /* libwallet_client_no_ipfs.a */; }; - 9244A5632A01465E007B03D0 /* libwallet_client_no_ipfs.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9244A5032A01465E007B03D0 /* libwallet_client_no_ipfs.a */; }; 9246F75A227C48830091FB0B /* BMEmptyCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9246F758227C48830091FB0B /* BMEmptyCell.swift */; }; 9246F75B227C48830091FB0B /* BMEmptyCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9246F758227C48830091FB0B /* BMEmptyCell.swift */; }; 9246F75C227C48830091FB0B /* BMEmptyCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9246F758227C48830091FB0B /* BMEmptyCell.swift */; }; @@ -1400,42 +1422,71 @@ 984E5950BBB86D093251AB57 /* MessengerChatCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390F813D5F08AC3C0F47183F /* MessengerChatCell.swift */; }; 9A1790F44DE275FD9644A9F7 /* AssetSwapCreateViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A6A43055CFB5C5820B099A1 /* AssetSwapCreateViewController.swift */; }; 9C3478CC0AB10D577E97E53E /* MessengerChatListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFF464435B3D65DCFC432FA3 /* MessengerChatListViewModel.swift */; }; + 9C5E69AB2AC0AC5E4D122185 /* BMInstalledDApp.m in Sources */ = {isa = PBXBuildFile; fileRef = 788AE10382B92E35A434F2E3 /* BMInstalledDApp.m */; }; + 9D5813AA76650CB6EBA22D34 /* dao-voting-app.dapp in Resources */ = {isa = PBXBuildFile; fileRef = 8923664227A70DFEBE27B5ED /* dao-voting-app.dapp */; }; 9D8BAACCF64EA977E69273F0 /* libdex.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D7E7F685327E2CAB9E7C69 /* libdex.a */; }; 9E75E31529DE385C7D153631 /* MessengerChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9E4020D11686B93F29A46DA /* MessengerChatViewController.swift */; }; A04389E8E8EE7AB9E4D87007 /* BMChat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8C5EB5519EB54866BA8DB9A4 /* BMChat.mm */; }; + A4044FC0C7CFF97F7D02D3F5 /* DAppURLSchemeHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDCB8FF9B7300E47ABEF4D9A /* DAppURLSchemeHandler.swift */; }; + A4D6D5A9EC5F4DC3DD3E4682 /* oracle2-app.wasm in Resources */ = {isa = PBXBuildFile; fileRef = 3149E0903940C330CAE827F5 /* oracle2-app.wasm */; }; A522EB1A22FF64A990518431 /* AssetSwapDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A467070BE6633F1B715DAD /* AssetSwapDetailsViewController.swift */; }; + A7290B4EEDC78DFD74B80F6F /* DAppURLSchemeHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDCB8FF9B7300E47ABEF4D9A /* DAppURLSchemeHandler.swift */; }; + A8131AC203B7FC699E7DCA45 /* BMAlertViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C2A22B96525EB07D51F607 /* BMAlertViewController.swift */; }; + AAE84220C256A1EFAB30D9B3 /* DAppURLSchemeHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDCB8FF9B7300E47ABEF4D9A /* DAppURLSchemeHandler.swift */; }; AAFE8C80296CA6DAA3BC3B1F /* AssetUTXOGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F9B63F6E98BA8303EE2FEAD /* AssetUTXOGroup.swift */; }; AB6BA79FF389E013065D35C9 /* libdex_board.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F426BB6F15C2E08A3E81B87D /* libdex_board.a */; }; ABA34015221EA45051CC20EB /* SplitCoinsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = E23EA93CE3207A2EBB4D17FD /* SplitCoinsViewModel.swift */; }; AC3CF90BF3C1ED7E2D19D65A /* SplitCoinPreviewCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B33EC6A5FD1571ED9D1EFFB /* SplitCoinPreviewCard.swift */; }; + ACD5F2A82D411FA025F5709A /* DAppStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 969B64630C2A5874889F91FC /* DAppStore.swift */; }; + AD534670E90AA9554A8C5F74 /* DAppStoreCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7E72505C417B965A57BB066 /* DAppStoreCells.swift */; }; B3476711F58F83C2F1CB8F2C /* AssetUTXOGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F9B63F6E98BA8303EE2FEAD /* AssetUTXOGroup.swift */; }; B4FE33729385D12603589437 /* AssetSwapDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A467070BE6633F1B715DAD /* AssetSwapDetailsViewController.swift */; }; + B5918DE6DE94C43C0CBB411F /* libwallet_ipfs.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AC8EF915253F6CCEA3788BE /* libwallet_ipfs.a */; }; B5E7CC16D70E7D12DD9315FC /* MessengerConversationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A439F6A64EB61AD3DF6945B /* MessengerConversationViewModel.swift */; }; B6037162941C5AB71A356FF3 /* AssetSwapDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A467070BE6633F1B715DAD /* AssetSwapDetailsViewController.swift */; }; B93707F60996A4898F0B88E2 /* NodePeersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13188DF7FB2332EDBB6929F5 /* NodePeersViewController.swift */; }; BCB254DF739D2FA8FF92C672 /* AssetSwapDetailsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92C9307A797CCA7FEAABBFD8 /* AssetSwapDetailsViewModel.swift */; }; + BDDA78B4E7DDB519C8591B40 /* BMAvailableDApp.m in Sources */ = {isa = PBXBuildFile; fileRef = 17A4C97F6AE81EDDEC7DB4B9 /* BMAvailableDApp.m */; }; BE96C4A71A3D47721D003ACF /* AssetSwapOrderCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CDD341D6CFC3AD26C3F4374 /* AssetSwapOrderCell.swift */; }; BFF9839E0FE16D5A8645D394 /* SplitCoinsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A5FD8229312777D1D2BB813 /* SplitCoinsViewController.swift */; }; C07BD2850E0E4E55AC706985 /* AssetSwapsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21968CB26C3B977852247761 /* AssetSwapsViewController.swift */; }; + C51DBD848CA77EC12F48698C /* BMPublisher.m in Sources */ = {isa = PBXBuildFile; fileRef = 5947BB8B40C5D62DAA9D01BF /* BMPublisher.m */; }; C6FB138B2A261CBC43626204 /* SplitCoinsStripeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 603CF8C20147C7F9E087C33D /* SplitCoinsStripeView.swift */; }; CA7E68B52D3092D76CBACF7C /* SplitCoinsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A5FD8229312777D1D2BB813 /* SplitCoinsViewController.swift */; }; CCB34673E007AADB0D649F2C /* libdex_board.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F426BB6F15C2E08A3E81B87D /* libdex_board.a */; }; CDEA498CC695D89B35B0678E /* NodePeersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13188DF7FB2332EDBB6929F5 /* NodePeersViewController.swift */; }; + D0154E933CB0A42495F493B4 /* BMInstalledDApp.m in Sources */ = {isa = PBXBuildFile; fileRef = 788AE10382B92E35A434F2E3 /* BMInstalledDApp.m */; }; + D0CC2976D1595860BB67C58C /* dao-core-app.dapp in Resources */ = {isa = PBXBuildFile; fileRef = 9CC651F674E6883AFB9709D5 /* dao-core-app.dapp */; }; + D134B7B4257517D9037B6301 /* dao-voting-app.dapp in Resources */ = {isa = PBXBuildFile; fileRef = 8923664227A70DFEBE27B5ED /* dao-voting-app.dapp */; }; + D28537CD882B83167B426EA0 /* DAppStoreCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7E72505C417B965A57BB066 /* DAppStoreCells.swift */; }; + D6F2A69901F8BE2CAE4846B0 /* OraclePriceManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BE8E2F17C9FA369F86F60DB /* OraclePriceManager.swift */; }; + D91F481FE2DA5BE3465EFEFD /* oracle2-app.wasm in Resources */ = {isa = PBXBuildFile; fileRef = 3149E0903940C330CAE827F5 /* oracle2-app.wasm */; }; + DA682CA91CC907ACC61E9C6B /* libipfs-bindings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 344F317D8FBFA32FFDA811F2 /* libipfs-bindings.a */; }; DAFECCA6179EA6FE92C0ABC7 /* SplitCoinPreviewCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B33EC6A5FD1571ED9D1EFFB /* SplitCoinPreviewCard.swift */; }; DEF279257A2A5B949FBA8B01 /* libdex.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 57D7E7F685327E2CAB9E7C69 /* libdex.a */; }; DFC07B98C98F293C31F86A8C /* MessengerChatListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DFF1052A687C5F2265E618F /* MessengerChatListViewController.swift */; }; E153DCA098F777EAFAA1D91A /* AssetSwapCreateViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5B1E2B05648164FC49C46F7 /* AssetSwapCreateViewModel.swift */; }; E167B53AA2D8218D0710AA3E /* BMDexOrder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 46577647151F6240CBA9CE2D /* BMDexOrder.mm */; }; + E28445CBD68FD65137EB5624 /* WalletAPIClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = B48933E92F4932F3A119DBB0 /* WalletAPIClient.mm */; }; + E4FDD3C6A0F5C3758751901D /* dao-core-app.dapp in Resources */ = {isa = PBXBuildFile; fileRef = 9CC651F674E6883AFB9709D5 /* dao-core-app.dapp */; }; E545F78761926F0D8A51E9B2 /* BMDexOrder.mm in Sources */ = {isa = PBXBuildFile; fileRef = 46577647151F6240CBA9CE2D /* BMDexOrder.mm */; }; E6218D6C7C5BE83B9707F158 /* MessengerChatCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390F813D5F08AC3C0F47183F /* MessengerChatCell.swift */; }; E7EA1E52231681BDE3D26C73 /* AssetSwapsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFDAF01730E8C754AA8C5175 /* AssetSwapsViewModel.swift */; }; + EA4468F36E3D2550A6D3E783 /* libasio-ipfs.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C08DFF83966F34F6D7F6AFC /* libasio-ipfs.a */; }; ECF8F9E33148D1833480ADFA /* SplitCoinPreviewCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B33EC6A5FD1571ED9D1EFFB /* SplitCoinPreviewCard.swift */; }; + ED06A371AF87628171B6FB9B /* MyDAppsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 008792DADDD5C9FF28341A31 /* MyDAppsViewController.swift */; }; + EE21FF606586049461645B3E /* WalletAPIClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = B48933E92F4932F3A119DBB0 /* WalletAPIClient.mm */; }; EEE47E74C114A85B33A3A618 /* MessengerChatListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFF464435B3D65DCFC432FA3 /* MessengerChatListViewModel.swift */; }; + EF72B4145F6E6C9870670B96 /* libwallet_ipfs.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AC8EF915253F6CCEA3788BE /* libwallet_ipfs.a */; }; F00F7FD991CEA0402E131CFF /* AssetSwapCreateViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5B1E2B05648164FC49C46F7 /* AssetSwapCreateViewModel.swift */; }; F0F0F0F0AAAA0002ABCD0001 /* AssetSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */; }; F0F0F0F0AAAA0003ABCD0001 /* AssetSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */; }; F0F0F0F0AAAA0004ABCD0001 /* AssetSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */; }; + F43301CC1012AD1BCD74EFFE /* MyDAppsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 008792DADDD5C9FF28341A31 /* MyDAppsViewController.swift */; }; + F51D4BA4D0687745D2E60254 /* dao-voting-app.dapp in Resources */ = {isa = PBXBuildFile; fileRef = 8923664227A70DFEBE27B5ED /* dao-voting-app.dapp */; }; F5BD7F278CC7CCFADF63E7AF /* NodePeersViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13188DF7FB2332EDBB6929F5 /* NodePeersViewController.swift */; }; + F7E52918A59C06FDF87D69C9 /* DAppManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B86688612ED1A5FF45D1BAD /* DAppManager.swift */; }; + F8B20149A3E6BEDAE7F20E57 /* WalletAPIClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = B48933E92F4932F3A119DBB0 /* WalletAPIClient.mm */; }; F9C79FBC040297C8E235C660 /* libdex_board.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F426BB6F15C2E08A3E81B87D /* libdex_board.a */; }; FD87FA1DDA9C27F19451AB4B /* MessengerBubbleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E08B41CEDA5A06EBFD775E76 /* MessengerBubbleCell.swift */; }; /* End PBXBuildFile section */ @@ -1517,30 +1568,46 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 008792DADDD5C9FF28341A31 /* MyDAppsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MyDAppsViewController.swift; sourceTree = ""; }; 024109A68A03B9C8D11B9895 /* Pods-BeamWallet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeamWallet.release.xcconfig"; path = "Target Support Files/Pods-BeamWallet/Pods-BeamWallet.release.xcconfig"; sourceTree = ""; }; 13188DF7FB2332EDBB6929F5 /* NodePeersViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NodePeersViewController.swift; sourceTree = ""; }; 13CF5C205DC060CADA96F025 /* MessengerNewChatViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerNewChatViewController.swift; sourceTree = ""; }; + 17A4C97F6AE81EDDEC7DB4B9 /* BMAvailableDApp.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = BMAvailableDApp.m; sourceTree = ""; }; 18CF009621EA8E5970DA1D87 /* Pods_BeamWalletMasterNet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_BeamWalletMasterNet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1A2828F3DFD5228179C17B8D /* BMInstalledDApp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BMInstalledDApp.h; sourceTree = ""; }; 1A5FD8229312777D1D2BB813 /* SplitCoinsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SplitCoinsViewController.swift; sourceTree = ""; }; + 1AD88774871E2784A73C35A8 /* BMAvailableDApp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BMAvailableDApp.h; sourceTree = ""; }; 20B7F5341703980CD2D3941F /* BMInstantMessage.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; path = BMInstantMessage.mm; sourceTree = ""; }; 21968CB26C3B977852247761 /* AssetSwapsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSwapsViewController.swift; sourceTree = ""; }; + 2BE8E2F17C9FA369F86F60DB /* OraclePriceManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = OraclePriceManager.swift; sourceTree = ""; }; + 3149E0903940C330CAE827F5 /* oracle2-app.wasm */ = {isa = PBXFileReference; includeInIndex = 1; path = "oracle2-app.wasm"; sourceTree = ""; }; + 344F317D8FBFA32FFDA811F2 /* libipfs-bindings.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; path = "libipfs-bindings.a"; sourceTree = ""; }; 35296D58A729F092AFF0C821 /* BMChat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BMChat.h; sourceTree = ""; }; 36A85446EDA45DA6335930C5 /* Pods_BeamWalletTestNet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_BeamWalletTestNet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 390F813D5F08AC3C0F47183F /* MessengerChatCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerChatCell.swift; sourceTree = ""; }; 3B5894AC3136298FE0B7E8E3 /* Pods_BeamWallet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_BeamWallet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3C08DFF83966F34F6D7F6AFC /* libasio-ipfs.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; path = "libasio-ipfs.a"; sourceTree = ""; }; 456B838BA83C92E05D36B091 /* Pods-BeamWalletTestNet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeamWalletTestNet.release.xcconfig"; path = "Target Support Files/Pods-BeamWalletTestNet/Pods-BeamWalletTestNet.release.xcconfig"; sourceTree = ""; }; 46577647151F6240CBA9CE2D /* BMDexOrder.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; path = BMDexOrder.mm; sourceTree = ""; }; 46CAE6BC4C48E30E26AE304F /* BMInstantMessage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BMInstantMessage.h; sourceTree = ""; }; 4A6A43055CFB5C5820B099A1 /* AssetSwapCreateViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSwapCreateViewController.swift; sourceTree = ""; }; 4B33EC6A5FD1571ED9D1EFFB /* SplitCoinPreviewCard.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SplitCoinPreviewCard.swift; sourceTree = ""; }; + 4C1212B607A6369157662664 /* WalletAPIClient+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "WalletAPIClient+Internal.h"; sourceTree = ""; }; 4F9B63F6E98BA8303EE2FEAD /* AssetUTXOGroup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetUTXOGroup.swift; sourceTree = ""; }; 53ECF740A61C5F0D941B8B36 /* BMOptionPickerViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BMOptionPickerViewController.swift; sourceTree = ""; }; 57D7E7F685327E2CAB9E7C69 /* libdex.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; path = libdex.a; sourceTree = ""; }; + 5947BB8B40C5D62DAA9D01BF /* BMPublisher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = BMPublisher.m; sourceTree = ""; }; + 5FEED174B3A5FDB8D14C9963 /* dapps_store_app.wasm */ = {isa = PBXFileReference; includeInIndex = 1; path = dapps_store_app.wasm; sourceTree = ""; }; 603CF8C20147C7F9E087C33D /* SplitCoinsStripeView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SplitCoinsStripeView.swift; sourceTree = ""; }; + 6831B2B28CCBD5D776DCF34B /* PublishersViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PublishersViewController.swift; sourceTree = ""; }; 75A467070BE6633F1B715DAD /* AssetSwapDetailsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSwapDetailsViewController.swift; sourceTree = ""; }; + 788AE10382B92E35A434F2E3 /* BMInstalledDApp.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = BMInstalledDApp.m; sourceTree = ""; }; 7A439F6A64EB61AD3DF6945B /* MessengerConversationViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerConversationViewModel.swift; sourceTree = ""; }; + 7AC8EF915253F6CCEA3788BE /* libwallet_ipfs.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; path = libwallet_ipfs.a; sourceTree = ""; }; 7CDD341D6CFC3AD26C3F4374 /* AssetSwapOrderCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSwapOrderCell.swift; sourceTree = ""; }; 8865BEE3DDBE9806B38DDE04 /* AssetUTXOSectionHeaderView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetUTXOSectionHeaderView.swift; sourceTree = ""; }; + 8923664227A70DFEBE27B5ED /* dao-voting-app.dapp */ = {isa = PBXFileReference; includeInIndex = 1; path = "dao-voting-app.dapp"; sourceTree = ""; }; + 8B86688612ED1A5FF45D1BAD /* DAppManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DAppManager.swift; sourceTree = ""; }; 8C5EB5519EB54866BA8DB9A4 /* BMChat.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; path = BMChat.mm; sourceTree = ""; }; 8DFF1052A687C5F2265E618F /* MessengerChatListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerChatListViewController.swift; sourceTree = ""; }; 9205284E237B11F1001F8E31 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = ""; }; @@ -2080,18 +2147,26 @@ 92FE263822A11E4900102DB4 /* BMPickedAddressCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = BMPickedAddressCell.xib; sourceTree = ""; }; 92FE263922A11E4B00102DB4 /* BMExpandCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BMExpandCell.swift; sourceTree = ""; }; 92FE263A22A11E4D00102DB4 /* BMExpandCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = BMExpandCell.xib; sourceTree = ""; }; + 969B64630C2A5874889F91FC /* DAppStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DAppStore.swift; sourceTree = ""; }; + 9CC651F674E6883AFB9709D5 /* dao-core-app.dapp */ = {isa = PBXFileReference; includeInIndex = 1; path = "dao-core-app.dapp"; sourceTree = ""; }; AFF464435B3D65DCFC432FA3 /* MessengerChatListViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerChatListViewModel.swift; sourceTree = ""; }; + B48933E92F4932F3A119DBB0 /* WalletAPIClient.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = WalletAPIClient.mm; sourceTree = ""; }; B5B1E2B05648164FC49C46F7 /* AssetSwapCreateViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSwapCreateViewModel.swift; sourceTree = ""; }; BA659A4953BE271B118EB5D6 /* Pods-BeamWalletMasterNet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeamWalletMasterNet.debug.xcconfig"; path = "Target Support Files/Pods-BeamWalletMasterNet/Pods-BeamWalletMasterNet.debug.xcconfig"; sourceTree = ""; }; + C16867B8CD04CD914FE6A1CA /* WalletAPIClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = WalletAPIClient.h; sourceTree = ""; }; + C8C2A22B96525EB07D51F607 /* BMAlertViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BMAlertViewController.swift; sourceTree = ""; }; D303009FB5F0DA4093A89DFB /* Pods-BeamWalletTestNet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeamWalletTestNet.debug.xcconfig"; path = "Target Support Files/Pods-BeamWalletTestNet/Pods-BeamWalletTestNet.debug.xcconfig"; sourceTree = ""; }; D601ED375D9C9B9FAB70DE0B /* Pods-BeamWallet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeamWallet.debug.xcconfig"; path = "Target Support Files/Pods-BeamWallet/Pods-BeamWallet.debug.xcconfig"; sourceTree = ""; }; + D8EE91DF3849A709C3F01686 /* BMPublisher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BMPublisher.h; sourceTree = ""; }; E08B41CEDA5A06EBFD775E76 /* MessengerBubbleCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerBubbleCell.swift; sourceTree = ""; }; E23EA93CE3207A2EBB4D17FD /* SplitCoinsViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SplitCoinsViewModel.swift; sourceTree = ""; }; + E7E72505C417B965A57BB066 /* DAppStoreCells.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DAppStoreCells.swift; sourceTree = ""; }; EAEED72AAED404575AB9A6E5 /* Pods-BeamWalletMasterNet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeamWalletMasterNet.release.xcconfig"; path = "Target Support Files/Pods-BeamWalletMasterNet/Pods-BeamWalletMasterNet.release.xcconfig"; sourceTree = ""; }; F0AA87DBB7C958778D72096C /* AssetUTXOListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetUTXOListViewController.swift; sourceTree = ""; }; F0F0F0F0AAAA0001ABCD0001 /* AssetSearchViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetSearchViewController.swift; sourceTree = ""; }; F426BB6F15C2E08A3E81B87D /* libdex_board.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; path = libdex_board.a; sourceTree = ""; }; F9E4020D11686B93F29A46DA /* MessengerChatViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MessengerChatViewController.swift; sourceTree = ""; }; + FDCB8FF9B7300E47ABEF4D9A /* DAppURLSchemeHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DAppURLSchemeHandler.swift; sourceTree = ""; }; FECECF4C7F96F708C05AAF05 /* BMDexOrder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BMDexOrder.h; sourceTree = ""; }; FFDAF01730E8C754AA8C5175 /* AssetSwapsViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSwapsViewModel.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -2119,7 +2194,6 @@ 9244A5282A01465E007B03D0 /* libutility.a in Frameworks */, 9244A5342A01465E007B03D0 /* libblake2b.a in Frameworks */, 9244A5252A01465E007B03D0 /* libsqlite.a in Frameworks */, - 9244A5132A01465E007B03D0 /* libwallet_api_no_ipfs.a in Frameworks */, 9244A5582A01465E007B03D0 /* libexport.a in Frameworks */, 9244A55B2A01465E007B03D0 /* libp2p.a in Frameworks */, 9244A55E2A01465E007B03D0 /* libkeccak.a in Frameworks */, @@ -2132,12 +2206,14 @@ 9244A5552A01465E007B03D0 /* libmnemonic.a in Frameworks */, 9244A5162A01465E007B03D0 /* libre2.a in Frameworks */, 9244A52B2A01465E007B03D0 /* libassets.a in Frameworks */, - 9244A5612A01465E007B03D0 /* libwallet_client_no_ipfs.a in Frameworks */, 9244A5042A01465E007B03D0 /* libwallet_api.a in Frameworks */, 9244A50D2A01465E007B03D0 /* libwallet_client.a in Frameworks */, 9244A51C2A01465E007B03D0 /* libhw_crypto.a in Frameworks */, 610B9971C155D841609ACE0F /* libdex.a in Frameworks */, CCB34673E007AADB0D649F2C /* libdex_board.a in Frameworks */, + 11476E71A287700B5F7CBB8F /* libasio-ipfs.a in Frameworks */, + DA682CA91CC907ACC61E9C6B /* libipfs-bindings.a in Frameworks */, + 8B70C9ED979CE8D4574FC1EA /* libwallet_ipfs.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2163,7 +2239,6 @@ 9244A5292A01465E007B03D0 /* libutility.a in Frameworks */, 9244A5352A01465E007B03D0 /* libblake2b.a in Frameworks */, 9244A5262A01465E007B03D0 /* libsqlite.a in Frameworks */, - 9244A5142A01465E007B03D0 /* libwallet_api_no_ipfs.a in Frameworks */, 9244A5592A01465E007B03D0 /* libexport.a in Frameworks */, 9244A55C2A01465E007B03D0 /* libp2p.a in Frameworks */, 9244A55F2A01465E007B03D0 /* libkeccak.a in Frameworks */, @@ -2176,12 +2251,14 @@ 9244A5562A01465E007B03D0 /* libmnemonic.a in Frameworks */, 9244A5172A01465E007B03D0 /* libre2.a in Frameworks */, 9244A52C2A01465E007B03D0 /* libassets.a in Frameworks */, - 9244A5622A01465E007B03D0 /* libwallet_client_no_ipfs.a in Frameworks */, 9244A5052A01465E007B03D0 /* libwallet_api.a in Frameworks */, 9244A50E2A01465E007B03D0 /* libwallet_client.a in Frameworks */, 9244A51D2A01465E007B03D0 /* libhw_crypto.a in Frameworks */, DEF279257A2A5B949FBA8B01 /* libdex.a in Frameworks */, F9C79FBC040297C8E235C660 /* libdex_board.a in Frameworks */, + EA4468F36E3D2550A6D3E783 /* libasio-ipfs.a in Frameworks */, + 7076239CA6CBD5D923ED8EE8 /* libipfs-bindings.a in Frameworks */, + EF72B4145F6E6C9870670B96 /* libwallet_ipfs.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2207,7 +2284,6 @@ 9244A52A2A01465E007B03D0 /* libutility.a in Frameworks */, 9244A5362A01465E007B03D0 /* libblake2b.a in Frameworks */, 9244A5272A01465E007B03D0 /* libsqlite.a in Frameworks */, - 9244A5152A01465E007B03D0 /* libwallet_api_no_ipfs.a in Frameworks */, 9244A55A2A01465E007B03D0 /* libexport.a in Frameworks */, 9244A55D2A01465E007B03D0 /* libp2p.a in Frameworks */, 9244A5602A01465E007B03D0 /* libkeccak.a in Frameworks */, @@ -2220,12 +2296,14 @@ 9244A5572A01465E007B03D0 /* libmnemonic.a in Frameworks */, 9244A5182A01465E007B03D0 /* libre2.a in Frameworks */, 9244A52D2A01465E007B03D0 /* libassets.a in Frameworks */, - 9244A5632A01465E007B03D0 /* libwallet_client_no_ipfs.a in Frameworks */, 9244A5062A01465E007B03D0 /* libwallet_api.a in Frameworks */, 9244A50F2A01465E007B03D0 /* libwallet_client.a in Frameworks */, 9244A51E2A01465E007B03D0 /* libhw_crypto.a in Frameworks */, 9D8BAACCF64EA977E69273F0 /* libdex.a in Frameworks */, AB6BA79FF389E013065D35C9 /* libdex_board.a in Frameworks */, + 138076EB2F04AEFB33F90387 /* libasio-ipfs.a in Frameworks */, + 2F81D3CC162C2FD8201B35C0 /* libipfs-bindings.a in Frameworks */, + B5918DE6DE94C43C0CBB411F /* libwallet_ipfs.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2456,6 +2534,7 @@ children = ( 920EBE1526E8D48A003FD0A8 /* DAOAppCell.swift */, 920EBE1626E8D48A003FD0A8 /* DAOAppCell.xib */, + E7E72505C417B965A57BB066 /* DAppStoreCells.swift */, ); path = Cell; sourceTree = ""; @@ -2612,6 +2691,12 @@ 8C5EB5519EB54866BA8DB9A4 /* BMChat.mm */, FECECF4C7F96F708C05AAF05 /* BMDexOrder.h */, 46577647151F6240CBA9CE2D /* BMDexOrder.mm */, + 1A2828F3DFD5228179C17B8D /* BMInstalledDApp.h */, + 788AE10382B92E35A434F2E3 /* BMInstalledDApp.m */, + 1AD88774871E2784A73C35A8 /* BMAvailableDApp.h */, + 17A4C97F6AE81EDDEC7DB4B9 /* BMAvailableDApp.m */, + D8EE91DF3849A709C3F01686 /* BMPublisher.h */, + 5947BB8B40C5D62DAA9D01BF /* BMPublisher.m */, ); path = Objects; sourceTree = ""; @@ -2712,6 +2797,9 @@ 92506BE926DE5C17001804BA /* Public.cpp */, 926DB36A26DFC75200E85F0B /* DAOManager.h */, 926DB36B26DFC75200E85F0B /* DAOManager.mm */, + C16867B8CD04CD914FE6A1CA /* WalletAPIClient.h */, + B48933E92F4932F3A119DBB0 /* WalletAPIClient.mm */, + 4C1212B607A6369157662664 /* WalletAPIClient+Internal.h */, ); path = DAO; sourceTree = ""; @@ -2790,6 +2878,10 @@ 92B13274227B2CE30099B86C /* BeamWalletMasterNet.entitlements */, 92B13275227B2CEA0099B86C /* BeamWalletTestNet.entitlements */, 927993C822F424D300FF8ECC /* InfoPlist.strings */, + 5FEED174B3A5FDB8D14C9963 /* dapps_store_app.wasm */, + 9CC651F674E6883AFB9709D5 /* dao-core-app.dapp */, + 8923664227A70DFEBE27B5ED /* dao-voting-app.dapp */, + 3149E0903940C330CAE827F5 /* oracle2-app.wasm */, ); path = Resources; sourceTree = ""; @@ -2861,6 +2953,7 @@ 92B340AA2670E68C00936168 /* AssetIconView.swift */, 9249A5112694584900FF6C00 /* BMRippleCell.swift */, 53ECF740A61C5F0D941B8B36 /* BMOptionPickerViewController.swift */, + C8C2A22B96525EB07D51F607 /* BMAlertViewController.swift */, ); path = Controls; sourceTree = ""; @@ -3157,8 +3250,11 @@ 9244A4E62A014655007B03D0 /* libwallet_core.a */, 57D7E7F685327E2CAB9E7C69 /* libdex.a */, F426BB6F15C2E08A3E81B87D /* libdex_board.a */, + 3C08DFF83966F34F6D7F6AFC /* libasio-ipfs.a */, + 344F317D8FBFA32FFDA811F2 /* libipfs-bindings.a */, + 7AC8EF915253F6CCEA3788BE /* libwallet_ipfs.a */, ); - path = "beam-ios-7.5.14459/lib"; + path = "beam-ios-7.5.14464/lib"; sourceTree = ""; }; 92D3CBF02264B56D007E3C55 /* testnet */ = { @@ -3200,6 +3296,8 @@ 920EBE0D26E8D06D003FD0A8 /* DAOAppsViewController.swift */, 92ED772526E63EB000B41B3C /* DAOConfirmViewController.swift */, 9293114A2718EA1B005E3023 /* DAOConfirmViewController.xib */, + 008792DADDD5C9FF28341A31 /* MyDAppsViewController.swift */, + 6831B2B28CCBD5D776DCF34B /* PublishersViewController.swift */, ); path = DAO; sourceTree = ""; @@ -3221,6 +3319,7 @@ 92D729D726E2369000A92456 /* XWVScripting.swift */, 92D729D626E2369000A92456 /* XWVScriptObject.swift */, 92D729D426E2368F00A92456 /* XWVUserScript.swift */, + FDCB8FF9B7300E47ABEF4D9A /* DAppURLSchemeHandler.swift */, ); path = JS; sourceTree = ""; @@ -3367,6 +3466,9 @@ 92B7E4E922AFD748001708E4 /* Settings */, CD37C67AA40FF44BBFFD57B4 /* Messenger */, 838B90CD5474E2AC0F70CB0D /* AssetSwaps */, + 8B86688612ED1A5FF45D1BAD /* DAppManager.swift */, + 969B64630C2A5874889F91FC /* DAppStore.swift */, + 2BE8E2F17C9FA369F86F60DB /* OraclePriceManager.swift */, ); path = Model; sourceTree = ""; @@ -3693,6 +3795,10 @@ 92DF0D0022CAB69D0092CD4D /* Localizable.strings in Resources */, 92C00D2622A00E2A00DDB579 /* OwnerKeyViewController.xib in Resources */, 926F4B2C22E0CDB7007755D9 /* README.md in Resources */, + 010A73D4AEEB9251461112AB /* dapps_store_app.wasm in Resources */, + D0CC2976D1595860BB67C58C /* dao-core-app.dapp in Resources */, + 9D5813AA76650CB6EBA22D34 /* dao-voting-app.dapp in Resources */, + A4D6D5A9EC5F4DC3DD3E4682 /* oracle2-app.wasm in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3795,6 +3901,10 @@ 92090D0D223A684000A1CFBB /* bgTestnet.jpg in Resources */, 92E4AECB23599D46004062A1 /* CollectionTextHeader.xib in Resources */, 92C00D2722A00E2A00DDB579 /* OwnerKeyViewController.xib in Resources */, + 4B2FC15209C14B359E3651BD /* dapps_store_app.wasm in Resources */, + E4FDD3C6A0F5C3758751901D /* dao-core-app.dapp in Resources */, + D134B7B4257517D9037B6301 /* dao-voting-app.dapp in Resources */, + D91F481FE2DA5BE3465EFEFD /* oracle2-app.wasm in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3899,6 +4009,10 @@ 920D6C41270AEE3D00D953B8 /* BMDetailAmountCell.xib in Resources */, 92E2EB7A226F21C700367928 /* UTXODetailCell.xib in Resources */, 92E2EB7B226F21C700367928 /* bgTestnet.jpg in Resources */, + 6029A6A13D53093CF6EC2FB6 /* dapps_store_app.wasm in Resources */, + 7209CB87405DF7AC0B7CBE89 /* dao-core-app.dapp in Resources */, + F51D4BA4D0687745D2E60254 /* dao-voting-app.dapp in Resources */, + 8F9D17159CF9400338FE47EB /* oracle2-app.wasm in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3913,14 +4027,10 @@ inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-BeamWalletMasterNet/Pods-BeamWalletMasterNet-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-BeamWalletMasterNet/Pods-BeamWalletMasterNet-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); - outputPaths = ( - ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-BeamWalletMasterNet/Pods-BeamWalletMasterNet-frameworks.sh\"\n"; @@ -3956,14 +4066,10 @@ inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-BeamWalletTestNet/Pods-BeamWalletTestNet-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-BeamWalletTestNet/Pods-BeamWalletTestNet-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); - outputPaths = ( - ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-BeamWalletTestNet/Pods-BeamWalletTestNet-frameworks.sh\"\n"; @@ -3977,14 +4083,10 @@ inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-BeamWallet/Pods-BeamWallet-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-BeamWallet/Pods-BeamWallet-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); - outputPaths = ( - ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-BeamWallet/Pods-BeamWallet-frameworks.sh\"\n"; @@ -4437,7 +4539,19 @@ C6FB138B2A261CBC43626204 /* SplitCoinsStripeView.swift in Sources */, AC3CF90BF3C1ED7E2D19D65A /* SplitCoinPreviewCard.swift in Sources */, CDEA498CC695D89B35B0678E /* NodePeersViewController.swift in Sources */, + 0DB9711D993CFA1D225B53BA /* BMInstalledDApp.m in Sources */, + BDDA78B4E7DDB519C8591B40 /* BMAvailableDApp.m in Sources */, + 46E422749DE0BAE1BCF8B4EB /* BMPublisher.m in Sources */, + F8B20149A3E6BEDAE7F20E57 /* WalletAPIClient.mm in Sources */, + 28B1AF7C15F50CEC869952BD /* DAppManager.swift in Sources */, + 6F6101D0D3E633F1D68554F9 /* DAppStore.swift in Sources */, + F43301CC1012AD1BCD74EFFE /* MyDAppsViewController.swift in Sources */, + 8313E7C13424087CE8545F59 /* PublishersViewController.swift in Sources */, + D28537CD882B83167B426EA0 /* DAppStoreCells.swift in Sources */, 187B4E604FD2814B8018C796 /* AssetUTXOListViewController.swift in Sources */, + AAE84220C256A1EFAB30D9B3 /* DAppURLSchemeHandler.swift in Sources */, + 2964ED046A04435DB6FD977D /* BMAlertViewController.swift in Sources */, + 042BE224A8CF0171B513BED0 /* OraclePriceManager.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4787,7 +4901,19 @@ 6854C506C6836F88B8F8484E /* SplitCoinsStripeView.swift in Sources */, ECF8F9E33148D1833480ADFA /* SplitCoinPreviewCard.swift in Sources */, F5BD7F278CC7CCFADF63E7AF /* NodePeersViewController.swift in Sources */, + D0154E933CB0A42495F493B4 /* BMInstalledDApp.m in Sources */, + 26D73AAEC26B985DD2704C90 /* BMAvailableDApp.m in Sources */, + C51DBD848CA77EC12F48698C /* BMPublisher.m in Sources */, + EE21FF606586049461645B3E /* WalletAPIClient.mm in Sources */, + 7AB2A2A48540A9D102F56D7C /* DAppManager.swift in Sources */, + ACD5F2A82D411FA025F5709A /* DAppStore.swift in Sources */, + 2B7C41C938A0B67A9D143E3D /* MyDAppsViewController.swift in Sources */, + 56DCA641FEC90020A7C2686E /* PublishersViewController.swift in Sources */, + 82EC6CA54D5C74FD16085DE0 /* DAppStoreCells.swift in Sources */, 21C1E1B8354DCDBDB0A9ABB8 /* AssetUTXOListViewController.swift in Sources */, + A4044FC0C7CFF97F7D02D3F5 /* DAppURLSchemeHandler.swift in Sources */, + 50B804DB7153D959B75A9D13 /* BMAlertViewController.swift in Sources */, + D6F2A69901F8BE2CAE4846B0 /* OraclePriceManager.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5137,7 +5263,19 @@ 6EA6E49364A07F3740D84921 /* SplitCoinsStripeView.swift in Sources */, DAFECCA6179EA6FE92C0ABC7 /* SplitCoinPreviewCard.swift in Sources */, B93707F60996A4898F0B88E2 /* NodePeersViewController.swift in Sources */, + 9C5E69AB2AC0AC5E4D122185 /* BMInstalledDApp.m in Sources */, + 7A9AD3ED311827FB6EF39D54 /* BMAvailableDApp.m in Sources */, + 1A6B80C9C9EDCE967358F721 /* BMPublisher.m in Sources */, + E28445CBD68FD65137EB5624 /* WalletAPIClient.mm in Sources */, + F7E52918A59C06FDF87D69C9 /* DAppManager.swift in Sources */, + 1C28371060472F1EFAF00E7B /* DAppStore.swift in Sources */, + ED06A371AF87628171B6FB9B /* MyDAppsViewController.swift in Sources */, + 65A9895370E84E09300D7548 /* PublishersViewController.swift in Sources */, + AD534670E90AA9554A8C5F74 /* DAppStoreCells.swift in Sources */, 4B72CD41AF6A8F47020BC536 /* AssetUTXOListViewController.swift in Sources */, + A7290B4EEDC78DFD74B80F6F /* DAppURLSchemeHandler.swift in Sources */, + A8131AC203B7FC699E7DCA45 /* BMAlertViewController.swift in Sources */, + 0A44DCF3575DA823BA60DEC5 /* OraclePriceManager.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5250,6 +5388,8 @@ COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_BITCODE = NO; + ENABLE_DEBUG_DYLIB_OVERRIDE = NO; + ENABLE_DEBUG_DYLIB_SUPPORT = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; ENABLE_USER_SCRIPT_SANDBOXING = NO; @@ -5261,6 +5401,7 @@ "DEBUG=1", "$(inherited)", "BEAM_ASSET_SWAP_SUPPORT=1", + "BEAM_IPFS_SUPPORT=1", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; @@ -5327,6 +5468,7 @@ GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", "BEAM_ASSET_SWAP_SUPPORT=1", + "BEAM_IPFS_SUPPORT=1", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; @@ -5361,6 +5503,8 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = AB54LLK6SM; ENABLE_BITCODE = NO; + ENABLE_DEBUG_DYLIB_OVERRIDE = NO; + ENABLE_DEBUG_DYLIB_SUPPORT = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/BeamWallet", @@ -5370,16 +5514,17 @@ GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", "BEAM_ASSET_SWAP_SUPPORT=1", + "BEAM_IPFS_SUPPORT=1", ); HEADER_SEARCH_PATHS = ( - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty/libuv/include\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/core\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/utility\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/wallet\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty/sqlite\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/keykeeper\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/3rdparty\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/3rdparty/libuv/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/core\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/utility\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/wallet\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/3rdparty/sqlite\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/keykeeper\"", ); INFOPLIST_FILE = "$(SRCROOT)/Resources/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -5391,14 +5536,14 @@ "$(inherited)", "$(PROJECT_DIR)/BeamWallet/BeamSDK", "$(PROJECT_DIR)/Frameworks", - "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14459/lib", + "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14464/lib", "$(PROJECT_DIR)", "$(PROJECT_DIR)/Frameworks/boost", ); MARKETING_VERSION = 7.4; OTHER_LDFLAGS = ( "$(inherited)", - "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14459/lib/libsqlite.a", + "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14464/lib/libsqlite.a", "-ObjC", "-l\"c++\"", "-l\"z\"", @@ -5451,16 +5596,17 @@ GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", "BEAM_ASSET_SWAP_SUPPORT=1", + "BEAM_IPFS_SUPPORT=1", ); HEADER_SEARCH_PATHS = ( - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty/libuv/include\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/core\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/utility\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/wallet\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty/sqlite\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/keykeeper\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/3rdparty\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/3rdparty/libuv/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/core\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/utility\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/wallet\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/3rdparty/sqlite\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/keykeeper\"", ); INFOPLIST_FILE = "$(SRCROOT)/Resources/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -5472,14 +5618,14 @@ "$(inherited)", "$(PROJECT_DIR)/BeamWallet/BeamSDK", "$(PROJECT_DIR)/Frameworks", - "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14459/lib", + "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14464/lib", "$(PROJECT_DIR)", "$(PROJECT_DIR)/Frameworks/boost", ); MARKETING_VERSION = 7.4; OTHER_LDFLAGS = ( "$(inherited)", - "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14459/lib/libsqlite.a", + "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14464/lib/libsqlite.a", "-ObjC", "-l\"c++\"", "-l\"z\"", @@ -5523,6 +5669,8 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = KNU2R94BJK; ENABLE_BITCODE = NO; + ENABLE_DEBUG_DYLIB_OVERRIDE = NO; + ENABLE_DEBUG_DYLIB_SUPPORT = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/BeamWallet", @@ -5532,16 +5680,17 @@ GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", "BEAM_ASSET_SWAP_SUPPORT=1", + "BEAM_IPFS_SUPPORT=1", ); HEADER_SEARCH_PATHS = ( - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty/libuv/include\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/core\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/utility\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/wallet\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty/sqlite\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/keykeeper\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/3rdparty\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/3rdparty/libuv/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/core\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/utility\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/wallet\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/3rdparty/sqlite\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/keykeeper\"", ); INFOPLIST_FILE = "$(SRCROOT)/Resources/InfoTestnet.plist"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; @@ -5553,14 +5702,14 @@ "$(inherited)", "$(PROJECT_DIR)/BeamWallet/BeamSDK", "$(PROJECT_DIR)/Frameworks", - "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14459/lib", + "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14464/lib", "$(PROJECT_DIR)", "$(PROJECT_DIR)/Frameworks/boost", ); MARKETING_VERSION = 7.1; OTHER_LDFLAGS = ( "$(inherited)", - "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14459/lib/libsqlite.a", + "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14464/lib/libsqlite.a", "-ObjC", "-l\"c++\"", "-l\"z\"", @@ -5620,16 +5769,17 @@ "PB_NO_PACKED_STRUCTS=1", "PB_ENABLE_MALLOC=1", "BEAM_ASSET_SWAP_SUPPORT=1", + "BEAM_IPFS_SUPPORT=1", ); HEADER_SEARCH_PATHS = ( - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty/libuv/include\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/core\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/utility\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/wallet\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty/sqlite\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/keykeeper\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/3rdparty\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/3rdparty/libuv/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/core\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/utility\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/wallet\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/3rdparty/sqlite\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/keykeeper\"", ); INFOPLIST_FILE = "$(SRCROOT)/Resources/InfoTestnet.plist"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; @@ -5641,14 +5791,14 @@ "$(inherited)", "$(PROJECT_DIR)/BeamWallet/BeamSDK", "$(PROJECT_DIR)/Frameworks", - "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14459/lib", + "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14464/lib", "$(PROJECT_DIR)", "$(PROJECT_DIR)/Frameworks/boost", ); MARKETING_VERSION = 7.1; OTHER_LDFLAGS = ( "$(inherited)", - "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14459/lib/libsqlite.a", + "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14464/lib/libsqlite.a", "-ObjC", "-l\"c++\"", "-l\"z\"", @@ -5692,6 +5842,8 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = KNU2R94BJK; ENABLE_BITCODE = NO; + ENABLE_DEBUG_DYLIB_OVERRIDE = NO; + ENABLE_DEBUG_DYLIB_SUPPORT = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/BeamWallet", @@ -5701,16 +5853,17 @@ GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", "BEAM_ASSET_SWAP_SUPPORT=1", + "BEAM_IPFS_SUPPORT=1", ); HEADER_SEARCH_PATHS = ( - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty/libuv/include\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/core\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/utility\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/wallet\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty/sqlite\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/keykeeper\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/3rdparty\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/3rdparty/libuv/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/core\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/utility\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/wallet\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/3rdparty/sqlite\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/keykeeper\"", ); INFOPLIST_FILE = "$(SRCROOT)/Resources/InfoMasternet.plist"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; @@ -5726,12 +5879,12 @@ "$(PROJECT_DIR)", "$(PROJECT_DIR)/Frameworks/boost", "$(PROJECT_DIR)/Frameworks/testnet", - "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14459/lib", + "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14464/lib", ); MARKETING_VERSION = 7.4; OTHER_LDFLAGS = ( "$(inherited)", - "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14459/lib/libsqlite.a", + "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14464/lib/libsqlite.a", "-ObjC", "-l\"c++\"", "-l\"z\"", @@ -5784,16 +5937,17 @@ GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", "BEAM_ASSET_SWAP_SUPPORT=1", + "BEAM_IPFS_SUPPORT=1", ); HEADER_SEARCH_PATHS = ( - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty/libuv/include\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/core\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/utility\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/wallet\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/3rdparty/sqlite\"", - "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14459/include/keykeeper\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/3rdparty\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/3rdparty/libuv/include\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/core\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/utility\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/wallet\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/3rdparty/sqlite\"", + "\"$(SRCROOT)/Frameworks/beam-ios-7.5.14464/include/keykeeper\"", ); INFOPLIST_FILE = "$(SRCROOT)/Resources/InfoMasternet.plist"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; @@ -5809,12 +5963,12 @@ "$(PROJECT_DIR)", "$(PROJECT_DIR)/Frameworks/boost", "$(PROJECT_DIR)/Frameworks/testnet", - "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14459/lib", + "$(PROJECT_DIR)/Frameworks/beam-ios-7.5.14464/lib", ); MARKETING_VERSION = 7.4; OTHER_LDFLAGS = ( "$(inherited)", - "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14459/lib/libsqlite.a", + "-Wl,-force_load,$(SRCROOT)/Frameworks/beam-ios-7.5.14464/lib/libsqlite.a", "-ObjC", "-l\"c++\"", "-l\"z\"", diff --git a/BeamWallet/AppDelegate.swift b/BeamWallet/AppDelegate.swift index 8d1f9e44..3353f3c2 100644 --- a/BeamWallet/AppDelegate.swift +++ b/BeamWallet/AppDelegate.swift @@ -264,9 +264,13 @@ class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool { - + // options[.sourceApplication] as? String == "com.beam.runner" - + + if url.isFileURL && url.pathExtension.lowercased() == "dapp" { + return handleSideloadedDApp(url: url) + } + if let params = url.queryParameters, params.count == 2, let amount = params["amount"], let userId = params["user_id"] { @@ -287,6 +291,26 @@ class AppDelegate: UIResponder, UIApplicationDelegate { return true } + private func handleSideloadedDApp(url: URL) -> Bool { + guard AppModel.sharedManager().isLoggedin else { return false } + let secured = url.startAccessingSecurityScopedResource() + defer { if secured { url.stopAccessingSecurityScopedResource() } } + guard let data = try? Data(contentsOf: url) else { return false } + + do { + _ = try DAppManager.shared.installFromZip(data: data, + fallbackName: Localizable.shared.strings.dapps_sideloaded_name, + fallbackIcon: "") + } catch { + return false + } + + guard let top = UIApplication.getTopMostViewController(), + let nav = top.navigationController else { return true } + nav.pushViewController(MyDAppsViewController(), animated: true) + return true + } + func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { } diff --git a/BeamWallet/BeamSDK/AppModel.h b/BeamWallet/BeamSDK/AppModel.h index bcccd330..ddaec49a 100644 --- a/BeamWallet/BeamSDK/AppModel.h +++ b/BeamWallet/BeamSDK/AppModel.h @@ -47,6 +47,11 @@ #import "BMInstantMessage.h" #import "BMChat.h" #import "BMDexOrder.h" +#import "BMInstalledDApp.h" +#import "BMAvailableDApp.h" +#import "BMPublisher.h" + +@class WalletAPIClient; enum { BMRestoreManual = 0, @@ -346,8 +351,10 @@ typedef void(^ExportCSVBlock)(NSString * _Nonnull data, NSURL * _Nonnull url); -(void)loadApps; -(void)stopDAO; -(void)startApp:(UIViewController*_Nonnull)controller app:(BMApp*_Nonnull)app; +-(void)startApp:(UIViewController*_Nonnull)controller app:(BMApp*_Nonnull)app installedRoot:(NSURL* _Nullable)installedRoot; -(void)startBeamXDaoApp:(UINavigationController*_Nonnull)controller app:(BMApp*_Nonnull)app; -(void)sendDAOApiResult:(NSString*_Nonnull)json; +-(WalletAPIClient*_Nullable)walletAPIClient; -(void)approveContractInfo:(NSString*_Nonnull)json info:(NSString*_Nonnull)info amounts:(NSString*_Nonnull)amounts; -(void)getAssetInfoAsync:(int)assetId; diff --git a/BeamWallet/BeamSDK/AppModel.mm b/BeamWallet/BeamSDK/AppModel.mm index 35174d88..c4957be1 100644 --- a/BeamWallet/BeamSDK/AppModel.mm +++ b/BeamWallet/BeamSDK/AppModel.mm @@ -32,6 +32,7 @@ #import "WalletModel.h" #import "StringStd.h" #import "DAOManager.h" +#import "WalletAPIClient+Internal.h" #import "RecoveryProgress.h" #import "DiskStatusManager.h" @@ -51,6 +52,10 @@ #include "wallet/client/wallet_client.h" #include "wallet/core/default_peers.h" +#ifdef BEAM_IPFS_SUPPORT +#include "wallet/ipfs/ipfs_config.h" +#endif + #include "core/block_rw.h" #include "build/core/version.h" @@ -181,6 +186,10 @@ void operator() (std::string token){ static dispatch_once_t * once_token_model; +@interface AppModel () +- (void)configureEmbeddedIPFS; +@end + @implementation AppModel { BOOL isStarted; BOOL isRunning; @@ -207,6 +216,7 @@ @implementation AppModel { DAOManager *daoManager; DAOViewController *daoViewController; + WalletAPIClient *walletAPIClient; boost::optional _receiverAddress; @@ -809,6 +819,13 @@ -(void)resetWallet:(BOOL)removeDatabase { [daoManager destroy]; daoManager = nil; + [walletAPIClient destroy]; + walletAPIClient = nil; + + dispatch_async(dispatch_get_main_queue(), ^{ + [[OraclePriceManager shared] stop]; + }); + isStarted = NO; isRunning = NO; self.didLoadFullAssetsList = NO; @@ -1009,6 +1026,19 @@ -(void)restore:(NSString*_Nonnull)path{ }); daoManager = [[DAOManager alloc] initWithWallet:wallet]; + // Configure the embedded IPFS daemon *before* the wallet-owned + // AppsApi is created. WebAPICreator::createApi requests an IPFS + // service handle (ipfsnode=true), which makes the wallet thread + // call IWThread_startIPFSNode — and that needs a valid repo path + // queued via setIPFSConfig first. + [self configureEmbeddedIPFS]; + walletAPIClient = [[WalletAPIClient alloc] initWithWallet:wallet]; + [walletAPIClient ensureApi]; + if ([Settings sharedManager].isOracleEnabled) { + dispatch_async(dispatch_get_main_queue(), ^{ + [[OraclePriceManager shared] start]; + }); + } } catch (const std::exception& e) { NSLog(@"ImportRecovery failed %s",e.what()); @@ -1093,6 +1123,19 @@ -(void)start { [self loadFullAssetsList]; daoManager = [[DAOManager alloc] initWithWallet:wallet]; + // Configure the embedded IPFS daemon *before* the wallet-owned + // AppsApi is created. WebAPICreator::createApi requests an IPFS + // service handle (ipfsnode=true), which makes the wallet thread + // call IWThread_startIPFSNode — and that needs a valid repo path + // queued via setIPFSConfig first. + [self configureEmbeddedIPFS]; + walletAPIClient = [[WalletAPIClient alloc] initWithWallet:wallet]; + [walletAPIClient ensureApi]; + if ([Settings sharedManager].isOracleEnabled) { + dispatch_async(dispatch_get_main_queue(), ^{ + [[OraclePriceManager shared] start]; + }); + } } catch (const std::exception& e) { BEAM_LOG_ERROR() << "AppModel.start failed: " << e.what(); @@ -3395,9 +3438,42 @@ -(void)enableBodyRequests:(BOOL)value { } -(void)sendDAOApiResult:(NSString*_Nonnull)json { + // Route store / publishers / IPFS responses (id >= 1_000_000) to the + // wallet-owned client. Anything else belongs to the DApp running in + // DAOViewController, which uses the per-DApp AppsApiUI context. + if ([walletAPIClient routeResult:json]) { + return; + } [daoViewController sendDAOApiResultWithJson:json]; } +-(WalletAPIClient*_Nullable)walletAPIClient { + return walletAPIClient; +} + +-(void)configureEmbeddedIPFS { +#ifdef BEAM_IPFS_SUPPORT + if (!wallet) { + return; + } + // Drop the embedded go-ipfs node's repo under Documents/. The swarm key + // is auto-derived from beam::Rules::Network in ipfs_imp.cpp, so the node + // joins the right private swarm without explicit configuration — + // dappnet/testnet/mainnet/masternet each have their own pre-shared key + // baked into the BEAM core. We don't call startIPFSNode here: that's + // triggered as part of AppsApi creation (ipfsnode=true in createApi), + // which queues IWThread_startIPFSNode on the same wallet-client thread + // *after* this setIPFSConfig has run. + asio_ipfs::config cfg(asio_ipfs::config::Mode::Desktop); + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); + NSString *documentsDirectory = [paths firstObject]; + NSString *repoPath = [documentsDirectory stringByAppendingPathComponent:@"ipfs-repo"]; + cfg.repo_root = repoPath.string; + + wallet->getAsync()->setIPFSConfig(std::move(cfg)); +#endif +} + -(void)approveContractInfo:(NSString*_Nonnull)json info:(NSString*_Nonnull)info amounts:(NSString*_Nonnull)amounts { @@ -3409,19 +3485,24 @@ -(void)stopDAO { } -(void)startApp:(UIViewController*_Nonnull)controller app:(BMApp*)app { + [self startApp:controller app:app installedRoot:nil]; +} + +-(void)startApp:(UIViewController*_Nonnull)controller app:(BMApp*)app installedRoot:(NSURL* _Nullable)installedRoot { if (daoManager == nil) { daoManager = [[DAOManager alloc] initWithWallet:wallet]; } BOOL isSupported = [daoManager appSupported:app]; - + __weak typeof(self) weakSelf = self; if (isSupported) { [daoManager launchApp:app]; - + daoViewController = [[DAOViewController alloc] init]; daoViewController.app = app; + daoViewController.installedRoot = installedRoot; daoViewController.onRejected = ^(NSString * _Nonnull json) { __strong typeof(self) strongSelf = weakSelf; [strongSelf->daoManager contractInfoRejected:json]; diff --git a/BeamWallet/BeamSDK/DAO/WalletAPIClient+Internal.h b/BeamWallet/BeamSDK/DAO/WalletAPIClient+Internal.h new file mode 100644 index 00000000..88c25137 --- /dev/null +++ b/BeamWallet/BeamSDK/DAO/WalletAPIClient+Internal.h @@ -0,0 +1,17 @@ +// +// WalletAPIClient+Internal.h +// BeamWallet +// +// C++-only init for WalletAPIClient. Keep this out of the bridging header — +// it pulls in WalletModel which transitively requires C++ standard headers. +// Import this only from Objective-C++ translation units. +// + +#import "WalletAPIClient.h" +#import "WalletModel.h" + +@interface WalletAPIClient () + +- (instancetype _Nonnull)initWithWallet:(WalletModel::Ptr)wallet; + +@end diff --git a/BeamWallet/BeamSDK/DAO/WalletAPIClient.h b/BeamWallet/BeamSDK/DAO/WalletAPIClient.h new file mode 100644 index 00000000..3990e849 --- /dev/null +++ b/BeamWallet/BeamSDK/DAO/WalletAPIClient.h @@ -0,0 +1,42 @@ +// +// WalletAPIClient.h +// BeamWallet +// +// Wallet-owned AppsApiUI bridge used by the DApp Store browser, publishers list, +// and IPFS / contract calls made from native UI (not from a running DApp WebView). +// Call IDs start at WALLET_API_BASE_CALL_ID (1_000_000) so that responses for +// these requests don't collide with the per-DApp IDs handled by DAOViewController. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +extern const NSInteger WalletAPIClientBaseCallID; + +typedef void (^WalletAPICompletion)(NSDictionary * _Nonnull result); + +@interface WalletAPIClient : NSObject + +/// Lazily creates the AppsApiUI on the wallet thread. Safe to call repeatedly. +- (void)ensureApi; + +/// Tear down the underlying AppsApiUI and clear pending callbacks. +- (void)destroy; + +/// Encode `{jsonrpc:"2.0", id, method, params}` and dispatch to the wallet API. +/// `completion` is invoked once on the main queue with the parsed result map or +/// `{"error": ...}` on failure. +- (NSInteger)callMethod:(NSString *)method + params:(NSDictionary *)params + completion:(nullable WalletAPICompletion)completion + NS_SWIFT_NAME(call(method:params:completion:)); + +/// Inspect a JSON response from the C++ API. If its `id` belongs to this client +/// (`>= WalletAPIClientBaseCallID`), invokes the matching callback and returns YES. +/// Otherwise returns NO so the caller can forward the response elsewhere. +- (BOOL)routeResult:(NSString *)json; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BeamWallet/BeamSDK/DAO/WalletAPIClient.mm b/BeamWallet/BeamSDK/DAO/WalletAPIClient.mm new file mode 100644 index 00000000..4e24c649 --- /dev/null +++ b/BeamWallet/BeamSDK/DAO/WalletAPIClient.mm @@ -0,0 +1,185 @@ +// +// WalletAPIClient.mm +// BeamWallet +// + +#import "WalletAPIClient+Internal.h" +#import "WebAPICreator.h" +#import "AppsApiUI.h" +#import "Public.h" +#import "StringStd.h" + +#include "wallet/api/i_wallet_api.h" +#include "utility/logger.h" + +const NSInteger WalletAPIClientBaseCallID = 1000000; + +static NSString *const kWalletAPIClientAppName = @"Beam-Wallet"; + +@implementation WalletAPIClient { + WebAPICreator _creator; + NSInteger _counter; + NSMutableDictionary *_callbacks; + dispatch_queue_t _callbacksQueue; + BOOL _apiCreationRequested; +} + +- (instancetype)initWithWallet:(WalletModel::Ptr)wallet { + self = [super init]; + if (self) { + _creator = WebAPICreator(); + _creator._walletModel = wallet; + _counter = WalletAPIClientBaseCallID; + _callbacks = [NSMutableDictionary dictionary]; + _callbacksQueue = dispatch_queue_create("com.beam.WalletAPIClient.callbacks", DISPATCH_QUEUE_SERIAL); + _apiCreationRequested = NO; + } + return self; +} + +- (void)dealloc { + _creator.destroyApi(); + _creator._walletModel.reset(); +} + +- (void)ensureApi { + if (_apiCreationRequested) { + return; + } + _apiCreationRequested = YES; + try { + _creator.createApi("current", "", kWalletAPIClientAppName.string, ""); + } catch (NSException *ex) { + NSLog(@"WalletAPIClient.ensureApi: %@", ex); + _apiCreationRequested = NO; + } +} + +- (void)destroy { + _creator.destroyApi(); + _apiCreationRequested = NO; + dispatch_sync(_callbacksQueue, ^{ + [_callbacks removeAllObjects]; + }); +} + +- (NSInteger)callMethod:(NSString *)method + params:(NSDictionary *)params + completion:(WalletAPICompletion)completion { + [self ensureApi]; + + NSInteger callId = ++_counter; + + if (completion) { + dispatch_sync(_callbacksQueue, ^{ + _callbacks[@(callId)] = [completion copy]; + }); + } + + NSDictionary *payload = @{ + @"jsonrpc": @"2.0", + @"id": @(callId), + @"method": method, + @"params": params ?: @{}, + }; + + NSError *err = nil; + NSData *data = [NSJSONSerialization dataWithJSONObject:payload options:0 error:&err]; + if (!data) { + [self resolveCallId:callId withResult:@{@"error": @{@"message": err.localizedDescription ?: @"JSON encode failed"}}]; + return callId; + } + NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + + if (_creator._api == nil) { + // API not yet created; report error so caller can retry later. + [self resolveCallId:callId withResult:@{@"error": @{@"message": @"Wallet API not ready"}}]; + return callId; + } + + try { + _creator._api->callWalletApi(jsonString.string); + } catch (...) { + [self resolveCallId:callId withResult:@{@"error": @{@"message": @"callWalletApi threw"}}]; + } + return callId; +} + +- (BOOL)routeResult:(NSString *)json { + if (json.length == 0) return NO; + + NSData *data = [json dataUsingEncoding:NSUTF8StringEncoding]; + if (!data) return NO; + NSError *err = nil; + id parsed = [NSJSONSerialization JSONObjectWithData:data options:0 error:&err]; + if (![parsed isKindOfClass:[NSDictionary class]]) return NO; + NSDictionary *dict = parsed; + id rawId = dict[@"id"]; + if (![rawId isKindOfClass:[NSNumber class]]) return NO; + NSInteger callId = [rawId integerValue]; + if (callId < WalletAPIClientBaseCallID) return NO; + + NSDictionary *result = [self parseAnswer:dict]; + [self resolveCallId:callId withResult:result]; + return YES; +} + +- (NSDictionary *)parseAnswer:(NSDictionary *)answer { + if (answer[@"error"] != nil) { + id err = answer[@"error"]; + if ([err isKindOfClass:[NSDictionary class]]) { + return @{@"error": err}; + } else if ([err isKindOfClass:[NSString class]]) { + return @{@"error": @{@"message": err}}; + } + return @{@"error": @{@"message": @"Unknown error"}}; + } + + id rawResult = answer[@"result"]; + if ([rawResult isKindOfClass:[NSDictionary class]]) { + NSDictionary *resDict = rawResult; + // Shader invoke_contract responses carry their payload as a JSON string in "output". + NSString *output = resDict[@"output"]; + if ([output isKindOfClass:[NSString class]]) { + NSData *outData = [output dataUsingEncoding:NSUTF8StringEncoding]; + NSError *outErr = nil; + id outParsed = outData ? [NSJSONSerialization JSONObjectWithData:outData options:0 error:&outErr] : nil; + if ([outParsed isKindOfClass:[NSDictionary class]]) { + NSDictionary *outDict = outParsed; + if (outDict[@"error"] != nil) { + return @{@"error": outDict[@"error"]}; + } + NSMutableDictionary *merged = [outDict mutableCopy]; + if (resDict[@"raw_data"] != nil) { + merged[@"raw_data"] = resDict[@"raw_data"]; + } + return merged; + } + } + return resDict; + } + if ([rawResult isKindOfClass:[NSString class]]) { + return @{@"address": rawResult}; + } + if ([rawResult isKindOfClass:[NSArray class]]) { + return @{@"messages": rawResult}; + } + return @{}; +} + +- (void)resolveCallId:(NSInteger)callId withResult:(NSDictionary *)result { + __block WalletAPICompletion cb = nil; + dispatch_sync(_callbacksQueue, ^{ + cb = _callbacks[@(callId)]; + if (cb) { + [_callbacks removeObjectForKey:@(callId)]; + } + }); + if (cb) { + dispatch_async(dispatch_get_main_queue(), ^{ + cb(result); + }); + } +} + +@end diff --git a/BeamWallet/BeamSDK/DAO/WebAPICreator.mm b/BeamWallet/BeamSDK/DAO/WebAPICreator.mm index 17609380..2eddb1b1 100644 --- a/BeamWallet/BeamSDK/DAO/WebAPICreator.mm +++ b/BeamWallet/BeamSDK/DAO/WebAPICreator.mm @@ -45,7 +45,13 @@ auto guard = this; - AppsApiUI::ClientThread_Create(_walletModel.get(), version, appid, appName, 0 , false, + // `ipfsnode=true` makes ClientThread_Create call IWThread_startIPFSNode on + // the wallet thread and stash the IPFS service handle on the resulting + // ApiInitData. Without it, `ipfs_get` on this API instance returns + // ApiError::NotSupported even when BEAM_IPFS_SUPPORT is on. Callers must + // have set the IPFS config (repo_root, swarm key) on the wallet client + // before invoking createApi — AppModel does this at wallet-open time. + AppsApiUI::ClientThread_Create(_walletModel.get(), version, appid, appName, 0, true, [this, guard, version, appName, appid] (AppsApiUI::Ptr api) { if (guard) { diff --git a/BeamWallet/BeamSDK/Objects/BMAvailableDApp.h b/BeamWallet/BeamSDK/Objects/BMAvailableDApp.h new file mode 100644 index 00000000..6d8d81ea --- /dev/null +++ b/BeamWallet/BeamSDK/Objects/BMAvailableDApp.h @@ -0,0 +1,24 @@ +// +// BMAvailableDApp.h +// BeamWallet +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface BMAvailableDApp : NSObject + +@property (nonatomic, strong) NSString *guid; +@property (nonatomic, strong) NSString *name; +@property (nonatomic, strong) NSString *desc; +@property (nonatomic, strong) NSString *version; +@property (nonatomic, strong) NSString *ipfsCid; +@property (nonatomic, strong) NSString *publisher; +@property (nonatomic, strong) NSString *icon; +@property (nonatomic, strong) NSString *bundledAsset; +@property (nonatomic, strong) NSString *publisherName; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BeamWallet/BeamSDK/Objects/BMAvailableDApp.m b/BeamWallet/BeamSDK/Objects/BMAvailableDApp.m new file mode 100644 index 00000000..c9b7bb2b --- /dev/null +++ b/BeamWallet/BeamSDK/Objects/BMAvailableDApp.m @@ -0,0 +1,26 @@ +// +// BMAvailableDApp.m +// BeamWallet +// + +#import "BMAvailableDApp.h" + +@implementation BMAvailableDApp + +- (instancetype)init { + self = [super init]; + if (self) { + _guid = @""; + _name = @""; + _desc = @""; + _version = @"1.0.0"; + _ipfsCid = @""; + _publisher = @""; + _icon = @""; + _bundledAsset = @""; + _publisherName = @""; + } + return self; +} + +@end diff --git a/BeamWallet/BeamSDK/Objects/BMInstalledDApp.h b/BeamWallet/BeamSDK/Objects/BMInstalledDApp.h new file mode 100644 index 00000000..df6abc11 --- /dev/null +++ b/BeamWallet/BeamSDK/Objects/BMInstalledDApp.h @@ -0,0 +1,25 @@ +// +// BMInstalledDApp.h +// BeamWallet +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface BMInstalledDApp : NSObject + +@property (nonatomic, strong) NSString *guid; +@property (nonatomic, strong) NSString *name; +@property (nonatomic, strong) NSString *desc; +@property (nonatomic, strong) NSString *version; +@property (nonatomic, strong) NSString *localPath; +@property (nonatomic, strong) NSString *icon; +@property (nonatomic, strong) NSString *url; + +- (NSDictionary *)toDictionary; ++ (instancetype)fromDictionary:(NSDictionary *)dict; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BeamWallet/BeamSDK/Objects/BMInstalledDApp.m b/BeamWallet/BeamSDK/Objects/BMInstalledDApp.m new file mode 100644 index 00000000..9af1cd24 --- /dev/null +++ b/BeamWallet/BeamSDK/Objects/BMInstalledDApp.m @@ -0,0 +1,59 @@ +// +// BMInstalledDApp.m +// BeamWallet +// + +#import "BMInstalledDApp.h" + +@interface BMInstalledDApp () ++ (NSString *)stringFromDictionary:(NSDictionary *)dict key:(NSString *)key defaultValue:(NSString *)def; +@end + +@implementation BMInstalledDApp + +- (instancetype)init { + self = [super init]; + if (self) { + _guid = @""; + _name = @""; + _desc = @""; + _version = @"1.0"; + _localPath = @""; + _icon = @""; + _url = @"app/index.html"; + } + return self; +} + +- (NSDictionary *)toDictionary { + return @{ + @"guid": _guid ?: @"", + @"name": _name ?: @"", + @"description": _desc ?: @"", + @"version": _version ?: @"1.0", + @"localPath": _localPath ?: @"", + @"icon": _icon ?: @"", + @"url": _url ?: @"app/index.html", + }; +} + ++ (instancetype)fromDictionary:(NSDictionary *)dict { + BMInstalledDApp *d = [[BMInstalledDApp alloc] init]; + d.guid = [self stringFromDictionary:dict key:@"guid" defaultValue:@""]; + d.name = [self stringFromDictionary:dict key:@"name" defaultValue:@""]; + d.desc = [self stringFromDictionary:dict key:@"description" defaultValue:@""]; + d.version = [self stringFromDictionary:dict key:@"version" defaultValue:@"1.0"]; + d.localPath = [self stringFromDictionary:dict key:@"localPath" defaultValue:@""]; + d.icon = [self stringFromDictionary:dict key:@"icon" defaultValue:@""]; + d.url = [self stringFromDictionary:dict key:@"url" defaultValue:@"app/index.html"]; + return d; +} + ++ (NSString *)stringFromDictionary:(NSDictionary *)dict key:(NSString *)key defaultValue:(NSString *)def { + id value = dict[key]; + if ([value isKindOfClass:[NSString class]]) return value; + if (value == nil || value == [NSNull null]) return def; + return [NSString stringWithFormat:@"%@", value]; +} + +@end diff --git a/BeamWallet/BeamSDK/Objects/BMPublisher.h b/BeamWallet/BeamSDK/Objects/BMPublisher.h new file mode 100644 index 00000000..fe772c53 --- /dev/null +++ b/BeamWallet/BeamSDK/Objects/BMPublisher.h @@ -0,0 +1,24 @@ +// +// BMPublisher.h +// BeamWallet +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface BMPublisher : NSObject + +@property (nonatomic, strong) NSString *pubkey; +@property (nonatomic, strong) NSString *name; +@property (nonatomic, strong) NSString *aboutMe; +@property (nonatomic, strong) NSString *website; +@property (nonatomic, strong) NSString *twitter; +@property (nonatomic, strong) NSString *linkedin; +@property (nonatomic, strong) NSString *instagram; +@property (nonatomic, strong) NSString *telegram; +@property (nonatomic, strong) NSString *discord; + +@end + +NS_ASSUME_NONNULL_END diff --git a/BeamWallet/BeamSDK/Objects/BMPublisher.m b/BeamWallet/BeamSDK/Objects/BMPublisher.m new file mode 100644 index 00000000..8a704b3f --- /dev/null +++ b/BeamWallet/BeamSDK/Objects/BMPublisher.m @@ -0,0 +1,26 @@ +// +// BMPublisher.m +// BeamWallet +// + +#import "BMPublisher.h" + +@implementation BMPublisher + +- (instancetype)init { + self = [super init]; + if (self) { + _pubkey = @""; + _name = @""; + _aboutMe = @""; + _website = @""; + _twitter = @""; + _linkedin = @""; + _instagram = @""; + _telegram = @""; + _discord = @""; + } + return self; +} + +@end diff --git a/BeamWallet/BeamWallet-Bridging-Header.h b/BeamWallet/BeamWallet-Bridging-Header.h index 2e9cf34b..64ddd88c 100644 --- a/BeamWallet/BeamWallet-Bridging-Header.h +++ b/BeamWallet/BeamWallet-Bridging-Header.h @@ -4,6 +4,10 @@ #import "AppModel.h" #import "MnemonicModel.h" +#import "BMInstalledDApp.h" +#import "BMAvailableDApp.h" +#import "BMPublisher.h" +#import "WalletAPIClient.h" #import #import "LGSideMenuController.h" #import "UIViewController+LGSideMenuController.h" diff --git a/BeamWallet/Model/DAppManager.swift b/BeamWallet/Model/DAppManager.swift new file mode 100644 index 00000000..d1096aac --- /dev/null +++ b/BeamWallet/Model/DAppManager.swift @@ -0,0 +1,203 @@ +// +// DAppManager.swift +// BeamWallet +// +// Install / uninstall / list locally-installed DApps. +// + +import Foundation +// SSZipArchive is exposed to Swift through the bridging header. + +enum DAppManagerError: Error { + case invalidGUID + case missingManifestGUID + case unzipFailed + case bundledAssetMissing(String) +} + +@objc final class DAppManager: NSObject { + + @objc static let shared = DAppManager() + + static let defaultEntry = "app/index.html" + private let installedKey = "installed_dapps" + private let guidRegex = try! NSRegularExpression(pattern: "^[a-fA-F0-9]{32,64}$") + + private override init() { super.init() } + + private var dappsDirectory: URL { + let base = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask)[0] + return base.appendingPathComponent("dapps", isDirectory: true) + } + + private func ensureDappsDirectory() throws { + let dir = dappsDirectory + if !FileManager.default.fileExists(atPath: dir.path) { + try FileManager.default.createDirectory(at: dir, withIntermediateDirectories: true) + } + } + + // MARK: - Persistence + + @objc func installed() -> [BMInstalledDApp] { + guard let raw = UserDefaults.standard.string(forKey: installedKey), + let data = raw.data(using: .utf8), + let arr = (try? JSONSerialization.jsonObject(with: data)) as? [[String: Any]] else { + return [] + } + return arr.compactMap { item in + let dapp = BMInstalledDApp.fromDictionary(item) + return dapp.guid.isEmpty ? nil : dapp + } + } + + private func saveInstalled(_ list: [BMInstalledDApp]) { + let serialised = list.map { $0.toDictionary() } + guard let data = try? JSONSerialization.data(withJSONObject: serialised, options: []), + let json = String(data: data, encoding: .utf8) else { return } + UserDefaults.standard.set(json, forKey: installedKey) + } + + // MARK: - Validation + + private func isValidGUID(_ guid: String) -> Bool { + let range = NSRange(guid.startIndex.. String? { + if url.isEmpty { return DAppManager.defaultEntry } + if url.contains("..") || url.contains("//") { return nil } + if url.hasPrefix("/") || url.hasPrefix("\\") { return nil } + // Strip the desktop `localapp/` prefix so the load resolves directly + // against the DApp directory. + if url.hasPrefix("localapp/") { + return String(url.dropFirst("localapp/".count)) + } + if url.contains("/") && !url.hasPrefix("app/") { + return nil + } + return url + } + + // MARK: - Install + + /// Installs a `.dapp` (ZIP) and returns the resulting record. The dapps + /// directory is keyed by the manifest's `guid` field — we don't know that + /// value until the archive is extracted, so the unzip is staged in a temp + /// directory and only then moved into place. + @objc func installFromZip(data: Data, + fallbackName: String, + fallbackIcon: String) throws -> BMInstalledDApp { + try ensureDappsDirectory() + + let staging = FileManager.default.temporaryDirectory + .appendingPathComponent("dapp-stage-\(UUID().uuidString)", isDirectory: true) + try FileManager.default.createDirectory(at: staging, withIntermediateDirectories: true) + var stagingValid = true + defer { if stagingValid { try? FileManager.default.removeItem(at: staging) } } + + let tmpZip = FileManager.default.temporaryDirectory + .appendingPathComponent("dapp-\(UUID().uuidString).zip") + try data.write(to: tmpZip) + defer { try? FileManager.default.removeItem(at: tmpZip) } + + guard SSZipArchive.unzipFile(atPath: tmpZip.path, toDestination: staging.path) else { + throw DAppManagerError.unzipFailed + } + + // Drop anything resembling path traversal — SSZipArchive accepts entries + // verbatim. Walk the extracted tree and delete files that resolved + // outside the staging directory (canonicalised paths help on iOS where + // /private/var aliases /var). + sanitizeExtractedTree(dir: staging) + + var manifest: [String: Any] = [:] + let manifestPath = staging.appendingPathComponent("manifest.json") + if let mData = try? Data(contentsOf: manifestPath), + let parsed = (try? JSONSerialization.jsonObject(with: mData)) as? [String: Any] { + manifest = parsed + } + + let manifestGuid = (manifest["guid"] as? String) ?? "" + guard !manifestGuid.isEmpty else { throw DAppManagerError.missingManifestGUID } + guard isValidGUID(manifestGuid) else { throw DAppManagerError.invalidGUID } + + let dir = dappsDirectory.appendingPathComponent(manifestGuid, isDirectory: true) + if FileManager.default.fileExists(atPath: dir.path) { + try? FileManager.default.removeItem(at: dir) + } + try FileManager.default.moveItem(at: staging, to: dir) + stagingValid = false + + let icon = DAppStore.firstIcon(in: dir) ?? fallbackIcon + let rawURL = (manifest["url"] as? String) ?? DAppManager.defaultEntry + let safeURL = validateManifestURL(rawURL) ?? DAppManager.defaultEntry + + let dapp = BMInstalledDApp() + dapp.guid = manifestGuid + dapp.name = (manifest["name"] as? String) ?? fallbackName + dapp.desc = (manifest["description"] as? String) ?? "" + dapp.version = (manifest["version"] as? String) ?? "1.0" + dapp.localPath = dir.path + dapp.icon = icon + dapp.url = safeURL + + var list = installed() + list.removeAll { $0.guid == manifestGuid } + list.append(dapp) + saveInstalled(list) + + return dapp + } + + /// Walks the extracted DApp directory and removes any file whose canonical + /// path escapes the root — SSZipArchive accepts traversal entries verbatim + /// on older versions, so we sanitise after the fact. + private func sanitizeExtractedTree(dir: URL) { + let fm = FileManager.default + let rootStandardized = dir.standardizedFileURL.path + guard let enumerator = fm.enumerator(at: dir, + includingPropertiesForKeys: [.isRegularFileKey], + options: []) else { return } + for case let url as URL in enumerator { + let resolved = url.standardizedFileURL.path + if !resolved.hasPrefix(rootStandardized) { + try? fm.removeItem(at: url) + } + } + } + + @objc func installFromBundle(assetName: String, + fallbackName: String) throws -> BMInstalledDApp { + guard let url = Bundle.main.url(forResource: (assetName as NSString).deletingPathExtension, + withExtension: (assetName as NSString).pathExtension) else { + throw DAppManagerError.bundledAssetMissing(assetName) + } + let data = try Data(contentsOf: url) + return try installFromZip(data: data, fallbackName: fallbackName, fallbackIcon: "") + } + + @objc func uninstall(guid: String) { + let dir = dappsDirectory.appendingPathComponent(guid) + try? FileManager.default.removeItem(at: dir) + var list = installed() + list.removeAll { $0.guid == guid } + saveInstalled(list) + } + + // MARK: - Launch + + /// Returns the file:// URL pointing at the DApp's entry HTML, clamped to + /// stay inside the DApp directory. + @objc func launchURL(for dapp: BMInstalledDApp) -> URL? { + let root = URL(fileURLWithPath: dapp.localPath, isDirectory: true).standardizedFileURL + let safeURL = validateManifestURL(dapp.url) ?? DAppManager.defaultEntry + let target = root.appendingPathComponent(safeURL).standardizedFileURL + if !target.path.hasPrefix(root.path) { + return root.appendingPathComponent(DAppManager.defaultEntry) + } + return target + } +} diff --git a/BeamWallet/Model/DAppStore.swift b/BeamWallet/Model/DAppStore.swift new file mode 100644 index 00000000..23bf84dc --- /dev/null +++ b/BeamWallet/Model/DAppStore.swift @@ -0,0 +1,369 @@ +// +// DAppStore.swift +// BeamWallet +// +// Queries the on-chain DApp Store contract for published DApps and publishers, +// caches the publisher list, downloads DApp ZIPs over IPFS via the wallet RPC. +// + +import Foundation + +@objc final class DAppStore: NSObject { + + @objc static let shared = DAppStore() + + static let storeCID = "e2d24b686e8d31a0fe97eade9cd23281e7059b74b5757bdb96c820ef9e2af41c" + static let iconCandidates = ["app/icon.svg", "app/appicon.svg", "app/logo.svg"] + private let ipfsTimeoutMS = 180_000 + private let unwantedPublishersKey = "unwanted_publishers" + + private let bundled: [BMAvailableDApp] = { + let core = BMAvailableDApp() + core.guid = "abcc470e12c6422291f360f83d79355e" + core.name = "BeamX DAO" + core.desc = "Governance, staking and voting" + core.version = "1.0.0" + core.bundledAsset = "dao-core-app.dapp" + + let voting = BMAvailableDApp() + voting.guid = "c26538f5ce9e410b89c1fd0dff783f97" + voting.name = "BeamX DAO Voting" + voting.desc = "Voting on Beam community proposals" + voting.version = "1.0.0" + voting.bundledAsset = "dao-voting-app.dapp" + + return [core, voting] + }() + + private var shaderBytes: [Int]? + private var cachedPublishers: [BMPublisher] = [] + + // MARK: - Shader + + private func loadShader() -> [Int]? { + if let bytes = shaderBytes { return bytes } + guard let url = Bundle.main.url(forResource: "dapps_store_app", withExtension: "wasm"), + let data = try? Data(contentsOf: url) else { + return nil + } + let bytes = data.map { Int($0) } + shaderBytes = bytes + return bytes + } + + // MARK: - Available DApps + + @objc func queryAvailableDApps(filterUnwanted: Bool = true, + completion: @escaping ([BMAvailableDApp]) -> Void) { + guard let shader = loadShader() else { + completion(bundledWithIcons()) + return + } + loadPublishers(shader: shader) { [weak self] in + self?.loadDApps(shader: shader, filterUnwanted: filterUnwanted, completion: completion) + } + } + + @objc func queryPublishers(completion: @escaping ([BMPublisher]) -> Void) { + if !cachedPublishers.isEmpty { + completion(cachedPublishers) + return + } + guard let shader = loadShader() else { + completion([]) + return + } + loadPublishers(shader: shader) { [weak self] in + completion(self?.cachedPublishers ?? []) + } + } + + private func loadPublishers(shader: [Int], onDone: @escaping () -> Void) { + if !cachedPublishers.isEmpty { onDone(); return } + guard let client = AppModel.sharedManager().walletAPIClient() else { + onDone() + return + } + let args = "action=view_publishers,cid=\(DAppStore.storeCID)" + let params: [String: Any] = [ + "args": args, + "create_tx": false, + "contract": shader, + ] + client.call(method: "invoke_contract", params: params) { [weak self] (result: [AnyHashable: Any]) in + guard let self = self else { onDone(); return } + if let publishers = result["publishers"] as? [[String: Any]] { + self.cachedPublishers = publishers.compactMap { p in + guard let pubkey = p["pubkey"] as? String else { return nil } + let name = Self.hexToString(p["name"] as? String ?? "") + if name.isEmpty { return nil } + let pub = BMPublisher() + pub.pubkey = pubkey + pub.name = name + pub.aboutMe = Self.hexToString(p["about_me"] as? String ?? "") + pub.website = Self.hexToString(p["website"] as? String ?? "") + pub.twitter = Self.hexToString(p["twitter"] as? String ?? "") + pub.linkedin = Self.hexToString(p["linkedin"] as? String ?? "") + pub.instagram = Self.hexToString(p["instagram"] as? String ?? "") + pub.telegram = Self.hexToString(p["telegram"] as? String ?? "") + pub.discord = Self.hexToString(p["discord"] as? String ?? "") + return pub + } + } + onDone() + } + } + + private func loadDApps(shader: [Int], + filterUnwanted: Bool, + completion: @escaping ([BMAvailableDApp]) -> Void) { + guard let client = AppModel.sharedManager().walletAPIClient() else { + completion(bundledWithIcons()) + return + } + let args = "action=view_dapps,cid=\(DAppStore.storeCID)" + let params: [String: Any] = [ + "args": args, + "create_tx": false, + "contract": shader, + ] + client.call(method: "invoke_contract", params: params) { [weak self] (result: [AnyHashable: Any]) in + guard let self = self else { return } + if result["error"] != nil { + completion(self.bundledWithIcons()) + return + } + guard let raw = result["dapps"] as? [[String: Any]] else { + completion(self.bundledWithIcons()) + return + } + let unwanted = filterUnwanted ? self.getUnwantedPublishers() : Set() + let publisherNames: [String: String] = Dictionary( + self.cachedPublishers.map { ($0.pubkey.lowercased(), $0.name) }, + uniquingKeysWith: { first, _ in first } + ) + let parsed: [BMAvailableDApp] = raw.compactMap { item in + guard let guid = item["id"] as? String else { return nil } + let name = Self.hexToString(item["name"] as? String ?? "") + if name.isEmpty { return nil } + let publisherPk = (item["publisher"] as? String) ?? "" + if !publisherPk.isEmpty && unwanted.contains(publisherPk.lowercased()) { + return nil + } + + let dapp = BMAvailableDApp() + dapp.guid = guid + dapp.name = name + dapp.desc = Self.hexToString(item["description"] as? String ?? "") + dapp.ipfsCid = (item["ipfs_id"] as? String) ?? "" + dapp.publisher = publisherPk + dapp.publisherName = publisherNames[publisherPk.lowercased()] ?? "" + + if let ver = item["version"] as? [String: Any] { + let major = (ver["major"] as? NSNumber)?.intValue ?? 1 + let minor = (ver["minor"] as? NSNumber)?.intValue ?? 0 + let release = (ver["release"] as? NSNumber)?.intValue ?? 0 + dapp.version = "\(major).\(minor).\(release)" + } else { + dapp.version = "1.0.0" + } + + let iconHex = (item["icon"] as? String) ?? "" + if !iconHex.isEmpty { + let decoded = Self.hexToString(iconHex).trimmingCharacters(in: .whitespacesAndNewlines) + let prefix = "data:image/svg+xml;utf8," + let svg = decoded.hasPrefix(prefix) ? String(decoded.dropFirst(prefix.count)) : decoded + if svg.hasPrefix(" [BMAvailableDApp] { + for template in bundled where template.icon.isEmpty && !template.bundledAsset.isEmpty { + template.icon = extractIcon(fromBundledAsset: template.bundledAsset) + } + return bundled + } + + private func extractIcon(fromBundledAsset assetName: String) -> String { + let nameNS = assetName as NSString + guard let url = Bundle.main.url(forResource: nameNS.deletingPathExtension, + withExtension: nameNS.pathExtension) else { return "" } + let workDir = FileManager.default.temporaryDirectory + .appendingPathComponent("bundled-icon-\(UUID().uuidString)", isDirectory: true) + defer { try? FileManager.default.removeItem(at: workDir) } + try? FileManager.default.createDirectory(at: workDir, withIntermediateDirectories: true) + guard SSZipArchive.unzipFile(atPath: url.path, toDestination: workDir.path) else { return "" } + return DAppStore.firstIcon(in: workDir) ?? "" + } + + static func firstIcon(in dir: URL) -> String? { + for name in iconCandidates { + let p = dir.appendingPathComponent(name) + guard let svg = try? String(contentsOf: p, encoding: .utf8) else { continue } + let trimmed = svg.trimmingCharacters(in: .whitespacesAndNewlines) + if trimmed.hasPrefix(" Void) { + guard let client = AppModel.sharedManager().walletAPIClient() else { + completion(nil, "Wallet API not ready") + return + } + let params: [String: Any] = ["hash": cid, "timeout": ipfsTimeoutMS] + client.call(method: "ipfs_get", params: params) { (result: [AnyHashable: Any]) in + if let err = result["error"] { + let message: String + if let dict = err as? [String: Any], let m = dict["message"] as? String { message = m } + else if let s = err as? String { message = s } + else { message = "IPFS download failed" } + completion(nil, message) + return + } + guard let bytes = result["data"] as? [NSNumber] else { + completion(nil, "No data returned from IPFS") + return + } + var buffer = Data(count: bytes.count) + buffer.withUnsafeMutableBytes { raw in + guard let base = raw.baseAddress?.assumingMemoryBound(to: UInt8.self) else { return } + for (i, num) in bytes.enumerated() { + base[i] = UInt8(truncatingIfNeeded: num.intValue) + } + } + completion(buffer, nil) + } + } + + // MARK: - Version comparison + + private static func parseVersion(_ v: String) -> [Int] { + return v.split(separator: ".").compactMap { Int($0) } + } + + @objc static func isVersionOlder(_ a: String, than b: String) -> Bool { + let av = parseVersion(a) + let bv = parseVersion(b) + let maxLen = max(av.count, bv.count) + for i in 0.. Void) { + queryAvailableDApps { [weak self] available in + guard let self = self, + let match = available.first(where: { $0.guid == dapp.guid }), + DAppStore.isVersionOlder(dapp.version, than: match.version) else { + completion(false) + return + } + self.install(match) { installed, _ in completion(installed != nil) } + } + } + + // MARK: - Install dispatch + + /// Installs an available DApp from either its bundled asset or via IPFS. + @objc func install(_ available: BMAvailableDApp, + completion: @escaping (BMInstalledDApp?, String?) -> Void) { + if !available.bundledAsset.isEmpty { + do { + let installed = try DAppManager.shared.installFromBundle(assetName: available.bundledAsset, + fallbackName: available.name) + completion(installed, nil) + } catch { + completion(nil, "\(error)") + } + return + } + if available.ipfsCid.isEmpty { + completion(nil, "No download source") + return + } + downloadFromIpfs(cid: available.ipfsCid) { data, err in + guard let data = data else { + completion(nil, err ?? "Download failed") + return + } + do { + let installed = try DAppManager.shared.installFromZip(data: data, + fallbackName: available.name, + fallbackIcon: available.icon) + completion(installed, nil) + } catch { + completion(nil, "\(error)") + } + } + } + + // MARK: - Unwanted publishers + + @objc func getUnwantedPublishers() -> Set { + let arr = UserDefaults.standard.stringArray(forKey: unwantedPublishersKey) ?? [] + return Set(arr.map { $0.lowercased() }) + } + + @objc func addUnwantedPublisher(_ pubkey: String) { + var set = getUnwantedPublishers() + set.insert(pubkey.lowercased()) + UserDefaults.standard.set(Array(set), forKey: unwantedPublishersKey) + } + + @objc func removeUnwantedPublisher(_ pubkey: String) { + var set = getUnwantedPublishers() + set.remove(pubkey.lowercased()) + UserDefaults.standard.set(Array(set), forKey: unwantedPublishersKey) + } + + // MARK: - Hex decode + + private static func hexToString(_ hex: String) -> String { + if hex.isEmpty { return "" } + var bytes: [UInt8] = [] + bytes.reserveCapacity(hex.count / 2) + var idx = hex.startIndex + while idx < hex.endIndex { + let next = hex.index(idx, offsetBy: 2, limitedBy: hex.endIndex) ?? hex.endIndex + if next == idx { break } + let pair = hex[idx.. Void)? + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + backgroundColor = .clear + selectionStyle = .none + + iconView.contentMode = .scaleAspectFit + iconView.translatesAutoresizingMaskIntoConstraints = false + iconView.layer.cornerRadius = CellMetrics.iconSize / 2 + iconView.clipsToBounds = true + contentView.addSubview(iconView) + + nameLabel.translatesAutoresizingMaskIntoConstraints = false + nameLabel.font = SemiboldFont(size: 16) + nameLabel.textColor = .white + contentView.addSubview(nameLabel) + + detailLabel.translatesAutoresizingMaskIntoConstraints = false + detailLabel.font = RegularFont(size: 13) + detailLabel.textColor = UIColor.white.withAlphaComponent(0.7) + detailLabel.numberOfLines = 2 + contentView.addSubview(detailLabel) + + removeButton.translatesAutoresizingMaskIntoConstraints = false + removeButton.setTitle("✕", for: .normal) + removeButton.titleLabel?.font = SemiboldFont(size: 20) + removeButton.tintColor = UIColor.white.withAlphaComponent(0.7) + removeButton.setTitleColor(UIColor.white.withAlphaComponent(0.7), for: .normal) + removeButton.addTarget(self, action: #selector(removeTapped), for: .touchUpInside) + contentView.addSubview(removeButton) + + NSLayoutConstraint.activate([ + iconView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: CellMetrics.inset), + iconView.centerYAnchor.constraint(equalTo: contentView.centerYAnchor), + iconView.widthAnchor.constraint(equalToConstant: CellMetrics.iconSize), + iconView.heightAnchor.constraint(equalToConstant: CellMetrics.iconSize), + + removeButton.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -CellMetrics.inset), + removeButton.centerYAnchor.constraint(equalTo: contentView.centerYAnchor), + removeButton.widthAnchor.constraint(equalToConstant: 32), + removeButton.heightAnchor.constraint(equalToConstant: 32), + + nameLabel.leadingAnchor.constraint(equalTo: iconView.trailingAnchor, constant: 12), + nameLabel.trailingAnchor.constraint(lessThanOrEqualTo: removeButton.leadingAnchor, constant: -8), + nameLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 12), + + detailLabel.leadingAnchor.constraint(equalTo: nameLabel.leadingAnchor), + detailLabel.trailingAnchor.constraint(equalTo: nameLabel.trailingAnchor), + detailLabel.topAnchor.constraint(equalTo: nameLabel.bottomAnchor, constant: 2), + detailLabel.bottomAnchor.constraint(lessThanOrEqualTo: contentView.bottomAnchor, constant: -12), + ]) + } + + required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } + + override func prepareForReuse() { + super.prepareForReuse() + iconView.image = nil + } + + @objc private func removeTapped() { onRemoveTapped?() } + + func configure(with dapp: BMInstalledDApp) { + nameLabel.text = dapp.name + detailLabel.text = dapp.desc.isEmpty ? "v\(dapp.version)" : "\(dapp.desc) • v\(dapp.version)" + DAppIconLoader.load(svg: dapp.icon, into: iconView) + } +} + +// MARK: - Store row (install / installed / update) + +final class DAppStoreCell: UITableViewCell { + + enum Action { + case install + case installed + case update + } + + let iconView = UIImageView() + let nameLabel = UILabel() + let detailLabel = UILabel() + let actionButton = UIButton(type: .system) + var onActionTapped: (() -> Void)? + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + backgroundColor = .clear + selectionStyle = .none + + iconView.contentMode = .scaleAspectFit + iconView.translatesAutoresizingMaskIntoConstraints = false + iconView.layer.cornerRadius = CellMetrics.iconSize / 2 + iconView.clipsToBounds = true + contentView.addSubview(iconView) + + nameLabel.translatesAutoresizingMaskIntoConstraints = false + nameLabel.font = SemiboldFont(size: 16) + nameLabel.textColor = .white + contentView.addSubview(nameLabel) + + detailLabel.translatesAutoresizingMaskIntoConstraints = false + detailLabel.font = RegularFont(size: 13) + detailLabel.textColor = UIColor.white.withAlphaComponent(0.7) + detailLabel.numberOfLines = 2 + contentView.addSubview(detailLabel) + + actionButton.translatesAutoresizingMaskIntoConstraints = false + actionButton.titleLabel?.font = SemiboldFont(size: 13) + actionButton.layer.cornerRadius = 14 + actionButton.contentEdgeInsets = UIEdgeInsets(top: 6, left: 12, bottom: 6, right: 12) + actionButton.addTarget(self, action: #selector(actionTapped), for: .touchUpInside) + contentView.addSubview(actionButton) + + NSLayoutConstraint.activate([ + iconView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: CellMetrics.inset), + iconView.centerYAnchor.constraint(equalTo: contentView.centerYAnchor), + iconView.widthAnchor.constraint(equalToConstant: CellMetrics.iconSize), + iconView.heightAnchor.constraint(equalToConstant: CellMetrics.iconSize), + + actionButton.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -CellMetrics.inset), + actionButton.centerYAnchor.constraint(equalTo: contentView.centerYAnchor), + actionButton.heightAnchor.constraint(equalToConstant: 28), + + nameLabel.leadingAnchor.constraint(equalTo: iconView.trailingAnchor, constant: 12), + nameLabel.trailingAnchor.constraint(lessThanOrEqualTo: actionButton.leadingAnchor, constant: -8), + nameLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 12), + + detailLabel.leadingAnchor.constraint(equalTo: nameLabel.leadingAnchor), + detailLabel.trailingAnchor.constraint(equalTo: nameLabel.trailingAnchor), + detailLabel.topAnchor.constraint(equalTo: nameLabel.bottomAnchor, constant: 2), + detailLabel.bottomAnchor.constraint(lessThanOrEqualTo: contentView.bottomAnchor, constant: -12), + ]) + } + + required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } + + override func prepareForReuse() { + super.prepareForReuse() + iconView.image = nil + } + + @objc private func actionTapped() { onActionTapped?() } + + func configure(with dapp: BMAvailableDApp, action: Action) { + nameLabel.text = dapp.name + var detail = dapp.desc + if !dapp.publisherName.isEmpty { + detail = detail.isEmpty ? dapp.publisherName : "\(detail) • \(dapp.publisherName)" + } + detailLabel.text = detail + + DAppIconLoader.load(svg: dapp.icon, into: iconView) + + // Reset borrowed-from-recycled-state styling — `.installed` sets a border + // that other actions don't, and would otherwise carry across reuse. + actionButton.layer.borderColor = nil + actionButton.layer.borderWidth = 0 + + switch action { + case .install: + actionButton.setTitle(Localizable.shared.strings.dapps_install_label, for: .normal) + actionButton.backgroundColor = UIColor.main.brightTeal + actionButton.setTitleColor(.black, for: .normal) + actionButton.isEnabled = true + case .installed: + actionButton.setTitle(Localizable.shared.strings.dapps_installed_label, for: .normal) + actionButton.backgroundColor = UIColor.clear + actionButton.setTitleColor(UIColor.white.withAlphaComponent(0.5), for: .normal) + actionButton.layer.borderColor = UIColor.white.withAlphaComponent(0.3).cgColor + actionButton.layer.borderWidth = 1 + actionButton.isEnabled = false + case .update: + actionButton.setTitle(Localizable.shared.strings.dapps_update, for: .normal) + actionButton.backgroundColor = UIColor.main.heliotrope + actionButton.setTitleColor(.black, for: .normal) + actionButton.isEnabled = true + } + } +} + +// MARK: - Sideload row + +final class SideloadCell: UITableViewCell { + + let titleLabel = UILabel() + let detailLabel = UILabel() + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + backgroundColor = .clear + accessoryType = .disclosureIndicator + + titleLabel.translatesAutoresizingMaskIntoConstraints = false + titleLabel.font = SemiboldFont(size: 15) + titleLabel.textColor = .white + titleLabel.text = Localizable.shared.strings.dapps_install_from_file + contentView.addSubview(titleLabel) + + detailLabel.translatesAutoresizingMaskIntoConstraints = false + detailLabel.font = RegularFont(size: 12) + detailLabel.textColor = UIColor.white.withAlphaComponent(0.6) + detailLabel.numberOfLines = 2 + detailLabel.text = Localizable.shared.strings.dapps_sideload_desc + contentView.addSubview(detailLabel) + + NSLayoutConstraint.activate([ + titleLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: CellMetrics.inset), + titleLabel.trailingAnchor.constraint(lessThanOrEqualTo: contentView.trailingAnchor, constant: -CellMetrics.inset), + titleLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 12), + + detailLabel.leadingAnchor.constraint(equalTo: titleLabel.leadingAnchor), + detailLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -CellMetrics.inset), + detailLabel.topAnchor.constraint(equalTo: titleLabel.bottomAnchor, constant: 4), + detailLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -12), + ]) + } + + required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } +} + +// MARK: - Publisher row + +final class PublisherCell: UITableViewCell { + + let titleLabel = UILabel() + let detailLabel = UILabel() + let toggle = UISwitch() + var onToggleChanged: ((Bool) -> Void)? + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + backgroundColor = .clear + selectionStyle = .none + + titleLabel.translatesAutoresizingMaskIntoConstraints = false + titleLabel.font = SemiboldFont(size: 15) + titleLabel.textColor = .white + contentView.addSubview(titleLabel) + + detailLabel.translatesAutoresizingMaskIntoConstraints = false + detailLabel.font = RegularFont(size: 12) + detailLabel.textColor = UIColor.white.withAlphaComponent(0.6) + detailLabel.numberOfLines = 1 + contentView.addSubview(detailLabel) + + toggle.translatesAutoresizingMaskIntoConstraints = false + toggle.addTarget(self, action: #selector(toggleChanged), for: .valueChanged) + contentView.addSubview(toggle) + + NSLayoutConstraint.activate([ + toggle.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -CellMetrics.inset), + toggle.centerYAnchor.constraint(equalTo: contentView.centerYAnchor), + + titleLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: CellMetrics.inset), + titleLabel.trailingAnchor.constraint(lessThanOrEqualTo: toggle.leadingAnchor, constant: -8), + titleLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 12), + + detailLabel.leadingAnchor.constraint(equalTo: titleLabel.leadingAnchor), + detailLabel.trailingAnchor.constraint(equalTo: titleLabel.trailingAnchor), + detailLabel.topAnchor.constraint(equalTo: titleLabel.bottomAnchor, constant: 2), + detailLabel.bottomAnchor.constraint(lessThanOrEqualTo: contentView.bottomAnchor, constant: -12), + ]) + } + + required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } + + @objc private func toggleChanged() { + onToggleChanged?(toggle.isOn) + } + + func configure(with publisher: BMPublisher, allowed: Bool) { + titleLabel.text = publisher.name + detailLabel.text = publisher.pubkey + toggle.setOn(allowed, animated: false) + } +} + +// MARK: - Icon loader + +/// Bridges in-memory SVG bytes to a UIImageView via the project's bundled +/// SDImageSVGCoder. Falls back to the bundled DApp icon when decoding fails. +enum DAppIconLoader { + static func load(svg: String, into view: UIImageView) { + guard !svg.isEmpty, let data = svg.data(using: .utf8) else { + view.image = UIImage(named: "dao_app_icon") + return + } + if let image = SDImageSVGCoder.shared.decodedImage(with: data, options: nil) { + view.image = image + } else { + view.image = UIImage(named: "dao_app_icon") + } + } +} diff --git a/BeamWallet/ViewControllers/Main/DAO/DAOViewController.swift b/BeamWallet/ViewControllers/Main/DAO/DAOViewController.swift index 97b11094..6b0d82fb 100644 --- a/BeamWallet/ViewControllers/Main/DAO/DAOViewController.swift +++ b/BeamWallet/ViewControllers/Main/DAO/DAOViewController.swift @@ -44,11 +44,18 @@ class DAOViewController: BaseViewController, WKNavigationDelegate, WKScriptMessa private var webView:WKWebView? private var loadingImage = UIImageView() private var loadingLabel = UILabel() - + private var dappURLHandler: DAppURLSchemeHandler? + @objc private var channel:XWVChannel? @objc private var beam:WBBEAM? @objc public var app:BMApp! + /// When set, the controller treats `app.url` as the entry HTML and serves + /// the DApp through `DAppURLSchemeHandler` under `dapp://app/...` so that + /// XHR / fetch get HTTP-style status codes, CORS, and an `application/wasm` + /// content-type — none of which iOS WKWebView gives you for native file:// + /// loads. + @objc public var installedRoot:URL? @objc public var onCallWalletApi: ((NSString) -> Void)? @objc public var onRejected: ((NSString) -> Void)? @objc public var onApproved: ((NSString) -> Void)? @@ -70,7 +77,33 @@ class DAOViewController: BaseViewController, WKNavigationDelegate, WKScriptMessa self.onCallWalletApi?(json) } - webView?.load(URLRequest(url: URL(string: app.url)!)) + loadInitialURL() + } + + private func loadInitialURL() { + if let root = installedRoot, + let url = URL(string: app.url), + url.isFileURL { + let relative = relativeFilePath(of: url, under: root) + if let entry = DAppURLSchemeHandler.entryURL(for: relative) { + // Route the load through the dapp:// scheme handler — see + // DAppURLSchemeHandler for why file:// is unworkable here. + webView?.load(URLRequest(url: entry)) + return + } + } + guard let url = URL(string: app.url) else { return } + webView?.load(URLRequest(url: url)) + } + + private func relativeFilePath(of file: URL, under root: URL) -> String { + let rootPath = root.standardizedFileURL.path + let filePath = file.standardizedFileURL.path + if filePath.hasPrefix(rootPath) { + let suffix = filePath.dropFirst(rootPath.count) + return suffix.hasPrefix("/") ? String(suffix.dropFirst()) : String(suffix) + } + return "app/index.html" } override func viewWillDisappear(_ animated: Bool) { @@ -88,21 +121,32 @@ class DAOViewController: BaseViewController, WKNavigationDelegate, WKScriptMessa private func stupWebView() { let controller = WKUserContentController() controller.add(self, name: "BEAM") - + let configuration = WKWebViewConfiguration() configuration.userContentController = controller - + + // Register the per-DApp scheme handler before the WKWebView is + // instantiated — WebKit refuses to register schemes on a live + // configuration. The handler is retained by the controller so it + // outlives any in-flight requests. + if let root = installedRoot { + let handler = DAppURLSchemeHandler(rootURL: root) + dappURLHandler = handler + configuration.setURLSchemeHandler(handler, forURLScheme: DAppURLSchemeHandler.scheme) + } + let logSource = "function captureLog(msg) { window.webkit.messageHandlers.logHandler.postMessage(msg); } window.console.log = captureLog;" let logScript = WKUserScript(source: logSource, injectionTime: .atDocumentEnd, forMainFrameOnly: false) - + let jsLogScript2 = "console.log = (function(oriLogFunc){ return function(str) { window.webkit.messageHandlers.log.postMessage(str); oriLogFunc.call(console,str);} })(console.log);" - + webView = WKWebView(frame: self.view.bounds, configuration: configuration) webView?.navigationDelegate = self webView?.configuration.userContentController.addUserScript(logScript) webView?.configuration.userContentController.addUserScript(WKUserScript(source: jsLogScript2, injectionTime: .atDocumentStart, forMainFrameOnly: true)) webView?.configuration.userContentController.add(self, name: "logHandler") webView?.configuration.userContentController.add(self, name: "log") + webView?.configuration.userContentController.add(self, name: "dappLog") channel = webView?.loadPlugin(beam!, namespace: "BEAM") webView?.backgroundColor = self.view.backgroundColor webView?.isOpaque = false @@ -186,11 +230,17 @@ class DAOViewController: BaseViewController, WKNavigationDelegate, WKScriptMessa } func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { - if let msg = message.body as? String { - print("--------WEB LOG--------:\n" + msg) + let appName = app?.name ?? "DApp" + if message.name == "dappLog", let body = message.body as? [String: Any] { + let level = (body["level"] as? String) ?? "info" + let text = (body["message"] as? String) ?? "" + NSLog("DApp[%@] %@: %@", appName, level, text) + return } - else { - print(message.body) + if let msg = message.body as? String { + NSLog("DApp[%@] log: %@", appName, msg) + } else { + NSLog("DApp[%@] log: %@", appName, String(describing: message.body)) } } diff --git a/BeamWallet/ViewControllers/Main/DAO/JS/DAppURLSchemeHandler.swift b/BeamWallet/ViewControllers/Main/DAO/JS/DAppURLSchemeHandler.swift new file mode 100644 index 00000000..cbb4a1dc --- /dev/null +++ b/BeamWallet/ViewControllers/Main/DAO/JS/DAppURLSchemeHandler.swift @@ -0,0 +1,220 @@ +// +// DAppURLSchemeHandler.swift +// BeamWallet +// +// Serves an installed DApp's local files to its WKWebView under a custom +// `dapp://app/...` scheme. Native file:// loading on iOS yields status 0 +// for XHR and rejects fetch(), which silently breaks the +// Utils.download("./*.wasm") path inside Beam DApps. Without those shader +// bytes, the wallet's `invoke_contract` call falls through to +// ShadersManager::nextRequest() with `m_BodyManager` empty and returns the +// "missing shader code" error. +// + +import Foundation +import WebKit + +@available(iOS 11.0, *) +final class DAppURLSchemeHandler: NSObject, WKURLSchemeHandler { + + static let scheme = "dapp" + static let host = "app" + + private let rootURL: URL + private let rootPath: String + private let lock = NSLock() + private var activeTasks = Set() + + init(rootURL: URL) { + self.rootURL = rootURL.standardizedFileURL + self.rootPath = self.rootURL.path + super.init() + } + + /// Builds the initial URL the WKWebView should load. `relativePath` is the + /// manifest entry (e.g. "app/index.html"). + static func entryURL(for relativePath: String) -> URL? { + let trimmed = relativePath.hasPrefix("/") ? String(relativePath.dropFirst()) : relativePath + return URL(string: "\(scheme)://\(host)/\(trimmed)") + } + + func webView(_ webView: WKWebView, start urlSchemeTask: WKURLSchemeTask) { + let id = ObjectIdentifier(urlSchemeTask) + lock.lock(); activeTasks.insert(id); lock.unlock() + + guard let url = urlSchemeTask.request.url, url.scheme == DAppURLSchemeHandler.scheme else { + finish(urlSchemeTask, withStatus: 400, body: nil) + return + } + + let relPath = url.path.hasPrefix("/") ? String(url.path.dropFirst()) : url.path + let target = rootURL.appendingPathComponent(relPath).standardizedFileURL + + // Path-traversal guard — refuse anything that resolves outside the + // DApp directory after symlink/`..` normalisation. + if target.path != rootPath && !target.path.hasPrefix(rootPath + "/") { + finish(urlSchemeTask, withStatus: 403, body: nil) + return + } + + var isDir: ObjCBool = false + let fm = FileManager.default + var fileURL = target + if fm.fileExists(atPath: target.path, isDirectory: &isDir), isDir.boolValue { + fileURL = target.appendingPathComponent("index.html") + } + guard let data = try? Data(contentsOf: fileURL) else { + finish(urlSchemeTask, withStatus: 404, body: nil) + return + } + + let ext = fileURL.pathExtension.lowercased() + let mime = DAppURLSchemeHandler.mimeType(for: ext) + let bodyData: Data + if ext == "html" || ext == "htm" { + bodyData = injectShim(into: data) + } else { + bodyData = data + } + + let headers: [String: String] = [ + "Content-Type": mime, + "Content-Length": "\(bodyData.count)", + "Access-Control-Allow-Origin": "*", + "Cache-Control": "no-store", + ] + guard let response = HTTPURLResponse(url: url, statusCode: 200, httpVersion: "HTTP/1.1", headerFields: headers) else { + finish(urlSchemeTask, withStatus: 500, body: nil) + return + } + + deliver(urlSchemeTask, response: response, body: bodyData) + } + + func webView(_ webView: WKWebView, stop urlSchemeTask: WKURLSchemeTask) { + let id = ObjectIdentifier(urlSchemeTask) + lock.lock(); activeTasks.remove(id); lock.unlock() + } + + // MARK: - Helpers + + private func deliver(_ task: WKURLSchemeTask, response: URLResponse, body: Data) { + let id = ObjectIdentifier(task) + lock.lock() + guard activeTasks.contains(id) else { lock.unlock(); return } + lock.unlock() + task.didReceive(response) + lock.lock() + guard activeTasks.contains(id) else { lock.unlock(); return } + lock.unlock() + task.didReceive(body) + lock.lock() + activeTasks.remove(id) + lock.unlock() + task.didFinish() + } + + private func finish(_ task: WKURLSchemeTask, withStatus status: Int, body: Data?) { + guard let url = task.request.url else { return } + let headers = ["Content-Length": "\(body?.count ?? 0)"] + if let response = HTTPURLResponse(url: url, statusCode: status, httpVersion: "HTTP/1.1", headerFields: headers) { + deliver(task, response: response, body: body ?? Data()) + } else { + let id = ObjectIdentifier(task) + lock.lock(); activeTasks.remove(id); lock.unlock() + task.didFailWithError(NSError(domain: "DApp", code: status, userInfo: nil)) + } + } + + private static func mimeType(for ext: String) -> String { + switch ext { + case "html", "htm": return "text/html; charset=utf-8" + case "js", "mjs": return "application/javascript; charset=utf-8" + case "css": return "text/css; charset=utf-8" + case "json": return "application/json; charset=utf-8" + case "wasm": return "application/wasm" + case "svg": return "image/svg+xml" + case "png": return "image/png" + case "jpg", "jpeg": return "image/jpeg" + case "gif": return "image/gif" + case "webp": return "image/webp" + case "ico": return "image/x-icon" + case "woff": return "font/woff" + case "woff2": return "font/woff2" + case "ttf": return "font/ttf" + case "otf": return "font/otf" + case "eot": return "application/vnd.ms-fontobject" + case "map": return "application/json; charset=utf-8" + case "txt": return "text/plain; charset=utf-8" + default: return "application/octet-stream" + } + } + + private func injectShim(into data: Data) -> Data { + guard let html = String(data: data, encoding: .utf8) else { return data } + let shim = DAppURLSchemeHandler.beamApiShim + let lower = html.lowercased() + let insertAt: String.Index + if let r = lower.range(of: "") { + insertAt = r.upperBound + } else if let r = lower.range(of: " — insert right after the closing '>' + if let close = html[r.upperBound...].firstIndex(of: ">") { + insertAt = html.index(after: close) + } else { + insertAt = html.startIndex + } + } else if let r = lower.range(of: "") { + insertAt = html.index(after: close) + } else { + insertAt = html.startIndex + } + } else { + insertAt = html.startIndex + } + var rewritten = html + rewritten.insert(contentsOf: shim, at: insertAt) + return rewritten.data(using: .utf8) ?? data + } + + // MARK: - JS shim + + /// Injected into every HTML response: + /// * Forwards uncaught errors / rejections to the `dappLog` message + /// handler so they reach the BEAM log alongside `Call Wallet Api`. + /// * Tees console.error to the same channel — silent JS crashes are the + /// failure mode users describe as "the UI doesn't load". + /// The XWVChannel plugin is still responsible for binding `window.BEAM`. + static let beamApiShim: String = """ + + """ +} diff --git a/BeamWallet/ViewControllers/Main/DAO/MyDAppsViewController.swift b/BeamWallet/ViewControllers/Main/DAO/MyDAppsViewController.swift new file mode 100644 index 00000000..abaca2f1 --- /dev/null +++ b/BeamWallet/ViewControllers/Main/DAO/MyDAppsViewController.swift @@ -0,0 +1,334 @@ +// +// MyDAppsViewController.swift +// BeamWallet +// +// Single unified surface for: +// - the "Install from file…" sideload row, +// - locally installed DApps with an uninstall affordance, +// - on-chain + bundled DApps available for install, and +// - a top-right gear that opens the Publishers blocklist. +// + +import UIKit +import MobileCoreServices +import UniformTypeIdentifiers + +final class MyDAppsViewController: BaseTableViewController { + + private var installed: [BMInstalledDApp] = [] + private var available: [BMAvailableDApp] = [] + private var installedVersions: [String: String] = [:] + private var isLoadingAvailable = false + + private let sideloadCellID = "SideloadCell" + private let installedCellID = "MyDAppCell" + private let storeCellID = "DAppStoreCell" + + private enum Section: Int, CaseIterable { + case sideload = 0 + case installed + case available + } + + override func viewDidLoad() { + super.viewDidLoad() + + setGradientTopBar(mainColor: UIColor.main.peacockBlue, addedStatusView: true, + menu: navigationController?.viewControllers.count == 1) + title = Localizable.shared.strings.myDApps.uppercased() + + tableView.register(SideloadCell.self, forCellReuseIdentifier: sideloadCellID) + tableView.register(MyDAppCell.self, forCellReuseIdentifier: installedCellID) + tableView.register(DAppStoreCell.self, forCellReuseIdentifier: storeCellID) + tableView.separatorStyle = .none + tableView.backgroundColor = .clear + tableView.delegate = self + tableView.dataSource = self + + let refresher = UIRefreshControl() + refresher.tintColor = .white + refresher.addTarget(self, action: #selector(refreshAvailable), for: .valueChanged) + tableView.refreshControl = refresher + + addRightButton(title: Localizable.shared.strings.dapps_publishers, + target: self, + selector: #selector(openPublishers), + enabled: true) + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + refreshInstalled() + if available.isEmpty { loadAvailable() } + } + + // MARK: - Data + + private func refreshInstalled() { + installed = DAppManager.shared.installed() + installedVersions = Dictionary(uniqueKeysWithValues: installed.map { ($0.guid, $0.version) }) + tableView.reloadData() + } + + @objc private func refreshAvailable() { + loadAvailable() + } + + private func loadAvailable() { + if isLoadingAvailable { return } + isLoadingAvailable = true + DAppStore.shared.queryAvailableDApps(filterUnwanted: true) { [weak self] list in + guard let self = self else { return } + self.available = list.sorted { lhs, rhs in + let lhsBundled = lhs.bundledAsset.isEmpty ? 1 : 0 + let rhsBundled = rhs.bundledAsset.isEmpty ? 1 : 0 + if lhsBundled != rhsBundled { return lhsBundled < rhsBundled } + let lhsHasPublisher = lhs.publisherName.isEmpty ? 1 : 0 + let rhsHasPublisher = rhs.publisherName.isEmpty ? 1 : 0 + if lhsHasPublisher != rhsHasPublisher { return lhsHasPublisher < rhsHasPublisher } + return lhs.name.localizedCaseInsensitiveCompare(rhs.name) == .orderedAscending + } + self.isLoadingAvailable = false + self.tableView.refreshControl?.endRefreshing() + self.tableView.reloadData() + } + } + + private func action(for dapp: BMAvailableDApp) -> DAppStoreCell.Action { + guard let local = installedVersions[dapp.guid] else { return .install } + return DAppStore.isVersionOlder(local, than: dapp.version) ? .update : .installed + } + + // MARK: - Actions + + @objc private func openPublishers() { + navigationController?.pushViewController(PublishersViewController(), animated: true) + } + + private func launch(_ dapp: BMInstalledDApp) { + SVProgressHUD.show() + DAppStore.shared.checkAndUpdate(dapp) { [weak self] _ in + guard let self = self else { return } + SVProgressHUD.dismiss() + let latest = DAppManager.shared.installed().first { $0.guid == dapp.guid } ?? dapp + guard let launchURL = DAppManager.shared.launchURL(for: latest) else { return } + let root = URL(fileURLWithPath: latest.localPath, isDirectory: true) + + let app = BMApp() + app.name = latest.name + app.desc = latest.desc + app.url = launchURL.absoluteString + app.icon = "" + app.api_version = "current" + app.min_api_version = "" + app.isSupported = true + + AppModel.sharedManager().startApp(self, app: app, installedRoot: root) + } + } + + private func confirmRemove(_ dapp: BMInstalledDApp) { + let message = String(format: Localizable.shared.strings.dapps_remove_confirm, dapp.name) + BMAlertViewController.present( + from: self, + title: nil, + message: message, + actions: [ + BMAlertViewController.Action(title: Localizable.shared.strings.dapps_uninstall, style: .destructive) { [weak self] in + DAppManager.shared.uninstall(guid: dapp.guid) + self?.refreshInstalled() + }, + BMAlertViewController.Action(title: Localizable.shared.strings.cancel, style: .cancel) + ] + ) + } + + private func install(_ dapp: BMAvailableDApp) { + SVProgressHUD.show() + DAppStore.shared.install(dapp) { [weak self] installed, error in + SVProgressHUD.dismiss() + guard let self = self else { return } + if let error = error { + self.showError(message: String(format: Localizable.shared.strings.dapps_install_failed_msg, error)) + return + } + if let installed = installed { + let toast = String(format: Localizable.shared.strings.dapps_installed_toast, installed.name) + SVProgressHUD.showSuccess(withStatus: toast) + } + self.refreshInstalled() + } + } + + private func showError(message: String) { + BMAlertViewController.present( + from: self, + title: nil, + message: message, + actions: [BMAlertViewController.Action(title: "OK", style: .default)] + ) + } + + // MARK: - Sideload + + @objc private func pickDAppFile() { + let picker: UIDocumentPickerViewController + if #available(iOS 14.0, *) { + let dappType = UTType("com.mw.beam.dapp") ?? UTType.zip + picker = UIDocumentPickerViewController(forOpeningContentTypes: [dappType, UTType.zip]) + } else { + picker = UIDocumentPickerViewController(documentTypes: [(kUTTypeZipArchive as String), "com.mw.beam.dapp"], in: .open) + } + picker.delegate = self + picker.allowsMultipleSelection = false + present(picker, animated: true) + } + + private func installFromURL(_ url: URL) { + let secured = url.startAccessingSecurityScopedResource() + defer { if secured { url.stopAccessingSecurityScopedResource() } } + guard let data = try? Data(contentsOf: url) else { + showError(message: Localizable.shared.strings.dapps_sideload_invalid) + return + } + do { + _ = try DAppManager.shared.installFromZip(data: data, + fallbackName: Localizable.shared.strings.dapps_sideloaded_name, + fallbackIcon: "") + refreshInstalled() + SVProgressHUD.showSuccess(withStatus: Localizable.shared.strings.dapps_install_complete) + } catch { + showError(message: String(format: Localizable.shared.strings.dapps_install_failed_msg, "\(error)")) + } + } +} + +extension MyDAppsViewController: UIDocumentPickerDelegate { + func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) { + guard let url = urls.first else { return } + installFromURL(url) + } +} + +// MARK: - Table layout + +extension MyDAppsViewController: UITableViewDelegate { + + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + guard let section = Section(rawValue: indexPath.section) else { return 0 } + switch section { + case .sideload: return 64 + case .installed: return 72 + case .available: + return available.isEmpty ? 56 : 72 + } + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + tableView.deselectRow(at: indexPath, animated: true) + guard let section = Section(rawValue: indexPath.section) else { return } + switch section { + case .sideload: + pickDAppFile() + case .installed: + guard indexPath.row < installed.count else { return } + launch(installed[indexPath.row]) + case .available: + guard !available.isEmpty, indexPath.row < available.count else { return } + let dapp = available[indexPath.row] + if action(for: dapp) != .installed { install(dapp) } + } + } + + func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { + guard let sec = Section(rawValue: section) else { return nil } + let title: String + switch sec { + case .sideload: + return nil + case .installed: + guard !installed.isEmpty else { return nil } + title = Localizable.shared.strings.myDApps + case .available: + title = Localizable.shared.strings.dapps_store_title + } + return makeHeader(title: title) + } + + func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { + guard let sec = Section(rawValue: section) else { return 0 } + switch sec { + case .sideload: return 0 + case .installed: return installed.isEmpty ? 0 : 36 + case .available: return 36 + } + } + + private func makeHeader(title: String) -> UIView { + let container = UIView() + container.backgroundColor = .clear + let label = UILabel() + label.translatesAutoresizingMaskIntoConstraints = false + label.text = title.uppercased() + label.font = SemiboldFont(size: 13) + label.textColor = UIColor.white.withAlphaComponent(0.7) + container.addSubview(label) + NSLayoutConstraint.activate([ + label.leadingAnchor.constraint(equalTo: container.leadingAnchor, constant: 16), + label.bottomAnchor.constraint(equalTo: container.bottomAnchor, constant: -8), + ]) + return container + } +} + +extension MyDAppsViewController: UITableViewDataSource { + + func numberOfSections(in tableView: UITableView) -> Int { Section.allCases.count } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + guard let sec = Section(rawValue: section) else { return 0 } + switch sec { + case .sideload: return 1 + case .installed: return installed.count + case .available: + return available.isEmpty ? 1 : available.count + } + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + guard let sec = Section(rawValue: indexPath.section) else { + return UITableViewCell(style: .default, reuseIdentifier: nil) + } + switch sec { + case .sideload: + return tableView.dequeueReusableCell(withIdentifier: sideloadCellID, for: indexPath) + case .installed: + let cell = tableView.dequeueReusableCell(withIdentifier: installedCellID, for: indexPath) as! MyDAppCell + let dapp = installed[indexPath.row] + cell.configure(with: dapp) + cell.onRemoveTapped = { [weak self] in self?.confirmRemove(dapp) } + return cell + case .available: + if available.isEmpty { + let cell = UITableViewCell(style: .default, reuseIdentifier: "empty") + cell.backgroundColor = .clear + cell.selectionStyle = .none + cell.textLabel?.text = isLoadingAvailable + ? Localizable.shared.strings.dapps_store_loading + : Localizable.shared.strings.dapps_store_no_dapps + cell.textLabel?.textColor = UIColor.white.withAlphaComponent(0.6) + cell.textLabel?.font = ItalicFont(size: 14) + cell.textLabel?.textAlignment = .center + return cell + } + let cell = tableView.dequeueReusableCell(withIdentifier: storeCellID, for: indexPath) as! DAppStoreCell + let dapp = available[indexPath.row] + let actionKind = action(for: dapp) + cell.configure(with: dapp, action: actionKind) + cell.onActionTapped = { [weak self] in + if actionKind != .installed { self?.install(dapp) } + } + return cell + } + } +} diff --git a/BeamWallet/ViewControllers/Main/DAO/PublishersViewController.swift b/BeamWallet/ViewControllers/Main/DAO/PublishersViewController.swift new file mode 100644 index 00000000..4ff64653 --- /dev/null +++ b/BeamWallet/ViewControllers/Main/DAO/PublishersViewController.swift @@ -0,0 +1,91 @@ +// +// PublishersViewController.swift +// BeamWallet +// +// Lets the user toggle each known DApp Store publisher on/off. Disabled +// publishers' DApps are filtered out of the browse listing. +// + +import UIKit + +final class PublishersViewController: BaseTableViewController { + + private var publishers: [BMPublisher] = [] + private var unwanted: Set = [] + private let cellID = "PublisherCell" + + override func viewDidLoad() { + super.viewDidLoad() + + setGradientTopBar(mainColor: UIColor.main.peacockBlue, addedStatusView: true) + title = Localizable.shared.strings.dapps_publishers.uppercased() + + tableView.register(PublisherCell.self, forCellReuseIdentifier: cellID) + tableView.separatorStyle = .none + tableView.backgroundColor = .clear + tableView.delegate = self + tableView.dataSource = self + + load() + } + + private func load() { + unwanted = DAppStore.shared.getUnwantedPublishers() + SVProgressHUD.show() + DAppStore.shared.queryPublishers { [weak self] list in + guard let self = self else { return } + self.publishers = list.sorted { $0.name.localizedCaseInsensitiveCompare($1.name) == .orderedAscending } + SVProgressHUD.dismiss() + self.tableView.reloadData() + } + } +} + +extension PublishersViewController: UITableViewDelegate { + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 64 } + + func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { + let header = UILabel() + header.text = " " + Localizable.shared.strings.dapps_publishers_subtitle + header.font = RegularFont(size: 13) + header.textColor = UIColor.white.withAlphaComponent(0.6) + header.numberOfLines = 0 + return header + } + + func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 48 } +} + +extension PublishersViewController: UITableViewDataSource { + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return publishers.isEmpty ? 1 : publishers.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + if publishers.isEmpty { + let cell = UITableViewCell(style: .default, reuseIdentifier: "empty") + cell.backgroundColor = .clear + cell.textLabel?.text = Localizable.shared.strings.dapps_no_publishers + cell.textLabel?.textColor = UIColor.white.withAlphaComponent(0.6) + cell.textLabel?.textAlignment = .center + cell.textLabel?.font = ItalicFont(size: 14) + cell.selectionStyle = .none + return cell + } + let cell = tableView.dequeueReusableCell(withIdentifier: cellID, for: indexPath) as! PublisherCell + let publisher = publishers[indexPath.row] + let allowed = !unwanted.contains(publisher.pubkey.lowercased()) + cell.configure(with: publisher, allowed: allowed) + cell.onToggleChanged = { [weak self] isOn in + guard let self = self else { return } + if isOn { + DAppStore.shared.removeUnwantedPublisher(publisher.pubkey) + self.unwanted.remove(publisher.pubkey.lowercased()) + } else { + DAppStore.shared.addUnwantedPublisher(publisher.pubkey) + self.unwanted.insert(publisher.pubkey.lowercased()) + } + } + return cell + } +} diff --git a/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift b/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift index 9b09f5af..f727fbba 100644 --- a/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift +++ b/BeamWallet/ViewControllers/Main/Menu/LeftMenuViewController.swift @@ -57,6 +57,7 @@ class LeftMenuViewController: BaseTableViewController { private var sections_0 = [ MenuItem(name: Localizable.shared.strings.wallet, icon: IconWallet(), selected: true, type: WalletViewController.self), MenuItem(name: Localizable.shared.strings.messenger, icon: IconMessenger(), selected: false, type: MessengerChatListViewController.self), + MenuItem(name: Localizable.shared.strings.myDApps, icon: IconDappStore(), selected: false, type: MyDAppsViewController.self), MenuItem(name: Localizable.shared.strings.dAppStore, icon: IconDappStore(), selected: false, type: DAOViewController.self), MenuItem(name: Localizable.shared.strings.asset_swaps, icon: IconAssetSwap(), selected: false, type: AssetSwapsViewController.self)] @@ -293,6 +294,8 @@ extension LeftMenuViewController: UITableViewDelegate, UITableViewDataSource { navigationController.setViewControllers([SettingsViewController(type: .main)], animated: false) case Localizable.shared.strings.dAppStore : navigationController.setViewControllers([DAOAppsViewController()], animated: false) + case Localizable.shared.strings.myDApps : + navigationController.setViewControllers([MyDAppsViewController()], animated: false) case Localizable.shared.strings.messenger : navigationController.setViewControllers([MessengerChatListViewController()], animated: false) case Localizable.shared.strings.beam_faucet : @@ -331,6 +334,7 @@ extension LeftMenuViewController : SettingsModelDelegate { sections_0 = [MenuItem(name: Localizable.shared.strings.wallet, icon: IconWallet(), selected: true, type: WalletViewController.self), MenuItem(name: Localizable.shared.strings.messenger, icon: IconMessenger(), selected: false, type: MessengerChatListViewController.self), + MenuItem(name: Localizable.shared.strings.myDApps, icon: IconDappStore(), selected: false, type: MyDAppsViewController.self), MenuItem(name: Localizable.shared.strings.dAppStore, icon: IconDappStore(), selected: false, type: DAOViewController.self), MenuItem(name: Localizable.shared.strings.asset_swaps, icon: IconAssetSwap(), selected: false, type: AssetSwapsViewController.self)] diff --git a/Resources/cs.lproj/Localizable.strings b/Resources/cs.lproj/Localizable.strings index 8091af1d..37034d0a 100644 --- a/Resources/cs.lproj/Localizable.strings +++ b/Resources/cs.lproj/Localizable.strings @@ -413,6 +413,7 @@ and never kept on the blockchain."; "faucet_redirect_text" = "Redirecting to the faucet website.\nYour address will be filled-in automatically."; "clear_wallet_transactions_text" = "Unable to delete wallet with active transactions"; "show_amounts_in" = "Show amounts in"; +"use_on_chain_price_oracle" = "Use on-chain price oracle"; "second_currency" = "Secondary currency"; "notifications" = "Notifications"; "news" = "News"; @@ -464,10 +465,8 @@ and never kept on the blockchain."; "sbbs_address" = "SBBS Address"; "shielded_pool" = "Shielded pool"; "maturity" = "Maturity"; -"connect_node_offline_public" = "Connect to own node or enable mobile node in the settings to enable receiving public offline transactions"; "public_offline_address_info" = "Publishing this address will allow you to be identified"; "offline_address" = "Offline address"; -"show_public_offline" = "Show public offline address"; "public" = "public"; "max_privacy" = "Max Privacy"; "public_offline" = "Public offline"; @@ -673,3 +672,34 @@ and never kept on the blockchain."; "sync_phase_reconnecting" = "Reconnecting to node…"; "sync_phase_almost_done" = "Almost done…"; "sync_phase_finalizing" = "Finalizing…"; + +"myDApps" = "My DApps"; +"dapps_empty_title" = "No DApps installed"; +"dapps_empty_subtitle" = "Browse the DApp Store to install BEAM-powered apps."; +"dapps_empty_button" = "Browse DApp Store"; +"dapps_get_more" = "Get more DApps"; +"dapps_uninstall" = "Remove"; +"dapps_remove_confirm" = "Remove %@?"; +"dapps_install_from_file" = "Install from file…"; +"dapps_sideload_desc" = "Pick a .dapp file from Files or iCloud Drive"; +"dapps_sideload_invalid" = "That file is not a valid DApp package."; +"dapps_install_label" = "Install"; +"dapps_installed_label" = "Installed"; +"dapps_update" = "Update"; +"dapps_installed_toast" = "%@ installed"; +"dapps_updated_toast" = "%@ updated to v%@"; +"dapps_install_complete" = "Installation complete"; +"dapps_install_failed_msg" = "Installation failed: %@"; +"dapps_no_download_source" = "No download source available for this DApp."; +"dapps_source_bundled" = "Bundled"; +"dapps_source_ipfs" = "IPFS"; +"dapps_store_title" = "DApp Store"; +"dapps_store_subtitle" = "Discover DApps published on the BEAM chain."; +"dapps_store_loading" = "Loading DApps…"; +"dapps_store_no_dapps" = "No DApps to show right now."; +"dapps_store_empty_hint" = "Once publishers register, their DApps will appear here."; +"dapps_publishers" = "Publishers"; +"dapps_publishers_subtitle" = "Turn off a publisher to hide their DApps."; +"dapps_no_publishers" = "No publishers found."; +"dapps_back_button" = "Back"; +"dapps_sideloaded_name" = "Sideloaded DApp"; diff --git a/Resources/dao-core-app.dapp b/Resources/dao-core-app.dapp new file mode 100644 index 0000000000000000000000000000000000000000..0897510997f861119f27c8f544bd0c722ad0fed7 GIT binary patch literal 198455 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�c&j@(4K*N6Qw>&zWnpUuOuXsanw!hPiy%2Lo4xBehr6xcfoVX*(`v z+1?+drw0T_V<+CFsLFI2=1{0L1NdwDcWdW!?(+RZMLTj1Slk?l@$P5BTcCp-^+po(72{sd z+p!BFf}r2mxmfeT&_3|@-eElHi)plbC{m(%GWC9`#CHA;x7Q1)pTyKx>5F;veaBYR z@gs=3_9AMyhD!%;lVR4K$`l6ar6z`u4uEfY65(&{quM z>ammucqBa^MiT#o82`(|Viw|0f^`kCh0^x05CJ4)0_KRk;-6>WWNBs!sCvQYH6!oD zcC$%m?S;cnSHvOm9U!O^ctHJ;#|X>N{p8H*gn{FVBXfJ_MF1r#G{TEP4-OApwg&h# zvzEsSn_8&`0|L^ELwtaYS2R! zt>QWcZDbSV6~4GUfe*LQwa0)S8DcRssUWYl`8-E(g0S@M?j;%Hw{Px;DpdI-VPyD+ z{Ld1yZCjX|DCKKdiO|j8hik!OSHLVErML>0)q?Dvu)0=6;rZio6$|6|IIf06YVPlT zp4_NuJFnl_G?s6e_~L^q5rQxk;Onp8yH^iCW9cv~br}?~m9x&*8!OCnN}#;Q<|}4Z z%&!Rn`Y>Jf4wr_@QWi_qp|c4_vP3vuU(w>rWpt&xQy5kBgU9;72Tq5{d1TZ}Hea_s zq}#D|#)yLuT19qr-p|yEx_j`In?F55K8SB1eLlZh7Rzls9*YV>i}@0~Ah5oMV9wqn zUtxd4^oqU7&4L>4FwLG;{G56z|GM!lose zuHM%3As~>w4{7$OTggSZVNJuUHV2S&-`#eTPYJ|TCeD|5k3F{FnUTR>AkjsEw+g2> z+Y=N<>nB!`>smj~WHDgb5^r^6`38Ru@Dnhr5y-VGlnEFx(H3Y7yvE8Ii1}d$D+@GC zF9eU_w?U8sPWjFiyORK%NF|A*D#xKw0NLS7*cVa2WUM#^v5MtH#>4`<^VHzc)TYY= zklJ>1lOg6=I~Y!K9d!?=g;Vn${`x2Q7vY=8DDGmRdi#NmMOy_X1r4olcSUsvMcuFJ z!I|xjUI%w=2c8e+)vEcaR*GwHP*Wt@#3TXS_P1OAFR1+_@AA6k<6ijANM>Yl)M?!9y#W04|Lx@hfd>c`)}Q!LcJ)9&6xQ+U?4E z@}o>NeG6Rub@})^qgNC+K$(1Hl~QjArG;JQuI@qel$nahe1^38VRQG zEPE4M!HGDRL-(glz-Wc>@0j0O)G!1*S@dXdSQb3m{#q>4MwGNEUQK>mYSDSKc{!lOYrUtfy-NitaSAIlRSP=IvQ16`U*I4)niNvK^DV8p5&UmibdjRe`s+Z3;e z#lw>Hp=q4xJe$?ddQxJHf(v)swfXHM&};l@vAp%n5~(B_iifGm6NWWZ>wO{!RO4J! zdaqB3=CzC%*czG0MqIf@Mvjl&=k0CNT$EPy$*h_PhpEQ&RO1B2_}Pm-TruVy$f?GO z+QvNCJ4BBQ{!A)W%P-sQwNz0|P7E~UDxa#4-U|=f!wrd3)YwadBXA5xQ2YuOOaO!v z4vzCub~ky!$X^szqPk74l0gSVrqWWQ<&Ob&vfk7!%H?Z)$8 zdfP*iioTzMA1RMBS=17}NuATqLfT`ock`&c@X<_02u$#`Sw~Z)>uR?c8fa?rxet%+ zO2=<0@UwH21hhB@gQ*2(0vA}~I{UcIrp~&#KYh*u6gl{pAH-zkFE7;3WpiEa17n*t zXd|NY7p}g=<X;You7%UkL~F=nuRT_AXiYAx6g)QH zCEA*-5sWXI(LJWg8{j%3vT}XWVuTC%s`m>0b!u=7DPcVQ;U_f>>t|Ysc~`O>vY3y0 zgcxBwr#06?b<3ZrS0c$BnWwDb$ITRvy})-US0GqG%h<}zni8huBlFCFS9Y;3Xe9#jfdp};U(^w2e2~NnZwm0J9MRxR zVR}k;EB?kqy&40dMavHxvMpI^!0gLImKO2}NJY}(ta-TC(c7B z>-)w$bcD$j!_SS;-vTIRHnb-TAcVXv!Cwc^zp_{R&vp9ub~)03Ykm{N`NdxCuY^tq zIZ3M&z)<4e+fZVOJYXnMj{0*=(X_bq3wW>tnyRnTI+d)Khee%u6?rY)2=*A<`{Cn! zKo2JEQKv`*d+R_>cH}C&x`*xqY$pa~jBm#>uC5xQB~(otd)E)AOIyeS^b4{q+J<> z&s#u`3WIUcyW@*BU5MTYGo#%=N*=`lay3V)_)_Sf1kbrV0n0+3(gJ}>-`UKWEK%L~ z>V#Dixw%Nz{Gr4(uubLnQ+gQb6jdEj;hp@^7Bq#IHf%0z(`&<(o4~U{~HvToHNdeaX-a-9*1u1z{s$Y~=-=7sf6|RP!CA0e61ntf z_Z`>vhDMn5z~klM*;J86v!;7ro$T~Ii<%^^V83doe67edtx8|Cj^W1-(vSht=BCrK zBGLsHb}bFz`YrcQ+$ZnQ!w!;TW0RAUw}nW1j~@l-`lNue(0Nvuce4i*EWDT9y!cvM z_YE19;iTR84m24@gyyUGOlwREvU)Ql+e5zLdF?oEa;>CsojD6L+UT@BHNGk+xZ<|b( zmxDqPYM~3p(q%KjZW3aL#5zxt(Soa$e_+s8W(tg|M}5(S3e(R-DF|C?MTH@qQ?bm3 zH`s%1*>b&W-I(a0cbad?S+w)1i@1tJ#X&NV;S*x~#?UQGg0%Q>VkIKu_o*~-2Y+`Z zr{QQ!ulR^DyVW{uBO3Z#`=&UF=$8JWo61DVAVE#_a}>JTm39_)i`>edmjc#I?*nc<7|FUXr8>$5FvZK<{x{ zEkd1A14vyUul!=4y~ep8USuXT7CAsD@?_f%-=o#K;US?}5^MDEzW8Dq zcVc(2Mpaks{WAXcJkq%DFm-`ccm3$sNd_Sy?gQ!h!T~= z>xFG)3N39A^ZR=rr466dY0~9P9d8ewU?UnOv5&KhaXvM(iOR%_`vWAJMHsX8AC%;m zmr%*3?7TM%?lI8f#DqQtu2D!~Y<&h&`&dCeh2aBN2flu_irDfM_`_K#$T8$8vgHE| z?K1NSzc1{(d5<=$17T81a9_`~iuS^MPu6f}s2n8~a4ml)myJuGZ;L(t#exj^^dLMq z*4<8$7R?!#v>5nd4?_mf>`X@;pO%;octHbX9gavYuRVIR^mu-N6sAKH6ub8@R8t@f zTA_OGP63%c3~Mv$t^uM1P&O29KYjF4=elkcfcg`#qcyw$YzGJD4om|R_-*~TOE8pV zr0CKVGK(Nq>p8;cpoLezb9WtfL^C5tRS<*&EYwtaQ|&`p$)eAhqvO?0QN@)z=6NL) zX_@XR-}*6dg5USdPQUJWphlh9Pv#;UPV4FhN}e8+^XqxL(GZY58H%vGG>8cRt)svZ z&SPbeyQ{T}I7zgPhiOJ?p;+v}P|Y~Lo_t7#gQnkj=vi+(bWMfUIg%`|vB%g41$u11 zh>DP-doATG%vTo;Ce7Bg{1=X=fR81I=d>AIlJDN|lm78@7?< z$?_HgWnGP7oQ9dC=<;x%yy*8@-9A5S_ME|O9(UFc*}LJ6+Sin$JiSG{!tXjqSHdjz6G9Gx5=)| zvRF!>cX}U!3;up@2s%7rIQ+Z&QY0dj9^8HOdD)eGyk);aXi04Tbm({c_x?c)|6-vN zIeeEe(8#2cInneu0>;iFWrn zr&`adci7BBO3ghw4o@u23EcQ#M04a!)K$Q1bFmGgKbfBBcALp-(y3{xqK$aZZj~|O zyAY)Y*mrv8F=mi_v~bVJQC5ja0cXnW;F7^L34tVlH;lp?$sot1;*>~$OX|iv77Vjk zpi}&!;6fW3z@U&9hJ^u4Vg}w7u>#U*0Sf{%NX?p4LeNqS#EdM6{L=0~7w9dPiE)HH z`R!APPG%mH@q2Ke35H0Yi7wSC9;)nSSy+I~Y)93Gn`_i$%~b-im~uzoOrZV}m&dgM16F=tz2}TgYod zjSwi251v-cgW)#dK-zUc3Ptp3rt^)5zD^KF=W^bQo@q}83nOSGTI9!6Qtbc6Lx-WH zFu74Qk)$qNh(oh36Eh@OHX+b?*|?8-_9>xuRB_W>D&I2Vza;(&%Y&ZD&s$FY0*$pU zbEQ%D0#z0UM2#MG*9l@}w5?r1HIqot(Oe6C%C>g;+M^gc1)yYoI=n|SLde1&q$HZk z$Wo2v^~;eE;{r)Avrn*JHw9g6u}`V7hgV?>;tShw@f_2dunmR!l6@P@6NwYF1>Y1U4=u8M| zG9SEqQ86|^a%@82assR~v*RfKd|7yTQ%jjOYl7zEk>JEHaS_2t<%o z+!NZF?-4h7E?hae>_}aJQ3AAZt*uGGgZjIgYYxD-e*Rn{;=I%sL zs^uT=k6W1%3F&Z^C2|n>&%+HEz`EWaXSIaoGJ=^1>U66>=VnguQ~fY#K;DYbh*g{R zq^bJ>Vv@oP;YNVSPV<3r#*ufPd*{0`Y!-vT1#H#SoSP(a#N+{TG+zIxnFz^ z?VegvMUBxaE-kxeU~YM5IC*Jd?_&a5Y58zkV~q?*dnoL}!bbyB!~SVh-Rv@BM>L0{ zP$AqgIi=&>=V-wI=jg0WAPnCn1^0b{DLDfU>}T(BU3{uDU4))_GTQU4!hv@Vy2SaK z*ldnF(24GOaMtciBjRzF@KbcsE$c{xGXw-LZN#OUMCWkoDogQ!W$F@2@dAV*{s0E} z6yh+?xR<^>x8}YgZRIgB7?wLRRqdABmK6hWSwBu3=A8mwgA`jnHB=ukaJD7 zW?CC&qD@1QInx+5w30l3x18cS%BZtdg`Y6gZ$$Ltn?XO(4Z+_L(cjO|JZ%^1{6<7K z^ewNS<%2niBQK4deqX7d9Qq!!bZF)#LU?oS?2U-N)^+M0`5dzrdY1UgwlU-i90qL6 zwpSBm%kA!ivxSwxFsC|h1KOq(q$ZwLka#;a0TNo~|M@5Nf?H8K^O7~oOHD2MIxF`( z+Ra0&A-qVZcCQ~*_OfRq!a-(^bQ}5NUzzDJ)0Cx_5?J$arp#hcM^YC~zKt$OllbGI z+d2?u2I*a{3X`wt#GRDj+kB=;b&p6!PV}##N8b1HM2nZd`~Wht2CBOhP?%l ze}-LzyLDJdH%NvhTohBc5{z#6E|Qe8g}zy1=kIpG%a4+giqF)s!ob1)8^c{ST31hnUef-lYGT zOK7~CNp6*MgpDYwt#K|{f~H+$2QaZGAs@l!f!Q%5w1TOMuH(I9%Rq^g2gF`ci8TFi z^XdKRQ#ai@g7%bQ+j`1Vpf(+fNkV@(ik~{V%IfD8bk}?1AM{%tK5+}?tw7a^m^h(T z;VLWBNh&9`Yq?*)pE|7M90Vj+N+*vR_9gAg){o*I-MhS`8@+6`4HHBxpd&&U^0lFo zt!;nI{9=oRB@>Y8f-ppP96}@*H`Q}o5-*G)TDhf1B7*>>KFKUVPIf^@xSnPp8EiiU zF(@w61x(}?GwO>?zk~E1IeEi1gl*-;r^XpRCpEsQT(0+e!B!U8lg#Ty+|2LiC zzsPs;_-~bAsDG#o`xE>_Ww`fEWq7CvyIvGrMEMln$uMYo(|)yJF5lD3^x6?4?d-@E zM;Hqi_iJ)e1U(aiYDDu*g+Jrv%yVAYwf?Bo4YXPEpS zI>TzwZ#u&U|I`^S1LzD(-`+R)$3+BF!2Gz|<}XMjtk)-&-^OqY*Ons_m+Htz`SvZw z2$jqYB4L=PQGPL-34>aDM{i;|HlB|J5d>(12Z_L&;ZECD{Wi!k?=l3WhmXw^B=LS) zO}8#;C%eW#{#@S&q~;waLoEL`xWs4OWj>Ulb2<34T%ROt&hX+*2+3H>Uk9yK?$t?CNymLe?r5KY^dbO*7`Lpz#pT`sU%{> z(XepBd0_RN*>J~id%=&pctjUN+M4dM)zh+%;~olUtkqAXBZIc&vhypn-mUD3xeK*l zx+}yRG0?UZaAQch2cV>{@-{dNDla#9A^vCqel9zD^lR2^ztek8Z4p&Rm#ZLazwKV3 zeRJs8qO=09fW`BMre80f|1s_VOUV7bS5PUSw*E(B2Y}1@OTJug@J*t-^-ZEX24p4} z$F>1Q5nga2_6aetWF7*Ay#keTf9@{Yak4242)27;t0my_A8W_P>+sq!DUG}Sgky}6 zoehVD8e2~lzb47)$YjX`yJiu-dDM}QS~btYw9ZA ztzVggojYcb)cZXhz}hKqz&?i5YYQlUUYa#{a(rpmJmD_SD^+!RbR)LOqC$34f%#ri zLbS2WvMopYZC=?P_xl%C-el~mzKwWJO`1#tqN4wh=*A>sMHz~DljzR@M;z|vt<{cY)7_fj}l@c{P)!i{aq zyh(Ids0H)UYq{NPKolGS9aVk@&HATAH#*5C{XZqT%W!0Ux`DcSaTF`Qg~7tIxAfr7 z=OE<^8r@`=W5F7Ds8ydW|*l)6GLp5)gYruka0Q>?nH| zQA#^-?<#gz-*e#j2{+fqZKTzG-bGtMZ`Lz3-l^wrN<1{$9@|%d74wFkU$2-y4>xaO z@c#v|zxQHkHw6NEJ7?mp*=VO{Yhn#JvBJbs-@uv1)b6))CTiJ?^nWqiaKiCox5Ql4 zzE`dt-xkv(R%6~Tb;wb_H7|A8%=%+qDk)h?SU5VWhe7Z%I?kYV_UF?H2tKs;dQe=B zo!!|*P!C~6Sg)rZ@VHiwYz!veCvK4l6C~>Jv{vN%SbL+8@?)>O)&yzy*#p|ZSS(AF zJe7s`m+haGtJ3@Lx2_LYPHqMdPVP5HSead)raY{?B9GgxKe~s+#PwTR*{bnfh0kj1*K0yIblJpFwR^XPp*8W)+_ZJ047GP)+|}t89lBz+*pW-dt7f?m zy&Kh}Nm}!?O_LnbPzQWBo|H3BrSfN|FV^z{x2J8TMg6gtS^?}GhyM&6I5j1(qT;;oWOC9+xW3U5TyJNU*85J5(}3AZTqsN@I-^4TSQcFMV& zeZTf`f{MVTNU*{B`P^dLxo3)5T03Wn%+9yoejVnvFt*}WY?xD&fjebIUkZc+j+b!p z_G)~p7RLD|;^W;{ttDqk_02V8>fN3}dx_A51?pg$2_LGIpo><+&_=m70$>}4O`G^B z)?+Ou_(v8@m6RyJM8Uqu-VAEhlonSS7}p3gND#$*KHQYn#M zS|=U0*MVs_p(?X=Y%(hUye&NNS_9xyoirXb5yigz;d*W(6?e&3$h=gQmoE>Qk+{9Y zH6tv0^}8K(d*ig6iwicoYmP+Y;G3(0=W`%y$IEADIS4;NtB^moiF;nQUSrf=G(XuN z)5QAwmq|}<8618e!Y7Ar9qP~l5-ZD0x79UOMxnE-A_1G*(t|?JZtFX#Sn#FqJ%_B? zDrZqTJDwN)!biVN-L=1o?@}FsOyBkyEye$0#VK&wynAGuhRyf|U+^CZV<_B&9O_2|p9O_B!8eHs8wKDzVR+)!(a~)|tXiBs_}( zdD)wFklHMkz0F^-*8w%@OQ1f2Ieh6AsFpQp?>c!OcZi*z`{!|VhaVwZ+8(i`ph+u7 zt>#HAQwp)~q`m_O@2iYag-U08n^s&!JJUrTN}bB&ysvVm*Dg=;?3?Y|iQL~bcJ zNJ3>SDE#~ZH))B?vV*`l_;W~$L)j^Ee`_*Hl$r~_myaPGoo77894wDosy^#hx3Y@9 zL>5&TnqOMdrA(4oxE`@f3W3Jw_f0%-Lxqk9n)ZYF7Kt7@n>SaIA`&TZep(ni+-$(U z>GsQ?i%3AEUm!P4R89m>k=z!7`}3yx1q_h3?J|e34DAVNi@g!*W0{7Hv$lz$sHXBP zv4fL*Er3wJrAG&lhIXlO>5ATi!(jBi3b%?FAU~%b+@^3GlT?T3F^M|s^o{Nt3 zC_INLgus5BM3dus4M{{+<#EF89VL>;Hcz!l+4mnh3h{7p^Hd$0c?{RZAm4!7cDZtm zt{D%c`Kk<%F2}p3P{KC8xH6D@)1V6hG({aAYWbIG=JhFXWqA;ooOe$a=LnUR<}5J)6)P@>G7hU8=+aNCKj5_>=Ld8L z$c`H?h$Ju-2=kci6GwBbBX^pJDaez?d>R!~7A5FeZ%76MuN za$i%n2oxzw#_{BO z?-H7^rZV~Ia0u(K5_G?3Wr_u!rd8TdEzo*sK?}x{ z$$Zo+d>QWX8H;g{lK$v&#Ktm^(s-|8Urr2h9!Q*t+$6Bw3?f8AWeVj1d{wOQu2w!; zTwNfhy|~j(gDfPRLXN2x;#F~0SBG@2MvO?plx!*=g#I096o+P9hA%`|i$Yf>mI9*& zx!Arc!hJUVCr=8m51848U;#STrkET*Ctyw7%bI5SRSk5XYbXx!Z_F`wt-^u zUHPlppNRLr^}2Vzqi+o-tq81se0&Z_s1yWOy3vi$TP@S;5^KciDk)3!G%X2JYQn4C zoxd*tv&}0F!P|z*2CEZn&4ORzVpv&B^ra!AEQI6g`9M=_-#r)85udqgz#fMBcj}@l-_1WhuP!|WG^85g&l_EwhOP}fVH;kzF{e}(m z(O%Iy@trq7umBCQ0rjeK2~w0+nSkHy+}DMQb=vtHeXfn2d@zNShPd%~1Dv@3hWBbc z#;(rVcmKmJfCop_0L>FaOL<8G=GRjrHgJw zu)JATFQ?7KH<@VJh4AQ@>srwn-!TEzgm7~EVn!uc!~;oWn_uZoBqEDu(&bC36hDn0 zVY~{pb1Th&_(x;2afNohSBlj*AvA{Wm_S_%DH7+(O^AvYoAOX_1zYxDGbpHOe*$FB z`%(P1V2L?N?{pD{g)M0tNg?r!>&PmzA`0JlL0yaMPFP3t!hE|KcTcBxBfjENEgvUj zg`2UFUj2tZMiTvCc{P}&66gsF{4{<3P__=mkfw@lp1Ro@&$&&zP_E^Ks{EhuzcS$PH|l;$pKq0?Uq}8~8+$ z1?$KS4R>$;bJgPDSp}F4rZNF+ZTvUZm5Nh*mSazRRPffpVz3$4ruGn z&BsnL)kG-RKmH<w@|mKaskm@lTU!|E{hvzU}B;LGZ#?`T?rxRZt|pvlM&X2 z=LmT#o>S+DQ{<#9hm+S&E@`oFu5m?+QwF5RE0NLKFD2 zE0hXa!yI-v2Yb<%_Mg+r2LbeUuiQ!ChSRw~Qi5v#APDIchynnwL_s!@W5#rN_XYY^ zAYN<3%*XZbhX%J`OMD~B%btZ1mu2npbzG(8%7Y~En_XzdR8Htq#AwR|H9W5|a)5o*<%OmkW#8F*T^bM4R=#1?j(hG8o zdgAd6UILJf$xe+5F~z@+(&RljygW|JQw;W~9GLeZzx|P}Nm}3~j}tZ*^h#LS$BAuD zrUpI;2@c@ZppMU7$KOjP2^|RYg}>2l3{U2M%U{4v2I-Puq?j8UQAlWSwq!7&0a95V z%IZikMllXb@>=-}0OH{1(K_ik@=V#V_x-JduuZG1VklDwN!-#UM#`pa!L3}~DU7$# zs=5OUE%i(PQcCK#^wqImo)cyC&L4(G28f$a+k_OntTj(zPFz_b<+7y`^o9nA2FT zT5`pF@zB}knRU$JrVYL`%{nyV3D<6HEyzq~dvj|kI*0#Y|MHI-^!ada!Qi|ZxiZyK zy>bArq}Z^eVot5nbq7jSX-^Zf?JVSzuXB>6<&^*fU8-tqx%6?Fc!QPTbq^s}xKDAZ*FPkw<@orjHe6l-F{tsBE56)$F`7`>)|nY%P?KBi}P{#XG<-g^Jp z9`o2~oWya>hI(#Qd8`cTGIR#aPsR6In3B^)kaWP-9J4Tpfoa{=OHiWeEenCUFcs-L zP}6A{az0=$=-V{Kka*aEg?K!?+-s`05!hbEYKhmJ`FN-m)2CL5hbtQTbTi7w|v<95r%JUw!o>(eKmjY@#QT~JyD}L9;aX00 zlKV}Z^Yj~{3%Tbh_Pn(m@G(3##189+pI8~(ov}Y{S58164U?M^)vJ1UF$l2~UTM?= zDKK-9e&6+D0G02{3eC6?4EaOPYj$XaPnJx7e6J?9|IKE|cxnZyDLKyzyQ?ufE~sftE>+ig$5a;ZF4NY_mQTCz)}7fN-5 zj(*n$^ZEL+JX$W={#JfLqDL{WEHVF=O{^D9As>qGH!>@BR)>#*SeE~1A?EX>Xw_V5 z`)1q+6sZ^LYa6Rqt8uKp4hMWEZezD+EVlCBZco-=q%nIXzd<~&43LE1klp=~LO2tu ztQd7=%_UcDV39A0($<@|7~6Gm9e&hI@*Sz?KH&A-5f^)AE}({Qu>CNskQ1~Xg|g=a z-ZC-<1R%1%vxDXeQaECCX(Wrz>oS=t~v0mt9Er zlk4D7EBH=p`8X$PQxnkVF*#C3Z@U6!=hFtU_i3Ad#Ib?ar5D>4*n6g_q#sdbm`?4G zGll8IDo6KqxBiiO?x=hBwVPzXKM3+#`b#kH&HBT)3bGdKCf>z?MtSXLMkQBt3iMi@d1KqpnRFrl)Noj!wN+uJ8S+Bd2)peV&Fh zM4g{1k-t{3-nZ@fp_KBU$^O5-EjR>v*HLsL3IM=A#^!(THnAR z=l?7d_wOtoz%D6F{h#N*T!{a{#I>^4lY5hgXupr>;GbI{jUQ3+j9TR`u|fR z^S=u8Pvw7C_8>f)hz9{@=CIReUg3JsCr!=P>#%~W}pLN#h#UFcQ;y|`SjVDhEWNVsQbL~_U zZzHg*x_!yI9tq5gX|s#aT7&SxA&F{(%(9&bRSV%Hs%oR6NK*#=1Cv6ydAeybv+#+o zsYu~aD^-}QL#P0@J@B6~8uY>Lno84%VOYwrICK!m@-=YiMqZXe_M`3+{N&iD4y@}8 zRdvh7L~^e$N`vyK!}$}HjT^D0pQW)$1&!I)VVvT_w-a#j5e!$roLtr_Q`Jiz>SO18 zCXYeUf`;1y`i=nj>%>*OyZMUunb<`1AoH!OxC%)O#XnhwL3iuNAOpW5={tCdi1e z5f)1EVnnY5odEqj@s77bS_Xx=H(_JMwO)?>`o*3_MS;IvJSjh>AF1fx8nrU;9xcnN zcc0skG{XnGxBv18V(IB1ZOZ@PX<26Fqv%pX^a?6+HgbZjH29#NRm$dY<+so(*!)po zcQ`V6_X7n*OOl6SWu6a_RT5BCUiH+E{=8%KJBrkPPgUZQerP%InF#uVc(hivdDpNW z+Zwu`%2XTf6;EJnZk4!18Yk^Z6qU;&uxV{FE-otn8E(9s3EuVy1q~h+>1;+o zC5jk_hV7?KZ3o#0}B( zwW?wRh>tYf(G)~I9l*7MO{0-h=rX8f7Y~Pps9E zH?A9OrF&QxyV18hDq%9O7czUX;a%7D=zAbRVx-@RaL2-9*jt}tX{O}8)vK+#4 z+qHH@c$^2`V=I#@!nHo~Y8)a(q$goxbjqqWy!tt8WZY6Pv0teh7PdT!S!vj(tpw^pMU>~YLFR}inlm)q{3t%>)DIqkQjY=n=X_(4k&mk z9Rt~)a>Ej4!jJ*B*PYs@FM7-GLED}h^{j^naAGDA=*m#JJ>E+~r+NTMvz3+e349~8 zOvRP!izStLsTJ>!oR9{%IwN3UOv5Pi7@dwdsf2i^gqq8uddFs%J_w%ZRc7ZNsSdKb zrq9wzWt={IWB^Ergqu`B^zXl6q*#T6Yo_p0)HncwK!+b)B$;)9Uopd;wz_i4$#X1D zwND9R^P6Ld0CCa*(D}>P`4V??SvklPuRx#D6|O@>U78^8B*W)l&@?T5J@*f2YFPXp)6u)Pc0(5YG+ix&yCUUXeml1~Q^2 z;ihj%Z(}AqT|PmTJ9O^J;XfyYd`48y}DPLv{Eq|#+H!R`)1 z8y0+)LZADxyXW>Flf#6Ki`YdPnk%&BcLjnmhvX^#VmnhNQWRw`UftUJi=WaQxpI&;uu{*H3SAbieLd{!;0-qfBIMLNJNfl+$TSj)8P0~<_b znhKWbxT(;xDgKC(Ly4plykNajckF~Ie7pjp@t!2)(~OdXau43y(>YoqDvs_YPs23^ zboXn%{QT2VWw5=}KtEcQaTZtpstxX=gtRc<-_v}xVHYPKL|t(wI8nyu_nxG8adc+w z$J+x7k0@2`GwcBcTr*{b67ggE(1*V3;$n2h{t{W3qo)K#Zpd9@mGg;QD~4(WSg6Jo zan^17ZWLCBqxs-6hI2ui@!nNUx%qAm+y+7B&Im|j83|k)E1xR64aMV2;l!I7gu(6|T z91lYTZvzCrI{`2JqDhYoO``+>)|L*@1!jN#iDl+$OosI?RLKE?&nu-E$|I6C->QdO zfqm=zeX(4&i&V}IP@A+fp2q6%Zv3_RL62uC$)Bx*-3Kuti>-{Yp8%8^<-3w%zeBX# zJmanreMjC$LGqv^$ZMA!e}kbw$YblC<`wBQri~9vXMMrLt}8H5_oMiA}T_6h2b=PH=H7(ZM-i(+n&($h#Lpbb#Z3fyCt>gZ?$ zOZPB7A+kCqQ_<@Vmg@+tZt%`$2L2vM0L~cQ^0A}X%c1pZj4kd2b2m^|w<|rU8p59i z@w(yGA%Jn;7jNgt_ixuzo)XmAg`HS!W(d)0re+h=2s)EQkM?Svurdd)9H$Ci`XAHA zU)TCejS=Ea&|`7heF-Hu>Os+%4F}qGdtj&2J-~fb-)-VZ(E||=RReJ;qe4E;JosWK zs21~m-Hw=88e!Du|yH~TOyZ)TVN$iMsixJr~5A7wTms4$-bH*flu(~qK3gxt#S;(_(6gVU10nTNF;R! z7FXs~k=U zU+w_ExtB)^#oGtfH#Tza=MUY%MMN&$2;lrd3BK81|5Yn_;5~Yql8xn)=(M{sLP+_J z*vlw(l)i?JMCD%S`U_=+F~V7>!C66U8O$whmD|-?fy^G}Zo@4aOF#b^@IV?dy^OJe_SzZgWhyNuWt zEcg*|*sHz#N$jt@%djWU<7hzS?HEG5+uSKpxc*~$pEaE8-+bW;XdmIeobg+h<EvIfYN8gts{8{Py90n?v|`{VgXb~Cq$W?JsM z3LbEiGDTyX{hEs|##cTV-FO8sJNsnsL*bN=JYHghc~s9|gV0^Cj!8E-7t+u1FVgZhDGBlZ&0Q4+~cnrS`^{SzRzDm>>oSLEWCh!D7nS z$&V|j8SKOqWA=FchRVYVIQO%M5n3j+ zGa3O{no)hPSw5&gvi&&aYXNn-FW#&ewf+klV2c$M?VuZRM_Je8KgS|ZH5qeu6ur~b zl3R6Nu-BEw#i*5hl*qtQFx$TPRN$_z#pSazHWL~bS`5tD6;S@g)f3Llc> zy`|JA4(4TS5@_cAmjrT=Y60`mr41ab{CYl(lNwnPj8QCQ5e-;yNmXgK3toN#)<$W= z>%sx7(bQaFkBS7^3khzouWmj^%D+bh;ua zDw_w~fI8}$t*G#NN+Oo<4$>nC|;NQu?8@y$)gQrS_ zZ_O>vFjxJUVt-6&pMNLuO#ZL6-}&i)_*nGAAdZ2*ic*=xS-pwE0@|idTPCIcQ05m= zcyFbvbM?mbDosmDLU%++UO}GDfbdT2Eqm8*{J^qG#Y#1p+q9_M!EYhzTwe)JZqef0 z3d>yr!sHfp5iw%~pzu#5c!%wvcj-n6O$)#}htt$-y%qZYU`9Z4=&_8ZrhlO7j4MI% z;BkET#P)W*dwSPfZjF9ZAfsS0=`IDZJk2pkLiB19dw@vQNmCopR4-{5s`$b#e$L|1 z`j4k`?Jkq3E={b>x8)2QkrN+1c@Sjjm_UmRg9;17a(ADwxUlJbv_5grn@Do!h$p0; zu*tIf2@=;G?ds6a>FB+m9Y6}clmQ!-Y;ea8oYl&OV{raVSkHJJsW;e9#lN7$eK9r4 zDyUgS?LzdRav^4%8V12ODwY|ik#l0)frqq~h1n185|vNU|M|KV^f^ZC@Rh^`SbaOn z*RZAImxG@l()g6mZH1aS1P%#ExjY+Z$suFO!B;Ksvp9~LjgaUE*hEPXdYYH&!64e8 zJ3TP8XQHNUsM8;tZYCkv^*KFR7>{Q((h53syA5GQH+L-rCfZC_4uaTE87@y&mY*G$ zB!`mFPWc^UrxxnvtN7qt$BwrkyM_DmD|YgbMvyw6WMEX01c;&1O#kNQcl;BZjNk_n zppoUp7DrE+VYOOkndT-_D50ss5muYmkgvrBIzCoY2**1B^N}+JjUEE=iA~=m@Eot& zYdjhlx*fw-BZ~Qt)qO0L(?D^Lu)MbE7Q-6A1;qSRw^3((2!P1~ zN!gjPHX*wQGE^&M>veF&*XZUjy@p&FOt|Yu!VcgNr`JceS-7iwvuM(uk9k}X?!1Hy zM3FAZdUGTOS`0%P2(tMS2%3YciqvCYHO*Uy)$@Mu$b)4Qw0Cmnx*ls6fBKYZMlfsa zO5G?cU_t=U3wEaXq@|jW0)tKBnxsu{zOtBKO|_oScXwxW0n5V5bI8i!uaOe&GVE`2 zgSf`jdZf3hU z@RpS-;!)$XVfF#^kA0~S+6jaOm^vRdilGv2Zbck&G($xdc+ zT5l9mSfP%toZ|_C+j(?~=L*YbjEb!dE#kQ2J%CbN>AKm`iVH_&fksoxp6-*$;r@qN z0C`D_^LfzPd=@$F)Hq%fDB-kCrngw$vC%0HTzaD3xNrgY zm(y!IeUKjnvs<&f%M%96~Z+G#nWekq{5}`gUKRd zm@xcX7%fuW7fjoTi`>YmiZ7v1(d+$q+K||9nPig=$V@u=AnI*Zq%X95`e)e?6;Sf@ zsv{N%7zD-??t~?JX;a~1XZWGCa%d;vxak3K+pfV{AtV&mAQ{6cS5H21LFWfmmqT1E zXvn*KZN@>H5AwTB342`5*&ixp&%y!lua9V#!JDz~tZD9)sAA-s`b3mLP2yb9CB$;h z5%Jf6iFSBx`*n1lZyk>`U*RH6>%E*L^3#8ztwtg7*&7V=mI30K6bYukTwQ*~eOzppHI?aS?kM^rYdrLkHtQA_wUcvr~>acfA zA9iI>D3(NCWzfY=hNSViHyVxBN{E$CUf7derIe*`>4OVM>Ohi2XI`CPY3s#)WTyhN z*=39N-Wbn(A5%rk{Zq3qpQ%F%H-w1nM^tE!tznu>hM4S(*?^?CUQ#~PlT=IJ8%XCJgC%8o}l#_hDdgO6gd@a;W45o>)ru$|C{-8&41RAVEYy#eY{|W3!u#!gf(D z#O7+Hop$MTnII90ePL=OO_o+bUo#*q^G+GfglakVr(^H7dS^M>O zTdJD|mP-DzOD4X~PrqooWlwzfSoKXFVCW+0)9S_erkaFx+qAQN89U8m+;O=%HdzlQ z-?YimVIv=B4~>(HIeF!=2R=RRy@mAb9vhK>OpJ}@ zW5||>VnPpI54e$$+OB$aaO2t1eWNUYb8sT4h!tjJf1qqhxBFrH$@*txN6z{20=3p* zGN!iz#W-0|4Vn5Ekrpe?E9!XpT$?0n_O*FW5uCQHT2B*nCLQe`w1OR=Uc?q-!x|>o?OXOldsBgO9GiKf*@?Di!KDWHz=U%#qDG5tuw}b}?fi?9Ky=hD zGu<-rAa14`0%Vyb>PY9ZZ_H8D+|9h%8}IX#I%8b0vQc#^WzM(V5@)@1R4+*`C4GAd z7$1@jc|#YR5n7lz16$Rf6iFZLr}qmYXpL@K$Y+7bIg{Hy99)ny*T#)D@h?`U-|0sb zLz3KU7R*r-eEdE0oRq5I8n4!lC-k_2F%QCb=#S-{gXbt7(MBfWf12uErT1~|I=T#a z^yXiOmRt2i-b%Y88lRtp$(-+3L|%sA<$vMb&Xnl87rz(;dOoZnENd z+r}G{G}UGI?6Bz9-|krW;fmd(j*foLaj#!>lM|kg^&e9)5mUYfv~Cl4W^`YUUkwfD zXudqthhsvG>7eNi)=KPl=pTSzpvgWNplx3U(e%99#^g?wu$Q2sQHEOFwt@|IEvCzIx$%jCKjITwKtj&3)Qn z$s=+L0k?jZG&$RiIxPW45zD&{Lv{8$KA_hSs;&x-#g;*xcmnlksC)tHAjU z;;?VF=-2Q^qD*gx^VE!-nCP-%w2xJ3i@Ad7e{prpty|tXtFS&IM+YHC7lSaw71o*T z;-#TRi$WIkEJF_y%O*9^v6OH*GnT^VHtYBOI)pH?O~cGVRO33ZQx=2s+W^OABXxms zAkz8rm2efsbdmSfUcypi(F0dYXg++k*nN+PZhX(taMV+p(L~u*uWu_Kkxd281WwD_ zeBrZVPu!Ft5^fj=ksJiiKhIRlZXQzujz~74=jVm8V^AE&@>KOD(=sAq-}Lr98L)%$ z(3qeRL_bT|Csp(AClHP+(`on0OeA@_FmjK>o2aG1f#d%oAw8oRvK7VZYPPIK{nS_0 zy>fzySmO@0BxFlEq|c_r(zFEY@T)>ANZ7`d5(_9(GjLgK=uSU6Bv#{e*7*j{-Dj&& z6rrBE`6Qi0T1DJG>X7kpwGZb%Bh#KdfZKP z6#0aa z=Dt}a#7-+pR3VV!_?)4dWc%%FY(lAFT1hL`Z5wAbtm_+kncCDivZ#qjq4~3B)6&k* zkC6Z}4|4?m1zWe5NH=yl4Nx;aYLU6KLYe}$A>U=A0?%lD)I4GPoB{Onm{HL}I9@ZF zc1oy_eZw8skQe0%e9L~YY^a9>K-D4RM1&d8bo@8->@^j1W&2bDH zQ%l@}gyqOhm(ZoP>j=Jk33*DQLwgQ|u0YFY_3q;}5e8XI%xvlyGb_#d0`Z;vUe-Xp z=G1v8jiTggTvV&olWg@mVn$|7)~YPVA?h90hd3RtJoiSt%X&835X4DKJq=hgH&<1k zts*IrS`YKXP-((BkTuds>CL>3uagPTnw9}DL zH~I?sex2F=3_`5^?>_{)8kZP;Is<=s8zRYCr@?9T-Ni&AFA^W>dZ&&+skk!VcSFoe zabErj1pd2=CFEaV-V)j#IjT#MT7=}0yXVt>L3pX#5awdc)us_fRh(vG4pG4(Wh(h* zY8WIk+AWb*bGhkN_pwkN)M02HME?dtFwPEMpM1VkTWF# z$8j?CN{H}VLiSfL&+Oh7zW5mTFX_58S`wv*JMYZZvzX5>nQHx)u-xGJW(MX%`UDTn ze1X(B)swb~d3t#V2qf>u4@Jzqz{Qa`k3UFdV$+4p4&bI%)4Iq>8(d+byNFMAXXoA& z44|DS;S%)fN8H`SBYVm>LWYFWJbl_cC22y~l!|Mm6{eVU@m{WQY}k>T77%x-7sr5h z5OfSt^j4WcwH!&MIDD{pkvye&pw!W{1g5VGC$ct-;NeVA>xcF_jnLoOARs9TeXBe~ z%->HitCA)l@9P(m-ZH|)GhY<*@)6sPRg)CyZL-^PUfB((&eG|7k&Sn-fe!%#s|Et{{G2|m9nP0U&;DJ-_@2I=(x(U zZh-^VHJ!rG-F zjD_P+2T}6((JTXeV~Z=ZSEEsr$G6eA+fivspZcCSHILjjc-5uqC5z@sz5`o`dq`o< z)UHlJI%1KPz!Dw%)L~_UV2X(evZeV}g_psUzvYZ*kM8cUFQ08FE^hPu_(t77@?H@| zFJNRWSQ~`>$OCt~b8_{w{raoegsUCswH5YCOA;^;nhOwpPzoRzkswK<$G!W&9`2989qA*ycw7 z?ddc48hJ`e5=+dIjxFEs$;%s)%NCHRWpksNqK|ZFn<@#?z6+pMXkM`S45f{HRWXZh1)9>%eqgzU0MA33l)W(i2pOu7|0bQd~2)F%n z3$RabGGBYtfXQDvcE{+tj+niW0cqHJEk?hNY9x=ws{Rl?YXq=GIrQ~*T^urnI*>qR zpP;ycJiigPZ};Q^6r~9?6n&km7PVg?qP$z}hJs zM}vVFPhxxuI`^Vd`t$Rp)le4|*r@H8MGS4Nd=1NRm-r$2qJbGHkWR*y9{$`{2far( z0a(57)GJ5$VYtkjhQR(CTHk_tjSY?OHB8 z@Q!X;2`*((z(Uy6<37fzYAD#(-Zps4TS}h4xL46|U#`8iigqin=VQWffeI!?s!x!NzO%j;^qCuvWif#n-th^Ytv;)J6GgE1_I=XfI68RasDX%>r?BU9^m znTh0lNWs=alP{TZmFJ`OZILA%-CBlb7pLhlNe-LO$V~PS$iF!YU_?)znZ+PutWZFnPpj!X*(yc*94SJEldjJ3smnoAr}Z-EMU&z794+xzSwWwbxpsI=aepNf7_md4_y ztg1&3{+t2^d&U}@gwakllr31gp%gj!pU#F1=RsX8e^jbz>P83rRyZH`qCU*gERn@< zM&)q(aziOmGNFNAXoMIW?8|rX=^J;8$XTCmB^7@j6Jy}VcTpH74 ziE8NDC9Bw((xx$T;v%L<->Oq*1{#$6TC?eHEmg*xEQ*qKy_1cCJ=!#*DdjpaW}L5R zEBXFmTQ5Y;St%gi-E_ET;CrJoGZzHufBJ2WaAS7gl8t9!f;ogoJ&(UG_*`pui?NM@ z*ada~Ne@b9gvmEIyU-MMO}@YE$}vLk94X|%%8CvX7ah>hq)JbiRkhRd@ff@YaB@}; z|8~?A{wz2tc0Ucqd?8TZ#60nKIPMhqD+fR^VmG@QDo<%t$r9I_O;PBmk#09C@!L`6 zFaHyhR+_i@De{doTwBZ@IHR?bkWP?p$(;4~`lzI}b_r;~70MysV6Oq00!aGv_8}xA zW1;l}!K+4hoHnIz4zh5Y@~M3?3sbl}y$Tq2e*3g)p37s_nDsS9R7TzK>zoc&O1 zk5QPHTiOEwPm86)=QKhPM3rJG(L-A?EVsGopmq%07fI_hCef>xt8}{4W8|ml=rwuV z-KG1QnvC)7#DSyufFecE1-@QcNAO+~0d%p(Pu1nEEVTSA_l&{gymhfu=on4(Ga-t$ zbVN(&tvf1MK6ocZ>YlRHWj%O%Th&~t27L6d&BFj@g--@sT(hyW$W??Uh$Az0SQy~?#5lbD{9poFNLl?tZNMt5BffuJjx^a}VroXV* zET4>tI>KqQYG2m8U{nZfZq%FSEXPI~m2zzbQ$CttJwm8}fvz7U)OaGvBqRG$@tTf1 ziTqy{6$rMd?s@p)5acnfTGY${_s7voGBbnLon7ctMKUgiAe7k2p8z`EM0-*?>Uh5S3LSX=Ah*i~jt|6$xB2WfCcv)#t0+^0{sz=;dKU z42%WNF||9zA*4<(D-eR*rS~HiMCO<TV~8eI zM!?_^#?<`+E5OEULN3c_b5wjUx`X45LlP8#nxWxbRnFEG%>%FWJGKKI#p3o6#>&Kf zIr{KSS(8^$XyK~XQSZN0ZfoPM9#sL<)xKfu83MfZ%rOyE3@Gnz=ZBhBbLn8WBE03{ zA#s@RjT=>*HzVkCc@Zd%B%WE#{gH+Ar6+nyi)U12xdGGNKVfeL&;FY|KG z()L%!J~#-BCOiGG^-wJkCp9YGcreXS7`(5(%uqqMmNhCwGiOarWJ4!-)-l2Is~ zFF7W0nHk(B8C@URD^H(N6^b7ok)zxYN$@De6fV^QJrv1gAC8Y{KePjDJNN?smHlHp z!sn}b2q0vMR8RsR`?A_;&*7{5a1L}bJ_8&DrorrTNhzn~pD$@$3;8t_J>=I&gFKSg z;sZwcNQI`7t{cM-hxKNkfR?W2@#(@Br~;0X27) z-Oa{ZyKWBS+{8}XS@Kg9B=r2edVX!Kj~ss%VUgzklw}qKqZ7_jT_0Lkr9*C#V@a56 z9|A~V-0)VBy|8dcpi=z?t7>hnCeF9p5e>;iqJE)A4nBOyXA6KCrRGQ z&g6K`7^o1j*CyM>;^M8m7IdV{W7Ny-{;r*=Z)j^2gGv^Zt@8Z+Z%A(eO!!OcKw^mw zHvTIz=bt2QMkcOX)2ep+({r%lUC(=AwX!$osLROM5Zv|nWFSCejQl5QxSf|Z(yniB zS8l9FV0~0FY&)J#OW#5=#8<3%*6GP&KCQQa;!ONs;eJwYDgn3#zu0_SOCMA}(BQw@ z&q$gl=e)tT&vvO^!a?1-5GHW^I1j%jZ#LHV5AlJ$jV!!4Db&kW9^Q3VwML#+&t_M{ zqy_C^GC3RtoHe@rsf|xq^hVI%pJB4DTsZyDjMDg0VK1LzkM<-D>vmv1d` z9Kz2MX*`UOk>h;eYZp$`-YpvrF^)>6`aYWBFC@Ba@v|0yg~vqt)0!^;R;2m?rCdTx z%zqvUt7Fqy*8qJ=yx#~kTz?{23G!FSY!abWqfHOKW`xHD?5n>;k@um_95+kObPRGv7sfb%H? zI{}L!Xw!FZ2|&;Be8Jv(;+RhP%86=ZYQVcTc*5~)@n;q+L)9`l^=Ch==vd!J=s7ZL zaM;BCt9`gJ>OFef9;m=+k&PjAN0}a~@8Vta>=C zg2ihe=*yVIRywAjj4Tu~T%y@7v}!!~oao&W&L^r)R$@JoE~Dlw&`3Vr9AMV32^Yra zb5r}^c&)(pG8q5?Ai=U)8!%TvmuVYZ{h-iP#WqN2_(Ar9NrmOa2jLTrJS^kLprVwy zyIw459VN%uq14LIjqdBdHPWh}@jqb)ISsMq02me$5Ua0U-2x22thQIqr)m6!@27#9~9`7mx?~t5UZ^-jOIfR|AjV~iq!R)11xwJ)DMVp9ueKcVZ zv_Fu91>L;c1|HY3WzO=J+=a)Gm|<~zGj8s6-YdgAlEYe{6T_{1SE5x8TOmfD>e`+| zXb!r+t?h?bo@f*y1~82*N|I>H?pkQo6^^}=v9 zz59I@ABG;A|2zmiEY9#D2qE|c*zfR)$P%f~uff~aao1XU>R46{>Vm7f4JfF##R5O3 zmQ{D<((rM=tTAGSTfy6Jncz|MI~W@Ta;Zw80VkdP1H80ys7~P?^`>ho6q`X(ORkft ze73ECu#qdw!~(zt3B=BV@F>(YG32D=bEPV%2RMDok1)+Q6BG8Wk1k`GgXNlm_{&RL zTE+4gpn-M_r%w}6k3St;el};hH%H}85vcZ{vjZ@{TqE?hil3dYn|~l~6?K(^YT6>h zgbW#8*JYkqr=(?b#68r4Xw}zS39l@LIL}YdSxp7GL*7Hcn%Myco9(8wF21&Q740gz z^*88T!DiWxFXjc1Fe0b<`+cV5Bb$9Q?$C|t<{yj%6(cIPn@8La>|JnTn-J3QLcG^o zIIpqSVC`d6oOD$N3yoTwey`3Ll4MdeYFqB2m;r1o{i>Sk9|Hq5Mhvu(NQkw21h10R z_V?~WhY2rhIN7MXcQ>6YBirtM6D-d|g{Qx0J-(XkH2Hk#G_>W;{kU{_8&u)vNPCJj zZL5|c87&?`!KR6TbV0~(-iMNC#(8B5NKGOOB4qvA5#@~moUi+CoL&PyFUAD zf1m__jh;pnS9O5(*uPJ?oxMn54`f=>;c^I<6Rbz#OXgJoFnYaoMfM^S9zhAeaZ(4= zQL2r|H8UfJdvWk>UNAC@OS(I~Nf=>K_an`dW-JfkC+>f;iyy@tP$GiP10fLbgnC{H zWWwBsyyg0TnI%hJ-s(T&Nyumj0rK(Jn~N3TBlcoj9%A2PI;omRD^+b@D1EI^ya6}6 zbuC1tFg`-GfU5P|b|}uBn5KL{-)hL*syQrCYbj_%zldLxF44%CuTg#y=W;s$My_T0 zNPp&wmQ~dqppL4&*?qCr%~?fNz5T@Bop#^D60SlC!`&8J28@n0qbU=e5=+5^2wI<;)u$LTaOUxU5#e;j%H5bPEsb zZVUMNTMNI_A!?)YWfNuXu3{K>>Zpm_W)@JzMwVM4NKrDqA1{!lV`G%8jFcG5I;h8; zalzAMXC>n*1MQJrMDO}l>9X20+PJozX(T5O`VGhDVjqgEHihg5MIB#58DZc(e-8pU z#GVU8rz+viZHw0M#Ynq=o5KO7FjlfU@uhR_4Kk`v+aH!5Uprqi!;%hQjGcjAu5?rK z^#w0aixDr*lmMO$_n>#;J2oS-b*rljzJDM7&b~9OpDFXt*G8-&CaMvy%8JB8dI7&mg0f!{{cV60eG6Y!iI7g8XKTuJR!U{5BS`#eOcK` z*dY4-bSkCpOlj`wwUk1cM?5KdreB!7=>(FMgubqW9j^0-!)O)CkbXeye*rT<%)di< z`su5a#3Ed|ul1+2G`fu6+IsU`!9s>?3 zjHdULV5kx)fxn?PL3#1@<6Yv-IG7FyC#%MgC3g(i*d7}5vS<3X{bJ>( z#*-0oFSyZCKD9ikz$x=ovt=4f|K#2OHJO5lO5a>tTNU@B8Jrhk{PtnCYQ$m%VoRA2 z7?0T;bU{CPnUBw8MdO@ozMD7wMe}QmMfjC1edvTze2J^X@!Zy<=v@eNgEqia>V-R%4W63|Ik! z+=U33>4~>5f@ah#0X!nYLj|VaFo92b8AG@Yptbcd8-)BIyV!26A{sdj+NzA3{kd9Y zavn`{v|Yx$Pt)|MYeM3kA9>pBHyHTr5nHqJ7F{`~)BEOa&wSOKl_*}^pO#H`eyaPP zY0Rn?XT0bZFl(O!F!f+Nx0;XmlnQqo<1y&`fM&sq^t7cn|QVUwWJDCLlko9cMRB4Lvtv zE(Pn-vyWo9PBEoDHkk&T7eN&Yl|ldqP!%YD93ykWr+h(J++kJ9grCFXOel$dqZuQ| z{xAf>*W3_WzE!89f!g*hy~*jo5U=%6i184gxl^1>OJQ*LA$y^ZkGMy5sJ1#5Gkwi3 zWPwl@@ONqF^sSToeeoH~Kl`j9GI$yQ_Jw=^*|{G7{A`FQ)kiAbRkk7yw`_iJe`%JU z6`+froag>|ho7Ac%p7Y7vS9TFz4Ao3*O%oSky7L<1Jfw%6{W_V7DpTFO=jMG{B_Kh zG(@^juGI~s)D;xF1HO}k_^axg=UrM)#CWxRY=(pDB9UW#s(~^2w6H7`?dg#3V=H6R zDVuNTC#$^{3YnT<*tn4w`1teHB4rGy17H2#rA=`1($`PYx@ubS_?r|?qPHyH;66H| zmfcA~$~Afwrn5Q^OX&FG6PD;gRf^8cf~5}*<@AKp+&H~Czek<4-}HO6>|IfZ8q%^J zMd$nU%WpTeq8P{*T4dQp`rpuJ05BO{s@bFSaT#~3dhHjcKgA_b)(_!27byQo1JC!; zJCDoEiC_z--~fh4#nho3FGGK()?dllu=LtobepVgnP<}7YB9T-pYHA>Pu)IBxwn;1 zmqVuuLv7QIS}AcUQfD|IhY+H{{E~2RAXt%0#l9v6X~-iwKolYis&+T}Ab&%c=4P(M zsTu*lv@i)R$BA^6;H$|Ol>fD#$;1N|Jb1D6Urg|#!ns{+_e>llIzWhgef^xd+hvmlW0Cgrg2>b%Rd=qfV{}oBEkH=f zJwEzoIn*ZN-9<>}I@lK2rHL8H7YbB65ui7nTO-=Itfkd=>R4G>Sks{!0(#|KNJ_Lb zFod`4#e)Sx=J+q#QC&Yp+VE+xZ$S`L2))Na`k0YNE)Lw=g;vo~N^#G+obvE6pFQ^O z2tDy;e(OH&6XWli#Sc|Kfv4 zeIxhEFZ8vSw$R0ONyuo`lMIqsh1eLBvE$we*{@EUKKL#fiz#am?4hr!x>c=TL4oCl zrcMb_HbmF2Cb$P!j}`9tLFe#JBSG@R{fZ|aIL}1Z29_yPO}K59+@g?MS-97@jT3$4 z3n@zcTLgVAlt+puXKwLHMJ09t=;2O`LjS3<{IfR_tsc8BSciiO>dI zr9-yj7%K47)93sBe6FB`SY*^lP@unL$`*GzuC$cXzU=O|w6ZrSO}CMFkKGcGv3$pI zJU`$#FKa72VPqgt_pqIGjAW;ym+iul`&`9HS*n4h1-~UzWDj41x6isnu zNKqGFJZ+h&O|`a8!D9r+@w^xM0?GzJf8;6?1N3b)S^B@-x zE6@kmsHa)0eqUQM0EzdHOtaOYY`^OvCKt$hQl@vY_{c{pn@00}q&bTtF#-Fv0df`s zd97EK6gq@6i2Z;dk7yu{6-4Th0U>6UfMEvOKK6dd!xB(E3%Vf_$bWR-<|%r3dzW<9c*2@1~`10dA)kCg>o0)BQ+)N_ux-~FEIpJ5tOly{qGlt26| z%fbb}VLOs=GWBUWgN7(TiWP5>pOcxaeCLRP*duJ#>x)hqKMP@KRM~-#dxar2C4Rtb z<^6&IlfodZ|)%Wr|^ukmH?H;ZHkw1uCxyycA z>Pjq=_`RKUIs{XoJ^YCRC=8KUPPZ-#zx5S^8um<`X)_<+@8Rx3veP*5{7Y(*vBEIu zRDpf&C>_qEgw+*KM@=AErPAb-7^I z`>%#A_+#$m^#c-jp>BkbzX)>Qrr;5Cfe>Wv<^(5`7FWhKuc)X}E;x75spKEDP}NMC z#Y>M03iOcD-gT9+hEss+-R4^vonFm^S?=}w2#tS6ZHB|`0$^E9noIOKo}~9m0klHY z^AiuDK~em4WX#LnG*{eB==UwtetsphW)WtNfCUO{4NNyO$N2XLJy28bZkvV0+Q7Dq?$357pR%WYoB!; zi&KTboofz5x+Drwk_y_$f^r|U;qjEjBw7Co1r{fzJ*nDMv6EsZD;@X}PTIpjA>v@~ zS~x@v%j}Wg1jL9GRs#Vh5aZk&;dGdhFmfdt^Kmf#+8$dM-vjxH%9$cS&y`BC+U0P_2%wxtd!;DJd~%>LTSt$2AG zgVs&j_~?)Aq{fLKfUZ$mpUqNhRX``FBiEj{6E4{|)6aX2+v`Z8Mo&EjXC8Un(2v8@ zEiTFB8KAP|Jm@n-J{0eGCh?&-?up#NVOeX{b_Q7?`24uL6#yR3Zq>LJlb9k6`{7#fWTEzR|k4DzOtEQRRls^ z4Sn+jyX@)(<%4LWuz-O!`xryaupL1k#*Z@J!$*D#d(Oou$fes2j1Q#GAHwPiJ~_8O z198O^g$VwY_ST^sR}D-3a1ucc%RS~8?}Oj9?DmB%l)i_W^W?r)h);mq6ofeW_u9)^ zSJ|lo0;UomZ2jb`%CEmX>eiRxzg~xEFO0l@Y}qG0u(oZ}aK@!Oc)lh%4|9X|DtLV7 z!ePuk&`ymuZj2xya65Dz2v?2y+FPd4<{+?C7JBWT3ebLM*EiX&G-;28dKKQg*%6Dy?RcF8HZy5vmcB^&(6jQAB1_dB5d;cyJ8;6DxNOSej@;g6hh2yCvo~zWEks;QA z(s>~|&zz79txtk5hYkBPdohwC%NyPn;m3QX@7fQtb1~7g_{4EzeC`fGsSmTcj6`1$ zTNJ6nS|79U7?&~R`uwf6c4)cp`BGXfE>O+44=?5~8l;Pko&p_A@Vq#f!L)?8k#RJu zzIAn^Tz#VZ%usulNeVs+-5Fqz6Z_ufj*5LghZy1zGvDXXs4jczY=@2xhYMzD@biE& z8CeJb6M%EO*sroTHpi;Cc%&Y)JV%OhFIlvI-?TsgV=By`!bx#pA^&XOSB4)P_F8*HYw9Iwhb_UW>3OUKFl- zGzs7mKJ&t(`G=yu(eb2kM;~yDkp5k)VpAWWbY9j>_tP@}j^*j-ITQ(egtUp|*JTAu z7E6s|Noqh!{=SZ@;pl>n6EljpUJ?fdwlf%4y6bqg=rYg~oc03&>B7$`=0RbkL z4i#1n9e`Tn?3J6+@Q5uaX?~r)1mf}7T6E&nKk_cW1lop{glyV4kn188~ z@o*xSpN74!4`LCIWc_v`fNe=z3=am}{`ED(Xx0T_t+HeiyLI^p1>ZtET#%i9`YHE& z37jt*o;;H_%SRqBoS;M+Cs-u=+@yWd1+uSbFW22{ywmj*;SBb$A1u^E0O-wZ%faF; z#SWvcOG&vmRtPr9t9kSNX@i$|FNqA0&=w;qmczgcd6oLK_BNiI=$LLlt+qezQdUl{ zGl^0;Q?PiKCrJ$Bha<5!}(m|dv4IHDPxt4=zOxb{liwH#Xv1QNQrRW_g~G?UDk z^1sA)^L!Xyf;?*0+qhX(4uZamD?$d$^~t8rpA?=Eb{{whmGC}5?NBAazI(I~kx^Dt zX+jTV=GH(tfmeY7J`1!_pL9#|3GKXv*NwE5#6eyFdMm}pJ7ecEmQcu3&Q~Q&9CjJ^ zb73yD$J$p|n`}Ww5SGA?3YJwoA`1cBB`pH>lDsi|{4E%4`JoSt)2>8`zWvyBiQ}!D zNNh&%o(zJnx7`d|soOZ~Z_dJJU!}%ZTQ$^b;zA!nbLU2M*tTy+$+A_UY3t7b>01Z} zEJO_#ZCe10bN1GEAvTaxV{kRl?&mT`E?|FOr~e_f9@PT#4X`>uaz$@)%c>==D${Nl z29(%CQh+X-@+SJ(Vg9#8>%ghG#&|O}#+N;$;pNv*TOOJ~W?4QgWqp0wM)3*3o*fi; zhkbZfh6q^hJ6ihHI$gZ=B*0&j&rZRK95Gw;!>Z9!9k3AVT@j<$?{SB-^+k-xFI`Gy~j-kFJ}dPo)wQ$MSIl04=`%_+>pp zLH#oHViILzb!PgI48e5t;Oj2xOVZnsKfV+QEP1oyl8y$k1(>=&aCmpx>t0&8zHfhx z%w)5CbF&pE?mG-MJsRAo3tv%vz0$kvn5B+)R`K|WAu`zJ63(>9VB4X32q5PLcqF)O zN?ojz$UA@Er>l)nQ+Z+zos%-}LD#BM33P$RxRllk?&e)+YZNUv#6|D?f%a(dl~@Z8 z6QB(}kza|)1lN;&=JVAf-jeJRKg6u0fX+M2lPhX-vG7U+lN%7|kIA?o2-6%MENDiT zbzXEoVDqnIvc&;K3Ak%NKirK3enP)=7STny_g?GN9b;|S7yo;>*K1b{W!Z0j=lQyW zct=eH>V?dnFiJ2|F}Z2f0dO>;Hy5aXNg+D{$->PRTl@s(&r?9|2WxgSX_=YUSVVk0 zcuT%Fq4|~EdINE^^ha-&j=6)MZh(JxyDBOD`tHoM8&6MH?d4@J)Im&q*)kbn%f=1{o1`+Y6 zguNBrjew6nRBXgp7beiwD)G~gyWc8NeLQO1aBH)+z;$Q$d-51f`uPS{L_Cb-C0b_6 z6^}jkp_*2J8gQp_!l4N8X;rf&krwMb9xo!qDMLiP8<}Dc84{=?0LKG)^P*`d?O~a6 z2)aqnEBID7g3m1%1BN$f6iEok%mTSKTblCh&^>`pQZMyv7vmFo7C{ZT&#;{3NTVt9 zBqagkA_Jl}SNqb9FVIJxCm#UhYVx_LK?S=I6~nHj{O&Bw1&ihB z2mJfyxF+aEPP(;?u-&sRv-=x+cF#8S7j4}FMsTZK04RPNkdta-zagd@g#KuU>zR{P zWQITrn!9BibfhBM7vV-m{-VDun47Z}N)Ywy2&mh~IY82hSRzoKMwMS~#5GIF*Z;I?ZLf3Js-06 z7XEVvOm=A>=m{6d<3c_nK58iDIONFYSSI)fRu=mL-r$k}=zDrPDYHCAD)SqbM>KIV z=xrK%Ad#5ybFEb21+p1e(z-^&8io$_#|O_`Hwo1nlwvpe-4fN)5XpTPv*+DO*a=cR z*~dQF0vmppqsi8>w8s~^@SLy$AKuN|ua1ZKWz-q2hzW3=!aD0g5?qiZYVoVsfXr+9#>QAK4@qCh;gsJFAU%@ago z$LY!s1T~E1?9Q_icjyl>iG|J9K+s9jS)AN79bH^o9V^5s_$4^KQ3VnP$>B8Z9eVnr z5LEB_B2A0HXKENFZPiieQ50z?O6+}+@SV~_cJ57^J;Wro>+3!YNuu`<=(PB;F5p8E&RF)Z*`L^=p@ibZW7`ldP95X17@#>*d+nP^!6F&-Y`= zQ)HR}ZMa})Kqn%uuzJ?LPw5soOfsZLGbG&+sNLeWXI-?e5oj&rmgh7y4VH`xoEbm60R832$nQy|oM zzR@~!- zn8dvPo-b$IoLh%TfqvA7{tiYq4%Xll#ZKr>(2$JIF=Y?XCLKz9O__y&)=JI^+wt}U zk?&6({Bnls-Aqzzj(>c?v~PG zEE15$5QJVFH~i06kRO)9uliK%yZ=dPo9uB?AVY#|VM(E?>2Li-xcEmT*VU%zZm@sg zH6~Q>ZH1t~e&4e7!`W+0Ot-XQ$Z5Z|ZR4r-;Esf^7$cz}E8e-HEP88y617%S$oq6Y zUM(qbadLO_q^(3BH|QSE$*#?P<(ZPDLWP5%Krg|w*fy+sV0ti($z=?`VogKkfx6>R zQT#oF|gK;k@Jfs6XsfyS(Bi1)2_CU?Y9aptkM1!VX9MLi4 zk;;w2Fh|eIhm5)kvD8$F4iJ!-gE&I`JD;S9cJ`B}+LY}?He&J9z}bz+;e~>C8#ia% zO+kB1$szbd(b7oo{k-EdQNB>1gvTV`B^$pl7;U}Mjj#*Y={8aKDS^wur3aKSVC*`- zLsEojFtF1vz~4lISI%Jt1swv|4EQ>PU$~CODOR z-V8GaqBqXxYYxyd&VuXQAUKv0mXemRa!aN&#P3}66-lqTj@HLoTV7R|pp;33@f2v` z6K7-ij>ifp&AFvs0?RahA9*NvFLvnBxzTg`0wlLQOP8Bl|C{cY_tjV?Y11*6E7A_3 zS-2h)$O=+ro-bX!L0;dxF21|ZmC76=B{YPI?GX#UqcRp_dKH}GA_I##Ld@s{MMuCb zyH5qM>#s;ngST}Q6*%TXIo~$B`0I@#?>*(GeNgzv7kAv+?#wb4EmPF+IrVlR5}AD;3t?bjGX!3@Vyeq}S6Z7oyvi)0LF6JsQY+0k^Zt-Y^Q-HvY`@ z>$CUhx=|xr^^N{S?zaV)oJwOU-SQI&uDow4$Reg4hJ0Hmf%2OZi*G^d^GgDz1|An0 zF9}uADg5yS!=^Fh4}LtkGqsC9h(k(52O;GCq0i{t2iK#8z z<26}JG9}tvl9B>?@Og&jFMWcY-=r^6Lf@+AVwCF5IR4 z@k;n3_FrQV#$+&4%^8zPF*m%ZxwkpuIki-hFs%t8lFUdZ8V5w|C3_I5N#0a7JE$=rpAAS-;s`9i@6D zxxct0W=o~wm42fz@Ef6DQL=A5Lu^@dObtPrsJM^*rvOCzx}V4cajp85IV8S4z2L}3s+x%acXm?*ASl;e4x3{qiVY9PBa3E0Gk~Z z!CMkmi`I6?X#funh!lze(8q6C0?-7rj$ymlFx8(=AR6)#BU};@`GauRG*@HS-H)-T zzl->s_^)Un?-|td`tEKOj`fUSvQU>sq)yT`@+f}kxQRO>z2|$X$N9*j3CoyS+8TFY zKio4)7IQgh{Sb)0)TYTY4Uc`y4=qtU{f5zLewNg>iLZr{qx`c93Ds3-zeh;bYiqQ# z-paBpooYrhE^iqn`^W$AEI*+DC1E#lZl9TEbMo&bp_49pEUD_0JD{@uqa?xn9Hj5r z{m0-Kyn2aGlrhqX@z~}!eK>w;)pjUPXk^suWnEFHwxroGck1w2QA|^w6`d~s;qX?L zetN!@WQS5b^@JEct9#wo3RY(Ic6QJ5b^`Q@@Ir`5qOB@1otl9Wfi8$+C~f@h2`VQ0 z9LKGnfZdM=z6B%^gJigq4|~(quJk|kW`3WWH*Y{J!Q-1tz=zc;>C8>v*1XpwF#X*a zSvN7Viu;TMpClV+oEFU`QPv4gh%EV9v^Tsrv~Xis zp2%@+e675E4A(XacY^QMABR+?wwj`%<2twAb)MI25Y*jFVT+3U+WlgCr$}4hYht_B zv#*KRV|Y#V)|53*mH5}d8b2yDgy_E|Wqb;96fg1Jf^YN!>4$3eiy0crax`)0KC?D- zTK|G}ym@UcbiP{3SfKJYXiJ-vPNQevF*2)%B4g6ZzvkE(x7$}$pRzxFq5Smd4Rz{{ zrh@tF>>$TAhv+NnBGq%OxcX^kC3sl1GZT+aEkMTAg z<8F-+T}G5CV#w-~Js^5Mw{szC82f~2P~f&4fE3K)8^g#Y9NrEBy%%GK!&etPomF)M z+LkRsH~s|SOrhzr+nsC^I-!(`W~OnAyERC(hX)JBG43CK3%sGVw4$z)g*MHsf!Bv6e6uaR8tw5?_Mkq4R?Qga}8w(!2y6wY~b_UgAm)q3f> zis&WR^rc6qgDdBCNW##Fen46x@I?LVwa(}0a$!uXx2s+Av@3G##4KiS*4o zh=Zog>9P9JT0pWDpz)C~Y9Vy@>VD@A-+p`}&2=1a#%Rjf?uW=x)~FiMjGE^BC3~&e_RqdHVX6{$59xRt-JbnubcrWu`oav>H6Y z(r!uh?$VdWp#~vr6Wp93A{XyJY<=F|s~$S2Yqp|%kjD~4 zrnhoy*C0X`dHdd;)qkZr<@q&woOUKQ-j!GMtN`T`HDU`n5)ljaz|}mwBYVFjnEaVA zQTZ9OY2ejfY@dEzUSB059!tY}<6vSJ%i(F2( znD{lvT&Ul1c)e12HKor0W@(t=be#@&l+SV__Yf{et%0!Bhucm8Aqq=j0k{N5eHKEe zUT*c(8Nce0C6`U?={JY0x;Dl-K3+qwP+j&T-r`J7Bh~B(|iq3HE zqOja6LS@KoiPHxTJRj1$N#|+oIRg5HnY`ZT1wHkp-v<6`L!;ZGKLN67HU&%RL_XC= zT648tP$6vZuX;;jVQM9Ax+CMLI4Eaq9d;2qK81pCODYcXkJ4D%rz*m_XEZ)-?IEy= zfNBMbUfaevJ}$$J@a1}#NVpRT6<2$GCVHdO@<|}YHm>_Bs_@N&zKO)IHbpp@DAx%T zVLhxy#g`K$S$&~%Z^#3o%?xK*`WtuHAv(E~W{!|E)Qe-QM`@YXu@gVX z($jW)%B(<^^WqqlX|nseKfnzFE;fhvs1QnQ5fWLzpGtViEcPIkb$f7y{l$i>lPwfk zF@3OkrccEn9BQZKxc8z+Cg7Gz$eev{REv&A7`KR_11m~s89sA8k1(g!JQUB_ePdT! zC|qWQ+RPO;-m-UZoI2T|Jp6~?-x{t+F7*mtgLE^|@J3S`<%ZT(c5afz-eW1V8>Ouu zk^zAN*Cr8&ANy@FI4GGTIqRB}yVOA#GT6-n;jaA927^Z1M&5(R7ea2=PaBahxIhxT z!K+>%qI*IGsxx&pB>EYg*9&CT$J)p1bL)l%7??K6ABASxCRD5#{!XTiSPJp-YG(#A zv3Y43Fl2m>O!NV+;7fY&`KuEzT@3iHX-J*W#2IGdp*XF( z#-dM%k3ljkHvU30X0H4ivpXd(qQbsEP+W-dHTXOq%um=L{RbTqkLAVn7F8qXj3hK$ zaszm(Z9UOLooru4^Nbkt%QG!Duq|kzA*hP3#;F;vh}u%d;q?Ec*>VOW!NVy)vT!@8FW;_3rSIAUhvN5o{#%?%Zdg(z zpMI>O&WHCre1a@)VoDUpUHy28fcmh}nCmULj}4f#xA3hH*cLV}dR$&HPZ?Ua7-l7r za|$d-IKdr^l_k7@F3{d>Xv$Eb4g7Xv<8 zHQt(LU8xy}UW+z78pc3ve#rcG?XLnJ?kuih60%`Cg2a0`=S~u()_AA>v;_#V=g?_j zP5M10vvkUuYZMzWB1(R^0NsJK{GngQB@wsJe9cpM>>*a!5=neF^yAW(=7RN93LRXP za|G+xsvwp`n)h-*184X^qNF^S90JfY5IOm{{$qsY?@+~H2B1nJlx=yYjXE8WTcbt! za=er#4;U!yLBqu|I7XkW*us(yeFeQ&7C?moh18SQcRhsEP>P%>KE0XONN3EPou}Xil%SLo6bH%5Ia=YS9Ic$69({iS z#R(r&R@yW(J>9mnn{{^P`rjdiP7yEkUl9czQOemi4Q)UNzcFyZvj1TE56?Q2Y(B!{ zyG5$WEB@V3>yB+v>(O)jNF|L?AwPzbFiGMjQov=E3PkSk9pZ)0iphaRO~6ro<$06# zePLzS2edE0j%jy;89R;acC-t(O3eeMvgsyqZe9q5m&JQ(bQ;O)4)UrCvi12$o2Ctb zsN#pxVtYPNGoCz{h;tqYM{et!`y<0-?)o=()4@HJ-Q?RysOD5rY?}|mmulO;c-WZ1 z{a$JvVU1giigVeR(h-?CY<7dP32%Krj@m7D`@@Hs3dR-CYjA4M24>{7Ixp?xk>nFU zb0p|`^S}=7jKjRGQ!|jnC&lnzdOLm&$TaX_*C40sb&=9Rm&^+90+8(}^}`sT!o&mW z9}H84HxN;kYALe{YxehOo)X2kil;`MCZnM`2SLvWXH}-1%2M+htnLYNqY-Ak%G7PU zE6XfP%U{5TbQGlxAPJvcihSEe>3wdSM-vw~MT!uj6mdls(uokngkhC=_#+f&sttsm z`fH9vHTEw zl_m;p{~Y0`5((`5K{>lc*A|MCc&M(I+;?4fY^G#d#E6SvwX!aN4w`OOfn3ZfBA8;x z`r(CK_mHpaR=tTp+J`x~xbh>bkK@!bKM|A@GbY-Jk)0BECGHgyfmzp8l<{eEU83^~ zLCq%tB|K#2xXX}9^009>SC!c5b63@yRe~3gcPQmpSKh`rvM|G(KA5dGt5FvH=;4Z4 zmDsA|MHuf`U8#4R8aahY5y(22+7slsmnetl&KB)cRmFBMqR~ob)tEYQ9n79&xE6g@ z(Uc#dcMkCL>ApE5A{DHc>kmc=+(U2$;(Nz+**bc3o0sA7?s2ilY{*#?r}ctDa=LF# z0b|Aq9Rl9f!4UC08O-5SAK8Qxh4JTEH{-eL&=c2rMfV05>e=KbjI5$A>}!zog>?)N z?&BD}+E3fIdEqDrGAiL^Gth6rz6(f~z~3*Ixu7>lTmX{bbkXgm^p4_cX-HL4+@5P@ z>lp>V5E^$xw8_5#6feeik;lygLH3Pb=Z5{MSSR+2Wb&?cVfbP`myn*r8zQA^tOAbF zan9n{&_Md8U>;lslI@6aJH0!zR8rE4Sd~6YOUSiP;&v#t6o0_kGJn2&bN|g**PiJW z8JP?IxQvGq!U)p`i|<^AU`E2wW7XordiW!hKklrZhyDX0=k!xDWdz;&rlt34n= z*(plqQymz0QFLFHiHTj!);`gNTIay|Q_Y^JlR>*DGnoGO9^o6WTh_dzm2)^)w&$Cc zzb_wKSN;07Xfm=$tWRyHhNuM-D!bGtj0726d*ZYpNxm8Rq)gUhZfKmP1_LV&6Gszk zKPj`0K?9Q8`c|T`_QE(!*ng*@`^CZ~0H!lP%Jq9>v;U4?Tw;5h!1~Q66Ivbn$O~2p z`HcE1kc~?)aiPqfsNUYLhB9@serR}n>lC6Ki6HC@=?U`77wRkm>XKGX0yb87eT!R) z%3PgYt%~P@7zSV$PigLU{q}`+EDnm#%g)M<(HIU>8J4RC5Iw#HS1!JEv)xIcMUDbd z<)NL`DLq4H$)uk|jInrq7+%?GJOrzoV*Ee_@PLw@rd$#KW`76bHaz(5SYED!Nw3+% zcxfZ#CB%akjgAruo=0ALXQhk$0qxbNU_~lgW)@d=@;0(4$9t%e*;o&7qTTi7pjIB zN{_~C^o4_HVXSdPEJ_lrzXJFPc!!-4KJB~YRPtvTYR1#XBKD?{#JyhRtKl11nSyHL zoy98|CXmxlmIw^+nV-hglhF4knxXtmR>&jkIOIBVj+UCOmi!IFAvveyUS3Mu)vaTO zai8^cW58J7n@8&S)T});xj%koV$@}Pr*$8Hbi8`eqP~bv7}UtC78$@|C}6{K+-|N^ zt@$(Lu!vh4pJw|YD|P+o$iO|eFhJX_StJV@l1~SprNCPv;F723CkrczoQyLr>%!lFUBjHxo_A7>Ac%-pE zdd(<|>Onm3+KBq)Lwjx@?Tt9;bgUggSi=KP*;hjSOmdUBhx5EVf_@q56l4=!(_Giz zzPY;}ckoA-->ie5Qh3dm#|%fn3h3j(0p>}GndCpZ5+C1Ed*)nR{aoLg-1-J;UPv}Z zqHX>$yc4IFySL2go9&`c6|eRRmf%V@qYbey(S~zarAGvWt)_z?K>oc^VJ;ov7WLa* z*Bvy7@~&Pdym8BUAb$i(L_31pFmYt;@a0yZBn7iN{FZ7hT49W~0%7mAgLCCPZPlcs z-3bQfO^RGxAZ1Jpx|Y~C35b^0fOBj0pU?C~e^`P&*fA1IUUe&3SIbc@_)BEs4D#7t zSD{M#q3lj>q8j9!dsi$N4vjQ`JpBZF8EX>}8%m3i z;GlaU<@XCPvAdcJTOBP@Qd#bPx1bL0r0=%s?}(%gcVG;W>9q!~sE4fzaooIv!T(+2 z&tG-CFZg*LEoZjK4}#!UrZ|~g`!Rz6;HK+=jtEAOJ>gXf8>A&lHi`f)MP^8elj8=& z3|=^)J_G?{2cKoBjRe5%1P#(5EPRvxF6bfsX!71_3Ig;Gi4KM~(%?p=yj3Qi;-SRl zMB8u4XPEMu&Azi^xXB!p7U+%Pk|`l^Nx4i$ign$TIRT&bi-EbZ+sa5KF2nLJ@9^Fy z=3O!7J@(7H!k72BTx!~7Eef+1X!=3B4%rn4Dd_H%)2E3jx2`C>utx9>Zg+Q$#^I%0 zk`BR7e3Iv9gpn5Vy~{2o6=41X1>Z|ae{Sgh_ODPRDvWrq+L`$k8NK=y0rj@!-Z%FW z;1|Fb(u^y0@+w9C?&mwe8~IpVRnAwjhCl#_C7{ zCzHKlcyt>B)mR^oDykO(kjp?-&%UREBa!7x8ut7Sr^3LCim}+u< zbn`ro=hz*TJAb&Ad<~A4@?3-JE~kc1$(ZiYIs(1szNuiPUNfj0f!RpS!c|vKRfB|MDNparq_NfBsMBSeD3t`Y-?WKm5o4 z^VygFKj+Do{P$#fi^-C$83(X@5%$0RUHd<>I(dz>{m*?X{~Pr`(qt_N?7!v^{kQ%o z`&Tw2PddZuf8Rd3{BCXL|MOu#_SX>pzRZ8SLie|}DdPeYB>S=W<)Oa<`M*=rzsqlJ zUdWFFIl|w1r%dy&ko@2IiWwLamwcY~{_6g#RyTcyi6%A2)I#H5Yx{45IDPyp>911e z*CuY38y>75`dgmCoqwnP?q?#&vWCQH(?Iw;2zCDsMt?OW&x1#!XdwCLuetvYGTC2y z^k^TxGanD^kiHEt#=l$B?cJE1C?9OZ4pC_Q9i+>DO|Slq*x!a1^R)=xqB!L3FU$RP zt;(xfK&K`Vzjge#Z~xuOz<(Q~uF_v-jDP3e?y}Cm@uB{<9WOE>Al6&{4hkdx8`O{e zHy}8%Ezq>2BHc#sentG%FNuG5LL+XcL%l^|{Z{f3{yEC$e>bwP*bTw!G%7 zEd4+23*<`{<0fLf4-RoUvq#t89nHxHf7chrvXud1D{n=SrdDvOG6)}X@X2W~aYDhy zsI5<(3KZR(x(cH$h>g(Jn~PXaG+TOdvhC?4ZiGe|=8?ji7wc9J&=IrG;n+;Q5Jy}R z&1F5VmRynnkFcbYRn#H#yg}u>$SrGf1YkQ&Zh>r4z%>{E9(|tgW0{wUoRDHrXLFf> z^&)^$>x&yK*=M)(G|8B+ zkcCn#Qkv=C+s-ov7%M?Tl7;e|NP+|A=M_M)oKCWICPrn-(g49ok#%V2gnX9e0T1{A zK~NMCuXyUB5=madj#$X9EdOqlk&uW4uYC)t_^aQ35}7 z0t*W4H44lu4n5=oISZ;O*IuCH6kWeZOa`~=WyZsi>VP;xP=iL8)dey>H)9fH_W>>f zT~jbR*8F&nm*)iUCuai1Iiuq%0@_zeqHI?iWt}kQp64B$SuvH@J&Neti8C;U9Q}#@ zbo4AoaS@J6TBNXgue?6^@Ff)|Z%nd!P(J)I$NH4ETNy)VvL>b+F$m z1W8j?5x^`9ykd-gsqoJ7cX~XnS14DSJFV!F`dN+Yd1goFeI$Iorrr?S9{)tIIyI+K zo5q%O0>*nTOuw;Yq2&M^%5`w0(2<&XA8BGqqsd6^46ATj@lYE^5aHKq=BgiKc2<1Rz<#u2?6N@}l_V+m!l7gcYKQ!Gitx3Vs12gGjt@pIsvkig7NDG#j|I zy6CUUWG`#otrNummb$q-d-YiCsFch;S_Wb40L_d|kqqtLxyFy8DKPr#r&o*8SmE}A zC`+nR@opD;EfRdf@V?5$_UuqDg}$6j>&G9|7CjGoeq^l_d&J;_5?f1* zFD?CBL0w$JjatH=;nRI!Ze|^fh8?&pE0W1S{U&@+tdjeu%~MA-Ix(0%(XC49ULr#V zB;g|SQ9m8TshCq}Kf%L+(M)>c2_Nz*%pDskw^t)v$zR_kT4M;bf zFH+?YnB>Uuv6TKojlw(8i}&nSJJ@;b15W_9$aP(@^4zc7$e zepA}|hM=$N-UZYOOvtB}$x=TT3mBei&~_M} z6P#!saD52B!{$;{oXB2t^-fZ*4Ocyamx#pI#C%}EmojXVX(ASy6~$~zS>I_}3>kox zh+Lcs3kUF?4bPv*gMHO1Ef=?fx*#MJqtfK@tfbMTQ9V=a8%^X-AEBRN8$P|t)G5Su z_ao3$#mMBT9g5s=AlrxhRc08OIYSq60rVqrrHF*2=jT*I_B7PMlL$Y?VLSlhRsk(o zkW=H$H#Wv>5NCtw@tdD&7WXVm*Zhr)HFn--jA57sCPp>$bV6VQ~HyjwjGjw zMMY+i{(NPt6jML$*!Y`C1t*TM&}y)qG@&csM=k*luPsEL8NYI?$}Vn;zYqqR7t#792N% z7(17C$sWN@$H;~?U*Ux|ELM(m1KbuOq*Llsls)PWCnj*!csp__$bCT?xNn6Ant zQ4RKs>soo45W_VwX-W=KZq0N5RO9~6dGB0m!#)~eqFD+{5L-OYDj~JYEnCp+b?lc0ce{)t=TXF z84eopO^M!J-r6Wz7F$v5sCvG*}}7>F(=pNMi*MA_6VprgW6#M;J@c~g^&>XilCA9bC{Q!`62p=U&MbkA?PbxRH#k>tQoeX=#LO^8md&B1|hAH0etk8 z0Jy^cJ=$@WutUi&3a~k9<%_5xX@KcV>dji1pcv@r8PJww@q~!_C*Hnvx#B=mf(`in z0`i!YMo1#|gh)jk!Wd!7fLjANjo(66Yy*e&R{iYsZ%aP_$&x8a zSOkQ-D!rZC3^>?`xf(*!A(*zMT9)H-uIdTS;~9vXuk4(D5u8De&dUkGqgIxp+Sd&@ zehs-VFNx(GD`$cnF-g>((DM2e8&OmSa7&09uI4u0sq)hZZbLAsz0BdBPIb^2#oSru zjM@0c_yVuDgjP<`ea&7WTpffuHn_E7`f7I+BBecL*J#pvtPDT2Y(jd>!BwvB8I= z6qKwvLM*SiqM2{xeDB)3LI*h50nk)=SNvVdL~q!QN91$3e|gvDlG*xI;ei?mDp(t+ zaRlDH{oDKcaq}dzp)ee4m}|k`x}iKoG?wXt40VL0f??uZxw2v~obC7Ycarl#^a;`Qq|n&DQuf#&N+0No0y;GG6XSk&_@CR-?*{Ua{QS_3v8&Ct~c zTu9X82|Lth!b?mzsU6%@$n~p%voh83z@pw1#hEQ-qRb^KX5oQ?7{eC_HpPi)0diRx zjE-!nFdODDtY??qGwP18v*)4{MHnuDRRtSj4#+V*?sfBrh>jW@I?7dGV$=;Rwnc*| z=J=zmKR}o$vVIk}-9sc~cIiD3BYG3Xk>&J44b)Fc;^>E-u`WXW-^*C#0?A(-yx^Kr zf3+pZrSj2&`>PdgAgv;PRcT zjNnT9hU9ORT$mkvP^Rid=S+;`iB6P1evuOtwJq_KY&&LYWh2*4|VqMgzFoWhH+u$dP%|)xR%kZNJ zNdkI#wh@aJ!Kj!DCnM<1%j0=v&=MXb;05H{oyC^n5DQA|@UB0SV#qUVMO0=ojfePK zItx2W9KXX&)~Rg}jj31N)}Q02o;qPuM;seY$|6{|f(M?C?d{IF!f+CO6%BNQ1a2Yh zgWWDvP%+qGwFd+iN@+GHe{p77Y?(&Am;Uue_6dcB&68o3_y=mU02@$`P8Bafyvh;- z_yf0^@@iNdpM<91muC{?N4z={RxjPlZb&xC?+4(#c@yv9umQtN56+;kyI+d=DG2C1 zK)6}KVKo;G|7{Y6AT`R&B9JdzI4b6BXKImI=cn};^}(^rq2B1fyqUrDpZ>#QgG0Q2 zau{Va#fcI))jzmmNIQiD+^)7G8B$&`p!AYk5r_^&8o*&!voIC$tL0GGi9?9^)M?l$ z(Li(WL^$cfQT;yGD;7R9zXQdIKNU+^&YgJu_<^>o3}KAn)TS&ozZ?rfBq7jT89X^+ z8IX|@0;F9BV3QM#JmjtC_ZtNIg)lsX^0E(-5 zp!h9XJd*RVMoed#hUtV4CkNXF#O!*I$0G)5!KDSG>UBCSfoAPd#dmAYqm6HSfn#XW zPpZ`&RTu?#fc@1a+U(x?cd1A5;-8p5aTdQ_)YoKIpUr1l7R&N!zoY;?1v2RaYJW2o z(t39+9sE5^=6BBLTleBnF*POTfWfUXy%Jm%qTijlrcj_?a?DzqO5KfBz#n^VCPNXH39^Ar{FJ4jucuvik8Xdw4=A zpY>O5y{bvF7KEoV`XpT-nRoVUuFV_|2}@gWJ_Y7J_bFCCugK|F<$6S#d>en5czNV) z6=ILh<8_%TKvqYi=&obq_U0QQZ6R-Y0fPs|3g7@`p{dJRHeSBuP^bpDd+LSbzvWw zwiY*fcI}dn9xFivzCTz7c{eg{L2uWtbB)dQ;1h{Uz3g}Kos03ND_0kX7NST7|GP{jx7+#iX#Z)k%c`y*CvYNyWDpZvn!N`QuhJP zDnHM&$6LjeiHepY|WD~VPFJ{)OCKmT~i zGXq>2878gdCvA$+pP+p)^1y+r1XVClC_%NLWXIXR|C;Kaln=%zp>lXE8+!OtB0gm1 z+yZe~>q}M^N<%);wH>h)0CZ0>(G)TQsh?KF()FCy;2}`kK_n<4l>=oR`^bQ;f}MDF zmP?;mmA9xY5xN&jo4prLB-LmtU4h@=Z9)9vjyw%g_tDL*2uzSe(Y>CgvM%bOLg2gt zT`ve7gycRSqJtq5MR~mc92MCdb>SVg>jwcrFvr2ODceAv(;^_BC*&yJ?9jTRpB*TZ zCYC)xMQv^a;({EMSgT007C5mq4=nFMt|?|=Io*TNLNZ83d<^g$)Rbg466`}h3dydf zbE-B+I5uQ8agKqiN;x(A!jtdq4vTH2Lco4*WLI>TI(b5FQ!cu`ib?DdaW@%+aVG>m zBb0Qc@CB-t5-vI#qa|ja=RmTQ8sjf`^c@eZr0!ryaF~e~IFZ2wt7+B|jc9`69^Smy zUK1Aa)e1_SF$j*29D;v=FL11x2Fd+5;6WH}mk)o6GzHI)@<5?I08=qKni6gS=Fn5| zarL_?YrtC!%PCzu){*67h?T$`)r1qNb8@9A^-YMW*^zc^|^`p_Fv zh(`x<0N0Y1ls4zoRVn3hmEIj^)6Fq zMdzO45!561o1Xem91|A>%&wHd6fQID8xj`hTW`YflJy1&D@G$4s;S&Jk}oik;`F8d zo z(6hDb#hI#3T;Zf3A(mplmf!4nt3JS~`L1cZ<|`pDDS0%=#0AMz(5wZRbrDF3{_N3( z`v$3jb>XvgNBSSUEl;pNinAQKNA@~1j$7c9)e?EYpS`m<>>l6`*`oJT^JQ#?pr+}% zOVX9fS@N8Ew%X9l?8K=Qd=r+U)v`-P@ayAOaEw(zgguAk9W*KT2Nz2ZmDXMp3Ri1t zAJkIQqYff8f7vaGEKuV;+EP~i-dW+waftA$Lwi-&!0E9=F5T){i67=D zgA)V+Z47AanZVYwR~#FK6cI!^!yv+ID_wZs`$$Gp`@#7kCe_5XfaO{XnTtMBuqSQ> zo{UbYpH{4NP$Zq7Q~QReJa*1;s31pXT&o&}^!fI*YzF8nki}+a1(NI@lq(JI>s;$Y zf0geeTOOa~s5rG@!3rJbZIbh1ZDr!YIkQ+Ky?$jq4qoC%2SC{zA48FT(avUOTHRRs@dzh*;@;D`dF>q*fZA8dHJ7rnD!u6g&M`|dV9P{?%rq#~9PzM`iHxVb) zsgjTx;1`C%hbUhHw<_y*Zc(5icQ8Pv9IGkkE(1{>-#flat1eo;0wfIJmtPQzp%7fTUzcOp1MpyM$r=b=6Z)6p4D9ymK&cTG2UHHH zMqycfY&Z~XM7vK>IBRZc_;OTZ&UZX1EQ-(@4KBersi1@%@1n_r3qlGh9BhZ$`Nwq9 zW&J_^_tj07pSpl$V`qaMY67RTY%Z8Y>~);{pbEP_)NAGu3`F;UO zFK3+;;=5miZ?UdLWKE@#!O|~e-eOX*Wr${bVg4mAVBJvIlp5g6dT|TV_r*CDGu`^{ z3*S1`Ut;=F^hw~peBw+8EEtKNVf2-XQt?|dnveIfDW)J8f8!R(=tkWaM+FiwacGA=t#S3{;*-Ti?-b2FVewx5=hTJ7M#|FILTHznL zPR$SdaBFPakUL`}|exE;if)xZ3ApH3EtJ$_fRJ*QS znP5RYqf%S`babCPUzZv?dL&T=iGigYSi7^(g+-GNaAXzm)q{i{XIrBw+0GO#2n;m` zpkyRd9#Rzp7q?LZV!m@)1QknU`$~7s8~oTW&9oQ4w6-ppbM*4Az@V}+)KA$Muc<^( z1i9B%JHqZ=A);&m2@*=`;L8W}--^xNH%U*8=qIgvlOkG;Tpr8iZ<3;$6Mz8eKfrA& zFXT&s*Y?4%Asiys1GX6>6@cxeWQC?`lt!3T^8&Uu0FGEeD&1$KUWt)N#p_Xxz);); zPW&y%tROhpLzZV!b1)qs!OxmQ#di#jY-+1lM|2q(d%^sJZ4L36S2WqzK*;o{K26sk z_{zC9{US3-W}@#3VX$_UbaO4|Bk|#fG0D#H{ITh8FH9?8`T#5K*2EpHn9N2Q8)&Q_ zOTM&wpWNC>K-*eM8nQ?Q+8r-u2NM&a49TV$1oc@4t@Fn zlcit3n9Tbk&?{1XDOLHl)j4+-Sa4VjHkL*3h^m*E4D&3a*3HWay{kEv3D;9+M z)gbVQ)k;c_GW<@lkc@! zPy^dVEX@mR80(}#y7aXoxN{q>^Wfj~^T${9OD(&=0tv-=7e18Q3m4{gX^`$ERhpuo zH_|t-Id}Li@O&*$1ukmgE3KTB=XLODHXkNk|DqP=O(~Wwr_k`U2d!BjY5h9p*{k87 z0zxsuP3y4i9&0qKcwA|gl%Ij%Mev&8rf)5d|O7M!$ zXrO;Dlr&{zALuIS0W#cHYW<|mkMWoO4n4452Mm}~g7q@&4+*nRNY7Jya%S;QQD{>H z0*P2FG|T9Lm$uv?zZaLnWQh8Yx&@cZXMYiu=4y+PIgR>|i%Jq!W)*U7&F7fR&ZWl}B zdekwC8ml6MD&^~<2TaM-Ui5p{qxg9PFfyab(lCvZ#n93L4;xN~-@v4Zgw3%m4FB~I z5d(*yks&?VW@K`6LlXz#EPGKB92V0}x-9T}fWm zbMW#e!z};iM(w2r%k_wv5|TL%GJIv!rpAHTtFE&CdmYU89?!ty!2~hB$QqH83Ep6J`_^v}V%c zxA$P>6EDA|dK)bXruM*^xKg!QXQWW&;LBmYFWt~z!A=VLPs4rqeqrl-bJp_Xdx#$n z=N9_SFHKJYS~Bs`W+?=k>95Sbfls+A(cc3;MEE7+dlU=g^}w+nVa@)S`3Rs%8aEmw zV+)zwHop6KP+ZB13~BWsg%PSu%Pth)WceTjv>cl1+K1*U{^kdXf5?e8i0DCchvhHE zLwh)si_7Mt$Var7mP2;b-uH)7m$cBXQMQ)ePl`8;?XC!30LS8f-+)$N?7X3XjR0kP zii#Z?HtnXpU7ow@8zvNBb$7}Ske)L`s&quW+*ES%PqY79Zqva9H4Yscdxa?>TT$`q=YXX3Wxo0R^@YIu0}S|MYe?I}^HK~kV3 zD*4`LN%uYQQAD724kR(g&5#@8W)iXC;GQ$AG@2xJ@7FN%6`h_rlD!NIK?KW_rCC#t zr|=eL(NH7#qFVx}&La+9HrPH&P#*^nWJA^}wB-xzmB$L8HQQ?#n6hwm_<$z4K`JFq zj*Yfo9i<4qp@+#qJb8!m0V07YS1X{wvZ7w3E3@3=`zetO2*#;w6W&K&OwMc{K2vs) zB5O}rh&Uros__`-rXMF&apv|!nAbs4(nGZ#GI9HLdIR7*7WCt8Ex3p!Kt0$^mbaqrh_TWt%?DjFxU}OE@lH z#2x-Gn$BX$S#AxZ7sLR!A;DdP&CuZPSO3%Bsndh5E;@m*<$2etz@}pJcy`((5W+5! zGK2m|8KoD$Syiv%OOGLB)+k4|jVou1=}e2ZZyc(aVysb6n=AGPpmjE-f}XA6H3P_- z<6oyw77M0{lMg0s_zdQi^l~Au>Iz%K2Z**{W{4so<70JC%jX=&RG>qx`$_(xj?Uwd z&V3=`Hu6r3Z(utTpVzM_>1jx~Uw7O|U?4#a3#0xWNz!4JaoLoGDS#aXrS-QFnuh<9 zj<={{rguv3m#l%%aPOK`VYTS=_l?^9QrEuJc2=zU&9WaX1Jdh^o zTYZP`HP9fBLZ9pBjzp0;^W6V^b*SPS%avrO({`@^E%Rh}ZRwiU}i#|(Ni2~u%a>EW*&#A-q~XkX$*J4Dsk+~t-PcpI5Q zS^!<`xlKo-(Lmmr<(2|=!nnG|xx0>`5fqcBKx&>jtz2$jj#!|0Oq}BiZ2&?W$u82F z3TK&~&3jM0>#O_imNsnyM}2_XcTJD+MI!Me1_7kgqZ50?kuJQJt^w>eQvM~HX$>W8 zaIdA=DyoDe(_jH)x&&=hKFH((gmM>qL8@>@-_ID*nXJ#Z_D%$obFE3Usbdm1M9AHR zx|>8~Uo%&+7&oJK5jX6LHVTC0r_MubXRnS-K^(9;&JE!=?5-N#_PZ z@YgGEJ*N$FOS0@Spj^VB7Uz^V&OF5oh2Ntj=TeS~Jt-s~4o9niJ7EJ)qD++W2e!@$ zt2;~M7Lac|WrL|6Q{ShUZ{gwVB8SB9GNry?)bOamo*r3uY<{Zpsk?N-=7>z7`>;?|!xH zd28hMw^7qZ?fw8)t?JpugFi`kEG%759&D)m`%?N6c_=?!l*+S4;DV_)OTIHipARfh|CL=6y0T^=wku0&8sOh`d z^eAecVdQ7Qn;% zrYbSjnctcEt+FTl+Of{X@PyH0&Aze^JPJ12ae_pp79I|};JpDq}&wg^v z?Ti#;qeJ~bQ!3AC0{mTa?ptLr?fUCgS|49N)Shtr!aj|~aW!oyTk3QV7lIA{4!!z_ zmy^t0bew#*6G7%%fY0Z@6uuP!X)kIILg> zk-9uwnEj*?E1!T5%8m!oA8>Uory7uvQc7!6j4tw}2fPO@vOe4h4&FNONgC4gVQIH` zGq(xyn1u5ttPz(z6;=E=LHo53Y61Wx;Kwaq1$1P89ze2kD9!oq zWqwQ-Z~>1&)ox_HH=Ey2(+cVH2qxBn?C-j#Tr#Aqa9qA;o#E^inJ1HuZ3t>D~6gF;+Z1TDz~Mc{4d`tzt9Yq8!zHE6H_^I-(XiqP>G zD`&qVViVPyxkV(%EL*v^_4mzxc1O-uhuee!bcl#)8RG-~T0Y^&#IK^h8^7WFw z;}@zdF3fmzxDIJFcU+TmJ;@bVHIq~q!A!GVHqx0*s-!lQc93im|MRy(Y<2Mi& zJO4H0vh}m{ja(=s9)l-~5AVl)C4EWUArI6}FTqR(%Y}iRwj2lSg=Heo`SW*6Cg|Ks z3r`coz>YNmI%nBh|5ny;<2yinn{>d7NYiPGs(Of+U58@`kdEcIh}#iKAU) zVY^CCN?h73Fh&2i)HqTZMm{eANYe+9GxiV#ZAYyEM5;%(U2F)xB1Cw>!M}QIJM^ZE z(xxtSHya$rh1Of`PX0CI!-%c*2=c6Nmq6|rU{sO&i*L9f;<3@V){NO7JZLG0Y=ZLo zX6)6IGo3i1p`eJb=Cu0} zMZ8#xiPKAn8rIC3xuD!=!(rtfJG!vh7v`G2 zG@67|VEi%7kp99#pu6#~98PiaAFGo)58MTWS{8PHaPZF8YB@{dXdN z6$>kPABn42YDJ}IhLFK(>{ME@MzaL7E@U95-=u`R=$HU-fbh-e6cEnetkLSX<*>s% zYz%$|^vG;pK*1usmjRVa&MNyl*z1M5kU3xr*6xOm&2!P}%+T+VXsp5MDNYNaw9p*p z4luSCAB!1TBjP!R?_FV`5G6UU^+L%znh zA&Kuq+*A9xw#Vn>`Koe6Mn{5#wEPml5g}Xmxc0-I(RU;_fjJ6glON73@d9{l=y;;P z2dI~#(Fk>?g^>ED(6>3u!x7N&SJrt^k^9G@xwNP!K!6Fc!>nOU$d)P33mv2MXMpeC zM;NT&q6!NJB?O-^%h3=2wi$ohxPcHN;uiu!K(j}7t;Ad5meqP#)jLT|qNPG5S->+_ zw!j)%AyZl0pZ5h+Mfc@OpVxRW++uZcQz7C;^P$cxs>gWR4|W-2%($@X{| z^}rL8{23T8g#;i&_b8IOjRh@piDo%4pom*WQ_c$Ob05X)ZzA9+*TjT67io?|-V%Mt83WvYFC8;XT(Dbx@ejANeM2UfB&9zt+pFy) zs)3nun%AuHj&!ZTx>b2JZ4(sfPFYZNnsAGSXNPG zx!{#di4Z6b@Z-frjj0SmHPRu(v1Gy#ZwQ_H;*uX z`M&XImi{P3uD5cwQdz)HJt4soynaF5FOqR$*O6KkpzUn2}7xa^D1a~4IQrUC)I z<~WkpQ&A|eq6?{VG|>I(ro@PM2MKYQAdae0*Q+8G>(oMDL97!q+&P9kgEygx?P42f zxt892F--VxJ&V2#g6z~e_0*O5kyP;)36(NBz4`XT>Dvs>n4QeCpI_3KbtHboZ0a)R zlqpd-Ba@?_%nj%oFy8kypUI4vpVgEKlhr4;L<x zcSdXVNW(SeB!8M6{7%)rvXHr9PNEd*>NSxioW_&v@BVRkLAAg5$NdV1?b9E37Yg|c z*X{gH66^s>%7S%WgEf=U?RxH7;q&GlYum{TSL)s!5(t8H2|gfD0u^|MKzY1dj$t}M zU93LfT9VR!0+eXJ5L{>yXoEUOfwPcma9`RREGpusjj+!Wi8jl(&&ZCSBJPDQ0?Hq5 zYCTqjjc_qvzKR^dF~e4I-EI>77S3&7P=c@Tdoay?p)GabTt{`zzKw>5b+R}&O-0r; zcyjauWkY=Bp@mYGchiRiQzs>J%xJPUq%~Nr*CU}c(Pp`#GbRAI4$ak|yCS%Fw1p{t z)5!=Yba5c$=c4FnL(q6dNrNOGLL4XW`)I4rp8GxEPN#>jO4d~$@xS9kuKR?=)s>JU z&YiYNmPpts9sxRBMbO2Lh9oc|ImZ;1&RqayadC#FYL8}7Fw99o9)totYyZqfl+D@S zvvZmXTR!4EGri0hoT?7Lzx7e3CSsX5Wi+<1pC{1dNEDhGBw8MIBli74LSc3tr9i69Wh{kp~AQd*VM&Xi7 z7ub~R$eC5d$#~ZWc=$H-p^ai)4L09DzMY`i`Ag(MLNVt2X%q!i?^Cj>c)TiG&VOXb zxeFsJkp1`2yri;KlZobv&X&Vk6ODYWD(gl|k^H1kjc-s37s`)UFhn0WFg{;;{(T*S zFnwA7DNA+9z;a1b{*^}LFvAar*u>0#V?=Gj23_o`&96!!j_Jz15U=k%TM9Hm`Lzbkk4|6Ec@W zrwd3T;U%aq#Zj};rcgK$m#S-!R{K43>NVhO($rv8xvy(Vo^P;P!Y{a?!c@$B(zcFY zF#kEMH^|cw(|2^NOMe(R49tosmUq9w8WZ2DT-sfNgd*11-sC~3WTQ>zWXD)efYZm+vraqO;&HXSl`nmP;OK@!xdE z$(6T>^{j{{TV6;^7HcN7C2Z%(V?(9dnoQ+^ynJW$Rabl^ zBd;qim#oTth$)CX5w1dwCz@)OMfQ2k7uA$CvtGY;HMao-Cy@G4U8i7S@SUWhD+@yn z)wIaoc~*1Xc-pZj+YXQuhp;8bPPzU{Noe7u7T9qB2jUg5u|BQIics5_xom zPx!oU@41vjtHPGBYo(O_0s;D5ZSPq!2eo2ykqL!cBW5LtQD%Y1#KoU#7U*8-XsVikhP{r0X6mg1CIJtf% z;X(#e*^f%NE?U15e~9NOa{F7rfc!qG7!~%!>Z!H7@Ij1l%+FzLn~UUkST*j0>>Ek@ ztRri+nN5h$b=WY!+}bY0R}6fCem$P2Ts~nW?R@i!h6I|gS4XwUxUJxowTBHg&3ojA zNv`C~3Z3kL#bO&Oo<5*I6 z&`BQ)$#11;=UaPO59$|u&YQt&-j;vij$4BK%la6ojXi3j>kQj!JBqbl;l8H4 zFkOIIHJVw{0cc8 zuLuVGGdzzsTE;p>@f@MT?DJO8IqUD~6CXs>%^!H^QOV?Z!(mHjf>W!AbL4o(RLS##SC%lroRsz1I+Tf zt_#vZ`2y;pK&I!>&poD4i_1dI)JP7WvVJ-qyIBFtwm0%p-~WUCp0$?&L^to1{aW!T zCXo}W6e)$ukOf}6+Jlt9P6y?fsKpNV)t(cz#kx|S5{zdXUOri4gGf|CAic}E1^!|P z$6_kbdtsCv9f02wgs*#`?!@S`wFs!0^44y|ibr5HH6Pt2Yz=UL$+461_5ZJ<_W?nQ z;m{_5Lr5wG=gl>Srb&Ntleqo1gZ!ut!~A%+otc``kmzSJ^M`-2&tV7^f_au1Ka;GF zOsyDZ`%`M6`h{OVJe{wm_DT%XWU$S+jPDUilNj1U?ah=a2)rVTf`!uRJp}-7+ThpY zk;gFb*+_gbSxUmpt=;;C5zaOy$Wk9A&cQ+QRlmL<%e`!{ZFLufmnyu#0RHf>WK$gY zkR=uhZSlDavT=Ipfq6zFc z#gssmJ2A$5RB@wLrkH)YD~osx9lUn##yEj?j-yUBbU0Iz?Azx~oKvM- zHZx*9leAaIywo}X@EmZD;<}^YhMy6j(mf$XklNxPf>k3+qX-zJ(5!N7{J8HDm8Tl$ z+>VEIxXO93{#uAj;uB(h_v>xkFgHXU(QQj6?M~8KHecMgZlyUdGsf^P`$ zi9q58;Ea!tD_g_r^0SLHq1?Z^j~80Wq~u4Lvv3|Y0GQ`*E4(EHef!cm2^z=PPDYAO zU$#JX{Q#%*ICt=JgtR*uXg9Ansme63(T?3D@`@aV(oBxyu3#0BQ*({;nS0gY1QPh&nhNmBLOH8xhx zZ^i|cbi?iD9Q84*`;#DehX+D_I)&_4#mUUO0II#`MR_0Qla#*bW`^IY-VW4ET}>WA zMlSRqyHkH@)uo;*iBn$U>A4^R|KgP!yp3C}a}czkps#>w&v3$PgcljDN4<)oEFTRfptOxRU$?7Kt%D z+z5{??VnHt3Ii;i)L?^s13DR)2hVg_2!|LKK5@w)l*gh2XSgpG2@1y^wdGMQV%UU&0?Gb_AiD_;8K$>uFI%h9?*3Q>{hUznz`If6rK)eX9`BPT6Vplsl$KYq zDTB|xFTLYcDkV&Zyr+Whhm=ZvaGr*#uvZ5t;c&APhanmbcNeJr7P+MZay|I`?2O+G zq*#xEw0Ud%n3M=u3oxe?)<_Vu1FB?H-~0wQ8nB(e1UJq;yg8}M7hQDlZ1Esr;^Ih+1SH83uj(gY+#AS&bz4(@ae@SrLt^>$J ztCu`<1kMtY9{SNI{3WB0V5QSO52%k#uve>7whUPXS4y2?3I=ocd@gEYFWs*6ytg-I zhhKVYnXMf`hfCOCT0>b}`+*!V@GDuSDV?T=Nz%_=R4)eeyC;Oh-zp7#1a_DFC1l+^ z?`H_1?6V1kQg%JXYI4pmM*c#>4g~#qQHLyWnCj|)iS!{b4tFLzk;R7fsXi*2Kq-I@ zMwTc%_WmuwUMFvxc&Xy;W`h_gG-3nU@RBB@D+*U(cdnZTJPDnVJ3JFqMN`@+Q#8)~ zpy2p51(V1UxCL{S-xM+9WLJo=Mt1(K=}V zEtB=-(x(pSAQ5!t!1V^!P@YEWhwOAf)q05FtR@&?c}(S|qBFB9hv}CWjA%JxuSqZc zrLIA%@f5L-RRCk|dc@XlWU;#?r+EPX)BD^`_|YQJUwN2=$~}^RRNk4_WM%zhEIFsN zK_|yj{ej9rTE`%li4}Q`RT!SLg#32DQa)Td*ID{JK!oV7SS_hA4ah`$V*P0>SKPGs z@oS$tnSf%rGmR>&*9#$mS8P-*n3Myf=LNMC6pfYh;265L+5e%X8Cd)9GjG~>It@*A z(5&LE;|fbTM2noJ*LwT_pg)k_*_YXGET3u6dX$#)4y0;neU)w7x=!Z0ovGzi4A~!X zyEc6}wdH`F)fc&8^IRw}KxCma<9k0KAiDxsxkr{Q)l=kMOMjb5fV1nnOl%dNeJ@C& z7p)SAOq=hoPnpnbVIwcmv%@PiJ9KE)G$U@gey9yV5J4`>MgA-kfJU=MQ!g=syp|$( zUU1iEYi^XBu<#o2JJpvO_O0HUz0^Hx4*WFk#V6S$BVgwvwWL7mmvv1~Z=*BlMXt76 zjJfgl`FZJAA$j3%rTTLC1=r@k zB~Up|V7~xPK(W7J7Ck)_I=r@|y25*f!QwDzxj+f{!qZVvg z)gh^tqf-?FW?{0Z&)aNty_cBEIntpPwE4i_La0YFp1mKfDEy%xr$+1C9{XIHgRN(0 zl~*3RW6fZbA*&YEO#&n*#)mRDO!Bh~)!u@=eBi`+b=eC_@&` zHOdz5YJH$;4f&n=cF{Z5Asl$vVGccEl<<@QSikXU!p9LT+F=C(ZtBi0%X5YsNsuD6 zSQyH};qOU=Un>E}W^!u0v8&W&MCc97 z_7pPq5)0o;7+K^Ku?|z`n06s&cPSHBm^aoU_J6#K(10B5U&`# z+Wu9+E8H=Iq!k%GI3WQBlx_pa!OQ2$KZOev&Qs%2E`VD~u+mg%tiRA1+}elY3_L89 zU+6mrgezZPAw`<*@Pq>FF**^{cL(&f2Rm@>pp4C9?PS&zYiRLjZVM>zDaN~eF z;c+uwc!H8(ShQ89URRotaO;=~3l%@gSA^apm93K8CGLbho_Txn3;Qkbc%h5DhlBnp~45FT-O268=39h;D` z3#CshH9V5{rFQ@p8$qbnmJ-vbmvT2+4#zP6zM>y@R`T0aV}kLhL=9i3^#(@2QE_BN zek9!&cvkSuJH|V2pnWkbDXjIe{%-bP%B&8r28B)wvX;}jSrH=1+9S*Dut;4efhsMj z6;&b_2mmn?nmtBKtHfpCQ{=c!gXL(_`|h3i3qOmS(o77Q2LuTk401#c%loW{m}jnv zqUWE=0aTNhFf&6Em~SKH!^>NoFoFNzhbmhb!xX}1K%p6E8skbYGOK>D}(H=^h<#Npr-nId2 z-V&iBWcPrKw{lFH9#KBTE)vEBfxAPqX97cQ0p8zJjFZJILF{dwrYIi&BmB4@@Ud1U&Wj$z!y~G9$^jxG51$7F ztGo_tKI_<07~dE+4ez?w%GS3;fM1lAFHTJ#n|RQ8FQ$QYFh^uI#t!AN1F0Gj9)i~z zQMA@QkF&;a!Oy0XhH~6ZiZI3@(TgkzT1|bt)BbqU?=?0Dq6qdOom;(>Np*MkRYgkD zvLECycc`u6(5<34Vg*Lf>zsCFU+Lq-Q+&DsgrE0Fmxk$MJ|bvn$GL+DkXsn2dIe}L zddZKZ0owGjvtLXFg6o$P5ZQl<@FV~v;quy-_sexJLMPgKayH||DTSCjF8d7?8E0DK z9vKcTRBYs`6UxL~Ni{&V#cEBFO;=zV^}yxq%#oCgK?ltf0tfs$bHRk%1IxtzGic$} zfpRsuQ~e?QZxLOXB*@~?iRuU1O#zCfgX;(%m|NYVKmLH)knIwzV|V!z;N#yFpSrmR z)2wufw%mYu1JS(gd$JHOeT?zEv+d<>KRl+2ySQJ0#$12k-rl0fTFiU8 z(%*dJSqyfQ8%H5Xq7bYA728PtR|%upyWA4`Vw-l^KDddO{d1VPWO zO~pU^qV`kIl#f+OUOsngnJ$5}ZSXT-h;4%du1n#Atu(n)F5Mx!U++s>lD-7opTv*t z^Tf}F<-tJ&3SJ#fh*q;Arf6o1}4BMC#PwLzo@C66GF+*m$ zPz0JfALHsg$f9pC&$qCFF`0`n!+tU%i@o6UV`ahUfp>-%%9`O-G@%Z`qb9X&wN%uC zBeWwjJ;Hv39d;{9djNWbbp9@w>^X?MoTwgHbd7~d;3?v%GBkd)njQ9w+yA3G$GW(AI90a-!-r8rO-1K$g`5-B_qbcQh z2wP~;>YR}byEo)p(N_6k8geE;SEI`1v3ON?lCNSy4+3#EnVX&Z6m>sZHYWZY+8Yx( zpGDZs!bKv9*E?-$q*3|XZ(9Xt+u_*<7g(hwzW~O$0&v!vvLi2sM+lJ*+X{n8i^4HX z6@x#*CGarydIr)LUrh_`1ae&O*2+95L_AFfe=%j%!N=)YSxFmh2f}3p`w1Cd%nIMs zglB|!^bbARb1Vl+3@hv$jWAu6Yi1*wT>x4lBQ%_YRq)E_2)Ps zKjT_5+WCa>c?I%vu_Q^GTIa}&*3bvMH!&*nSkpL7VV+kKCOz73NwjMa4Y10L8tY~3 z#C9UxwCV`!JZuE{H|vnxq}YX3Lhe(|s?D$S(cg*a(gdMGHJlDhCQN93OACBJ5|sU2 zz^mX?Vj$g72dj7fg23PuNX!|51J(K_KVvwS9LW{uDv|2e`e3LPXE@y0;t`U8TcNtWW4fM#U_i^BvD#I%5A>b%M6hXzMTdl*t-@m6Xw_7KdLq=J1ViFm+^CzS3 z?p!ute5)1gxl;OT7!OmL4vg4*uxv0jS#0*>oFy6R_%RP|k;x9H`(SOsc11x~4|Q78 z(s_Rh(E+>j35*3^yxRM5kKpjYM3z$FNW!tn>_@_^0F7+xA&LP$P-GER)^F=RT)v=d zZmk9?zt7ZxFuNkNgvm&xkW5ku>M|7ez1I>Sl;%fYwOzPec<%e8#Rv!&ZE{e?ujlR6 z(L9;hP=ULAat`zO&h+G3%QGj^=QEz$M~}4Rhp)p=n13#p3Kx~Bw5E?|DG}vMa3{bl zHXS)3xuME2_ZUFYf(X4h!Jx5D71m&)QCt!jFn8#HbE%{qAe8l}xp*J$gz?09Ibel? zi{L8kEaA6rTR@JP{Wd#{9L(Mi$sc_NMB($6ckKPAr=_OHsE=LQQg_;0tz6-9@~}Ne z?Vyw`&=B-B^P`DHHRROITS4FcTQ)C(#b0V+YwZn;coH_Sk&Ft2GiKb7AO%;ZDi8o< z9aUu6XU`Fje@P8^?Mc|5WGlGO6YqKc7Wdjn>)RF3)!spH+US=hu$Tsc4Wt3UVA6s8 zGd#4ktFdPXSOBD!SI)1+uaJ_=U468MFsL+7)2Pmf;sCp^re|#Y| z&vF#`#j}J1H^6Ox$bepCfB}|qfYmG`Bo1A&<+c-KJqG0z*7G@W4nYXOeo_)U=A*-k zu^J3aVMQm6T|iOt5@&B%j@>nUrLqPg+lu9C<(;96+c!#y3GvAuYwqCU=F-AZHfk*< z^TD<*D(kp*#Al9Yjlg2|vn|Nq67qD-{cMMOe0)!W@h+Gnpg0P(U;Z9NUg?Bi@--Gf zicaMe6*^`wI$q8tj*!Kz?aX2b^nX{Oli0xJAqvuj^>JT3Cm7ry;Py=sBiz@$ipvmNMME*_(&+jHLW zhUN7Y??|ewBtl;ft^{4@Z>_QBk_Fz)1JLFn{0gL#G=G4v4X1ICG`EQ|O05I!0!+IW zOv`N>DT}03v^n+zRm44rJ3H;+!S0p~OCGu`HgaBMslpx-pyM}DS= z0;+6_DVjC9nQw|w-o9}-Ea`CB7K(b-!N<0yod7^l2>0{036D={yD>F214ta9H*;-D z9@Ho}x>Ox2;Y?b37YApBynwqG2V?WUm6Pm=o#yX>Gpc)2=6*1v5CbJ~1aHC<=Ubc< zP-t+9*aEOsmJm`xn*+GdcH?ir`SEeZ%zT;Q{H4T9Wd@0JjN+-&xj2%eQdP_k4Z+zZ zW$<|gVqTu7z!54dY?CZ?Wp*(au;BA?A%yHJvqiv-x6?eskKmk_;s@A;hrQ5ZN`Msb z;Z&}4Uyn}UJP}*(j7;g+76#bB;QOfjj2wos{YHO}aI8+#pz5@F`OYw;Js&GYd~A@5 zzg*w!K;P@6MmO%x z8{LDRb0Av#TQ};m_<^16)_a}wShR6!h4@i%$m9&x%Fl={sYuv|V5m>DmsW_7D>hJ22vNLp~N#AUzs%N(`1*b2zXsIupV z1|2hdYlSX8DXH2dJiGFBsKCgTwLADlRfj*7X-h)xwI9X1)+7S1AeYQpUlq*ccMNUZ zVd{INACfnt$(|)B?oN^S;0&AZ=t|J`JD`3aki9q%d_?lV2ys2Zh3guEalsr8=EjcUAT3!T(s7(wj_{e#^lLi?T_@vTgu*}4?yxb` z0lZJFFpkfjx=dnqr43+gb&KULAhUhWXCN$-x-EIFK*8_GvxdHtzn0_Skp>t(0H~t` zncz$S#4%XzsT_+SyREah{A=a=5WYb=S(r}n8hIG49vd|`*|>S1A@BMLiZJK-Kuk#ig}Vbg+h?;^a_0142a4C zFPFn8!?ZhkWkJdA)2uK9G#R;6HGlEt=b~GT(W=@WAXMVc=Q;~2T;SqEKF*zRYh! zkn|9Z9}SiKN~SXnA18C-@Fmy%ZE43ZAiZ_faEzBZ1gDhwZ;pQUlkzN>Gc~q2XQ8{>4G8=pt2L0otLeMUY})X?SB?j(d74io@Nt8LiSJFcSEE`{;vcuB7OqgE zs>X@HWt$K-wr7GqX9%9Os!iIdvaY}D&^}z8TMMWW1q}6tkueFo9tWJ8B+IJOnHDv} z+zs(JYM(FgL(aE=QD_~=dH;2sZX7;I?CONW%<}2xfcKHyXjeOG{jNqVGy_s0GLqfH zsCP#C(I4cuAs%K6$TWY)%y4mR{e~3@X}T>un59FGy9a5DjhT)R3>^nGu2Q~^QqTuO_CciGAxh&yVJ3SgBn2wZhxals64{0F z)pqso1mhIjdsHClI-`|*XGLV_5N^za{50ytW2H>cg-?5p49dtJ*SabvvZ^c4v&+i3 zUcUk;G?J(YPNH%!*g*zALc9i-2mSN0h$W5Hx7-FwB{b)ERZOze|4en1pFgKl=`#jb>I~G7mxaTotv`9{0K92|17cUu!Ht9{**XNJ`VjP;~0PJ z;dQ*uvH!;P<}xAz6JIHyKF|zI;_NoZ>7HVEJ5UOeca>8`>33$+@f zf&3SG*wNL#B7n~+`L5H!yuO4n+9%d?C7dJXMjq(r$wUeuND?_R$PQUR&hl-5imnL1 zU{cvPpd8q-Kz&^T47&$@Oo1qTl%iA#oFc~Fn}<9HvP&#GV{y6kF#;ykZF#&y<>)&d zluvgEGRCpwx@!x%jsL0eEt>_-V?pkWb)`9sj#nX{Df6A%%U}WArOmr z#oTpf0cF37S%jWwoyaD+&eI$b=8muAd))51&kCT6eBdDf*cp6WKov3oSpImI5ltCJt-!WvU~W~F%-1V? zrOr0=7MuWSo=q3E!xFOWudCZ)1GK=ZL7NCh!ThMETQ-sCCex2WkkEEtk8E004XiPf zAajyY!QNM0`h|&2sHKmydh;`Usqr6*SC9cR+$Bs$)T7q<{ylGb!*K4(Sb~8fcm_a+ zsSaXGXqs+|#DDd(g%O`D_L9nWxeeZ-d<#=%zb6*!(mNk^q)WDEpJiWC>#zD0xBV`( zV&9*iHNWShs?`Uq z2T`vED@8pPc(U|}x83}qGHG%`rIwW%2UUK9b<-joZdu?P;kqEdH&kL5}T6=y$1hvN_G{0i^; z`G{wB7i?4f?Gy-)BLYG!vn2mH`)yr3y4nDu>PIb@FA;vot9deeZy_oHC{uEWGA{rE zd0+q1B+cJRuvVc@B$b0LgKNlzPMSpW4&d zx(=XsGe1Y^H?S>D2@ry}Iu0l`89QQ|b}GaDE#jGt zmca6_J@Z^t%hY7{nAr&AAduw#XzOi@=iEQHlOOoFcAa384uAhU;R|(-@UVnZ-e-jl zS1NW2i5gWQInZga*lPsAoymU*5cU?@?}0igZKAYa5i+~3L8G6$py=seJxU2iT3A#S zRzv;Ck8Fzp;QZ194p!^;3&eZ=IWt?1t{SZ>b4B1wj&3ZqkE1_mO6!XX%T*bL3<1W$ zAw_Y3vk-izbsFLp45Im&Mo6UCY#AvI5|`4#1u4LKIUii$J*tZ221;PRuDaS*pq`4Q zJbkJHGSG_%=EIDGMm2wjnw4)Gy7x~_xn|=)%C~0r(#1Er!44tE^n0iBm6Y=Z8kl1w zS(Q_KtkP8}^2HacG*JirqpDC7Un6hpJ6-Onc`C4>aG!L>?4bM=J5>17y9BCOSCL&8 zm+zDGIgpz1BRm=K-C<*PgG$ke2xV=c2U-ZV&5cb`m9588;=a|`a=`DWwZN=F+?Ig1 zQ2RW^o2ypfck-euV?pWDWqiV_M{--t@K#$EUu&9>^_M1lp!3;}TFFA?Pl}{rqt~<$ zPyMwTUvZqpY`D64y#^^xH!7uuXXDfGzj{wvO+jy<*Z5K_I}GePW?|PThgb>{W*zR@ zaD4NI!qNVXevzv-o8iX|n4?cSMAh~B!?7}Ptk)5(a!8^tg)UzA)f?=(kl%A?OF9VL z7LPT8viJEByz-^f^rQqgV6kub)lJWa0Fw?g>`fKS&)y~)Tm!99sz5LR0Ni$|py_@g zNisUBuMEZ`nJ{QZr2@E{lpZbq4=F(#p!!^ADxU-eu#M)(`%*LwnFLK|{0%}oA)P(Z z6FBn5I#Iyb@x@%A+xEmA1eZ?YB{F9L1Gri87m`zcBNJ?y+;PiY+x!O4D<(6FP^h8%5)eCBB<>^00wW+fMdjX0 zJR9oo6j4ZR^bA$5{4{I+=x+m%4eHQvvz)x(&@mmWk{%I^u%D*j^ z1|l`psh=%^x231hHa9!sMpb{q*W%d?tL6QhT{+6)CWm?l=e?V6{#cL(Yaes65sF$M zNk$>7+{@Ie+@u6WbF%@nJWL&CC0j zQ$AA4{sPC)Xs<;_!Azs0dB9%$hVYXi>@o}g98+LwJ&M2l4qerf-jTJJD1lyWovEF- ztznp=&k7ZWgra&ITkG1U*hMlE1eHjp9+5JaMa|Nw<|PC+FTp%?e#2;#})*?Ui@Zif$0`^+YvKVBmUnJN=Ep=|h1HdlT|Lh^nNWz0q)Ypv9u@&1!mVquD zRC!0vx0;HT=bjv}@K^o!+e&}$(bff5rif8?-8SKmopYzGbb)WmgfhxCv4D zI_anM(Y@~gL7b#{i!mX;bHz9T9>DC3Mi4H-`^cIAINXR-#ms~Y&4EB*2eHA`rZ zS3X35OqK%F`AX0Lf<D!jPOyOw@Fyx3*Ea{DGAh;m1pAT3daq?DRF6?NuyExj!7q z#bI3X+yqfEw?8=gbr*`0sbE_DB<5=4ubJ}ZPIbq4D3SnnjH$f-jd)lp37 z`qsXe4SZ1xd<)bM3%A*cQ$>7JYfyV1ooYHQnbbLVj>q7AcpY5dRZbRU08CiAQj%&RS@lLE(snvJ{T8iajsZ5 z<4m#7F9qMp<;IzsW*vy2f^G}ibIyOA0RfNx>D6B&1X%a9(#k@5EGZj?(a)$gkCNh5 zW;HqK^8)_y>DQS7G9MK94EpE;kEpxH_+I>i!W{YspK4c^h72*X$*{+ttrO!btr0gC zmnWxOp!7NjxTQmA^{~n!>zSG;atS4D%flJ>yAlj_f_?X+B<>gZz{0Sz@{LB)-@Un6 z{-g&le*Y6lZhxg4Eo9nrzon73$JzaS5#Io#RI@Z%k3%P?BkPH};IwCqT400m2SwW{ zI2No&ykWJ*=(TJ2r(%m@jPs&1EH?!r?JSBZ8O&G9T9?gQ0s4&JHA$?D_#?7oSjuvJvBW_C7~Cg-N~<-B&@kXrh3^VGR` z1QegEVoMx~09p<_vBY+TPoc}~&aWXpRyi`z*?oXf1ipYf@(^ig-H_)&4DK^SxktPg zHu{-)E#{cOAj%JicKsBeg8NyaUMyhZ8I$_a5PPY^7H48W{w9UZ3;teanE5C~OCZ94+_&6aGLuxA3xB*hzk(sw_&eMw8e>kOs{# zE{0MmUDDR=5XI;DZBmCpGM6n==Q;0##k|wN60DFTV5((y=en}^%xTjGtbI7C>W~p- z&4tB$_<(3zPuk?x$Bkd64)haJrM02K%1AAd$gg;M7I@X6S^pAWBN5<1Q1Cf#ZIxL7EGsltFzygI^wcog!{t&Wg}?SAUQ<)lvXeGNUkb*0-slr_{*RaW>2XgOuj)+aCyFOKWgn3e+o*r1GG zA-B2jVnBzNqZxSVs#pcZvaZkZFkCW?#!tO1S=D4wxmK7Bp;WD5FHBQ^&yhNxHWq)s zyYR1>WDR2vPqs-g#llR9NzdH(8psETMT<@O(%wd4E>|y@enpVEyY)|n}_sHh}ix)Ezh(|;A)Neu>qQU*aEFOQf1(dhQnRB=DNOi`_nsnG#m<7<}9geDLTnonc9m!s%Ylb-RLc1V+BB#JUs-2a*f0BZxs1v2qJOwB~mvZXv&_Fw3J_e&93 zI|{ihs5{+O6<`bKG;C!8N+;Ev`!g{&higA&2<%py+0n*{n4chUEL@fQWtyYcEUPgS zK5~Qt)Wh%JRULHXbN%2rCNd1qU%QR^aLhXxUm$rY+#rUK7!V3xNV~bRx1v}$NkV~F zL?s8s_Whdy)Tx0Y8yhjVQbluonbRYrX$Y#EuM zEA#VmWINNTbn8zd;$Qf6)clOlNYrD1mr!Y{r4KtMYs{h&(;}9G#F;rTyx&Ahb&2m9 zPEJ?BH>xJPNG%^XNTmhswY*okfw!|hhoTgN^OxF^3SXO>%#=euMQ1~EguA3-6R+-< zIZtZq;wKUVw+B+m^7i27lK$RJ5tqixmZx8XP7`tNr=G{atUH+>pbbYR0!pw}XqBDA zLhjn#=OrfNS3WoXB8@Y?rDC`smb_Vzk6wZ>DvkwzFVvRj3IdqHe`P8ci0QLoPVUDQ z4VN?{YWGQ6>onB*#HLmJDqmSu*4Yf9E&?i$AB~* zy1ag|2~&pN8|7!-YMPzfUf8JfT~dO6YtgfjHcVRg5K^h}8|s`Kb;^6T-@U+#S))G= zq=#7Pprldd>s`OMPWmL@W|xxEonSbtsgzdw@b!ju|=H zmE6A_lCNp^7qX?Au|Jph4SA8DE$*zl2%8APknnsX_8GV9Yjah>?;)plPmYx!#o9p; z(_e7>7MN8&7wu~8*$9+v`)ib7&tUiPYNtOwG?}JmnMynpL1k}&6)4)aFLwgR%t4Hp zL8pp4MgKQ)la-VrFp`bpZayos-tS$}KSy#bM}4geS-%m_@LP&X*T}!wz=PzC9E5=Q zeY#isb1Uc_FHCe8o%!#Ue5{FDlTGoAi#23u{sLbw^k$7zKHIop4fn~6Z17nH9uF~J zzD#L<;+5iZggN{d%yO~ZIwWM!?zjXQ{H#tpq zbXcLB>mi&Je1IM(=}*<~lK}+E|BS-UT>O!Xb&5i@1Ha(w;dyV6u$JRcrEH8L~IULU`CMvv;YNFIk!{C*M4LY$1 z$bN9`y#Zwvbuz3WKb&vGv+4Nyxf`PX)SNee$O9cOOSBX00ty4Lm-D9Vg~rg?CgCA6 zeh*7V$M3U8`VO{5S%ObF;ftQ9d1)OJ3+u~xMV0-M(n7_jOH)KO9acGu=I6B;oO``I zBt-3szIkwA*Do4Iwb$`6)#C4EJ-=$zl;6Ono3j$zz+@j2{f&PoMh;P{yv(AvHVTsS zhBc`RLck2mPiRfYvjSQ8=8Jp0K7iD`fTzm+32bz;MmCvLG`&B;O)$Me^D`7rD)b*yuCm{o-p(=H%w zNRpulski&fJ9j8LVnxGcV3VXvn4&6C#cX{yco~wllMSFF8lhMq$(&^%CDg~!W@g^# zX?`pKVa|sDW+2a;@dt(06Hex4$B?a?$!|+UvDvCzbKX+a8eA$=5}p-ccc_;3^zf~oms^^6@L=wToo~J`Lo~(hOl$Y&1E+)cB1*(>v@#uAKxErXUXGAfI2vm0RWYVKCH@v%#bw6Y!bGn7?a$*&~o>Si5U?a(loWsWWb3+$fB z1j|ryRy~oS>a*Um{zLj77)L&>bzj;vPi?QqJwlfHbNUw`KuQY&vkHXATbhJ(frZcA z`YqgSc&m0NkDD=Uy;K5gFQCmvu)f1UKPvwrqGR6#ue~e$)A2FoE^{oMEB0AB&9$n? zk~rVns#q>keN{tPQ7Xy5QCv50-esScT&~aY4I4K1R&PzU#MG@xID%Z1zQ1{jJ`~>N% z(P*jhmbvfx7BM)iNlPTIjcHy!Zh>uvllhj3uX`ZQ1GT8xU3!CZxV#xi*R`2*eg7Jy z^F}4XjJUw-mg3$pSBf``lN~#XHUTL>SBQ9kdS7kt+WsUIhvn~VA88CuLx!RQbwXm` z+m$uwj&f`bmRTNMXCN4|zZgi;IEBVN`vPG4$aiJ_tUI@V*^B*e#-OjU-Fx30iV?k| zKmf2j$OQl-2%S#FcFI3*@s3O65kV|VQ}ihef-PHgQHj}Vp7ZsF;S8>RQkYm7?fd%8 z7PPr$s$c&22oo#&vZQl$V&eV82vlFwWb~&25*4!MpvCA83FkQhedZkqQfRaclH6-h#Oi?KaaPbKhkbzo>Fo_`2?m{YhE`IK6x0hFWov{ z^g$;{+1R`6ZAu<*j-L>4D;}5}^U%(dGBu62eKaF$&p?`Vj_*t!#t4QQ+SS!8`6ZYg zBU4F#L^Hnp=+}Qq6F(tBReuXuVEX-|YuTj$*382M?jZ7Z4Ta<@EuRB6VpCgWH5!NO zSM5c}sXB=QFbFSH3C||G_!P zRfR1Y+SL;QW6bQ+QDLrDB^%Ug392!F<(!XEOa^pRt>glFQ^Igj3*TNFHI3xe4xl(X zoMQONg(!R_WGqzR5WsA65=T)0bLjR$+>72T61i|}qA>5L<=nF9*QR9CU5zbHD#7JX z)DG)+K+=aM$&_lFo?&B|^GR?*NHEXjGeAnl58p5#TCe-0Wv9BQ6Ple3lIA~A=fb5C%k{b{ zk%G*KBfP1YjU+D#c`F@oIl&T(;j0B&raA%|mInX@526AynvO2>edf0xqRaHNfAyw1 zMq3yQNFJ;jNhSS2Cxf6%3|w8493Z$qNIRO+-++`-6wxHkS|EDbTRDnU@>&YRfp7jL zeTTwM<+&y=h~S65J2l0MFP~*R#G*=YOjycuKs8$i#KZXnd{wVeP@-6NXSw@J@6F}+8l3oc0b+l_VFe?gSLuBrf z;h{L`FQkJ@o?)1+i7N@kok4ITv!;y5oUd*`|K>I zwZ*Tq-D>vp07+!fR5v=e==ptVZ)VS=uVxBKK0GI?c|Vi(u>r;-KGOw&deOZLkAN=; z&kNQV&J#eoNki!IJhIuiSDP(IAb4yKE>t-fLs0n?_jt-6#-h-tdePvMdnzKZiO`j14{(;oYI zC(!n-NwaRXg$Gh>j&@gX`CAzH@l03PZvZD7kr@ZmY`f!k^2;LqKG(MJ%Z2W1c@xtN z=_mYRB~i(bgWLTKYKUUzSvIc6L`9M#3SlY^vcSso(-!O*pOKgFPH-r z3aVdCbb4ouF4eVCu-hK_wvlb#nAFuF}a#9R(>W z4D>fw`p4g;10-;BkRco6nqn3lq)=LYeQ|I@Gq_VWX;`YIy+Y%IvWy+)Vx6Do|K03n zJ$SaZ@%f`tLzr$OHsVJANz*M;-ry4qBo;nHFk&W1&sDs9Zt${Or~=Xon7^CO%&oxA zyo>$(t9eUTcW1=w&<7HDDmyRI2M{k9&n~%ZsM;ABJ+tqAW$ACS`wD}}L`?$* z4)2n>d7yB|l9YIPxf{9p@`Y%W+>S1aGI`_V^=MbUG5A5f(5h#cS$J&GQGJMl+k1Hw z2Z#fDCi+dso&v*njX8=q@8=VZf-Azb(<7!`frt<}`qp7Id*VR&Ll*U2j&pgnlCw+U zDWD!Au+S=f zVjf*{=Q?3aG_A5rQYbb*gZygWm_rLnWgZCk5SoOOL>sk8@**eem2@vNYr0E-NZj?!5l<90oiHKub}bp(3*0eGQvrm&2--T}y4u2W zL<@c-%&M^PjL#fpR?XvBU93W4$hO?(D*5JCwP>#+ z6~OSOfT@SOyq||Bo9%qx5zQ;-W$SYC+3Q2G#VB{P#c=1{Aztdtj2+5Cwg)URQsu=t zCnF1iQM-9r%(lVa2EU;%jq6v&UK_eD(y>53Fd>Kxv(-3-9=Ps-t0>~_LH+k zE*KR38SQbg9yP&w%9IC>9*{?J+rb+^R7q?ZR4KHMusYc!HiL;PA_K=SS5iIej;;s5 zl=}fnWB~Cfal@af!impY;sCPeBf$~dRim8mqbOPo-KP~Dq?v4ACV5O-wlcT`G_XDI zGjp&xs(QoNCTGUX3YTi9Hb3f|e?6M7&<|EU`8g+n_vXFm(--yy!WVATl?%0-P+|T+ z-UQti{VIPe-2g0&=Iu+;g&!Fxk~{U^MGVR7_*&{#fIRr!*3Kjze?ExQ9_j~-%Pyts z7{uW40cBK4*bl8ri}?Xj6&Th*>UD3*D0vqJ`=>9Vexid=MAH?D1speHFcc1yHCG

zQN+?&fjhudl@ zbmTm*%J_7XGs4~b(GO}m<){~4tK|pZiUd(=9H@afmW=bNHyT2pp)*1xyS-V>_Pq(w z-zhz7l{H-}cDt>1X^SM+HNv8#LSX3#CNO%RdxT6dX~`BIAuE3G`HDQ| z0%bRd^0PT3e3_Roh(?PE62-E{;tltp-+E%$m+Zcq881$;GUppIgoE7RNq@EnbN|`z zzo&$`onO1$o*pG zpZz(0W}QfU{j+6MOxT>tz`eQ<**Z;!Wj+*pazj!V^IyN2EHS`TG+oh1!2$qq&xzeG zRQ$XW?AZ`jC%navAd3C1Zk#hu_3Czw1bf)bcpqnTpe;xl@N#f$8BazYhQxKj#K`OMZ4%!Il8E2>*})4T zX}&~=W+2I^jb=;CaIhMFB->ZYr@w#5jhe}YE(G49M{XF^M~pLz2b;Uer2J5zc9OxS z3pRcz6P0z@kBen_-qqEL-+?#SA9|@N@<2t6IjgO#jMR3s%HFatH!~~cZR+#9u|@&1 zINkU)ws71*SrEPJHH~cv5i1VH*CT9M3Q^b=a71k*bCZ%$*~n=f(n040wBjH?A>d7s zz#sNSA?MO#Ui0#2fGcACPKj440A;Q52PD)xQ=|tH0gmGRAc}yPTDzi7LoF&tDT$pM zNI5;{TniO))}~h_=mP;VlV}SILhaV7yr0_yC>uQ-RA>qH*OKfuN+1`>p zCTPq23>$CLpA}z2sQ%(CX_uc>p4qJePWI?mob|OAs_C^Z9I;Ywu|Z5fRu`6zpQ3IN z<%kndd?S$m29^e4#UqrttT)K6X>abRUlt)-e3uZ+AZv0r=&J&Z3p0kM%(dmD4`Ihz zRM@G=ZV-UgG3)rkln&M+V4~Ox)+E5@>dpM1cho-2N~=(uU-1{@9fY+(}HA5oYA{={~R}Ot2fm~HwUCrOseYI*w&4%%WR!fkRU;qh1;06 z?P=S#ZQHhO+qP}nwrzXb-u`#@X=4kKZ&i7!A~J5=Jn<32M=E4Wm8IdO0 zd)y;FTK<6=`*6n!Z*NMh5>;}Uncvr|D}^o|4lp)Kloww-h7~&Q46p;zv9Ag~|8!_~Y>bgSFeA949web9Ml8f_u|m_|HDzUxjDWNt6Uc zvOigUNI}-lO1tF4>9ju=pg(%E>@WN2u_XnL%^7RmG|BGYmx*HF%-#I>0+bnGM{6lik0ITN#1SN zSWmSl$HYN35Wv_#G_T1q?bh1!boH> zS=vlcAKp%iqU1g4*gbuTQ|Vja%-z!$dy~PO#xDjt2VmZ4p6a#~X!aVC?9latM&s)h(IAX4CmT3mAAcSpJn!!^+#~~;4ch9Ld0zsk={d~0`=vdEFt}}vE@8Y8 zf;7l7dgOfoa;zn+#PGXB7}?>DKd~cMEmKSLa^K=7{C2&$pSo{MU~m7T(nJ!IRQPqU zj2X=BWCcxf(0o=v{ z{RbB$WrcyiED(xj#MNB}{`ShiyO_jVos29q0k+I=#wVJF zYKRL?-~PFhOk4o)RZ&JQRK9hejz3(y`IKJYaY zJq##@fPi0)L~IlqKSe-sAPgQ&dS-T6l8S6he3_C;no44da(qhCm~4rau8yvig^`(6 zOsZL`5mtO!T$)y5s@VkKR{%H!W#5XQ@$U=&GwuIhP_{N8z~5g%|Iy)S=wNR5tHjFO zz>(I%-r3l}otlw`g@%sC+T4c5;(uf{|H>-7A`P^kKOf{mQZZn3 znaJl-4zqp&uWSv8ZX}h*R)X~IdJW_RB>-Rm%|b_B&zij#pwYn%jHg?xj0p8i9@RB9 z-7-0kF+LwQln)<;nQ)KH)5sSz2DmvqzX7RN;}wyFR0*gH*j->ZDNVsQ=E!$A4BetrtOg9*fBW!EGgDq28_JJ&-i3%j03(xx3XY@M7VH2+4eeqVYr zF*+m{Ih;R9xh}sbJ|U&3iW69c&IDOW4N7O>CC^*Y{5!+KeYsOe**#HD&+o8RDF~a; z_h&~*b!yfaJzm1eJxA`vpgDNT=v-9~TCw5}KA1M~zEwnkmmcFK)}vtZaKdVJYshHqzONWa}v3sV!7vt^q>`^Hj3OY5v$x7hMK2 zoL{_t!b(?dBnvffNvb^$(bZ6c>Q%=)k0AG0dHKgSG2u4S>um?z)5*c(dDqHB(>WKi2)*dDKWm_uXj7@knLwIG{Z1n2cym#QGTvjQ-UA_I{`VES0)R*@p zNzfChBse5aQ7D;gtTgI=Y}9KDcf9CZWwIaC(lKRS=vv>@-(oolCo!Y=$U$pq$=qovt(R*A0pa_IN@=!K z%pkUd3jOEAG`uYJd|x=q3Afz%rlU8QlX`z(T`j?EcsgjAt}9VvaptrE7gS}34kN!) z){RLYLGdCm5?NWplLL1jLTQv_k7HY5U>>YHmv@~m`xVCOgY&hF&j*ZPO;N#==YcWl zEM-)9AV5S{!!bka&Wl#2mwY7bUIz5m$y>m1`Ahx^q)(1#W$!CzParU6aaQU2jb7vyL;6Gg_-QRz60?8dk2pe&CLd+F_Q*%-7#U;Z=F;54%) zoD&UkIM=QqWXREWWypBtyo4p|XWY%I-jY%u*kUjM=_ImDLFr`t<%6%WM!R!e^ToDy z{h21y;Fl3qK&^~ed945q)?dW7Epx}5@9uo`+MwdyN7k#cu7NT=c8xyQ2Q7RjS*+@pvrAiwIwz$qE z<5{7496J_jkC+;l(hPy z`c-@I&m!&cz8Me13EFz)Uf`V+ZB~{h_!N|oTxWjVIW|xw0Ho62A(0EXL%h-IaDd2p z2S>q^GHfXeQs^CFBe%SnTjBUL&DAqtzv}GGIH)9`1~}H_P2|vIpMCBIl&vZo+^JSP zj|pE*9sKMx@>1H}w=5S4jYBDPwB(eCgMMW_)9vekL?@Jn1ppFA2&H*z$(J3K!A&H#tCfZ)@;+z06n1#S6U=L=V&GyAXx~Y=b z=%}-o&X366rYkvmu;Bs^_H5m2p=htH7t^79Q_-=dcz`nP#_1f9149raNV6NlsRD$s zSXgY+I-^#60w54ks0acqB!x0DN}BkKi0%3MK0a1FTGClmpY%jKApijbAbxTS-@ew z0Hb!-p+Yn+^B^uFZN4S)mr^+wVIW@ueWP8NP=s2}=nvV>oBz!&F@ah}sC5JMXu+CI z-(2uZkQL|I%)`ee>v{&l5k+=6=N*8%lqcNcmKQRFbgNr##o*qVCCN_=@~FdOdOiyV zS4<8PpzouEPEXsWnNYr5oXy(dVWimyk$}E)nwTl-pxal&?KJlVti6b?NhBXt#(}N}}IV?%}(P6xsDSy~0JC2*QNv!(PZa<|7 z)_w6lMlT)Ot{TbH=Gj~fKRC5jF^FdQ09yhXoD%^Zr$XSUUKd&|p{+eJn(eWJ>KL;$ zz4p+scgNcBCWGeu8B|Y!;EB&DVYrp{RTy#Vn@u|MeI~QFT{2ZF!!|Lfb;x#xOyc&F zi#ADS^Va;?0#1IpaZ1gts|Ez0HTBu>0+O!q&eg%e&H33uL08)tEzLq?prutmYbX7{_f_I|@4Rpaq}BW_ z*7l~i0GzJ_o)2mmUdGe>r#Ig*Pb{tu51i%gcY$f@PLB86)o0gt%7{X@@7LACFIL)u z)stcL(zI5$_Yc?3HmEk z7^KU(1%Oc{fxs-PTRu)bZPVXI9)7z$q#<6&1#Qrz_u!t=Rc{UZ-#pBB9RVUh`5km} zzb_Q&LGTVSisJ^hLT{F^Ml&10%0ZAK@4Ut^^ja{m+k=I??%Ch|UcL368 zcI#On0PpLh{>@c_IOA3$^>?(Uqz);%3y~+ieGQ_Cj39UyhAm9Ty^!^g0m=7Ln%;EB zqpH81`yiwWfyvMIhT*nt%+1v-zCZeuYbFb{YJf4zJAeu;5crU`F0~BN*PLs=6J*TI zb+C=TB!9-6_(NJ5Ft^j3+=b5oZa2bHrfk4AZYrJ3!dN%@hb_R8esZ2Er*t8T8@vKg zqLV<}%=;P^M6iyI`l|98_EbYa+fnb?=q^@4U?BWf+&UmtROpwqU)GPb22RI7i2w}5 z;Vq5#S(BgK0@hU;cZL~}lIj-gx1}$%sX}{T%_Rr=4MntwA9C~k^lL~Y+2vCa!cdhl z6)~~(`1Fgjv8#cw)~2$jC*6RA2Ekb#k+QeCqp1MWQBrnr?sj-H<C}ZT_ifb^-h=i6x#xr|FH{9lRdXNAlaFW3;Aq_zs9|3-TJYxIK9my{V0(T2v@WqL zE0MvX2^MCWyEM#0-~I1+(0|F*P-$*a7tM=<+Xgpa*P z?)l}V-$r>FaM?0czzQy>ZEYk5%O*^$?o-TG6YX zYiP?}82wS%bqoHeV>+;BS`q`323O$@WsC1o~c^lf)$t`G8O{EOFzNqcKuWY0C6V8H}l_3-a7e z#rvTai`$QtF8SyROW3>Z*X?mGZ!z}pxt`O1D$1(>#cZ_-kxF(re27*niX5-K6f66D z!g_+MH;deExbU}*xd?*R1HCXb^DZq*ouk&hPoq9W761)Lx?RZfr+B6dd`Pxbnad5Q zGE4+%jr_$5x?nFL{WVwn=fL9pU_g zg0d_yP?}JZmdFj_-Tco#&MRpPVciChiTZ^jBq3BSy2-hk{O zj>vPesiL#!KsrzpqNv$oxqQb+M@*E8>G`K6URxKWXz4H3 zLFEP-V;--!E=wrQ_u{_;#S6i%Gy0huif;0G(N5~NfM+qVLo|65Sjb=Z_fVb&tl?i3 zlIKZtI&7J@FZ{1(WeYEu$(TRaTt^yy8;>uXU?2&?)zn#uqrXk_|W~pzI00ZBN{aTLNXehHfbHQILb)` zs8n5bT21VNu!C=<{^j3qP=cel6ay2-K)}8Ic*995W7X`zQ;95h=?aG}^Xd|&xUf%S zoYAom?O)56xi8(lJ`Ns;z77>a;me1Be_egKJ7~hX$86BRbQaIIa|lRUSCD3W5IC-xhj^R;9qp>lsXy}785Hfwr7--$r(xr zZsW2MuW>6V)xS9v4sR=>cR&Yj^)`^VWw@NOr@_om>b?2DJ}KdvV*WL=pQA&pj;r2s z3+At=I4fy(UwkrrL&^TSDn?5Od!awzq3~WG4-O23Yp*gmGAQKWVA7Id?z$$9BTNp) z7Jhu0Rh`|gy=wjLhx|vz0ZlY(H;b&Ou%GFvvlix^sdQgBczHpTyJ{wBJu1_`CXQbbRlV(9Qm1>=lrtkch2k>l|gSeWmK7Eh1^d4{LpzI>z@JZHkgGl z8t9H;LNtZy-J3Uu2Q}YLtQCBeX(Q2A*YR*<8*37T4+-QH4;cBLq@4^&r{WxFEGd~5T?0g70vHjE~J)QIj9m8F&S&y85xu6ZG;^?dA29$sbXX2 zl(d|iJD;D%vE!b--`~F;9tPU3M^%Z#&9Q4*q|0KoXM-3kaVW{!8li9A>wKanFRE}a zEME+E@I{eWBzS;-Fr6ib>Zl*MwLXmMNp_~)lKq=JS!77V%?V_H7zLcZNvKB2m8{E` zJH@^VNhm2&#N5UJp=lmb`{#9Q8w9N8UK-nq~7wz2vI|f2H z3&EWfCgyVGFX|arQPYJiMq930)Vc=P3RW{6<$M-QHkkg3&i(}xrbY~agK0A{)dpqy z90~p{U$P%-plp*$rH7t<@G@L;@%Q`mS<Sr~_e6qNnjh ztOh=a`O@84D<<=j(GCn_MLVJ$ud3p43UYKpzmj_AlMZ^%D4(qHHpjG}s*)hogTaR0 zC*iug(Mnzn&B;&1dGs<6itoE>tWF6w}g4KZ&Z&&CZjYTM!m zPmPRDA{z3T7IPZ3b>oarf>hCeHi?r3d9;H>wY8O7C6EYEr*U>JV~EL{2zOw%mII_9 zjtzg^JbQxcS>|nn*F-Q`b5is8)O_=puJMKM27ajFEe8=(;u*Z4U#rrH*TCg|Yv$fQ zd0R1S#2dk8f)P}X)+$#2a3e5(GU;#2wmB!5z6YuU#<^JtiE@X0s_pCV8lMrbO7!uR zdos@Rx@~cbdCO~p%?k;O5NoNlq0BKz+%}E)COl(3%4n4r!R5zYt?KHFb2vX#<(dpu zR6aW#W8yy>P(RTLP?S`PLU1uPRG(&lk&C~q30fzqin{yE$Un7|Hi1!h_uB6>Cz&;i zgWz^Zb=Fu!yP8>p_v4Eh%RFXn2Q>g zKMZMC!-ZRc@=?MEd~J0WcV}DhQO{I}txj~5E(SL&P&9CqDGrt$4^3RuZr5I>8~y8R zZlkbl(fOubVT+HTz+zD=(^sfHSGsh%K4L!WvxHjp8{C=O=vGAELI$xc4nn)r*<1`M zztv9J;VFn;{tI|k{iogh(6i2Y&s%_w$7dZ}=Vhsod?x-c6LE=gtgY{S>-asr=Zm_S zWB~j>%m)WLp6cF@JdaZ8lrMgRJbC6PTkW8p;BMDm2Cr9Sw)kp>0F7eKCs1H+!_S3* zity-Z3#hhv4Uvh$8u^!7QmTI@2k)p+nrk(akU+q&oHrfZVG#&m6L zw^R!s8xF4!PwrIBH9Qw2x@Yxy?q*N!r!1t|OEwTxXBs1vZJZq{1EePfH|q#uuU5U` zLDI)=0@ARWFls{t(R-_D!uL*dFSn0sfhaDUg+Zks7L7%vVoMk3?gE$AJ1&=y#@0=| z7Nz+sj}AMTPdoad$A>2^Ej&EifKcNjGz59JA>=o8A#E*?#s~JT5xwYtb#MXdRpWK3 zv-ez%x61yN>{jbQd;Me{l0n4K({~R}GFqDUUR`!qA11?FGNQe*w1)4z(oo9XQ4wZB zAC6Fz-nrE)7mW5^TenEISd7Tlo>3W%A#&_R^ zuZfq{q2qya-LXG`IffP~OPb7@%(f)H>|r)@kHq!nKh7A!L~e+plZlgGJ%@8B>Fh3s z2evFyW&QE4t)9U5B?ZA}{DGVHVh{qW8w&np-pc+3|EhIyqpdJM)Zt@f4Gp)&*UU&D z>)~0ZPX??j_jmSLVJ=Ey(;UY{quF|jU+9h?svyC4uLElykdycAN?YmA1eh831v8TO zJE|?_H7YQQ&?$9UuII0ekkg_@AS_Tz<@MLTwWi#{jlG%ZqeJjR_Y7*plGI>AeG>9` z(lS`pXPTnOKD8uK&cu*E<7_>{1I*1J%|R^;y{0-B6V;t+ zDJIgjcj|<7a(|(` z2_oCJgeA+hbd2zHRgkYlYxA_mQ-$kJHq49x!h?F5E@~>pLNO@e=we{i%^L_>{Ng z8byce_S^3H_eRKKTDT1`O<5QaQwJsM$=KVwUK)y7@vd(R?*j)IeumfVnUB-UzjKlUhm<9 zvn84HslnpvKc;MjSW=-bXt1{-rIb~QPOsUC1@Yco#a0eWf+Ms1EVaxr|F_*?L0sBI zXaYdD)86qLJ85X1(ZhB4P4~=WNiEXVdt&etNG$;hjRyY+`fD$;7TX#mhyo#+@H6w& zUWMam;d5r_RZ8GRPV?vP4KyP82eaC9db&wT2nP4REhuL-M91m68)L*=x1ft{dV`9* zhaP~| z>)fK|Zc$31cYuQH2eTXv@@S}c8yr!IBG|K2Ax2_se}OGO;N$vH_^-bxIaqV}c+8uh z>w2Wp8P$Zj2?gPUE-X4A%p1`3QrknD_-RXD0M^eLioCrB=~d6BfRD6r@pRuQ>*a}U z!`5TY4x`r=qI2bzFN9Zu0NH>MB(wVV!LhHbBvtpgRo*E|8li_m5EJ1)%#Vnt(2VCx z8hfHEXyq^40$Sy4`Jw-q^k2Z2ZA zxwg@T;hK$wtoK9m^ea5&7KD!Z&AM@iOHA&53PNI$@~8KzWdU(WL@MbG`5Ddt!(YATqJB#y}E7km=@P1CEFTdXdAPKiwCc2&VjV{2^xSVfV-L~fpflc7YZ7P zDh9}br4x@fhJj8fY$MZS%wYSMj&&tuE6w{}jGWf3k=0+waUdk%^SNaqyjCz* zr~2L3K_bW=$qN1Xi0uld$}wwQbrwq$&Pk9=9C&%Txkx#79e=n=!2BrD3Hr}JwWCc1 zfX&nJ%#xxt6mUw%X6g_^g72FYVnO$DsFe}c+DV`BDU#yhrCm-v4(vKnUDZ^B%}x90 zX0x2H=P}8hVXbKBCXI12Oa5dcR;666fY2)&WVsDaX-St&FAIls*o;N4 z1y#(@5USm_VM9%wUx0?DONYPP64_WWZ{OjbaoVXx-nN301elu7ynR=6J6@gGA2#b4vZS!t8mxq~29M|LJ$OALt+=$5 z=>sZm9ZIwrOG%|>XY#b~3*-`mX*y%{$8%8q2^3%{hYN#p|LsVA=f(I)^A>4$qp`zH zB9dnxv<4X=#`Ze{#f6zjR6d(9onI`XlQD3UbpBM3RVF;84kT!*u|*2|YX}|*V(*&o z&w%a?WJI9{R(ZaeN7me7ArXVjRXTxN5~HWOs|jthqnC+Tolq3;d|~s{wZt5Gx-tP2 zh3P-+dB7$eG2mobCz@;EdI%sOlQmTYGJ>6e^XYsYe8fyk5#(&FTT@y(5upvLRPE{+ z;Z0=ni>H-?X1uVD>JvcH#(ScW+Ss-LSG6fk)UHXpZ`uio9i$!Iq^b%;B$gm0vRI@< z6S>GL7b>Ifgz;nL_D<=P<7Cndry`D}j;{rYeT-sT!5v|<5A(S@VXJim*O*99N75_h zgQy~#pxF<8cTKlj^d<@m(dynS?7#Uzt`eY?;dHp=R-(>k<4#W7BDoZr9^2Kb)v)wW zJocwLkP)WGUK?o_KVt%M5De`vvjOAmwr^(R^31I6O;uN2kA)cXgA@{{B&~nX+b!2k zZO#ra$WiwD79|aNNoSHB8Lh!Q#!?^0Hauvqi8qW7g)M(Nmf+Te9w;tMoYk03t0@=7 zi@Ec~p_Ir_MJ*Q+KdwVKRz z@zOp_Qv4F9gqD3@D+LxCu}YHB9&R_mxPxwhaP$S(lHhp0YT$=JaM#a3pa`8u-fC1@ zgOb!={@gFM*kp!jI~OZ7^hz0gVyQyQACY!DscA0*Mh7={DZu)Gv+`QMp1vKimU*=~ zNGnqrQBN_q0*M}RnP)sTV_|Eenr|ewzbii2tDL?e4a1tMAE7ii$vZkVUorzwplc;z zre(s@5+@eJ$~{p;qei$3E^l7AWYDN=eaM8Rn>jMF#kM=zmC0Ty#B&&`FOnqMxI9m= zW^6w^Y)y$63<_yMOYX^z-*vq2j5u_W=en0QMQcUlo%zTGY1HLO=Ux9AhCF7uw|4rl z0YHVsqir^B26=jj;jxHdEoIagml7Eg_RKB2r0Brl{=8e77%5>SKGL@ga)0eK7-V0v zhfBCUG&H<{Cal4(FndviRX{ikh8<8Tx?Siw45KHZL7iU^1<^6iqG2<-M9yRy8dnT1 zD#aok{{!g|*o({&P`{IIeVcs;T3hj|K^@N$V*%De6G+i3fT886X$O~n0o7|{ih%oP zli-93vIbO?RmcXh+pHr`kSMQ8LmtPTIoyuLMu@3d(Lb@vz=AjK32x~bD!y4yBRfNI zh_E~NLN`R{2fJ;4MCMtU8*s^7#R60fX|~YuCm3jv7A1}XvumwiDAuM|cG9TZQ1t}q zUih((#aJoe$!6lSaPJdsZcE@+BzM_S&#MqN_GF&t#u-Bhd)ylad|1zku+p@5u8;}TJlP;2rgj}C0-ixYAK@4PJsgHwp0sO?1KQ5hC!n7%V++j86z!Zlc z80iL7fyjPg0eBJ&Jr1RBGvoBf9Hl`cwP^kQqMaTdprPubf!J#cU6*j{mCU?{eW&J& z4uWVSH?``MV4lH5u*udLV3!@{@^G;Eh3}&gcxLRelI-IH2{b^J@UIv!20(f50suP#f z95ltF9o-ciVV_s>GxXhA_(fN7`W{09W-*I7vz&%=9PRoE6qM1U54ZKZjVv}lV(bY3 z?eO)Bzs?~`YO2G&cSd?1=QuW$*MJ8qW-`V5ViFRzJSgglDfKRVOtZf*(8n*$&qA~)5ogGXt@uM#)4pz`{2Y~oNIxsvo(nUV*x{d%h72Xl^EtxNX2Lo zHX4qTr78m?lFbmk$SZ($vPH;|+3aB!Rmd?f-tM9(JOqhcvv?hmDtNMwNT~7vm#LDL7~tPBAx=+BP3Fp7u-sJEd@}*!+S~4*k+olo>x+FsT1uQ zoL*uvNj%%q%dlMI;nC^OOC-ucEg?+CANsRRO^>wg@T#Z=jbwhL>YfyIvo>G_-uAl+ z7>}|!)n1Jj7&czEhh76bSICU=XC^nd^6O{w5v0k;5~V#sgLy8xBw92LK`5&&gBk0v zHAHSQ99B(p@l7h#8vElAADUH4nMt@2ElapknaA$bFs4SBsenwQ`$tyHGR4YrR9+5S z)sy*3O_*??DN+yaND)fFp32N`OqJIYloaQx0uYzkn~KZ3it4HgE}AiRr#xtz`Zj*; zgy1?lf^dt{gmev3q>Wvsi(>mUbiCNrnWWn3J_iK`ddXfh(6ZeXa^m=3;KV11HHgls^U3+a-@$7`$|-OYCxEGW{9rXz_7^ z5nsHrb!_2QP)#%d`^)))MJ*vCvXZ@FJ#d=s$gm-4f`okZ3V#cj@o1k8_vCRwKEPdC z0{wtt=e-M@=IOYsHgO(UL4shfM23YuY+kwY4CJUfo#Gf_8;;e?=6P*7Y_VBB81f_7 z=*~P_faa9nkfmAHj$6$p!Q_b!osO%%0e(dXD;Ol(WH zUsv+|LE@tnZ(q*RUn)b-%$_^6vAbZVJ8$-Mtm=dj^xd+H7K_#(%h>IvmI$y*NWDQ> za?2E)K;$Kk{|Uqb>|x&Cl<}v4cd{&P1wVb9Vwb>!0-fZuDeg-1PB^6-)NuO?Y))zj z!1`v@y$hei$rF><+hn;sP}kXsZqaT;Ov%+cK}zx$&ZH6sV~nWCeA^i<1ReqCnahvz z!qJ|xo?@)S!sEL7T!bLV$@O73BXzZb2PqzziZl-2gV?}w4Ak*tBCc`5;5AH}+oIz@ z(Ow&n*TegGOmsEAgbQmW3^7_8P&O)_U2-NuMyy3h@cCoL6OKX{&bC!GhT%z-N~0rQ z;3cd5V~2nGm>oW9oa1%IgJBPeJvtzTVG~BUFCod*w~iJTP(R9b(Kl_~1%#*=`7&?= z-29CIGlJb$=g@#8Ih+j6`mEp|EttEbGv0zGx*-#(CIWA3-TBjhM^o$YXgD!Pgf{-||(c)yJX`m{9pcX;clN4465H(=$F_WD47EG=V)u1rQOrx>{#FIX zxs35jj^dqfc)(h~&--&id2Rb@j7p2Jf1{Y!GSff-|5)mOURm4lSdm$CHJe+WoYF6a z#Q%UPVg-v4Vcdv8*|2Oyo?dG7JSMs6{MrB*0Z977cAqR?8|D2XN+_|0l~3YOXzceE~Y>BSftOZCcF9 z$+u^$@ySC&(`=hCTZNY6zzt8W-G#r=%Hq;%PQMfaNPNFah81)To)5vI9O*z!k=T?r z?+9>G7W)WXivYo{5om+A#>t>-&9YqTEzmMqj`>8()iR~+BSmOjdIk*hlY>H7)47!2 z>RPN@F{ZI>S$3r!=w9&;`rD|}$_WWO2{(C=`!Sp1U!m42YHpOE&GLv|APn&qv|hvm z3@x-kqgw&NfcK^g*gZQ|6;tYgqBI=DFI&NyR9qblYu ziR>XFy8A>;!YTapFClRF?9W6G8|5bwxC?TjL=zHw(`}Td#!=zw{W^LFkgsxXId1$K z$ND_RgE)Y$3ZGU^{OD%kh4SU*ywH4wZsd!U3*_X9#IP|2v&l4ziuMzO)fN^o@&N>FXU#|0cX9N%0AulN4D6)glAo6qMo2ux*i02L2FGeu(crlzjbN!d()l`x<>? z)ur?V8M+t8R`j~&@ zw~arYmJJBKWjZbjr2T$ZtLA03{Cd)B=3T8YHW-pWUB&VT)4*ar$N!e-gd(jvJe;Bz ztQL%Fz$z!VN;u;b!A@`3pTK@{y)}Ijaq~a~#0VbcLl}OFhWf*6Vgmq!fPNqnKclS1 z0Gd9rl@V8+lI0_m_N6<4l7OTx>tmv3#&RjLB=so#OIV^OcxZx!sm_xO&w-ac0(Rcs zc*uI~3LHs&GPzp9it56`z3g~!k;E)Y zvgWH}^>Bbu>a{&qaltE{031}p?H3x?+$O+8^9|yQc z3?r>%hJ*$}IBL$Psno&=YPWbT8zqt`Sw2!}qytZ&(MvMN)$2fC=Mx<9^e5Al=pzRC z#-Z0=woWfd#9Da6Vp(XyxfdpgN1kCt8?q9~$>hhY47?CQI7Ew12=f8fI2uwC4}Zk| zeLcHcTb48Rjs&&63{(tbe%)MVIB;PU8#S3#m=*RWJ=rCEv0Vamc}O@KrGbyAuvDaV zYXWJ!fOGCOO`U*#R$7fWxJp7gjo-95oYXQrs}5;S`SNCUBC-q?@PhqccIL2iYLjWz zXNB`3o?d9n{=fU`)iNRLhhdG8H`myeLO>CIPOpMaBQKhI7LvSL@xK2m>6ZRIwg zrhY#bO$9@LM!?&HucFD%Kd68L7mI47cSqf4Ahr_BEPN281eS9Z4Q+HnK=&^n0=x9^ zs502($5Ca+e8ngrHaiez}Y%ACcqf*g~BE zV3T!fCN(#`C$d>eWAjs<+16*zDA+=0FN;-Fjg}p+3N;e8F+&~HH9a{@tMf}5hixVv z%5wx5Y}HpDi6{=^zgs>?I<*Z_p>y{?ffmkmB#Pm= z=5+D)=L3)^c>fBVA=h7jvIV4mh$l&-%9b6hjBdcp$qBM~myZwIgqrB9rO%8!oEO|4 zw(`Q}6g8GU)a5p?;bp>;KpQuq)^&wFFlfx70}DUSfc8 z3kawQqSDByCjQ0^`Q>U&F_U48nxgp$u|H8?=}}n*0m{Grb@elAH8g;*-S^k7{d=Hf z37zYX#A7&~B3hy2i-izx)g(s$n$BfrRYE9HWf-0Z*Mi*)tS=vS<()`)glR?l?pW{bOD)_v^hbORWw>Xd5l9*4i=tv^YjS!*dav~AlS*O-S z;XOis?g@2Zij$H=a{ zRL;vDKe(W`qQXtpg(UkZG*ke;$$~_jr93{U`+}@U@h7P-^@)m~(g;_M|8Qmn#CIO3 zKIS|i7AGKRBpc?y0%$s4U=0 zNK!Y?#<~2WshQ453-N*y0iGr+8uSSkQOqq%;dF_3zrzY=CTAnH)X6v9bTgX54tZ$>1H_rl!~+pGI3ppCbF0bTw#|(Y=?(tmJ0czmuTy`hF#38zFdhqJdy_)t(rXPpyV{kuGGf{#HpSZ6|{{;EtAD z^D@J}h4h{p^Yw&j4Uu10lCLtQwS(6*%0LGg&j!wqv4{O;ZkAG|rz_dtWR8qsAi!Bz zLOhfhGjT^(<>~EzN#BY#xY!LA;e)nA=4Kfjga#JVh}J?ULrxPX`YPoiHPIhletmHF zHmwz;xSW1Z5o5X*|0o07)cjrMWMJ!x$BP3US_|1(Jo$%U5!V6`Iq-CnS1)ZH%cavA z^Ljz0oAOqPkWSqJ#ZiYeQOT8nqqK>v_?gF78U zRRvDRwWm`%L&Rhm@++UDVoYfvV(Ct#pExJwnGjmS3)Ha;=g}{@AJtRb;PTt_wbN#? z9IgXd>!dF;Iz(^u|FbL(WotERH{+Or3k)*0H%}^F45u#SXg)|B+ZmJkyqMg z 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 nk&%j8dupf%J)rxgBq?I&)sq5Pxj*8 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 E0FA<&WB>pF literal 0 HcmV?d00001 diff --git a/Resources/dao-voting-app.dapp b/Resources/dao-voting-app.dapp new file mode 100644 index 0000000000000000000000000000000000000000..6f563ed84f7ba5669114c437f23275e5dc5dc687 GIT binary patch literal 2911424 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

D@HpAv<`F6hWT+DfHmC@A?z)j(>^( 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%0De8tPfAw+-!AAFkQw)-JK5)FklO{ycfF+(&)Ch{ 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%0Df&emn&o2K~V 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

YDH;>2@ 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

Iu6~LVs(tmHz8AY7WqwW#@J{$pek(Y9afvT{4%^ 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

~LC9 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%0DH>qQ3j{r>GU<5Rj$lH3RQR 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 f78xo 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
Um9r&H8R$MiFO2Oq2YMm%q@}~`|nsh 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

u$<98IrR@BFl;oud7&pk&~-A<3tZ|hQ> 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

*r!+!e8402Y&HOsv|>(d#cy)K+HC;8 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
T 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

L=^kYnrXehjN$g}Aat&;FLHZlyVQYE*4eR8^A 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

TP>$~gM z>qS3Y`=i~Pp&zcTXXjoxJAVj2&%b;1@lStx^ZobVze)V|>P-ClU0jE6+y~M1L-_Q1 zwVAK|nRh<)9=%|(oO$y#^!VKe=;F`cf9rpL{{Hiy5((@l@w=yzz+e4P$$RVvr{6)xiGL4#*PFw;I<6@3nEK&7d7l0}Pkf(vZjIQ88s-+u-O3+N)`?U1 zRie;$y}@EJJxi44?s=j=A13^DnCOp2e&F}lUU)7)Y)<@;V^_ijKquf&KA&M?Gaq`Z z#CqZ-Dy61)oER-O*x?*sP#<@tT)x`KC!lwaKToU{i*;fM>vz|S)h@9Z!BaKTdgXaE zhc}<+?Em~x;&i>*c&`%wgy)IV(Pr+h{l)y09-Ju9oqWXRkNp(~*N<@^KLsRYz=I(Y zpX2e_ht)kH5P=9-k6-#>=#S?|`dkbiU`4NaySToM7Sn8#G|p8~HR;wH^QAGf6+gbVQ{v_4_D0{F3BKnJhG zNq^-H--Ijo%>dTn&4+IYU=23F3H8~8onj9Xh}JY}e@q)ljq`zrnD#pGr?6?eC16gX zgj?yY2vg>Z#Js=uA4M3p$DEEmBJrXHMOTUcOX8T0`&=9}37rVd}ya3gH#t>DM3 zKX(x$XkYV}x#pMrUA_Wv`qJ!v%EN{vpI|;eeAHWfy014c?~De0XuwJFys+wzaq{Bb z!1%b)te4+Q?> z^_P0SU<{Qs=iF+1LP9f|q~e?0l^Vu?!}mtJO1^S$yuL7A-(B{)#_PAn>#Mu_+^z9G zYtABHcK{;MW_@$jt?Kn9ZnC+H!;INk?*5axWD^bUKV8;Z`7fnwy^Uu=?mB9! zFLR}8F|z5N3B&tBp^>ZS^Hrmbx$AfN;$^P;<)(CfZMD1jDA^g%3-CQoUqAl%W8y?` zwUfmE{@?t?Ibc6$de}Xq{{j%kk6MF|_&Sy@WcyRb0M0!|vL~;!Z%j&we1i1S5BL`` z*gFng+|6Mdh zElzZl7<=mye_oiM&icE7M}H3jp$;NDHJ;N{=9?f${KtQYNtzA*jB{nm*a`0?0V?5o zvzpU~1U*_mW4!9?H8J0Kh`^GKVSb8j_A}1PY!?TTpFgtUHDO`R!hpBE3Zt#Q9CMYw z8TxXA)WQ-s9z$3tJwE>eR0^2a{89q$Sg&5*HNITmf2rO#zqEh}!IZoAtuO7;-Q5>h zZlP4qU(@8}9(t=4AR1|MYd%pvTU7E+NxKfbc^U@nuf`js)esPJK3-4G@CnWY_20|Y zs=qsBP5+)qCH}!bdkw#TNF-l@g*Ekd*iGsq|MlNk6aMGl{wCp+ppJiHt)PRS^}*TW zpFgsu9CC@oas`HUyT6))T77y#t2#MLuywJCz7nAR%>aP$VSrYe^%o7w5B zj{>%c=j>}D&J%5;7^D(^gU5djPd@7V$2KiQx$O4Wr$12-Kfkg!4yT6g5HJPS8~Vysw*WM%*nR?B6il zfWex&c$Z4bF1#>+$-Ex=A+oL4U`?U*H}|+JLU^6P=6wy?)o?>leGT}F$Sgom;Lt_| zY`s9%#%6!+!un1*2LD7v^7EO%=rap)CY{053Vr~CCtMG-Rj?(m?<y_H~A;9Pkp9YBys=)puqeis>L_``4Gemd~j~?0Y7y5fj{Jya}(B1yj>GyoYmtG z#^Kp~PBc-b-W}xr=qzCn!g*E~Ywv>;gv3GyUSffUIzXWh2+p*DlLVmB2{Xe_ILu&9 z{`w?DBb{6Aug;lMM$MNd6EO|=gz06RA|HK!NKuNmjF=NKO$^QY$a|$jM;pbcPSD6g ziNnB;NN}}vT=_tqfgb*ut1PlJ@zwcX{=z@jrX@9UKIOPZO36Rc$h4A`sEI$Z!aSs~e; z0au=jU$@j^g)KB=UG!09@>I4z2llxP`a60KYf&%e{K*NEaeQKOO#8!AV+1BOK_${= z1G41vcc-7fLz$wt#mBGU@dsn-af{C}dzTikaVi1Pm|30hPfp^yn=Kb};0|_&8Y?l$ z0NB^fB3zTp_$+}PC(xscoa$i%&wXIhz){&$j_UCiU2$qWN0%m1ByFB)LUE)MP7LJ^wpGskL@cTP-=DbwA z$PLkVNwQZB)wQ|koL#c^^#B0Vi>&nDqFcyx-eK1^CyUc?hhTG0ZKDJU!A-8Vuq1oIkx{OgFGj~ zitkHFyO(zMh0XLpe^Rf|y8Ea4mF)(4{AAD3E#X_%-vtXWPJT3-pMT*mA|Lp3e;sX& zPqnGyf9uuGoYUbICSy zN#k*I<{WGydfI7}Le^}p9GG)bL%BEKTSoPZOlb;@vko`_VOkn$ebnC~K(*ICgRgpz5Z2yr z8Nk(h0=d?}<6EFw5Nx#;W4azZ(zsl*0_nN7QWnvkxgc^iivQEvP9pJ zM*1+u$RBUWA^U;$_)NX@<|w*iUy%dhgN{ks%k9cvtFOfK-)R1SDFlmc!GEfF3H%Mc zMe}JW){1JQKbvjn^K&)(dm`lXp*Qm99!NA`FKgcmPoToLNx=GqJyp7^Jt)Ai2N&O>-4Vn#CZ=0ird&e*M~T zQ2vXF`42|T|61%LJmX0-r~mxzjN^l?P!RQSE~ZJ?S7$aJe??cw@(%RH5dACqLiTu| zFHRm`(HZg51HEyo`ikC&Lmul*BgU`oR(^V{eSS zydX#nJS2&|w^~?+{O_~i%^({Oh=5MP6tvaRU`wR6(rHHilc9!qp}X=2-qpqr)}^^r zg(>oKil+Y=&#*g7EVgrRRhUP$71k|rHq7rsG9T(34xQel4U&rIR1#p6y8g&_`Gi>N z)?f$vAgF;D8#ou=T8jI6vH}#o6n!; zr-|=R`|HH3f4q95EBj(eyaNi-!Y@Cie%5?#a=W<89F$uOpWq_-_n@qU`Mp_zF1_J# zu8xoEqV?nGDLOqnOa%IQEL=mNUuYXI-MF5Q<3a%7|6GH1p>6B!~x4xk{ zfUifgNje-qEr1XQ!LIG~rtdh0=^8rE;PGv1Ts#}Y~nX+00 z+|?^~Tsohg;U_TufHzR+w28?f(2ywSd}+V2g?nk87%nit<+{M%)LgkxKhR4; zTUBH>1~1Z}7=14|TZD<7b5oUO+wd4S8LICvf|qw>6q5p}GH``)LYYZy8p3QM&?h3% zmc>*d)^9}dkUp|R3F zn-#4aR!f^4t}%cO9BQ;$?7cZU_2(ebh2Cn~3A{Un6Ts`4`+_ak$4p}UoaGTFFn>yU zNDLQJEO;~z&u_YaO!KeSy-|Qp89RcznVG1IFl&Nf%7;X42L`6(SIA!4Z#HWV*D`XNjMFHlT6HMJDD9qSyqU`Xf35 z^8cTHJ|o1{#k~gt&OlvzvV?<_8t_L=ZZv28nb@sOO6URR+`dJBiJO%+r_ub>)EPxD zVSly^yjM2E!T+D5?lA;iX1<}k5J4Aiupli3xjqudaDnm?@oN)m%!&1k$SdZ?Bhi57 z?AE z#17ODVhjP-Ps6EqxS{Ofdb=<M^FBXt|xBO>r6~{{CYkMcahGCGj_HjGw}vNd?jS`^o(|hW)UxWdcBj zCd-;&t7)ppa!?MD336_H+}tgFmr#rt)Yc~hNuA@FEm(KwiJQgNdqf3ISAj7T5!xGF zx*PanG)fFNH1MqdWz#oa4ed z$`F=l=ty~W^D%t0Sc&K6B=KMrJIjK^Bc{wpItMY12+2h_NX?-I5e8O&ZuF^50M*_t zJ1P@T3BWbT`xNCCm^1k?VWS2-dHwnfKeD&KiZQ#br)J6M6hW#{r2qnt3@GJ|j%T!60$rJ{#OP|} zg_|G(5f(@SDw<%RbB>#ZiKj~-Bg}vR@dCdgpyWnNgXv7@Z?Q@j?K*9A3e7W@{ThkB zfw;1sBoMDZ+Ru-e6C4kc zi6Ri(z!{HwEjHuHxf!t(t9Q}=glqq56j-lNWk`1JWZFv>rFC;SM=6S)6@b_mbn z-Fb+5D{r=V#6(cWX{YonVI#7!=qQwoEsSB|tuSYNPO(VWJ3T>EMdtvR1oXQR^j81H zEXL5Q!D2s<(PIA>XPt*0Q!m-9Uqw&_|NAZako-J#MeamxTYiG|TsMx?f1Epf(e3(! zgZy?#h+Cm(b0A97jWtRP1rc~T$zuw6#%xdh|0wr{L;FIKGwOO&F@emU$yIOx7$ z_B6u30E@sAsEC}D&$S5!8>eI?9~m@@Gb8Z{{1v9Q@}|rg!U87!0~LHL`w5; zkMXQGj}Yy^c?ZTDbJF^gpKJM%(((extCSD<^rN=kKmYkuwFWX$nd5%Q5L@489)&lbp9NJiTVI?mcp#teIJPUx z_}O&77bL+QA4{dkDJk+*IdU)T{!Sf-{1>IrJ)cVU43TO{WnYm-2K=-F(w-C|R4DKu z1p1F8&ta{ z8-N*p%HtkNp@5e6+qsBv?7|_Z+;Di}?FgqUu$|1$*$;m?@yLEp}SeEdfC@@M9 z{62g@p(*Y{ia0PdC4u(!Cw*I)C4a<-`{(*qT3QGWJ!pm1y=PwhUA7g-bdh*xs z16Nvjo)AN080xPfp-JMGzlJ8-QV<6}ArS(^NbRIxA#CPK#V-iaU(oFcJmMFc{4X45 z@jW>#{~Gcft}dRR2kuGy3K-mYu}0*i)ci2S9>no~R$nV_7A_w0MM==dN(A?#GYLHW zommX@+uV~s*cm}|AX671Py^5+Fh^cIOdt8x`H6);5w4&kl!0CVvRP~|%H7guv z^L%p7(u5559i7il)~tWl({KI=;&Q| z{Qw8N^>)03LSq7oa?W`0Q-V=~3`%SpcI8+SU zw2nl_B9>;`v9Zr#WHTS`Ac$bMejkVcZT+8=aH#T*dS%T#Ggdu_dMi z`!RYl?{MGtX-CTFj3>jNjA6`}8Rx*tzw`OKzlNW`6K)l5Fi=;>efVpxDKs`qJh@CZ zpK7C0A6Q6j$TH4Gn>EU-S^r^ynY)w_u4j#tiRRKalHh`koB=0i85OSBQaTHWdI0LB z>R2CjLrDx%3d2$ek0<<4QnDOju;ZZI(mptJA#CI}cBN%@#8B%|51O zhW!ybl~Cp~>*GWmwW2)yhwvPfr#FE=pT1$KcCRtj?lptdYvey?U%lgJ8oHW-@I`xX zOYS%!s6_;j^neE;kKnXjB!WNX=NGi-kx5>N+*>i5OVcrfo$j(bx#cr3y*-i9`&xPfvLBc~zfE{D{YwQ^EuuSy$7N6sR;29eju>6n0&pL{L zm*J@$<#_3BdgZ{AB$1IsAk%z79X%e9uaP7y7JbH#^;pP-j90 zbFaNEFS{*#*vz3fUx-w@{t$&q$Xt`(v)!P4qGcb^nCF7j>BGkd}wu{vieWT2IwD!VvLY5O6`5vBEAEO4a)+*>m%Hz_gvTt8Mq(Y~_ z*fO~-hGr%M&c84FtNtwU&+mUDi_d;0(%FrNz)y@vOpN{q^CkR-650NO0s;0z(%LQ) z->*Hu>s5cX`yK>179YT+481ibe^Sy;$bG)QpzeTFNj)iCR~|tc=ND`)&bzU#=F3iy z>Vf%xv~4^^mwLneF~m7az!cRA@vP3uCx0FbX`oAlXA%iDi#SEdow2A3QFnrKh0Kl8 zXQ`XyIAn{!r@YUVC+Yu;`wfKJHfLBz#TCg#A-u!q5n!@H^p_ZZ1DxVMD^~C4R3_c` zfmZtSaES$FP}`zh!>u2BuNc;_EI(Wpo)2UP@F>ZMRT`qjyb<5gAy=$y$Mfc3KH|LN zXH^Pc8uDTfbhggoM}SXfh&9YQu;O_9gr=5-;mM9vpoORw>mtGKF1A>X9rtfD_kZ1> zV(1UiIX~k0!2Jk4uzm#5eTXSdeI|#ZQ2lFvPV-`ii5Vv05lmL=0=LuCduGlQS}l7( z&V;Fyxa3V(Nd`wNHcz8d;+MNviJVShBmi$(Vg-FXdomLGv#i7EDRPJZSk&)>q(;fo zbvPQKn^Djw_Mysj-~nsQ_8>Z0f)?&$x}p3YsK|R_IFP_3DLOl|Mx9;J8_^mT3E4Bm z-%jxOHpA6(b4RfySuaF#LlN>2hXBdrMzJI$A|Dg}aJgjX$c_M3Gb%1Z=RCFhCKBHK z(O)g*tadAFuR@tLY4V!TYlh$o5~?~EpEzY4Z^=$DV!<{o!&!DDPTXJ$`%YgDMcX%XnhW}=UvYltG3i3NfGBlT zPn2aFvZ&cHnQa2-jFc5zh&R+lxGA5>;~-_Xe)`{hV;=sOkNIhAYAeM&xlK`kAS30> z50L=R;IUFNk~&|uB3KGJ@&3qVn9un-a1dh|&FwkS3-_ULY2ZRF3#{2 zK6t-^ogIsW>S%z-yPn`FRi6t_z8KEQUkWXP`oA7tG>oR-DYp@yBI6~R;%_{cD9hx? z$D@soWH9m;ADJ^(D3>uMUAUV4W;JrdH_J^Byh$a0cvjgG+EY~HVv2@TyWSX<*F*TE zvH^vYjZU4QJtswJ)a@n;cc8BSk%<>7SwEzlQeIwGlu^=)63c2IzkO5>r{qu24x_R| z;Un>oiVq7RLK0u_c3u(~9aEvQv>5Z>5at3Gq}V#C6`WmR)dEBT>_{AJ@Sc`|@A|Bw zF(~PHs^HWIN%e0-|1t5;^K*s)1jrvhe|O`5{x0$6@3K#z8fvJ$)xLT2_rxnhHynB} zaTm=9oC8~hlGPZ|>xV24K;-nVFz4T+L<6Sap}oNNk7$;-IMdi!gkSb{bOC2F=Cmai zNY$~Vye4Ua!9gq%;g4jO9B^?kW8o@k!?Gh1N-oIS^|!WXSffCO4^)L(v{jU4c+PF_ zdVD9!8GWo9EskLvY#*`nYus5UIl$LDu4NVy(aQ{sGGeky5k#tC+BO>ZWDPQU5!K9$ zvX z9}=*-M*WOsc+fR3tVP3385>Kc)RV7@CdcO*KGV;)WO@E2_5W&~=U-BPP^M>mM+b8~ zh5kZ`SryPCmLL|bAUltvA8n=`TGAYij<@nhzEQqX^S$Y=w?xD95^-+X;ldR+LH3va z`D8r{{+Az;jinq4N;Uk4&>Dq!!FQaT{yA7IFuU=$M03TIrC(U9Uk**`-|2)_RL3;0 z061m6#Gb(6JdLm2t~tRUi@NdZQC#(O-T4w9bQpVp52&+{-9o87>XMEK!Nf2C!89x) zn!hvxta^xz0nb&egZ-z~Q-c4`p|e&`Z{_}JOddSpRhD>i;&Yr+o#u%^s6nKP)#Xe8 zF%ph~iJQ`g^g1d#?PP6J;mr znQR&dupJ&myjq*+l(80v~+JABU6LiF?#A#?M_@KjDcZ;8HHSfJk3z*}!UZ%+NO z`*PS-r-WepH5Ygn+DIAu}s{&aRu9hnJkSS|6W0%0rlLB&wnzq6oBw{NYI`FK`g#C}~XqD9^VL z&0Fa>J49=|V*$=;M(-6@lth z?vK@wVcqi-Y?k}Wqxrndh84e&eKBgG=^?)p7xq_ z0(59lHk%$s#a#MB=zFGtP)+=~l`31v6hV1b8I(4V$B#JPc>e!o@7=!>H?l?H-{-Gj za_<~>CmlCnlQf;1JI7$aV8Cr20+VEQK#~C?1hK#v=H!3>_M@s)B?*kXGv~W^t(#dr zwxv=%cJ12ly^FoOYHtVx7t0eZJTl7@I-;}N^fFJ*h#u4SZ;DK?Oq(({5Ob-oz znf|5;Q9NWs`J?91w1^~rM-2^79I~IWvY#+sbd9Qrn?P2LgbA_ zWB%Inee5u4qBJv8%9XdlmVIWC+AXluIwGM8RM5ZLpN)rgjHzCVY#yj9?#1OX^tGk3?ug7DTqH3@R1r?;20uJun$3T_CIAoby z8K*On$FHUo8n9*HDgFeB%QtfPlXw19b!ghg$oY2AR-6RrJvL>foO~6$bclU^31qTy zEc@giLFf?dtNRNY4P%Pb0TvhWCjUl$5$6dc z_p97C{7W?sV{o{6lEjK1?2%Z*NE2*iN~_ZIN;0+7&j~TqQ%a&U(gR-5ozxl)(L~@( zRb1nVOX8I9V7&wxf@QMb8C4|Aeiunh=F@QJNVnvq7&OxTE*J1S?;Prd=+ZUjalGco z|Cwd_l04UHn`B;O#G>>i@QOf7-Eb{ZEDplVsLlAA&1*`93#@cdoPJF3F4eedMtr?{?igxt38j%a+K69j^bEF&Gg zlu8)szk~i#SOP(;i3=dmttNC$t8@iPj-}E7=x&=6G7Zs1;BvxKpR5nerSN73I(75u zGZlbQ@hk{YCfCzBUk7X2`E_sw%Du)+_62ua1gPQHiK`D^hr`FJ&&$Ry`DYTRPt_Pm z)ZVw<5eksfK1tCH#GZE&on72gLEC+x8?qoJ_M@=Kkhu1Vx4P4K|8T#4!~UE%2W~Gl zr4zy>3>N(6rwHT`N2Ta9v~5Z>AfZj*=rC1l_oa`!_<6X&%_ee z!3rpZ7S=%WotAQNb9wVIbxAd>sBZj(++bKSiXFHrDGYUTm(qGv(G^(_#UQh4L3^At zT2L|XzPL+(WEN?c5q?6kmB=i3FM}zjKOhan)>=Y=w-`@twJPaXl;!l*g(Lnr+)rKt z5I&o#(WA2vV*%Ow$($sFQ_m>c#j&c`i7H*Sl7Z{efsJVw)IDsa2Jkm6;!HROF)toi zBza&i*!|j5wb4Z$Rj^q22H>ZG>hB&&IhR}404TEHv7*!P@${`3sko01Di6=kLIRTy zB7{=4+ZQn*O;V;<5ivx?DW>c}nPuy}mR`BAsJ&W#2(mPv(F7w`+`zUk?q2?9 zhSsa49JHUs2wyTmV=#u>BYZPMZ-ZeNBUf{Qs}f3hc!dn11#+M@QYG?W=K+!l^%syI z(M4C>s#X||T#pmz&|wqT-eSv2TGakMh;P8bFjK{%qnFkjn4F}#C0jaTAH~godm?Fc zB8Eb@pvnQ=Y!aqI!bH)V2E>6&-(z+qdmq$6rLf*7x~thmwU>-86e0ngl_5HU(!YnE`9*4lId?9v&^M6V^MOO*1cLVuXFaZwADW7o2 z8Fv&GYSRr8=PM`-(Rq2acx~|iKN-&ge#mChKi|p=2H(H`A3{#)w(39sG6y{I+~4%) zjUinZgs)-H;m08=!R)en{}3$vpX|x-5ft8^*Q@*QKm0TT@ceN8&fV6sgMMu{?B&)C z#mv^}<1I0Wl{a?9TMy0})0=6naN8{xZqnt# zZMyU${C;`cS;4dB!Dslh)ssJ~K^yvLx1Vd!_W5>4ZGR9y3pe!BD%8tf;ntc3qb`p5 zA-Ki9wwpBm>`<;d+wZ)l2v@2wM1V$K!OT&yTHAxiC!MQrl7K_TW5Z zzv3t0F5q6LRphmFGl~1kXQy_&AtJRYXUk|IX+=_GL%o;C$QwDl(HFz%8?U#*P z$|HZFXWh%=arcYh+kWoA&yMK7EBDqx9@n>+&zub;zX`hVv&*!tTfZWDencKjn@jNl!a?f}kj+YbT{IF-dN94!DbVJa(M&fvi zrs3Z^D|x&x+=s8h!+IH>S^TVK{oUF^Ezx#x8o0!Ax5$!GbX)#{iCC>H0o(2}sP>b934)gU4 z{7loc$essX=%dT++K2l9`L#QvXHouqw7m31^i;s3{XBu6lX_)^=lGG&Z{z7NloMGt z?`4FXoGX4QE`@Up7?#=RVr1V*&gXG%kCBmCKB8xfR!p94PQi&u>EYMRBgot~Y4@g5m?d^rI;E(zY;$lV@~KR~}HNWZJhBb(Jj z@T!+BpmAO1!F$FK^9x34Xxqz|#rsX`3-IV@-2N)M^`$uc-^OFV80TM&r+?`gH}R|u zKie#GHNN(|9zloe@Uza(HeV>CIe_c7(6Q;+?6uD{Tfy_~^tliH_vd*^zVT}O zH~ZSZ&zg)lnpFb}zO%N^E%>{2P?l+fzB5C8rz&ijF*)T4-;ad;WtXZ-F4t+cJ?knR zOn*L_DgB9MH|?D>t9~_KH~8KWI*pWrc?{>~)w0epH1cb0Pp{-T2W0z5|F4!O1a5`; zG44OvZFGJ3tX4c8j$g{7zSO?;b?u|H?`vhnFB|`5x_t-l?xf!#i62}ZL%)x~L#c~x zvS<@-&e%rPOh;|P$L!@7;^jeHC3rA>DJeR5g>-@G;H^CS$Ky%+d51L6PFI5=>4(zJ zG`KuQKIy=D>F~3gquc$v>~&wL7YjIsIxE`P1igKg9GA?4Uea3t)-OqE{QFR}JC2YIKurF30dvla3yeOEzhw8%>}?Hpxb1VOLs~j=D@yqSM}1`JerrIY%Yzl2i1q=s5<@d$Mv*uF{*eE@N73|7uwu^A=~KK>qhZ>+pnCD zq0RB*W}es8;?f>XFaD^OnostXw;lGJg;Ts(+-+y$*1Qa3)t*M#AgGqS_1*S-eAmm( zsueG7Zwr&be6WQ1OdMRhr}b5CEr$KZ*v{rN_Pps;E6t}tr8~xFYW}_3vD3pjRmVFiq)vMNGU}67@ai`>6wz|1at6kt25Ba`b*p9OKbhXl2 z+H>o{spPkAyYMua7Sh9tx2s+WxV8&vc<=Fi7f=044(9A+>}+>zpS589&2(+IvPbZK z*t;8FUtzyZ&pvCcVcyyLEcdBZvhHCHy=t+P|I{wnRUg~5GIxj{*_>US&c-gm_F^#r z`1AAg#dW*zBkYmy^kIEhO_+xV`(*z}bMOZfdn)(zB453#d3N7|wR9IXfmgNd4BKY! z0A~Gcd1q%mAK-1a&E}^=Tz@e$vCo>zLH69g?(ll*+YjSgtJQ_MciY|k4b0`KzAf~J z6>D9slxG8sY1tOmgT4*0@K$&8d;t5L9&H5-E4bg?Kzw%#I6pzS-DUG@m<#RYUGI4} zLfoj(S%JO%Fs`W>o0jMJEx@PeUA^C2-1TeTpqSs;^TyL1;My>2t>JHmLAjY5A?{r@ zd@){k2sqRg^QvB1j6=}BQz`ob2l(5P6%2YAz@yt0;M*hax!W&zHsEg?_7w3AV8!@2 z{{a8W=^>nrsvNV-u!8fwtzH#i4j$rKP%k1J5LTtJU3s1id*|bkZ^3-5ZIy70=QQB& zV2r_&J^m~CsXU*cAsNy?{IJD*0~M%?p!t2Ex$GyWNGc=Pwk713wv~ztt!0f&Om?8wC=l^ zR=Z8}$Phlq`c0Tacb2cTyU*pWm+$thLb-aG9yhKgu(!9{n@nVVnL@jh8PuTfc0bb^ zbW2@rKDV*?+@|w4R>``9aUy*;y;$Gr!Kbe06uL85$IPlk`yX6hB&^r!bW7GvHyvB+ ztkH?BwPRV$TcR^ozR|XDJ<&17u`xPbtJ%rKV6%(Q|GCifyx2UNm$7*iJEi<(JKkq5 z4(}%H%K-Og&o`|}0vxT*tW|({1MJI<_!_%$IHsGQx^aA&CEzTyE4Qq!b>HsBaNKLe z*IH_IYgP;9-JJnX?&hxc;HHLiA&ly$k8jWg2Mzg|E?fzgoPTD;iSF%|~a|W%X)>JaJ5LzY_0CKo^j1 zn{AOdj1STWHA49uglkERrMZZ9(h8eV}p zE8bL}54LwbhhimFA0ckSo_aW+W+&Y$hp^t$moIo@nPe+3-XGAG^q|%;Xv@C7kT)aW zvbKr+#Awuke$EEVK~g_(CSae+z4FU@g}f5vrSpWns=!|LZ>?IXk9e%nSjmf9z*nw| zj*#yVXKH7_LuY-M<6s)=Pp4ro^|b?;WW#dh!G0pNaPR(Q?6U&NasBM`(muOo83fM3 zK3chFUVu-Tr#QSL^m7laN0ssqZhSp4`nYH8DagtX!)+WMEvwdpfA_bu=TEok)yroq zYi%8n5$f|=0J7v`d_DW<@ZPhQ8O=c_!85O)+3>twb~1%y&e_8V_9;G}{Ozq(wqU<& zt@4X-dICM^+39sbUXJfGoUNkObpS@7zoxw#pzp`gfO*Ti^DVy*GC9fs6u({R#_=c( zPt#4<8=Z#l>oY$ez?xD1AH~nh0iLk0zh`fdEkC$celhF;2kHq~+s}}^O*9{L=3ci} z?x(#j;7q|P<$=~T2c2&1Q-|dIR?e(b1*R`A)B! zDR$Bug5juF&VjsM0~!o?RSO2z>cBV84z0r+3+RG1YR$@4ubli1&R2tzk{yh(`z?|I zV6VruES~3P8uJ(Sz`=l@+;<%&fYWKvZ$UT7Wk!_^$}ahsURf487wGah2he*!ze71h z;Io$p`Odn8vjsH3LwUU2nUx#eOuhuP`lbWt4R`_IGUBlJ$+Gf&&<7g*G~)N52H%x< z?Kus1K@ak4u+|CkD_F;^l8MwhD^lG-)IR~&(seQC za2+3>s%2*Z>ja&B0(z+_u9{LT~v&PuTS^>zq=H6dv_*r6_e|u(a z0iV}S31!L*(v@+ScxkIMMA-CNHNXiti@C`Na9+}IE*@`*w&!L}FTIeq6vkUR-#c3G_F_V38RP|t-wLo zaHcqc{jpXNyxtD_t&BZC$GMNMw*_hwjtS#$X}>RtcKB9s1N+sP79N1!Y*F4HUCqWI z7o+?*13bbrFKljTiySQ7vY>}@y&1xjiokcE@wpwepF72|ukd-dfcacJhVYyHDDanT zelW*1(HEd$JU-CQGr&`}t!+^D8Wb-U$QSB!%-4F(!MbNdSOefn;I<1>;5!p)U-8m% zerWf(^N}8|cGZ$szUeH+!>d->zH0nX-{yVbp$n&1#eG`Uvje~-3wU<^F|_@9JNwM? z?Cpo=#_sO9QI>lRbFWyt5zf7sfq68E57v7*&%Gi$)f#P>!gjk<_+8AeN81dnClC0? z`&jQiKMk^YcAXF(O5r}UuF`sPuDs2lotxNK1z2zH0nTr5U1>gnT>gYS4E|+7cXWVG zJdCor9mqGHq!}ho3HcE5Pslb1r`FsHkdIU=O`!2DvWK-w`6l3B+PSJN;amZ~YK*Td zU7%0raQ12s(EkGVW)6F?WZSH@1U$~d+%nh}aSY(JvO#tbHd4&9TWh=w_yF~9|Fqj$Z{_!jpE_;ilz-Ml-7cMD-xpTIZ1l-p}?Hi6Ij(q;+gYXSJ-*Qc}>OQ-1U z*tVGu+#c%8nuww=;#GCQKW*)^ZSs&-tvT zvw&P>QYkAg9t5j~H|0J}jg}8VChNjIS z)Qv`sayp8WiFVw5JX^;PmKD!6IU#H}Kv_TA{V`FNte~vpY|*a?vegaBKi8Ff25CFf zybYZF+!|!nF0HdzIJ1eTTH6lFSZ#?@EMtXwW$s4GZ^rlY*3v#J1fbLKd(yGI^=K}~ z%dOS(qAld5a4n-VyE2LYi+-J`C;sw)sQE8ws;3Jk6oQk;2+5w z3NE}hcvjv_udU6rdbx;xOR^cCOGD=YxxU5z+x{fY{Y3aisN1FYuftJ&kWW(Z-l*Pw z3$h5%Vf0TXkENY+#7m(g>T)XblGJ|U1DGHB z9NjMCY)G%Pv!Zl=g9aqQTgo0gl+!>5JT!K+znufJ;azqtWdWUUJurL{<$@m)b&j;= zH`wXARg-+nivO1KZOt~C+*bzh6y(s6^r`D}+V4Bq*H`E_I5e*$KWb+g>VN8-U-(@S zU(o5{nL0Gbm|U`Fj-j3X@Ent6mm4oUTWZgXPDl9yx@^0T+L{jGbFw|Jc?NpZ!>}mu z(BQG=83)~$Vp{~?yzHcN-Ig`!#^IoJ;0H+~k79Zmn%*CuI!kF-tlIr;bPvRVv) zCghOj?$GXJPxU=YfGfze*32s@c~;-|qV)NNexom%pZ0y-%d53sBVQ`o>n_l1XHKyf zzOp+O6L2b7?uo!t@g(G5eZk{rI!~!fSqE(_bI?(z8$82s?i|n?TRiJ5Lhr+bcjiSo zSoNdXG1?U?Kv`DAIsq(^R%teo`Sa7@tid+W{@@8^pHU_653&?5H3M8CJ1WIMwKLve zKJf0&Zb1&Nc^J2bV*oB~0QNb6wO_5E{Z^izf+jbfk1e*v8n!i<2g)QouZp!3u})8S z^CjA{V9jV-0@+~hVY@SsXK?;!C{sANjvb!~(oZd6aT%b#Q(Ap@NasNFFe&%N?<_Tl+vZU|MS`};KRK^r%p?p_pC+rUz zqpYpsO>CqEGl1{>gZa!uI&&UrhqhbI7smZv!Ly7V#+jf^FxxrW#MZ+Z2yPV-Tgv{r+|ZP-@ZS&S7< z^;(Dzfk}&3-HEC50-8TbePg07@e^{YBXQ%G`Lf&=CGGpIigRt zORD}pF)h4Bemw^o>!DnPG#$>CXKyFEecR+S6{0aeu$)%dMb-*D)!z3GV{g_s3g*uS zyoIj1?^}U?3&hbU`>J8WuEKZ%d^G@`v9Yt(Z0|TBuBowfIGcR;!ylRtLf9a?V}V~Q z^e4i+L7&`!Z17=)a~oV)f<9%?Kj;(xqPXc$*Ok9(_)r@3ffp2m$A}M8r*}YyK=;M= zUE;5c&^Ds<$r!Dxx6``bM7nK!T(;Xail%N+-vZ9|n*pw~-jnqD>(;OQioB0_-Xr)0 z_&W#r{Y=Cgz_}rtT|2Umy&U?G54Lg6YCt1s&Oa~@v9$A_X8%~RRRR8f)|z|gonCiL z=ZoXF*F%tDLK;{=Ib%8MWiq1AwLwox(vF;)p$`va#aqNbfDiBoYZv;FxfswHL-=n(|fSFs(UioCxju z+A%eL+d67|;;~;pF3{EJc%FXdmN$Fpi=b^^C2xf`mjkr!L-q0^5_7;fbzOAgvSI~u zfHvbhs%>hIU67kb+az0PX^e3ZWJ8tlLDMkj17rzY+XU$N(mrbftvdIwll%~RES%^k zjI|(}H|c=ruT(J^iE&Cf5wD@*J5a8cI*}>+W6S}{c7~4w)}L)|hrOD2>s!mwRjW3d z>AFA1eOy<_1`ve#LYwjE%t7BpWu$CXA&r+gLNun}JCxVNG;?GZWj4745@Wcb5tCK|y%x?J+YQL30yJiYxQ}@e<2yJX9AgE1 z-)}B4mk^%KVQyY%N7;ama67iM6JetO?u#@tn?wC+R@ZzX)!tyuK3KpbfCHSNMBjUD zYe#(_>MZk~hVg0p;hOUY{oBQ0e!kT0vqU%K_nb$FG2MvQ(8sMw&qKTDJQC9uwQ~_3 zQjP)o@x-1Rc&Tg;=bFxFWr0R!>o2Y*PFAQz9hj}WTQ}LYa7@B`j*Vm-}6^%2A*niQEDeRNGVI>cJ zVO;10@WPJZHR%SZ^Ml+I)xkcDyKq+Ej4eo)x@s;!UJH=V0jzfLJk8IEHwt-;;7ah; zX$azDR1a&-%a2UU^ti|IGAgT!c}u)r7kAu(=9`H4AK~l{0`m9Ae2^q-sP}M=_u{3H&H4jjuS5MC*K&t3qrJf#gUK-4jmo4R%1W^_dR5CM z=-3tH`_MnaWfAo&9hPq|*d7DCkn(ImzK!FZiL1c3F&;Y@6(>Bd5nDUcZNCa<6W5cp zXF%iN?43#ecU?65JGeIo)}hR>GfJP&EXzcR$PG+kDXOL?=}dQ{vZ#jC(R_X}vVmvQ#d z*xCqfNB+$9C(ut0^3sEI)nGnb87yrd&yLTDJCP9XkT~IKf-7I_yWCfpt3$ar@v*nkr-E>N z7VF3X-N^aq8?0k)jv32I_K4=7>nn4lrvgXx)00#ShJ#6rn494Da{Pdbub5>e`N`Nl$p2{Z{_sTYW^em zd)RO7V4RxD)!_Jv0DaSgw#YYYqaPaQG?>T7vS7{6%P`Jd_dV=lx>ohe?g z*e6*J2FA;x%z`yD)cb_BmDdBVzkxJ{^};g?;Fh0*4B&xm91ME^uW6w(+R|B5GAij* zLS6?t`vfprQLLk)1Kv6|USzH|$*j&|K=}!(<_yK-*qD=P^1%o8Q|P=wk5%D(w;Pb7 ztC#0_%uhp_cgMKB!RPQj>_uZ$ZzswrHx%!5| zYz^LrJRm~DD2Ie%EP>W*G*kEMOv3pj(n^&#^>yc!=hp_hY(0zvvA+4RU&Hf?Hdv4C zn9A-abKT%M$X#d6$pHD5PdG$)RV@#ia6V@&<3?pxf_n{c4RFgr9Gu+E^LXAcW+aTq zHuiyRP(g^hU0r@eT7Wj9Cyoc%hx@!v&JWs%eGqvXWEW@wEpVPj*;|aU23fU9`Js}Z zMD_{gZnW{>UNSBSI~mBYN$ZWw`Fz}N6MdS3ocDw^bR4t=v){~9XH4>SalW)ODeN&_ zNecmPzz?r(*NJ+Ll&vw&wnDLJYr>r?(Dy0kq)GL5?(iHUt>O3`9Ty)$TNLJ1D*fk> zZo;yO$meTteE);USAO0Tr!<3c6P_c_hBF+CeG;R}(zH`s^Ec@-PNntA)9T6O7e|@6P(gYG@~B`BT|{K~_aMjOsykDptC7 z)<7HC3ge_mUKM;3^c1!!@;O6Zw+EKeZky*lLHk3|v9Z<{#+1tQ(7`j@Z;tFtdM)C? z9tQ2PUnQ8M?e)U17ccm4Q6FUAcrm?3`xnuV=cAYM%oG3VXGhp^yUhvOx#~XJzgVa1 zXNBKn502|PN5UAwz8~g7aC{o&LY^_7$C_Zdi0#Gvr{Xy!{P)a-YR&tL7y`?+Yg|VP6ypu24wtnyO&Gyg;4+3?Ta5|Zqvd1n95-NQm)9cXVpGK9y0NO z?>(@Oq8qmhDBG_(lks&+U(g=^YAekD+UpCFwIM;jd2-;rJsYeO;(x+8<5&2ZM6TNl z^%Dd?D;ahwt3P4Am>6@7ty#WprOWMBIp1z|2QTD_ z98KFIxiN=xRP;RQo4D<$iM7wjek1G*cRkE!EU)=*MJEKD3Ok`=0nbN&WfN&6$`+_& zJ&mqdwvE^+lIW{7ny=Ov^U{)a1SRdDycO$4<_{!Tbu})9EwHIkewmyD#EofM2xA)-;?)-50z)oI9NBXgppOWp19wG$;7?Ldq=qIu6%)LixDF zKH4tFj!9ZB)}qM}Nq)WZ!F|KpkLecsp+sFQ6=z5}_(}42g3O1y8t6_G-{0k0*34_V zX9e%>3}cZweidU|v2G>dLH0Z_h233;dVsph6=v%C&t&2>3>jo)=(ueG=e!zMy?wu=)QgZPkz@Z5Al#=5$(J!Ed^rHU zob@E)=R!|CC;PSFi>PDe5T14R6$(3a;p~p-@sr7yD24!N(Iy&0v_ZHH$gV-Y64Z-l z!yfC(pc^emMPZ5?Eb#a(}}B%c!1sq-*@F~j}R-2rK=9mO@43!YmMv1}YyinSupK8Ubi!C8QD z9IqbDrA?A;8DDq3vk1;vX;H6aUu~$Etl`-{(P$Y@v$%`p418w*sj~s0g z7~6{VX(u88TR^10{s^B-9On4&*x8_%@iF^ZR9%oCxvvW!ZKtEYh5i_{8Bg?>EWq)M zeJ0}wG(UWW&^ z(>Nc?xz>10l-|}&8Wi8&2p42W z#d?XP16HiW7$#$l(B`F>ALb1qeMfsuwLKAaOmCk>d>!5EfH)`Yq06MPk^d{118`l` zltY-T2WiEJ7hw(eS&~dI#vWt+$RCt!j(d~EyD21$5#KIgfB5`WEAV^vLgY^7m=9eB zGPZ>JKpP>*JRa7Cqcf4!ZF(89!-je=*W-mViT)Jy`HQvJ#zH0#dRq>Cfs<+x@Ll$s zA)g)T9fE&gy;C1}J)J#_rLftDhy8{%Rg3cek*=ggEDK@GfS@yXT-%R)>Tp)Jpf`LP zOgG{jmO<9A=x-Sp*vZ~;oI^K1uTyLXy!WKciN0Df=QGShDPSA};4QALoEeh;ANdc~ z*pzbfxu1mpqK1>ar$_iGZRCwlh_iwYM$TDR${JBU|giRYS$%+_ho+Gmd-3Hc8{5KMwj7u#KIyJ@aplLOPODe7+xzssA^g zeVR+fn&G(;=l2Kvy%v-CllCUDZ;ZFT3~Nnzy--%o`O5xNoY1+C#ae2*wfa4-$LPAT z8mklPm9NS9`lR$uuIT{ZH1V0rO(nnC@%n^*zX{j%?{ZzAZduFatzb=OGbb1Gfz15) z!aeAypu^sY+}tkbC6@E|(smK%!RPW}z8djR;P210hIZDKD zYdI)W{%L{YRLUY=GJ`dI8%EC20B8pFGb>NAwq94*zp;N&OCZ0;7lH6+oGIfS6qIKV z{K(#CYe?8Htu8I*Ndqp|#C;Y?_K1OuaR+^}Bj`ERYA)r^MjpvzSc^8-5_UuT3i*PX z7slXksYVg!q{@@a1_BGI+;-Fj3 z0AItpVp)VY=q(F14$|P>^E|=#8Sw+ly~!c|#_IR+-9yn_AlQ$&k-x;g$1L!ksmzT? zps!l&0Ofyz?%Sa{kPHw0-n6I0a~!1(v!|BV%X8gR=L_*;JUK|SGOL&@){n(ehJ018 zUxo2QwSLpCPD7uIE#yz>7o@zwDb@_NcKu>?E#=VenYE$1haxw`Xz!C|Xz0PED~4;|n+q`171 zl&gKx4~?2rBKNyb@#)!s>;H=ws4&(a^P7!W;qje63u823P6+$!;%v;Zxm<5sJ_~hX zHC_X7kM6brJpg5D+DFXu)nNv*%N))Jj8F3356ZR>)@0}W`pOb?YxsSe$Jo!u`kB06 zF++Dq)%!AEAVc&Y&fVAIWe_=&@p!F+Jh(ZE*=YDa36c?_`5Z^sh$W4x5BeU_b|o96 z9buoEsQL$ydZKY&!FDC0YqveDh0rQc4(A!}w*zC$aIOdP)kLms|7H0mPQzdRhHEK` z+Q(k3gwGySz8I#h z=AvqDu1DnmK%E5dF>X<=59JilnievrCAcFT0+|cX^!%J^#c-}8;Wyc*Fb17vD3R;m zzg<^LluH;y?Z?6fi);G>_Kf2HNAo=9_dMD2V2yWg%Y1IUYa4J%tDlVbU{hTFWRNXm zeT;PEUQzA7I%RW0y@}w%eq~-C+W%}lH(%5Nk}wPHK_rh$*k51_@LexGcDGCEL*TWP zFb1YJ83BE{_S2$nRx|M(((hP*GRO1mS=KtGyRHX(clY@A3hl(@RrMb7t$gn;v+CH;oX%|QRc?>X` zk)KM8EAovn?mD3Q8S);TZGr4ocUKMNyCi);?7wzz!w&BO!aS}!nWMKQ+QxZ1*$Z(G zyc%z-YV(k7brafWL!D?VK2X}@7X)dVZylb+aBFNk2LV9Q7%r0VU*3pu03TctmKcdGZkmcA>_A;Y?S zHL5RzYp!Q8he+g$QSC^+YmIFAa{iUjhRNgPMLfD;3sv@cic8mO>ZsUOv^!$#6YQC^ z6A+FtJOT;-u&!C;9u9S0je4NsE_L*4wiM137oE~yVg~mw2(GEEW&up?sJ*$Hx;p@b^Ttf634C9F~0Fi@t5U*bEGGvV})idU033WCRUcjrGKr^(wMis|LG78ED zR5K~eO(p$Tzh6&_pOUp(WE|B())-^{rg(TPAK#-mAL--4`b+a?+{1Xy=)RQ}`A(dR zdsRUH+>&ycjoLEk%d*ZTzQXyz7$~kMa@L|;J&FMgbJ&RtHBHt_x zcp+-pfK1>64FdT~#P+PPmV^!?XaC-=;rEqMAGCe3kbDW_5QP?<)>%aO*)onu-A%W@mZ;mF z=y8QR^#39MsGTWTz9=&nPO#)TEt%f7m%-oZ^<|77bnQfVy^l+qP1lcU=`K_N`4>K zHAUO6(l6BAkX?uB!G~u-+W+XR0&MAh#hVX+UvYdf%O-j)De~V^eOkQF0_cl*cjB|t zL;AG;Y#B8IwESe?bu$qMHwXBxux23L?=cVg_EGvyNGs5Xq5OJLy(gj8b{zM@Iqcmx zquy`Qdx@VC_bhE+qP6BiT$^K_pF8iG@nrG$nqN962@FfxE3A?3b~tv&jGY=tpN3~#FrI%ah zcUf!W=;K^I&xZZG$lPgO`F^oh9pe3U#Sh=ri&|_W#r@)a%6w0VEJ-`^}v{g1Yq`{iKPS#*B&lB^ZRV;aiWft;zsqbd7TAp~XWW;x*kN@?)WUW4^q#vN8 zF4@M%bV1f}7j#6{pd&l1r~@l&FNXKbc(K@fY9r!{mt1edj6Ha5+<`{>mgLhemfJ0h z@5F4C^S9j@{M+Ud`qJkTkJ%SAVHEanIkM&z!mda5*#i5D_rwf@v^XDN9SN-a2y`uQ zieU}KXuWQc!-&3idCw!r73Iw6s&#AX?7AO4+D6?EwN_)6g}!Rm$s*lT*k!{!h**Cy zUpUu1Nrutk+O+(=SpO>A1NLR&`JDhCNp}xRHK9HKNMD0Cc36WWq8As{y>UoC1Ezl)5kq3gL@&ppgm$j5F7v_q@@yXy zIXYhxXLvA&?D+nZzfZVl>d3gv+voq6-}mC)?9aiw;<_aUzeIlk$X^L{R`%p|-aa45 zA&kV$?ztD?O3NilXHX8_pv;vN+X;9gaR0b(xaNs|_w)JF^>oR)P8ofam_HD`Q%?9L zR9$RspIDFT46qi<{urFuDBIjgU9H|LZ-(vM!l`6}YS!Cvo={8SLrgc@h4l2(7PSjY7)1;i#^{{U9WW;?x#qY)Tb|Pk5i=~%( za{Mj`^WI$IHwvC2UQhnb@p`H+{eE_m6_g!y|2^hbqt(rnJ6=oFE;tyQfU!=1zv#QH zvF}9OnRnZ30WZqU9J<>fIR^8>1E83h$TU3plI#u6V0? ze}f1AX3fQbYYQzn_AZC_rK)=h*>}c%`jM8`RyT62Uf_G-J>|*uX6TM}LF2mQH{yJX z8TqZ&gDY!wt!#+9RUxt6hyi>F)o zU6^NR|G@f~IX1>_==*fs-sm)t?;WJNQtY$zMJxd6fq1X@2=CMEw=hR#H=uf`=i|W@ z*6zySeJ$uiow$@oNWT2#sM126dMxf_`XfB&WJi)Z*BbLwM9$<|)+|PS2{TOU# zSb2j!)xzf5t&uVAaE)2Z8wtCa(=U+CT+~{Y_9`jIh}sFDt6~h6W$gwQ#fXr<2lE}I z?LE3TH4l8oW3aE>MzL6QV$8kGmu}pV= zCE+{OB2)RUhTLz=Enes6;(e8DhO*X4cYG81raq^86@Y$vVQ!cC&3YtjW5sIKi*_Y5 z)+=lyU{c;pqh~|-U7qY>CP2Rp#Y74E#X0n7FQV9;4`{o(-l}=?Jb|Xc^Y7~3X1X_~ zRM`y`Z`JPTeEH01avb0H!FlVLQ|(FrqO=hS+acCp#9E-z=CD*eS=R1WyjtXdPgVT# z#BHCmFBJA0a3>euOY6{`4#FR^z?g?2+4%}nwvCg|_sPaQd92qwEfnZ3EbTlAKPSyy z)&B-QH9(sf*2kNM`TUfBj4|6-2d{4}$sQ^4^slFK{Uv~ZjqJzOX=r;%hQYbaC8b); z&Xus4_W8~bj1wAgjL1a9cAf7a#S9jRaSOkw&`g;v%*XC zNZbXK;Qz(5o!}R)`?^n(>;mCRrEyHVX@MDrGP{S~UlNVs+N0UQT+r7**zQrMpx92n!wCK2%>~FNGn?*IL4QYC_bX^; zobRNP_1a}jDaRyI9ML=yXG&*E)T7;DZh-LZlf6~9zsq|KMVww*KYOyB$jPC(hWVDF zcAuAQBVfHm!~Lv?@!I>G?ylNny8+!e%$tbc(@=7#9&bWSji~352mXwA+i?AS&8IB$ zP-ty>tqnoT#rVuqt0k=IOLv?bHKPU0*(Z$cfLHFh&pvJ&5jF{`p8?+*{MF#8$K`0( zE=zmzfVKQzfHB@nFXk=o-l1B0+P!DMzc>#XbPw+tW16GrIqcmD$#^i=~89>+CuNXL4E5U^$^s% z%9Q7)?y3l3z-NqgWU4)=^XC_MeC}yb>3$7=zhwM?we}mJ?_&<)W*p&Fdvs+b`}6v^ ze!F%zlxa7Ry5a%#`8C6u0!#;Q6KgIUke>u?iNW}&y4KQm%6^X| z+gTF4w0Kla&UCV6im}H!?TXeZ+}F-w%-_N=mNHx14`RMIWxAwV4hi=px8z~!Xe*04rYw4WntxYPZzTt6ISmWs8dx+s`?%6G}4o`EzY zi}qI-Z)NCZ{m4D^Vf?}x^(u-FM4z-z{By^3y(#`d-AyRtv#9P@1#1;q+j=6-8f#r>o{YOlD-|s9e3*SnpEBdxp4yz4i@HgwukX;g>5i|9r3J@k;Qoc<)#o{& z>$i*R_G~?%I}?&?ZSFk-S54^aVl85~63?fcr^L%vXoJF>H8HOo$K=K7VNzYFeDvAA zx|n-vWSaUv$!(V4S6WP*HfPCe@tz?WTaCCuvF0+LTC0mC`QcF1FcExA;i`T=p77Hq z=b&Vwak=S`&zFzlIqZ+cF@Wc2GFgnzuaOZT+EdIl<3Pe&+BV zG*y?|$oqedUKR5-#r1&K)$cA|n0rWi7wyePgJHaW=5ckNsa8QkUFV1&Wbmo$Ifd@5 zb>E#?m42o*=$6<=Pql^S`839@c6!!oME9~$Zanz|Ft)|%bIn8%>q0qSA-$rziPxm( zC>$o+t*k*c)9!-8y31&5!5os1=Dj%oOu5s|vkxa4x1#Tr76YQgJd{@m&#~^~(fAYul2DK?rP@xaQ)-_ zv61ttos(u0a4jcg6QRAo{D6Bc*1@$eRh)uedoeEON9a;c_)hgWriP@$dVNlT z2O>@jV-6y*TE;yOs9&Ya8@dM~?!Qwye^NgjcgeX0LayVxu1IGCJvEkZC~{UsuCutW zcuDj28|!MB?x~)LI;ZH<((TlAUSN!IH1-Vr>zHp!F|SdWCgjBt|_lvIFSf%2-|VJ_f!YkY!zpMa4S-mw0~`_o?p6{1M(iUMI#7l0BMZp!?0y z&`Kxi8sy^?wPsoO!@4s9mnp_q=*?VTA?9m;MVyibuLCs$+OkfippCMIrA@VU;JJ(| zmN-5O`@IWm%ZQqbxp3c#9Ir0?Bf>W$YlBeUh~@{%seC}dYZ31rub+2heZN^F76&A3 zm9aac4#hp{I1|xSnl4pGSjWG_emVn)!tbZFN%@@zTJYhR5H z#@Dja1C}xl+`K;{QsJvZ+WXPtXy-nGuT-x!ZTcb&7$8QSeDOzZh>fUs6L z)w?{iu=WGhWR-VwYPs0}qZQ@)Vyr&bxUB71u9Y>#qp|wqiJ*<9Z%wy>NdJ?5$Cal4 z>oUKQA3%Qf z(hE_mmT3>ggq+pVB$M!6%3=L5qn7o6Yzah@%A4u1PxenO7s5k4LwiYXbk-e@dY(VL zx|Q{DLDnIEZ^kZ$anyoVNuIoGIyJ|-!Ne~2?;)#5Q3)CPTv z^wPm z_hG-WhJSuNg7bAjC(W2<^S%$G?nDLFUZVK#ef&4ZXJt+?-`8#JnC_7-Ky^fr)`K3n zAp8e-je7Y95$A(2$Y2b`$h?ypVV*&MmSNi|w?4H>AASHlekq+_S-b>vwbz4;H!PeD?8feSJVWOYr#8*$*;?8 z%)L5ObwDTf72aE4U0+)Xd1EigS9;9ar?xy(xlo6DNXkXh;#T7PA|Wo3eHdNg|Go{! zOv(YHdEYX>TEqDid~c%ZmGQj1m-Jn2oiF-LHT^fyf2`?us1J)e`w2dxnEYg}F{}|V zfWE9B_W6L4bL7K4NW3#Sc2{z8PRdKXrmJEWv^@{+@Sco7_rRECs=0u1#A4qhZ(#YC zXrIy#BC*iqXVYt;(AZZEs{bl=K$*uJ-UDInWUZ*%d3id(`-`|%6Ux{tjd!nOcYPG& zeyhE((R@(?Z|iJ(F?77ReK|5lVw|ilcd_3FV?9_7pC#CZy*b^hMKM{XP zB*#&%%dmm(tGy79?Tzpj_V20t;3+S>bvDv#1p5u#dx|rndpg7&^(dFCIE64CbtiL9 z9S?1PA1K~tq~ceICK7$FQtg7=j%sMNRjq&(-X~?tI%rCMARfNKIG)iJ)?z^4bbce` zA;2Syd-6~QV0mXQYLr(pSZ{DLp!y)SOc=LH`u7vxbC0nA1<@z^Hi=J>+^N&;p{yx+ zML0}raC$Poqr4gR8|!%92h6{Ww#tcS-^j1!`3&!|Rk@eQFA{7GYX4qq-=MlS(b|bR z-^Md)Vcb$#mkDwu7jvU}|1EPA^-=cZbs`K=mMre+ch<_GoqyPCjD_sTHI|s~%368o zH+UFQ4H>Rqjq8^8i%~2z>J{iexoUB}r(P?I^&VITKp(8Kk83i9#otJ%Rg{7 z`WLE(8pc);470aJtvxM21J_4>)R*w4dMWZWge?MiKYTkzSpa{ct{&1PL6`a6WGB!4 zwaBj^8s`B&oQv8b56e-%y_rg#y*tl8ImPM^)oCsNtN;G}|40Rk^`q@}TlJqe?r1r* zXWvi#mHX%qy^rtTzdwENFC6#teBrD;H+cW(4(-)@`$7En{X_8l{o~qSP3P{Z<373G zVmWvH)#*d_K-nDS%si(}3r|Hw|uYT&= zRMJ}T1-&dTmfOeac(O{pvEQc3L)#rK7PEJ$s&AjBhQ5=Uu7cF?{(kCBhbuQYRUdXH z(?Fm|$_5~&;7>6JC$;t+_c67axT!|9BOj;k7i;X$#~0K`9R$>7yOe_7UGY5ixLB-G z4y@T;EgrY2#XUR?M_N6)F3sWnuRi~8dY^i;dR)72Q~!eJsW;hz`bKG)(n6rMI`s37SJ@uSZo+j<20V$_WKb4%JrT1G_f`haKej)jpGL?#B3UMIHvui z#wE{1#QWZx&R`F>OF*Pl6?fKsB*gI-DSx<{KFMCFQ-AT8S}wdTOx=5jZDE0_r8fjb z@z?VaOdY~5@ zMuQ@O*Y8eANMw8-A zvs3Dub9apv<(pRTqILPXRVwSPoU}g4HDDi}Kk+VO^w93MKj9(#T(7o`k(>`kyGE&T zW4t~yUe_-McgE{;<8`5aQ@l3b=gnD^S{8sJ-fUmP3jQ8e- z-+a2b?Up`QFZDKV+GulGDs(HKJFSaiwORSxxVbbsbWIrEl*{d6t5j+lZOrYimns*< zyU$nE%gac+v!4_lgOdRSPn@Kme}+RZ$=ONjKmJ3!I0ZZx)DFAnlU`mRnuQI1!q zK(&9vNBz|0!+G*n`^G#Iu}=`OhMxE$;h@AmxEJptpBU#S_7T%xmq;q_3Wk92#Fm&R^^!prI@G*@RreiHt*I@wgd2I>2=9qW}rdY8)KmoiSYE@!k9B zXKxyq)76i4?6bK$Ul^_RQyy#W4R>3kwQ-tb%}3tCo|$V&AOi8FxQ|cnW5U-7v>^_7 z5I}~AhYEQUC`Nopd$Ba39-|KNbcrz)`y9Cx%He_lNT#n(^39)c4e z|NcI(L0Iz5{YxT3@r`uHLwoyqGIbpB{hv~FYFykEVBMWk>!Neh`rN*26mII!$B~q4 z3i`uvMbrs3(roZ|oGVLnC!&`Wh|H_?qfZ|a^l1G|Zo{uvL~@fM0!ucA`6aR0Z#XNnT@pxs z`-z9wSVUwN2E3!IFxu+NF;__sL6soM{MvPwAUp#0%~%8nfpPu#h}7Mg2Fu~f2GLCl z;!0R8a+6Ed0^mb);cipV@qbDkQvQt#O8tvJUw}01LkEBI%lG(04EvF$3A6m^$Z3vn z1}6c^x%boY8WxWz6s+w@Y8a#@i%rT~fW$lWQ|qMzstxrQOcra;Nin%(xe|a5!n*Ie z4hqxzmR!KmiZqm5Gt3GkY#jAtD*cLyFE+jatrX)^#HXca z09bnkFq16=>M9BmxY0&$0{m4R32`p=c1LaH38C{qUnEcPG(H$~p{8OCtcE^na2g)| z@23=KLDUBIM3&MRji)}+E6{vKTLX9C|3HQz^x-4EXX-#n#oye$g5=?EsPP4I1!p}s z7OU1t5~=9(=d`jSWp#|A&_4sGl!3Rp1+HJq7m1R`(DI8BC_={{)ieT zE%9UGQ)&(7xpj7+Q1YBROTs?}{=avL}Jh`sUqkJ1b!ffzz6 z0>#t41Ty)BLW}n}VSDIFGmr~<#T;;90jvzsBvlxWTrais*5j#viXYHNRX+vl(q-xm zaz8(X=CR?}4N{vae7Xi+V%u&&U9zoFGJ@bO8<=3AEi#;x=iaZ7*{TPCdMnVzi8?9T z0h*BihDW^2GclZQx4DDSPkB`Ic8*2H#Q<>C1 z`J?aQSKz*H-=#j!U=Ba0GC%Qe|BK%9AK!ha9YyT&7it3E{-%#gPk)P^%H<<0zXwYI z1bB0TYdLwB;??l{-fH|rt=WBi1abStMQ4v+byiz;HnQ$)xbUo4c~<p~W`5FL>4?Q$ZM?MqchA?c}lc7H*10~ury~TKHze9SKnv>~zGX(a5=g|um;xiWN zNWNKkZVynGsPLuxbh_DW(3%g3xp6)3R0IA&Y2+10^QSm3Jd&xtd28?q{+d*j6K$gy zQphk){t-wnm)^kn3FhN`@v*-zj|{baN}bN zhY|;c2I;v(aD1E}kT&QaRGw9e?EKL6&>^~YI$SQj?OWkUAaPe3-g#Ukj?j7*q^hO- z$JAuCS_U8AzaPU?)+2!4{QbS~g$S?EGzivi@IG_)Lnf`da04LxtM5T2LgnpyA7q^G z;fc#W7v(Q|?=QYzJ}#U!LG^pUUqogJg0g@%+Mreo6r*|er%1Zr2n_y(4#{utBu2lB zK+Zg8xV;!k2tWk%TDe_14bZad&lhW$m7_#-DQ8D0a&xg*zFDqE-qfxF)kd@WJK`no zV>6Vyv~%-WsS>0Xo1dO)FSWy=w3H?vF{2Mqq2K5aPEqmnhFfY25|Z)Gr#YeA#0=j9 z-g=^qv|)6*CMIAG`yD!We*Ff1hRZV!;gNv+B^=|o*pZ2zKV|^Gep4JG^5Vd$f6x&b zYI+@MZsZ+VrMB)WB}P0=(QHpT!nZVp2H!81??A{{p{~j_aq2r$8%f|0o{y1{1HFVp z5156|5#Q)+om81Aze`EEWs&+F59(=v3;sPkLa-+e99=7A3Td&Y!layixbxd>LP`2=oYt;C?G8`n67jk9v;i> zl?wH82rNQs)Ck-^Bd3aN15^3O##MZ9|EyjDtvV3ZR z^W01WH=F>_BhriH1K512?~_VD4I13XM@Tr$ax)+89*A+GCmT?32-J7WX9z%p;^(*D!WMk{E#lxXb$QcZ z6U~r`FMlb%zeCYtxK#k914?^GqoU-2V{-2SC=Gz+z~%sTP;p!dla8E>+~ku$9D)hR z9wgGBP63DZ_khFzJZ+mHpLaSCjyWrW#%2mr!4?b$_?Ez<@Sld`c85u&?3Q366xhRc48f2UTFz%Wz$ znd`}Y*t;;=$B#(M1r|t$1a?&{jd1ETb>VG>TXKjqrUJ#$@CuN4z9!`3<{F}l?OB1$ zvNB2k5CatOGZ1c~s2FtF;4oMEwp?@}zRLvO56;`W%s z^X`kCqeZd$N@r6L6okM6rvEhb*6zO_Sy{*blW@{=S1y4!)da!M1nmEP$SqKd7IYB1 z^_71yvOj90?Zx&shR6(4!FmLU96@&?hQt%x=V`DCl!X5o)eV3K@60q1eaVH3FNMDs zyPvy{q+6mCuyV&+L+%StPbm(b#ES?Bn1#BqL#@b3m#khBLeq+arTah$K@J)a&r)PwKJwgp?}! zjdb*?F*u1kyt9Cf_b?EOs>m3G#xVrh{{G%&7Z-!a!|_j<9?(GeA&jDdCbR}jaoeUl zSEw8J!?m}PYalU*;tE|rX_$|QyE7dq!f0f;PsG5opPyBapk*eh0MhKLz^du<)4=qL z$?cc>dWg_P`MTod^rdL@IzFyEi+>Rh|BE^Ji_=p!ZC!B2Sw61)RIv5!$>YLbtOIZR zj%O!q&^W031n^&zx2&_eu%Tqf!uM%WB-loJVSId1?JFfjt6#~cMojA+0;9WO-w!hG?>Z&UEg zqom!`9fnbYyfIQjG%!GE{NA{saT`Q|6{W8r+7Iz?QxMomAjF(7R!Rx*9i~JYGLHlt^!bd=eCN#+uW~;aX$+5!tZlER` z#j!7#5z0F$jO2aXrabg`ou2&mPTFL3mH!u0DSwB)l=~t1Vu&?UmJbp`bhRm=hL-@c z00?I^m7`s0XW6qK-oj*l6|pQK9C05cGQrw~FVMha79-hVF!k>jitYx-|-iKlru=yX80-L1T_vYju0r3tzr{R`Uqy*)r)P_&PHf@`U+o!321SdS%U(&yc zUoyXi4i3#qj`>qKe@FRt|NK>YT6J)#Xn}j5RAw07#6mTFa%35=PJxczYvy79e=q3i}7{$W-WJzaBqlgYzzxx|gO`1mb6{%A}+Y4JrqoV0jC3SOTy zPbAFhM0|3R+@0pX);pB(`$}1ndkBbhwE(dQb6?-3h-6^0De4;!>wpAS42k8bNYAeW{CEkB}lB5kqCjCNIL(;aabOeinCb4@ayosIb-v)4|LD$na6HX?sE1LZF zQNmS*O34=|iqF$`u{68bho3md&ipKz02lvCX1^tW7be`rz6@XO`&J~8#lMt^X-P|r zC#dcHzK+RhFK$^hS4ZEQ)BpKDxxI$q+FbN}J~ay&iX>UJ+IwS?5i%idU3dUa;YF~X z>o7MrSZ)~WlmabiJZlR zVN@<*V*hcncp7rxSYKfh;IW;3=9%v4Ph~D@-D#3N?*?Wt8l2wT60v2&t+xP;=V!C| z>1XjG_5nI5;;r$iA^Ky+(AJ#O{uSfbZ^VFa-x@=rb%74V^V>bWDaxom3IC9KMqGZ- z)5LIDruqO26p~12gD_kCB(tF@&GQnE#izEEb7t=LBMDaTc*J|{ug{+Y*NZ%$Y7qR0 zZ4eY|%S9G&z-xCal$G{mvGL#O?*N0%cOtUvVgyo1n-~H#2}18&@_XsSG5J5N*+O28 zf*q%xnW2(M(oDFhFi*^4K*u=VZtDxKn#Ct9bCF>B>*;V_JZv+6vLrKPyg{B zqEG3W5&$tUCKj=E7(aMyR7FTk(^c4H5WyaO8HfN`{sItDFaN)Q2(t?ggNUC4fN%j~ z;0nz~YNMLuqlx1iiKZ9QAIA}|3HFSC>1+P`{-a~8cYiZoFOsc=X!(!eW9oNU^Y1FA zg7oCmROfLkjCLZWL>gTm-2nA=5-&lL{9OU+cab5+@WfD9P^QtEjQN>bN8~<5Igq*_ z)r-_J5jtQ`rk)e3;G9Yz4CKopPh=Pvnm2XC(|#i@Tx8992u>G|60`JVRZ z?TNWd$@n1vmbh^d%+sS;ldW6=Hwd+rNsA0xiTw*JpvsU1HC2*SVQEUjN}z0Cjg`>H zE3q;{wD)0Uq}fYY3B>CEVdZPE65#vAScyF8C9H)0UyGI4N%daw<>JtX-7L5l>(zp6 zgIHc^FP{Lu%gRMCtqKR5Pl78dE2rG+bMZ|=^{ewgW zYC1*9;>$0_FuxfGN*s|;6#n&_e+0jNLrT(c>I+O(HcRnZ*aO<@CF+Z8UJdP9YvN#}P)`6b0^~Z-Y&8Fdf}OCo>nh&$>Irx(bU&Odi0LNdEZ$ zWA9Da(@2s<(Z8ZTcjj8|mSsRzk7XZEKY;*&C1kOS?tV5<2r$Lc6bPX?{oh|~xm6Vi z$?kLJe((C59!XVMxkN_B9+9-npnZ#G5DZ><=Q>292a`1JSLl{{#gKZ%XT;f>0}DG{ zXTeSzYoE^;>BI^y%eA@WnndWJCyF3|2`0UjI5Q+!Tb#<1DOFKG$E}Ae4pdYF(KAj6 zX(NL`34FTeO^MQ?0||Rnj^W_~qnv{2fsSCrBZ)S8>P!1=SJU}OyX+{*VNdD%u%A63 zlkGmD=fbLk6e)5gx&X?U4Zuq^7t{qaxI3d7Hc#)TgO8+IP?9{-n$ zyoCJ>e?bKv!VihIobLU&=wY$A_I&-L1pl!|6y3pl5*5Cpm?;Xu`m!fpPs1%F=mr|l zIA7Qq&vrWA>a0n{XBRqcoB02K%p$c1wtU3)7{I3k#F_&_i33^70mDbank=!ar#mucW;(TK4JMBmy5-5E zI~o45M5;CPFtPG>&7`p%IS<^AI&|-13XC1-q0-Btk13FLs5D_xr$>7{WvQoU_l*6% zqyLwF$SyF_qAD2%=2}Le6~B{sEmFzO*5=`h_0AhMcj2zV$U3R`1g6r zwFA^?47*&U;GvYMzzw?f+eAK0)+>c*4)1z&PG%fXGM(t}*|9}9u!oTq9Jq@N#hf=f zYa9|xi&+h(+R1e2?x@7r$&vGv3#!p;k1pFY7?^^>RTjP~X+ca_cLcB+Q*;o8YFOn$ z_j;4N;e0ybEOc(K0QQ+DO{Nf<&6Hyq5b$j}_cl%gpxeO^P6YYyfPQ0x*>a9i^6dD; zkM)ceF+iS7C$D-Fw6>C0ZJ#L~bU<5sAVFCyHS3Osldiu6$qUv5{LNYp4v8_N3kjxp zDfF(#+=U92AlETH^(RwgbHl}<;>7VnuM40968E{N$qOskz!h@IjBuddnN^10tmeao z5sUR>QYds~4r210GEEEw38@f2M1r$yonyhw>D+BauoMznzvnXC=dunQ#92mlHC1>Q zh-kvqWZ}7Ca>5BkZ|ayrr#*uY6bKNDgc2_btue3^(PMxyz(Zl4vKXP{yF!bg{@25c zhS3nSGnk$90!z{lr5y;$G9P)rwNae^PK;dAA`}~z5mAx^18QeUm5Sv_;CmnF=0rO? zF*?4t7biq})2=Ev-JT5(2aB=)zZfqJQwc?OIAV^lRb>$*{Tpz|Vxb5M$_Hn@LbV4y zO1%o`6j5+OS63=hpJ>}KKjP9O+UhQj{_rC@rQv6MV4dqmWu&t+izi@@WcWxu; zNQ2P4lqZk%LCs|6$DmgboiMTt?mr8RsC^PL^WHOuR`aJ2Ermx&t{hW@1*nboZuRj? zG%)<&`cJ|^T)M5J&(pkqRquY+z%Y;E)k7-kA*Vvg7^L-rgfgLI8kG#70_`!~jRbWR zpMfG{;{SBAP*qv*bOWF;OaSCh4xF=rcBl$$ksU-vzM#4{F{NzW%BzF(hFIzMJ^c93(3;?xQ-H^G z{_D^!zcYk05-q>upwK2FAEw}Dkj-Z|9$NI#dyN@D52yZ}$+!|7*md0_&T^;*xB6r$ zDLUL!zYw3R)A;?ylN8$}4;{gH`>;Q9HtcR6J0X#%8>DIf^TW#~HQst;Nn*+guP652vE5~SqQ+aLD>hOpt3X>>aWTOJIUDAUJwx8Yfj5g=_*Q{V zi^LlQE;3gCu&>P)R^?v%nK{Of=K6?f%bo;h{h<1;h%2b-0UMWH6DQ|^pxqdqFTkiM z#8AydRSk+0gd>vU)qL2;6b|8a$RNAZ*)UFQR57go`tx8fB#`eSgSsN8>OhHAM)K?# zROKq8C{=NBE*XHbFgQ0;Rh`u@56wU#p7m^0=N?(gis{qd4@yLvNa!FZx&cD=dy<;l zR&s;3#wkGqgChl~fi=>!0~!(qA+i@=EOls#(3_mJih%xHf^gA*FXeaUpbHKyKKdu|L{vGPB^ zP?Ow9S;Ml&H;VTg#cF|Ik28hTOD$JKWd=vn?OC)LMGyP$coAeTEP!nMBn*Ln2g%-` z&n969yLMLi!$whPZ;MoC+B{ic(&F{Mws*5pC$R$5{;zuSe~^0es1~tV{OdU~)=rKO zS0JkQ=EGZdIq1X;U;DzXzHFM5$@z38sv%Qc zEsk=!M9VPp4QUN zi+3+917J4jwr4D&Vm=0OhhQqH$LKUysfFZqBCroB$@RCW3zb}}A};i(UzNtL;H}z` zhlyJNH$ce0;5RY3Ui{Y5naFiU56iuN?;aNN`qvNdet+G6@4lU1OsAve%(&NHe0cE= z{x9)DEVHnF{5$o6a6R<3$JRCY8mA?Wn|*8C13TFf1A4z`-?A{$q8zuV`Sc;`646Aj?a!yEvl{`cz_Au^Kh zP0-$t$^jwlLdrB@fhhKsk||KD1rpBH#st~e-~rX}RR6{mO~_jz@ikbJisDo>%IY52 zzx?MOT{yQ_p#N9ps>p9Qymh`-!EKT^u;G|kTV*FQ36VjtYMqD%Hr1KWrkuWyl!Kxw z5Ip3PV_ARIvvU7CK78%3ozQ{a1k;{1|7FJ~7s#S3en2m!V!!CG;aH(;g|o|TD-#ec zTSc_#oqBE)JWDT%NZl}v>^;^<1WGR1eCIxuBswdTWbbV~}GU#V!93dH2-JXOwMj6#WKHuk0UaItH zsHH5@!4yD&;icbLAYmLzJQ;2MSmboWh?!7Z#IvOjT5v)=c%)H3WW2oMPGYTD~er7o7de#wz(K8clqAk$jn5DqwPw{7Xo zY{a_j&4V5gNUgQ1vMAn^^f9Ig6nUkvF|vV7++lO}vD3fh{OKw;yua-2;cpn~GM!7o zZWKjEfdu$*Iw=g)3y`^z?AA6ME(953jaY&G2RY4Da9zJaW*Tb!5)Q&{^U;PK6_Xhd zw-g1wEhjR(?l77X6OPP*P!`S_UYGEbKDMzw4MNq!*)kY7xDr-k1v`^r) zn#Oa#?BHF+87jm=`ZXFW=r5bp*jFN(vR?eHWtvpo%icdig)CA7K(Mtki*vekN1NjH zQQ2l55Ccc7eZZpozYdKJN3DPgML3HI(@Y_mL$hfPEPwhCBLi&|fMh63{&DQ}jwC>f z)%Oc>;JtO>xBBn+Jxu^Ugat4B_b-QTpxWfbnUneyOCpF4x>E^{ zcnDyggVGX`C?c5xI7lRclndb0VrQXLjez6-dn#DI7W9k)37~>=3N+6R3sm9tFG8uT zZhmZx3KpoG`ckHa&4^IN8`>R;MxWnI(biS}Fw-7)77fx2o$_sWu8I z1yUI_=-lWdtL}zGl}?gs|052*c=;y@tu#-Vo=GhV zTXj_R2r1P-Q?%9-vbrckv6T9exv2Wz(>VpJ(tv;+oOKu|bDC`kP)oAx0QlNeVl{qs zOHX!XXC-_)?gk@xNY3Mjy65*(k@5W#rEIU)gFWWxCa+9q2^TJ#ng* z>gzke5QlJ1v{J1@_b8K{8m6Ry)DEzcQxNM3!;1rcV-FX_gX#NFRe`w!ec6Ddlj!~> zU(>GZE{U@G^0D@+y;c!Bi(z-^llFlX64B`qCi5;$(U;OVgvH(--BXC8*lHN_72aer zZs9(Cv0Hr6G)iq7_2zaSMq2EK<`YI+QaM9byQm#P>jbf}eOjxPn_#4D9SPgya4?(b z1otWO93Q|J6^dLZ3}=xD1=^SJmpW>4q&wl}!D}v2ogOX%TM&zRy&*a|zNzIWajX}P zEj0F1+XJSYKAYOb8ZdNW0B8Ml&5eK^#aFp2VK3+bvUn!UlHK)fHVT*|eU;8F`vs~S zmC20-V?-Sd+vIc+H<@!dQ`Ig2Ctmu`aU;Ep9p9vwo}$``iGl4o8SwCK1}S?m22>c% zd}8O}YuP!+5#x&b)A{hhWIB=$RkuR61T1FUp0D{JBKf4J3{!YcK2!_mbx)iZEs>O~ zY3wZUu88q8Sjg?zdnL+L#aK2PQ*l7Eh4V*Y)a&ZKbtsauNMUT__Rr2X)Sy7!6-<mattMs1e{B3xHMVBD?VB@`Z*VnH--evVmY>>S7xPbM-yq)I zqujz*yiDCtV}$@BQ-Ua}yTkTaACZgq!-?t)vDP%*u`&pi?NM;1Y-36E<`7s5rO?)@ zZ+Fsel)Yup?vp&AWP9pctyT~SVPgS6Q}7+=VayI&Z{lgCAXMyYq15kP=g>R$4$(aa zR8fZQ+hjlPEyz36W;$?S?pL$!ecoe%k~@#fz=bW`R}io=Z_PomxZ1Xo?;@t`fSeIy z`ECdusZV9`*|MSwd;h7_HoeiRi+@J!?i^zmt+qpqcT>rov!SPrm6okik82Ib4EvYu zwt7?X&iULnWFDB`19t~LZ-8kG<@y}gvlbI9%yn4C&YK@vhSSZCYq3AsupXxkE^5;- zk1QBK{9JORe)(@AN7iu9AxG--?K@@VFFqgntWI{ry=V=^Eocxc@@#P1R)n#Bu}1i^ zM^|#VP$79`GTrNeyn-d%Uywt~x?&J7DI6}Wo8grSM_s1280b#jyw?|?+=12|$qn6x zu$#oXkncCHjIq%aU+yM=jE8)Sp_P!NuBXEVOYjWp>T|4A=IyyIVk7m z4Tni(Sri6a+27nM6%#w@;^2ELa=$h)_hq6J`V|JY;EPXkwGev)xEd8@0%5D9ek9js zevs4_jkZ|bx}bZW>)O=D@*z*KB2Ig;WTS^O8#j@Kz4iJd?dwqu0O2N70_X#^-Ip3M znAkHEW2xlxSXVQf&u4nMZrN^mZf2c}$zwDc1J)U|?zjtNlYp63F z2N@aFIm%Y%Tb63_!{~OmDqGDtPZ0_d>S0SZm?r$Vxgj%;ET68K_12U2c-TebDs&0- z5Y6lo{Sjy0`3>gx+vG;yDJ4|JpH4?~i^RLV-*6iEJ=PJ!*jc;|i@T?SWo^D4rrV_; zd@|~TDi??gb&NWZ*Tb#qO}bp!$X?Y8i~?QkT{^YiagF;h_YeQXftcjsYF-?^wi>>8 z`4Xv@vzZ%d&`t>HZtvWjxoA0g_0mF4bw*=bX%uy~JYqz%eFU`O&qUA1SL?1+lajcV z@=Ir>{3y1SUMbB#vO?!NoJ~topbUFR;z*EddS%OWY`d`Kn6M1#m0e^=UnpRV6OEo+ z_}dGV@r#U%%33DpPuYuj8Sj9aD=Q7Ze@C>@wb0-csvP>i!R({&N>H824Bx4#s^>_& z--SuP8qKw~6ee=TDT3iZ?t-LaPoc6RQHUVn)VPbu_f?OPOXE_45OaUbFrYwS83ybT z9APh7hu9L`c9H~RCePeb%s}71BlX{=xVT`AJ;5u)Y8&dcT+%X%8bVZ;dZjz4L;B(F9*|;xS-+RgTogG zs*SF0^9$ya`MxUUq^A&?q9c*X4oH~+oNL0`80&E=&U@?3-I*|7a64P<_3qo8v9X$x zvucc)jH=SElo`5}3r*cosjLAmN?CAVG%OD-$=#|xiSG0l%GNlYtg)8fP>lQft+pF! z6~zt_kE=N7qU+08xP{7L=qf|<+K`CYG^)peC}qx-N7(c?btM^5krbpt>P%pTHY?o! zC3f|W4_pEqwo7>73&C`GY{&)eP0@53#XDsTyLcVWie#;9_Pcf1JF?!n_FRZh#kf7*!^(z)aury*Hcs>suf_FSUy9q&$Q#eRPtd!&fvqFZuYL zWz)6%=W6*hQz+#>UtXPM=@iCxW3FY4e=T<>#*7lZc`>HZMK*t$x%qrvI6KRhbfXX= zYzDatoVa@$RkV=~KXU3@IhQut(^4v^u6?*o+}PI0iDB5*(DsFIYZs=STie!3XQ!B+ zE!o%G+L{{=RjXeUzuVi1#i7bpGpDStyDzcfY$^;QR8RmVBvl9*i?;WoGT;xJ&T>>R z!tUPLfrQa2dohw6@xf38n8u_HVv@S+=Gjb8qmS^1$mIh9k9X>q%_W2B_5bCUA$}RD zV;avbqs_h-uhdf)n<#pcP{r%b?Mt^k{WMhn&NR1*;3<0d!@l*MrfrXgtrp}e=K&hK z*-m~Azw#9h6wqgq3Wij;UKP{mOuaSR+pXjdeUkVZ2r{S*Fc_IbhcL=oKEIvfjURkX zQ9A%J_1$m3O_GOu=+g-nt?^jfc zhC-@_Gv)Eaus^y-2d}Nh_34|Tu$m;`)FVN{1`8rs2MUjh5zeTrrX}8R1l@j~cDRD1 z6(1Zy#u&79=?fxaY>ykO{0W)1ruH%tsXN4SmQu2lGDp}&PehtLq2_Y$HoHrQQJat` zH#fR|Dw6d>qU^CVK2UT$em(Z>FcHvUFvr%MDT)LOiHt&edm1taeKCJ7XR`W zo+Z{X!FBLalylcckJN0_!t6W17Mt;Jj@bTcdP@ixNNEDC+M~;a%5Q=4i*=i@w?3Af z8g|KPPd5xr=lTM8mf$VF5h6fFJBG#ozG?5-?b7yDKLI0qq z8+%us>|pfF9h$I+@Kzq|joY#YTEc-7t0F?lqqo(CV^s*-qVsqe7ph_zpzKwf0Jmqa z+Jw+;K;Unh_73FmaCh?e-mTURA6C#~xG%v0^vBa^MJ444nPHEam|JlK== zr}IAl{#~Z>_$YBRyH%67!wJ82BB4&B<7O!kXrE2)2k2UVBFow^bX>pD(J$J7ri;I7 z4x4+A&P0{F+E)bBftGHgtr`7zaoC$ z#lqXFC>l)0Xc_3i&_(9=dhI@@DI8Kijh^TnppH(}D_JJ?!&iwOstTY1l78>3H=}yV zD$Z;+@7-NY`_^BD$?eqo6Jr6bKeH0!q5jU#r^{LR?+mCr?O8zaBF>BK#Cz{Z>1tXq z1=I>@+pK4YpFfjOcV-@$*u!uq@G{ts+D}3&M}Li7#r?;2 zPz${+;imR}g}#9u3%ABiL_t%D-5`+;mYqY;hhN{eyS)y`+ANB{9tHtO%&(ItiIWqz zCXl|U%ScsQ-S1(Sto2H6V6(8sdg}RO z6_UISeKDdxp)Vwl8~T#t@r2HZmTu@xPSq27BMP~#H|sDywOjq^w*KibKegxV#Od>| zBLmR``=8En6+PN*a@!*V03L~l-h67`M^DxI(NbvHz{m_h7eQmK5Mnr1go!N;>N}nz z2IjvdmF>AQXoE^vkaY%!@$HRNb343u1d(3Qoew)bx_!AY(Sgf3jHuY>o2s4b6T-qV z-=4;0CO6oT$Q{g8D^SR*U#f~KU6~M z9$Y{eUwqiRKMWS2Bpoj1!}0#hLwdab`nTUE`+Gm`w-yW{r)rJtfLJhX)^+WLl_1Y;Fka7_L~f@%JDik?yR_y z74xYt%COpT?Z{QC%W%33KFu*-9c@_MQ58-f&XZ2g;Vk?n%-#!}yQIRqOf(fwWJ51| z)~X`2acGeR#pwHuUbVj^wO@_PLohwDRCA1O$<|%_v-T>H!BX5oA!V4S0(~MHi6PzG zZ~fS8+`KDCwX@O2B4z3xc0ov@YKI0(!YD7FR5Z>TE4j*kXPSdzpstT3eN5+?nBsoq z@JxKzsy>XtSW&^ezzV9~BQ z-Sn=c*XS)&SaCsP1>PD#Mhspq+3NB0fMRDbTc_vLZq)zc!DBm|?f79U%%$AB_2X{W zk>`hTJFZ}$-#IlQgb+x@2ejm%Q~~@(U0#o+NyrT2^v4`VE+Up&Cd>fjV79QqWxjjS z>C#3Y?EU(?1C4lgyr<_3?AQgK`6D_4@_=7|KOn@7I70rlWwL~WR3q|xP3~4|0K3?| zsp_rn{aa+1xLH|qx}EI1lB4P+Xk+EFmtlfK&NQFGQTWmq3LxNff#K>Xsi>?~k8WE+ z{8|PUapIm4dDYxZeJFm%qLve)=MplSikJxPQgO^3^<9KAlH6B=QzEmWA#gbQq1A6? zH002J3MnmUw{hra+|p>Az2?J$`6!^J*HWp4dvnUwlS z&GC`1O#k$uxeqSsc5Zr%X{TCBf$3oHpBPz<+l0SSz_&HVufgvmhS>f6+WkF-{BXf2 zbXue0vLM)6(yG*s3P=q(bUv=?3W}V*C4N%kztbt#l)~;Xq-E8+Lm|x;gUQ+2={a3? zmzYC(yXP%w;BotYI9`tBGk-W9E&_}aGZgWF<_kTc0KgwR9roIDf2d+T$?A=vpHwbO zP(~FbROpBmV)U!wHBqb7s|4l(C}AGUR7x99GGM^|uGs0!Ra+1R+vBlmG=tN7a%r4}(L1>z4uF zE_E30@)qFoV&0ReASyY*F_q3B2jSI_MF6STbP|I+)HQ#HP~zBP=yrbbibv-Qs z(Sjb96ItOQrH!EVwZj6C4b;8DA)LET56ju&4)@T2Ai3IVLvXhgy0X5+=gP??HK(1A z+(gBb4R7tsklVmsFhv0X6%9u_Q1V->&_%mW8=XWIt;@ega?gQXg`VsoUcV1N!?Piz z4GB!JK(a((WC73*pKg)Dd$@YukSfVBEz(SBqp)NFLeiKw9TRgva0AEU{ldz|hqkm~ zR^LS{6t4Zr$gd|=e~U67;?r;c0gCx=|DkLNNE5^cK|2I&W$&VgsK=o!C<73s9nr6Z zjldfmQ56jYSneBtk0jplznH~1a`o+&`!hn@9;2ZLJr*x{ z)-NNdg8%-EK9tLd^>L@uhEx)>2t!Hw>Yq@D&$e#AagaYZG4ZW6Yt*G-kxt!9aOt8@ ze{C!rVY3lG*I?X1`;FD{)w*q`i4j%#m(7NRjYbUCsJYUl+(HKENlD=89sm9ocdCA zWZ6J=MCffO>`rJ){HfdUz3bvq(^nS}#F*o@8iREP`y)0zLNzz?LC=AyV@B(L`g6Mk zg3`SxCQ$`7>!dX_{~K+SwaI7#>$TDuXeousS+*{@5OH8p zwnfQIh`mU`wJgRa#zaveY%tskZ<${Rs+^7ygC^S&t-_Pvj_pP_mab#3P9(EMI6LXx zh6TnC^g?}RF%j!F!)RX9GrPYS28$Pw+8~<}ne+^Zts-6=b4t}zWjY?OM{`AK6-c#<4;ih z^i4X`^I-FND{yognbmp7G06o{>`FkI;@FK$krt=<;pb@a8g+H)a1m{dPeX!H#Lh+g zcYzfXzR&(Wbq{flx_(#eKAL_VD_6AsS`5D;0;#>B=(z29G=cWeU(U(O@~=PNTfS0? zwi9`UX8DM(G}8XP%Z_?V`0>}2)Ye9Od+6Tzs7us+p*ERdf@O!~GT_hjz_kUj?QA#D zyVu_9UY#ufsf2z~qdhL}Y&K;R$WX8#r!7fde1K?bo9YZar6YR^j>FrihIlu$F1A5O zw=(N>g9AxvH~>uOwz)Qt#&W)lEOtv=_m(n+PDf~A0`;B3S(M!q;cZTYl#PZR(YG^^ z;@1IPd|#X&My7z4SF4F~gBU8KZ%0%sDY1=5|7}-OLHvP^>{Z*Jx!03Y`XY+agys|) z%9lstB>3Fl3EI*vP-_u@(I~<$1G;J0Fi!qSc;V^b?O zDk#GNhK4%i1xsn)F39AD#i~g2?tqp6>SwQwhUw)D=kfxya-ThXV@qb=NCh1Wx32r_ zuPMd?sl%|XE>FjcIWUW(Kfshyb$4)#B}SKXX$SiD4zhqyfilW{>fMuvl<#_h56C|y zcBF_E!x9x}Uw^f?_4jQTDOfwLytw=O4&qZ-f|P$iJ)Wa5@sMu{)@*uh13 z^@V{)=<;5Q=-7$4YHC<7g+UHTnA~?1JPHe$j;DP)+fR?IR4m{}R47lEQipMGJgU(8y9BPJM#gi%@g+;J`=Q z)NyktH>`GFkuv*fgq#^VN2U7rUR1J~a<=;U?CNvrs`~lUX{GYHdS0k}zAAsdxvG6` z6fQ14r?a1Pg>v@nMXcwm7j}J_srEMdzKE$wJ5Zy3(0?GH+mkMCE8*qKQ0Kcb(DyOG z+kf%*;GKvr5-_B%;rV+&XtMX^?}3Z9^$u1#`m4;-J!@ zvcCggj0$>TyaM`sg((Z;DafD734Y6s0d!qE4UtNO0pkkvtup>}A(_shKFLB$6LQFR zbUwd^X8n6yiQ#WSejEsJ@b7_C8u+`rd!gaKdBdDv;-#{!ef}-^f4(&QRH64NvaM5q z@^TmeN%Q>%#~M`zFsb)CE^liy%Tnv^4u~~pJvilaLJ&G$r=AB`zZ|RJ8r%!po_j^0 z5JRq0Pg%Gj^qH~g$>y&QmAS|4dZ_+`70U?!%OGL2B}&fyA%6WrA{<2?*lf%+%ApN~ z3T-$Bbh|)cM6f`?4>pA3QFtGmKq)c7Z4cEG?a6rk{~rGM>u>b$_3y6_taNSCSE0)i z-@K{2Fwfq*ra&7oYhCTQ&GiiRR8XoTq0V#-j}9F>;&Z^0o6f1qm^wywDN*YTt14)w zzF*`;6qYidEqh~ka`;)!Y+Tt6wI+4pAf+O48rr<~g6hzZdUVZ|KkN=Mu?=g*qA^#h zP8079oC^pkzWzsbOAlS>>|7fyxpHl+h!KGBi(F*X>&@gQD7!1r09HM^V*N)@WIVjK z6#0m{}IoisM;ck^2G<^gKW(d4}bc!$mw9Mi|PTSf_2;N&INwB?x z@7$|kya)tlB)90+FZP>v)*oR9iuJ}R`@)5l)quAC%ggxfKf;t^0Xl}?yX*OiW=IY? zT`@s7cv}m=g53W+{OvzBQx8dNi$^AX^Pe&ckl@#zXv`us<2(kgXv$jdj}qM^Uvu>W zbtmW{IfwarP)>yGqb7mUT`&N!j!+ow@GXh+p4{wwxOWPxbnm>y$#6gv-XgMQ1zPlc zlw0RLB_Dd~=187D00rhv?q9Z1gqI+48CQsw>Tg|iHF;=1Y^&&4>XIUQR1unhm=g+K z1O{sG|ET?qxbZxDLdGh&-KpwteamhY(`a~%JWn~ND z1S-OFuopQ|bVQ64L8Y{@)|vC<&;Z?fho})Q2FXZgQ?!jeg#x;}o2Y;==v|0}b?js5 z&#xN?`F+a@p4ydK8Q-S2l-MwH-71S{5~Mf1y_L{?)XAvWo&=;@H`3#6W;he*P+>HM z`g80UcP?6&6gJ|^StYy%Pz>gXDGEJxI~xXY(UFisH3|duZs7ME*VOY0+MLS5OHOuJkuFvQ)ifX#eJgdBf}m#X_h#-R@`7=(mNeY_JHFM){q zCrC;ls8(pMx*Dyz<(g`cP1c4gZy@B@$CIcy-Q^3EC)meNHxO_UVrYUt#Cd0EAc<|FtAx)P7@qwECI{e*I)p4-6JB`Ce{wU*;`{i94 zAEU&Zib0`q+*RqYY{5s1P!J|Eekeq=;=yU@%)+cWTTkN|TXcFfA6ptF6onpg6J~S; z{WrIDBuUw5`dp<#81xy7yZjrvvN54&6GrLeItw1U9<#TU`rk zSKuPI1zv4w%t*8aW_qMTA(Q~x^I@o*zP)@{y!nh15Y+PR=E0&jb8J8oL-xZyzOgzv zoKP9Jmxmrux|l1<G|tACjp$Y=Mi%OVd6cIV}WrevMk56w%C6IrO$J*?6GGmGH_% zAh}Omv`{BQkqw1uAe9O~pzdUkb^41YG>;3Z+sKjeR>qpal=IKBcS+!Yi^Habsa<^6 zR1uAKfyDg@W@_p-gNXT z4Vu2~zm#lNUHAv~y5Hw(73rD`b0gY3&|xdvOn7e2QpnS;r(_JMlAup1d>|=J94~wP z&L8RyU4syr`?p#*;{d(E3aT}UZ-SQ%vCofzOf^>J^t4F+cO)}tazRI@UcBptG&h}C zH2`I4nq*ljIl}iB065PI9XVqCwu=SC9^pf>0NI!0xH;Uo3vumqNF=(7PG?9cgVf3e4_G^)F4=`;=y7m}cd8pPR|5c7?1ir&5?IF8N(iwEjN0$V zvkIqhu4V-!0;`X7_UI;Vpc-yt2ddUP+f>yTQJz5Z`UjOpi+}0HeDY#~NG!n9? z5H_-DD^EyF+b)%Dy3hb0*vFmVVc&<72;0Jcg5Id+wXB8152&~Z-^wZ8BE^k#SPm7L z;kzm6rV2IP;e;##>u@dadkVi&m(FlqULwVEm!@M*H((01Q-_)7V;-guT{Et@g6)tn zi#IPfh*+xOW1f%5%qawdr030oxHTcueD8x?Fc1}hT-yQd?#3?2h!fL?Mi@tQ+9aoD zFS2-PMEI5mXQ>8QXisN>dq_YzfG^ z%Hfw68+Ou}vvs7xn-`WzY*|Byjf4)F;Gn%%uY{72^^>)xJ-qIV*-Zz-|6dKQ#6%Fx zsjdu3G_Osq3d-xnMggocbl(_!gCqSq%=5Naa@Yp452yq*@<0ds z1agD1xm*|dBak^n%V97;Ji-#;-I1(e87zP-SoiIaz;-Cqlk19~QP3!5YY)iRgdv*j z3sqUqyudMWXFFY=o0ZYp=5gb!s!5jULdA@T#>#9)ZAJxK7dwH4dy zPy55JtVTKQRPwqm?=k6{ZRDu~jq6hG_nhwc1{O&EL}nHWIt?c_mV-W>3;*y+0IJQQ zJitIi@2GPuJEpqX=S#S;f8tF%s05D=dj9No>FX?H{1|{7Os5kE*uy}2yG44_aw^X9Fa1`BBe&KjdEq!{%XqU4}U+{c+tw%E0HX=8z(ZVIG zHrrofq6ZAx{i%w~dZ?{ZXgiDt@;R&&8521bpItM)~kM;68Tnje7Wf} zzC=FesZl+9K8wgts6Evp>Fvc3dl=Rm!jKEL0E84p%8=>x+ub!?r1H+>Hk)kS_(Dcu z$RF&zK%nn-&(5~XbQplnemZbF+&cwvHsEv5x$}B~%&jdPupu-ASytl@XfHlA$di(#@o zJDI-141Bg=U=#cci}d~atKBCDp8u{ZJYlO!Z?W$*`aL>~)Zw&7u|v=WmUeKYbDk+0 zeH)?NdoN#E`z#-AL?Zo7h_-Db=jxk`ia3xmyW{rk9sZwsejuoXzU+7E7w2VnxxpaC_QF#ZoN;Wp*U_+{%)u+8Zp>z7Tq}`6~hWhRq=kG|nY`o+g(_@$o8%pH1 z!>d|V8~ELNZ{6kk!Mah{YT;TvB4!Y)C7Gl-?bCXSx8h;#QTSm!wQhaDQj6xVP#X<0 z^M~8QTu8u;%-?Q1zU6}3@bB*X@Wl(`6Jxo zR=vG--_T7i{EmLL-pU?Tp!#VUEkfLW)BxfMgOKzN?eS~zBjH1oul-k z)i{Q~;T`-}7_Nq$MsC&3`^(nR>8nI8eVxeu1Aafdt}ftNY3nomS#GGG zg`fg`R4VsHXnTMCKy81PpXn?5Sx;Z&OX=&zWzebNm~Vq?>}$PBl(V^Xs~X@qx$fvv z#^b+tnT!4GBJXA3@5%L7`g?jkyq{l>a_M%WKZ-=_wdo%;Fuw0Xon z6F6*XACv)(<;wj8=iIX9EYF>_bj|Z{`=|8%ytO=UeWAUL-($k5TDa|wbE(|7;Ae}T zC8y7v-!t3C;Ze>{U)M+Utnqc*I(IyCJG8&Z;?Lk8Jb&*pw2q)d_ z+^04V{`P*Jd`5PD7gXS9Wqp4R@6KhM%0+&Wg}>+JGin>i&qwxehke}keP#6qap)?W zU>H>W(k|;|e2b@xH_+dWeYTHg8O2X(@OO=QO=<@^9h7mL2cB!?Y**ad#&h6VBO5ee zj*Y7DKEbVvoCoK>OYM6=uVo!o_`AyMD97@j?=jcy^MZGEZr>g0c{Snhrksb2`rd+X zVjFxfvar@#SMa{SD=atct&9!tYTSPPonZQOTvz9r>1l}HtX9ZRFM*FTuIDm9UouEv z7*>}L*Iz?pdKkxiXIlOjt$U|A#_ip6_xxM= zkML)FRy}(<&wM(+OCvt66dqpI3fuMt;jw zoIGEbcYzDq()iiOD~8YcMxD=T%VS^UPjKCLATQscY}yf9PcQof+gfNHJdV=QrccGM z?`uQ&9(3oaIAz(*Xe|xUkIo6dj%*tv_uExA(DcPQ$<@aS2YaAvm9lVVtD>Vk)H5L% z1+4_?wceS`aeDpmZE(KGCgEp7(W$F%wA}=Cz=b+LYy4Z`@veKSXnGFdT<5;fmP#^@ zqem9Qd-FUT(&Oc{&fOX5@yhUbna4|Kz6rNOa>L_iK<&x%&Xv-;*hWFmM(UZRw=ZG; z9GmP@`Q=5{ho2+$-N&cPo?G=77x$hi({00x*fV+Voe}L|xV5RKUq=;wR=K}x zb>^{sb!Xqj({%|=0~LK!c95FJNp*IC7ox0^Q?kn0?zCffS^l~FW!FAkxW?~8Hv#zC zEER$FpAqe+d0gIA9-a>KC!T+iRr$P-tU6S3@dEd0F7_SdS#dHnom0m)_zaoJg_o^c zJWD24@;dq!i!86-Y@nSXdgj8$(DmfCO|uG5#;Yx~(8AlXde$a?%R>0Qmx-gBv3-VV z#QKT!eFy#IJM7Q4J+pXeIwQWY;0FG_;WKfs?R4Ar?zuLHiiIEm;MD*ubvdA}R{ zzWZE5aQOs3KS>|g&xN%uKh@)KM~y>g?lcxpEZ;&c9zRdu=UaMKiyy;2*Rf;Rd@=s) ze)BqZ!O3r$$D_0EGgdSTmqp3Z-^yfbG(Y|M!r;tF<`pX>0mu4qJks}Bl)D%<+b z=Ye3y&sH0BD8o}L-{{AG7C)`rFG!B6DgE>KaUWOg+0Z`P6~^COiY|3oyNqAAuOKV z%6Nto>I|2{ej-OU58HxvKhsa$tKH%D%$Tt_eBL2ei|v>6EF5F=^ff;B`^tR@ewGw% z)VO?>J|mx>lCw6PFH294xA*=#`Kte?pM7^&JUs?s$7g{Dzh5`&%7&P_j@3QmWHFvg ztQ@q%xN$Ph&h+ld_9x~qEbCmW^N>V7=?U%fMuj+D7`|wS8_$V!j z*rES2{`rkEZDqB_nB>dRwZ!z4vaw@Z?MQ}7Tz_NCUkI-mPO*B?Ha^DZAzn{$$Em|O z>?_qWb;$3taZi;@PWX1S4Syt_l%8FM`Y`sJ9r{d8ZTh97qhd8sH z+30`)tV&vu22Y7;{+POlZ%X)$@*O8au~JSP{zX2CZ5PsZ8JF7}nNwu#t2N~- ziJj^a_@_tTNF3r(D`Uq{w_?VyXzM5@-`eCtrf!@#3(P(5rcRRGamnwl3qLp3#iLfE zxVmYS=2yeFcddNx?xNYc^DsAkog8$}Pw&1Z-~H1=cilQW9X2c0xQWtTXHxb%lk4G? z9}F+n(?1H?bkJ^;;91EppWL4(lyeSMRv^>0!qqgEx2&-8p-nRK!PbLtM$iFUr$uh#rpA%8!+N!6EK z_@*^JNzz!2H+?TZ@Tvb{`m$0h<*I%uSIDnAXWn|`61I4R^{kDv|g@mJXYyN9&B5Bsyi`2zOD zOXB*vN98rZB2j!;&>XyRZe7To47x`p*n>CyPnGn#)yyT^&7%J?V>CxE{e6$I#!~yF#w~shoZLvsx>y_bBb(r2IiAlO6&*23`}^p7#@lyytu8(58`G z0gMu@2EgpR4s$u46!OJnyKz6d(DPy3sgLXHZVK0MdQ!-A1-}Xcr#E*O>vX!FD+5f* z#cD#$$(y!dZ*Cgp5%+!Udw>(YMsnCm-9Nxw@6>z|k6M*``7Rx_8adpLubtE}td($N z&^a&N0nUwDbjH$&&iZsB=V{T(*Hd2pPrgR~rHCOO|iTwfkJPR==v}PHK&MI#)PL^e@i` zF#pRV+%MVJ9MH8|GnxKW^ULXKq-|+{ZClL&;RxV#XpP@LE8e`BWeIaNdfy^_+iQ zw)$+HL7$V>0C1yHM!6z)at63pE7u3Gu5zoEt?9l2PLaOLqmv5gb(M1N1io*D`yXAN zh1Ui&AkVbP%sCsKbFyBoW$Rb9ME$m!^{df+xPBAaheQ(g>?AsehsYW)uj{i`czvz2 z>&QH=NB5tu6N^ZnSJg-Qv7AMk7hZeq!R8;{xxZ>PfDh$L$DIc7C^$c#s)>Fv)dK!jN?@&= z;`(%49BLZ0#Ph9r$T`7X(ak*4fKL^-Esj^n=)K9o982Zev2_ld@25pAdw^WhNTN(J z`G|WwJT-Wnh4YckT|U~!Bz@PNl!4E5XEG1JcTUe9E=H~OO~WI31L4yZI#|Z_WxO?> zV=r?&Hnb(C55JV?j{UD*7UZb>ws}aq+{psvF6NH_zx*b;vvED^P73LAeXaX2^s-V- zwqW1ul^x)+?i{sdt+;*?rB85fa*bTsoV9bok8JC%JM1go1~mR;>A@N-*yuA@O%|Ki z^&*^+Vymle%3vT;v(>~QZ@PL`T)<8cTrg1ryIWiD4c=s{@jbMCsWOyoK+ql zd)UdJd~L6z@YqOOH_W4(s;@y#Utf%iK_^w3N7vJ;S4Ti|k;m_HKF3IB;C$lw%IAV8 zPKW98#(nw4fyd-ank$h0Gn z_jrDjq>=x#$#kPuM7{@dOfg*t8Vvi>s@961swj7{ym{9$yrTaJb&!l_=^5RAad@L; z&Wo`R`dM)R^6^^pVH@%GH35fZXDju16=AxOc@w`V@3LALugZQ7q@T zCiUgbQF+z@-K3SOCo1}VG2a;uKriu!ts0MY18dd%EANj%4~o2paZUhMAm`qL{Coe_ zT3fVjCJSv(C!JLB57g}d2m3wRkJCQtw;t#(EHmE+vQHiiH}@W`!yOCgLcLQS zAr=k}{M5eNFaexSc+KJxbh0GqA1LF?JIq2h@NEgZjy`B_NW3uRu=&nIQ*sJAKy@JB0oo^k#tj*LKExfHmKB z#=y&uXfNmtbdT!rEfT5v=gK~Ux;Eg$n&h+qTR^10{K-)V`48=he3y%F133GjzVD=xE6~>oFTB*?&RX}K zmqI(h@iD=%nFd(GS`fGLgMo)I91E;8Zk2;x1??83>ysS-@GuGV2lU{_U?g+XusK!h zXI#qrC{L|B<6OY_hj2;LxhtG6D#WL<_B@m7+dDp|8vlRh^8-Y)z+zJ{Z`>eMfu?ErN_@2@o7A87Ns znT#Uz497)z9q7}N_S0vczimG+#-0!OqF~EwUpxE8G6>0cw|D&jJ0{ z`XAYufZxnI<1X^d0Av)TVIwtvfCK5X+xKVW?4{sh|Kmeq`@V{thCB-R!Ce7h4SP3% zee;!_5bbImvVkHENF(lzfKLG5NupimYrD~!-K?QaGc9Yv`J+Aderc_N&K%(e%2SWv zG|D-8zjFrf6yCNQH~o)!A9&G9pEuqcZd=F%fCuz`3i$r^Hgh^DKA5#y^8%bJC%fY} z3TC4FCt`VXo$Y}`ppmFEVBch~6kc}J&ezEnSvdFayoyIQNzkums6XG3O}3OkTR>HQh-jd8ot{rNFIdXclwxjvhpJm6<>bEqD9OP~?VKeGNq4djtl z9lk+-2JoKi2Fhp0ldG+;R@ zs4I5HUZR~@(ep0z6ZD^?0XGM|%0Rw*)4!~ozAofW0`wnTR8H>;a2_u+qX3@GalW88 z-CwQKx9t?H>1@?+rl9Yy0sLI}y-MKl;R4BG-a{kF-(r7Fl0g6#N6bsR$p!V*tj5x@ zRd)<9%^?hq5m!O~C3s9OXx&B7O|Ap(?{a48B_|>I2JpWKGV(xu6C=-{41GEkzZtH7 z{aiR+4o`n7oMro;)@k+k0{=!i`eS9qu&NduSVEh(YFzVdD?HbQOrn2TPvBX>=Si~3 zoR>P>f6;Sf8ejdMM&Debp2`89BHieNtWaE|UcLiNL%134YY?=WEx!ZsQTTcxb2jU+ ze0e|@0G=!(u#Y$Bq&(oetA4L>k_6qC{l{I=^iRfH(({$vHXxmT-F4*$#O-ksbfeQb+C7TR%gL23 zBWqlyJtrISO$umDZo&N~6SH_+BDm51)=^i?>Tz^mSY!WV-oly80QRT82;sGsS77e_ zk05tp8#5-1&$8$l@qW<5f$vnRL!(1>&PRQab4ectJi;>%bQkqW{)U)oH(dUQTq+FMkGJHE9D+ z^BM)*r^Q981-Minc2XyE9RrdAndYeOch_(4FCT91FLP?IVeY^eJ2>}D66R4Nd)P(e z*zcWRFYtMbWCpaYCTAMIGbhW=ItlAJ0sP~AylC9twNiL?J%bNfv(N0WDBqF4s&YK& zo~L2G$Hb#QqTW7%|MK+?{FiDq?meIrq?dPqpD3E);*{8l5&vu(XTCgZF@L}_pJ>$q z2k>VNzVqvVeU4=6? z!1t{+$=Ami*97zu=>xr|^D{i1fWFr+CbVpbJXy=-$*CXAJd(bk6F&`i#-EqKnnZ4Ccfp_F;WCO`&^M+MsNjq z6VCFvcJbKdU(Yzdxdok5)QKu6JCYp-alhu$2wTTx`2zoAyKJNQK(=V0*VpxQQEaG| zy|vcwHtW6@itW<=d*=67KzCOPcWc~!lP&tJjdq12ltBhQ!Vkv7F_#!;Ch`x%>Zmjm zna1EF;aBp`Lmi6r1Z`_v0W1a`7*pw$9mJEPM8A6ud?D|D1-%P#1mk-U4ocr38U%ao z+wv9Q_Jfx>Hug>92lxlZ?g8zCwuycnXdCK>=wH!i0^~=O&*1qTt#9JZx~ZBoSKuKD zwwaYJ8)|E2+fOf;rp~$vz22V-t_%@Fn`3Par}rLo#UjiT`0n{g*{P3O zB)0?I9L^92{(yE!4+e#7`BSx`Z16eZO=?ffyc;YdgWdsri)q#!)7_QAC$!xx*>01b z106e3bghdv29QP2Z-M@k8}cQf4l6eNx|zFWi=QAo=$uy4QBZ+ImRaFE z++>iS3jGv*(8@&DQCD+CdYlLNWfXjC*dN>do%1hy)Ntsmd=D@lgMMV@@0=r$DT0pq z9{mWTLf)ZK*>y+pbOWsBm2x7IZ~eo_N~Ew+6R<@0gg4lMAggICQ+yYNi8>3+SSM4$hi}k?>fM z4bmN;sXd9cRB@@ulSAhN`S`+X3cq3gYG9Y6bF1l(hq2dm#;Cs~x3Blfo|N|&on}2j ze&tH+8S|0Wusrj&-#V%z4j|q36-|ir3vvLi?*_kXBo{!lXE<+^FAQF-ke29ilwFKt zbXf<(SSnes##7ucYNKG&KpXSPNa&f?2O0NH@SLRJn`GSD3_dR$85VFlhEJqxZIWRO zPZWBr;fyv{wwo4W`K+>+-YP$3z7BGW$X8j?rJ{RjegDbwxvO(`!?yM_!eg}0Hd+ay z%V8Nn@uv+kz^5aMTU)k(|GT%_%iEDmYM4M zjMNwoJMiz7to0sbqdLoiTHm6Wfgq$)ST>Hw^)`%~L464Ly!8F(Ij^=TFCmM*`62ov zE!YVU)G`9_rTb%y4FsJ!0e>64K6gSk350V^$`DSEwY0RK-cKApAP*NlRBMQpk1|U zqWlSHaE{{mFt-5xhiDr}3XYR)ybQG213pG}_L*m7osripDw`g(O#f<7_6N zw|323bW9$_7gVj>mwbKEJue?ug;rZ}5}+IMH|pKRxCQjS{&TA`@Il5*^lB%=_PG9) zZBA(Swqst3gD&MDA+CbFpRWg)Ljh-={4gvB@E)o&D`#dLwlVOTK-$T%0k&La+dV$= z*?kZjSpsntephipR&2NMZ=fF-YXy2J>RYR>*mA^Pp!*>IhKdJ1<9LTk;|6JtD@T&Q zO7Lz?_Eek;>MtU5YrDjN^!ahimzXD&XVmW?POCTwGZ*TM;u0Fkm3QuclJ<_BwcVt% zI_r&V+9uH&=aQZCYb}R>OhNjG5ePr85j!FOR98vrktg94_53+2NR(#n`yy&`d4}6el$OF?ypZ$~hWRh(w zYztAe>l@`uHMd$QPif*ckglWNu4Su;t;$0^EF-!!$R)sEa4giX6<(t~L3};`ZF1#P z)@1ve`-UbNxw$(*-Me%QbZZLx4my7Q0c7Vu#u#+9ZA_e>q|2?&5z+f4^YxaF#Q-`%bXjDxKOB8gWCjcNelHJnj^ub{D=@Ml$I2Le zg>6uPuQEqjhmnDWXK9;T3g{`(1V_GnFmpzJ>W*>Y=<-G1*bUMoqr+IJYu>e)Uy5yx z`5Vwrj6?N-Cy`C9d*p+BKUjCrCethdZjF|Ote>#;8sS4D$L0y=oX?FFcj?$UZGY<} z$Dr}tncfnAQ+XC6lIvQe2et;CbM(s~eBaRcfcN7T>l+DK%NY7tDEb3`8(9+VI6!-B zK7nz)VK~WIKwGfiZnpfI@PnHP(v6~zzFAERQiD6MaqrmK6)i(Q4Cc&=Eos?mb`|Xi z3Wg_98?#==j&s~XdZObog-?vtzVjNLyy2+4_SUg~JVACN8@L54I72)S@q2Q70r|Ah z-objCl3Oy`&V}cD*b+IM&LZ0OGFJSm+W*KJo@BdG;~}gK4OD$vHd2zEQAfbDOEGoE zK5g$~$OrczF@Xt=19fFMkT2o)Tu@W{Yt7Y-z3&e`n%MgAcPf8C@%>3C7JpNFC*J^h zYgm57_~vXtJ(NprWX0*l@XhjLbqeirbJDGlUMl&J_^FJA{4dfk9>xL=(z~#&Kb|zf7X3TUbcKBf2|!HcsS-FVLmeXm=rInaST*u`UmQ< zABR)2DFTeM)kK2w1wgMD$QgEM#b0m#o;vb+@#xa{z(^)4O<~*#%all4(+0*Q<6s-2 zgI`7Oi>qt!7udaF-ZsC=A-}uVHf`KrpgYdm%IJ?3x_^^#WFe!cKb#o6pCoMj0)0jJ zXg)XgC{|SAPulpkP(~0r3v^oaO^QvJXeQDsj>pZpdeIh|7P8$&=$fT-YG3{4a}}~f z>$Bz9nolP!J|_ZC(LpIz)z%Y%rlUNaB3+(rXx;T2w!^~y^4~yLQo;+xcErADwqK&{ zjdhG`(KpHFOnMIRQIKs^P6+w%h>v5z8jhRw(1yzN99eO&!m` z_I})x6x(}}ey4G=?onK5ZVqsqG%L!ciu@#GL(K)4*NHV9zAAfj5oFC`5@os^$AgHB zC^b@;ccBf>@IkSCb8Hek2il7<-CSo|HzK#Q#ouDHjxFxG-&vkJa8p$4V}w-?|qoH%VOBCOcaB zyuRo(N0{I656MM3v;DqaBf02R92*Vd=0++y|3u6N?4*~fp@)&4yRo)FP+jhZFEFbn4*=v=X1v1|Zbx4eHr#w8~OFftNq`v58 zjBOfufugV7HOp7cl-ifU*0sZ4ZafQ$PIbeu$vN`cted2@Z?Jo+7%r*#M0%8McQkk+ z=V<`=hVg*-j{NA9-z|2Q(0Re!dprj)_RTa@4+Zf{;gl7>6`%j>@;FV0)c2UXIOt>s zcAvA2InyA|v_`_u&K9vW4CSZ#Q4wQk{T9bsqHchG!L`n2aLdcJz)k%<5SE?R5=8d|uZLkaJ75%fwcrYKcukyj^l^`V*kFUt0}7#ePnbQ?MqC z%C*#I7-eS4iL~eq?^}PS<6o1e23;rb&s&Xq%HzU(36irU_v!-pA;u7cys%2!yyn_x-H8oX@oO&&prn-~O#C@@rEN_RKt`%3mL>ocz;R!gD zQo53ZLl4M5G5$m7&a#*(tM5a(L%ct_4qW2os-CUis5*34u5Q9L2(&Li)tISSbi$!U zLLXVqe?T6pFT(pBg=?gq*3a&^EZ+fsrMM2{v*u@ge|&5Cc}R!8 z@U1#s53cSOIy15LwyrkldT}xU@AFF0AQiKQw%)v|%>}f0Y-)SP@2Oo6YuoryI?XtD zF=2kTb#D^I%W9%@5x*~Cc*pX~CDs|^_?}1Blg+go_1N{e`>gVHkgrdCTed}+Nb7iZ zdxb+cO+V1 zCPIV;DcQ!&&6)Ce13mALl~Dv16ssh>qnCMX9954Z)JNTc_lcd0vs29=*1=+I3IHo( z_i^JWK(E9cdh&C^xdT1guCvHB(`sD*vzEIw@_iojWT)t3NVdf82J;$&9EmwnzU1-W zHjhevCx7#^=qDT_l{>jrHGoxnmH$pSbx!^S^vBQ|Fi%D26(-TP?=3ODfoo0V0-8I> zGA(Tj@v3dCi!)sHb*|JXH$=I=CNbN1w!1=O#I`*Gy41v2$m>QCwUohHB~}{R!2xpgqR3 zo{-v2T6aP^y2@J>K5*QT-v7V%9#E}< zo%cZA*I-?Bf@@Rdnw7?ANDEuD(hWH%PE|+)XxM=slT8mx3`+)vLfJfuhiZ{+uoN_nw26MrVCFTlk zHeb2Ex#gRLJpuVG@N~{0=xup>FUoz4OW{6b|HhPKiFL4#G1dwGR&}(+S9GazE=a!; z-;2a@rBMf(>fDrk32PLM+!!9IF<|0{SCj`yHO+GrYiGyiC?APhGn~DIcbF7SKz4r6fJ>l01eFPe-mA1mDe?VhkN0q|jy3#rd!GNhv>v<$EfmoCQsgV;Cq z{vv)6U#o^=T?OWKLo*CMD_XI#bVfYa)9vHuv@U1r+M&Hp@mAsec7006z9qgwm)4l#_(2AjGc9XAom&1$u2GPmJzQWc+xi4!KIa!lO6FQE1Yc%|%OTs{Y%3qp z{Qo?no#NgHor#L4Zq0fU`=jgy zln2l(F&%|Dk=~Qx+6gxp=YT#!d1hiJ^mvzmhg2W8L-91cj~IJz!whKUm~GaSfBADv zti>i;#&*d}l45Qyn#vZORP-W(BjWefdPhv`z*haRkqYB~-3!YR@p4ME-a=X8QF^)t zo78U-xN@zG`jM%frfWy)JUGl#r8>ANs*f?En0(A#Q*peiRxHIJq5M{+Tsq1dSf@uF z;hS7vhw5}89&v0t@Ji0pE!~m-Oyw>y4VwZVnTucFj?X)Sy`H07itX_(ivsF4FotD6 zMgN0OyszO62yZf>yBJLUa$nUH#oEgRAM*b%BwiYMG1dD+yhWcno}Yn+S=PWTK88B@ z<5uigkyyU<>_o+I$G$^(zaELn7CP>|wQ^w5Yibe`JB3C56NUBhDRJEp5 z;yZyT&duaLfF7rE8#s=Y(2CR4N->Dkh(Y=$qud?W$&n;0OR5fvRJauLOJg%(k zigJzUW01r6z6_+XAZy^9KvygI9|g8;%9W+KAj)GzKTt>Fz@$Ev@;?T=<`b-;awqjv zC~k`CMVXozF*OKGY^h!I+1$qzi6d3<4_J3EVE(xh9A0U7Txj^O`bz#(a+2gE>iW2L zi~-f`WZp=AR*nnuD36QtBT1*g**msS53ZTi{RoRiG{_Iyt4N38(&koHB%h9rM*4j$&?0RL!Gem%v?Q#`#5 zdlkzgwb#-VcdT+rN!Gx-%k21hq(^y`!^*NA)=bB>>)NiqJ8#bW#_x)hFDdj@=RpBJ zH8Cc&+Q_YNkEKq6-;0sy2W(`;5;JzDXICraCDa7930M#D0j}=_LgoKP#K9whd*d-V5f;Y1 z7FOO-5zgV3_W(Pu0q@SyH`UVe_(!Q*UqAQm48Os%!1RyLD#niBdnX2yWfQvFQtUIF zS9r&@zEQ4n@YnA)G0tt<+0yxgIL4T17v^*iC|?z6UkmiP4)Tr(`uB^5Z|jcBz znR89UO~*_a|5*BK8)Z_oR}5YM4Z)c0KvItY_$1$_HRAeMlqF&eX$KJ?i)?(?C-4DAY~W8J7%Nth1>>x?hT^xXty5f zZ^AMBYJQHbAr$)&il-qPX|d&t4FmI4Mq>ZT7X9mHJ<&&CgO z8s-zO>#J>*_&m05sDZg|tKtFJwrShcGpDa*Z!i{B!>1{{!qj(FbSl!XevURvJHMlF z_Ez@o^yk=b)O{u6`T}i!EHAn>f4J5>-3KCeeL1^g2hcgIR;^@`oih~kw6bzVG<>7J z%0W!*hE?}h{KnSVnsE)=T%}wuN`N$0K9G5xa*OP%+| z5v`SNs@r{U1kY>oW8fXnZ;ZU0Pu_`sjj}qdsbN9 zwd$A?oy5Js+G?c#r6iXqyf+z%**9n3(65oIPamqWzdi=~cRWG4{-Sca4%3FX?-Bnl zow_{YBOJ3Y6=ep7tA>xdV+8rg1J?#UotpQ@mue25hNt&VjXt)$Q@_^$pBp-(x~6{2 z{A`=LbN|7N?oB-l`t8c;Th%AdwTd;Yj>^+3kfA@WgK&(aHMZYr$JEqsV=Us?rkeVZ zGw=v+cjTHe-U-+n*A%Q|-FAGI8%L#S6Z4j(wFg9(30~P8=$^S_73XdE*Gb@wIY0BJ zi9UJJvsJ!jC>|aCFe=7b7?E zf|Jgfj-j0q*l+kQGG=mNXiYt_aX+@i(G$O+dIo5ZcX^S(%*`uMafi`3Ugv(_*W2MxUB0Xa@^MmoL@bkfP5EJciojwkzY7A%ZLn)HlVV$2TGi-)gRW#x*wVL$Glc| z{H4e{anCg@Lj5Q^TI3s7Z!x-uvlf*HW%-k?305`9!Pa{>5Wh}%54B&<=*WdebM1OY{WioNRl_Jf@Ba{EcnxXo(>s9Bloa`x_SI~5}4b<8ox^*0*j zhjz6v4i0khQT`n5p)b)%=s9bTEFD(MRk3|{`S>eGmR^^rdurR56Y{BjwjExSZ6A_f zwJbj6+h*}t`$)(KXX#K1M}@J(jhultPV|Klu9C4w+w&vr0`|}D^*P^PaP+NlTXh87 zx+Bi{)v^4{pGE$?+B%+KT_?f;Qn*J=wqtY;Lc*5t->2FqVmEUV<#Sqb`F&BxISL_PS?4!^uV@?`7>w4=p3%zXVwd4hdYt$*lq^ z0y&cMs~87D;o{kKH1TYyak^tMI!)q?i=L~__459Nce#Eupf#PNMfwHdDxe${a$Y>z zILow;I46;bA1K#nApR}3Yl3_oMuZPy+3^%M>NVQUP)&+ zU5j*y?(Eo}<#S#WRR`4apCJ~7vIk(EbqDc+5F-X-e#wuxgLd5o*JpP3K=`BIC;N}? zW=?LJ(p@lyRbe3c@i!O)U*|fDl;3LNb=R@t|=NTNeHp`Y5hB7Hj?z z{a^KA&F$G(om6@Hd+794IlGM<`sA7SE88yc1;p^hI_X`+-6dSSP}?(o`FNSUo2=z% z&X>q?7{3&H_wn3sCj~RXmYqEwk={o7x-#~IrF%2hk{{bubm_{=t(X(;kFn7xEI5hB z#5wNvQ}Qm-@-*zROcHXsW4j7`o!*b5rS6;+yV@Um{4|Djh3~G8A`=6n`Lmv@id#nBK=zVI#gf#<-uPlKrfSBy zrm1zCRQrpogPr^KR{f!o&k+`KQ`d4*x|7M1Kc?8)&m@@ittG)8xEy zJ}K#7mn!$1Wa668c^!CYzP^on06d_3x`^*vk{6mrOIRPeYx2}N*YJ>VOwxD)em*y` zi+zmeS=3aGibe(V%F43lz^8(+hw%}M%hBngo5r&bfe(jN$AaqM(HYY5kP>T&%(Yal?U#;fK*jHmGDLHL$?Ff*k0+kmQRr=EA4E8*SIuX%x^88Eu;W5@? zN4a|&>qgVRR!xq8Yj9(Iw7!l*7anA43YtAw$usJ1%%YDCq1B$^scq~W^n}xetM~sGrt#fmI4s1heg&Z8C z3^>IYDXE=G@go7E{Y-E%eLn=wd*Nb!aH zVC&MMr5hzNcT(E2TX>Ce~Q6da1TC;t+}5SJfd= zartyE?eoyu0$E|}?7eS4lV?uZe&_HT(K~?0?ti$gW$Txh_2a!d>@D%!e$JR(br4ftT>5iXWchy!z@sO4_(Y zhHF&zt><_2=k*l1uWGj~xI+quPy46s@qqqX!WvII%Kk7Td_dJF$ZOZU4srT;2>L0Us_| z_7;@+8#f^&RCaV2(tiFzqgMuGA&sv!PtvI@keufof<2UuaP-AI^Q%x}T1SuF*C; zKC169{TAuYS7+D8>G0@+Wh>+bUon2$mT&UyFz+1uL%C+aIjD4JH$Z=Nb0(E+R8Q(X z!!cr3o-CG(7xUv6A0p&O$B5wve_K2+5vO3$JM-ac;Q{oBu}_z7EN>wpqn;(~a+XbX z-;O~oX#7hj&UC9jz*V9$Bp zd4c`awI>(Q4r}wZxxtkqSybEtO(vPBjBecrrJ zHJv@A@QVj)f4q7yiCFTa+{$YgW;v#RXHgk#t6chH#L&5JR_?pQ*4){HWQ@GFA+||x zDr5fB0m|*kn5eXTe(oRR^)J(6gy5O~`@mhVTS8 z=6#FSv@Q}K7 z*Aot)-WR&7w2XWZ62J0vynkoj;rb_)FVw?Ac6<+MGP!m3ls&|b1xVT<_+5{t5*UqX z@lX=eTTwY5j4ePh7ngnxuJGsGvD}OAj|9Kk=69Cuoa`M9jn%4he<}gRdYUy*xaWBO zK=+I3jGDY3xEq>hwk=|EI-1+K7<)Ceae!u66Gdv5 zD2!3T{>Pd|Dz447`%vA1Jl7-?-NM4q@M62P&hmVGt+7jEeHNT!eV=NpSlH>7t@#}2 z^2r{Tw)Jz(7of9{cmmp>8M~=9QFf#26d$Np8|mxg1?4k~eo=6jgwU*ldrL~?up#9vwC-$x1iBA~2c_B>03b5?dV_Le6d&K+hu z$=2}@?ccCwuot@|<0>32u}PDU)vLewVBH~}eHF(=^`q37UCj3b$G4tlGt@GDGA6;b zRcgF1xH}p-$5(g9wTIw7-Iu#8X%DdW*uSPj?LUBtJ^G3Lc=vyK@4Wa#% ze2T&?)6?Wn=PXKmff?V3*I{Tanu#N55}>>dJKX7@_oHV8i&)t>w2U(1bM+}&+=kASb3K^HoKcD=aTXLj(pCFc`D00k>KJUv?kpM-{<#cG~E1)R$vcR`7A9a{NE3qKfh&(3vRkL0fq{gQ16 z-cdd^%4fiuuo6eFFfr`@+oPua&itDC(o)ZHZrkzXY}hrAM0e(T><(=u@ekE` zdage765SvT(_Gzr`^b+sVK!?E4b)^!Vc8;>cxQKhxDGaPPs>WK>29-I?C)rCudIONdZj=uBd}; zYUxV{PHp4TrQ^n(f4mASr9TY-#^-UcAgM(UDb-c8ZmAh<8XwaR~{EExk~kQaNWRMv$NY1XN<$23|?sE<5iXN ze`J0`=F9r~a<$Gifr(DJ9|za%3TP148}ny}&RQF6I;?nBcl)pnOyRTZzQ;)_k&NAsidc@ArF5$)0ajCNJx7nobf zSjt%Uh-_76t?)iV3|g^=yg%CCbubcDt#QeJopeVmFQ{j{uj)3Bs>7%b&O+N zr~5Qp2+?oSGPNC%H?v$9ow>1ln)hMN6~Z%s_t^i${<6TlYt{6k9A3r_vuz)kt4MxA ztV@19+Q|ha7YE@gUohwErNSK=Jr?Y~*dJ+X(K<03 zL<*5Cf^a>mBJSh8yR$hG3P#^ zeV1aafv1&Y#viZ02v-kd?oX_B^{^hzd53fD;dZ>JhPsm9jvB8!dkI;L+e)6jGW+Na z%^Z6?D!u-OC*M`&US^-7vGv&X2NAX2=D15$6XzKW zec&f8shM+uF@SSf zG5%|7{cr4hsYp14iT&`$_uTq;@*>fY_t{I&nBmXg?+&wa@%jsEZ@tTvVCd#_S$~^dGc|@UPH4L z=iU0p&d|`;5?ZAiOh8jtMwau|r-3mD+qaev%hDl`*11MX3u|Uk4RofPX7RY?*4YC7 zTBN)WX#W^(6l}ZKwYs#Pz`huZZj$(PyAj!*!iPah{lg{a=XL9qT5~4Bt9?2%v1AGZ z+ldpuA|Ds(`dljjZOv$JA^j0;E-;?F!F$p54h~?w@@0x;BD`u7`%ai5U9KB5)O91R zx_Wl~Z_W3;c_z+~vF~b{Nx$QiO@Q06ZKum*hnlfDB;Hw4Ka+JKlUqpocb)Ka!YtOg zLz`L)V@rzJN1dx&-ovq}SiA@Gxx$~UQ;Z|UsdHXG@YRXfO)*a8=%=I&o9ZMV+x;R2 zps8nU+xX4rTtlD?yi07;<@%gzA!F|8LHORqgOQj*#JndxVXxn7JlmCU_EQ<^Cvw zAHiq*xpmhxk>IOrhtYOBw4vX3Sw8XmG&o0It=U9OXHmsirL?=sM`8WwdW?Cby&>r3 z_3bYCPU{M%Os^@$)KvF|J;W?)gm>(F#9C@_e{l}=T-E+sZqq;SA}zpA3$e%Wu5BGy zd>rfkL35YubFdAPYNrLG9h4QYcB*a7CY#*nXF|xrOay`Y<^mU`y%4gS2^Y_HMsrM7>#uzw>b>sQp&6eE#-hK8gUo!h+ z%V{Q#ZuuRM;-ge?<92^)?B;$?seudf$a{<_q5H#)tJ7_{_D!UDtPex^8F+T_UyM_W zTZd;v|5Cd}WBYLpX5&9l`*1PXot;^BcoqMN_Dmd43jRxc-JBHaf=~RM&Ht)YhGB93 zw$`u9JBC)QIa=S7jBz1-RqZ>QYs%TRTAf;2)y6i(A^{%}*-vh#Z(Q>ht zg%kCXc)lt4)s_vK?cFuBHFuv`pXc2fe#V@&V}8^@-GzQ#k<~chksH{Xl)DocDEY^CztfG%(iL)E=W8)5Bna zxuUG^IsJovBsr8#l{@9%yQx@^z@vkbzens#XUrs`PmrT@tkbBDdAk#;!Pmh0T3ADq zYE%>w_zDUCMBTeTcb}`#WATaySRbDbyjnem7Tg+1M9cMrK6v8m`IcY!dyx-Y_hH-q7?&LV&>AQ}88M1y$xajtCc5QYW>)6Y| zPOl@g>`bO%u$Vde_qcVIu?~T5ui)_D)cRx3(W>|}44q><1jbFecbap@FZS+JuON4g|+4w)9e3 z{|mh?%XJ~PtLEjMEGJ#q|OBwLhP)o0w96F;Uy|MY5HZU$GU; z6Mi1o*YuS1CH3cwQSS2!y+#^;#LXAqRdxi;e-eI?rF6~mpqvHIUqYB4&fd5*^^9%9 z!b??g_jJxIOkLDPK^}<%$}_-v5R7wKDeasep&bPCZK68m#+@LJ`~qYBkMCfQ$5OLM z;TcWfJTV@Dt|eEWb%D=Q{sGd_mef*Zo4(k^>sQx#ka23|%WBn%ds}F{MT~2tv182I zrPOu=nKI9~oft=4iGi=})k?#8(k~FIx(8)v4XPeqo_B{jwUxG1{(INdPijz}hK)mD z-HqMU99`RICG`d_Iv^ul3`|X@P9u!khg>6tXI4O2Vc9sY>h<%>O095JsqdUs>%c>qXC~S;_Ne+H@Y+^0+dr<9 zD&?z?cZ!#xjxI~?PR>}i~8BW$`)#sdOu|^miJW|?o{j9aF=OkE0iu7SA6fPZ0+Z>Yj}Kil|4UAjI$m;G(EbhW$V@YuwM1vas64T^kMjT3hy>C z$!T_B)Ik<~g_%z}2=ZQIBX;Y+95tTfhwlAkd|bd28Xw+E4&4ZJ1IDXUd8fs_8QDxF zSLNFB-2h)Y?nG$AFAtS`W$9Aym3(ZU#b~T)fIezFe%v`dr+BosKkM4^ zwfENVFR1y-`(te8UR^-8Cu3~`3wP~V+kkt&vmMQeFZb(^zo6Fo3v6C5i^nl`f~2hJ z$JC|8-7r3BLe|r3M6n7=)^mMOMDwb~q%T`7#oR>Mc*#58TOPB|w)Q#JXfMeIg|!qt z{|}9ku<|AUz^^;Vu{34Gl1bE7vhyBK4xE1M9JyEJJXRZoONIXAaVNhs)&A{LAL|P| z38tc8(mGf)6Rss+v#^`dPcu~ha~FHUwzrgZ{!NZ@jSmR-b1wP*l!t8EY+>#y&=2{w z(U$mxI^#tMXa24PZ85G9(Eiw9Smq{OsWHH{ld%@{x#*g3-)LP>)xmLccrfQm=kTb! zEtIiO>e%Oz-zVznjH#SA_%k)&i7m>lzP_ze-2;pV*nR^3+Ts{LmK~+uz)a;^A;uEd zBRB^gm)BB_LFZ&2o|B$}wp5H8crFhcao*bttc}R^LrxpGxABZ?KdBs!knrRv&Jt;1 zt1DQg^+C|+O3p9hf$b5F0ozxBA2qTs&TVbkw0)O;ju30##K;+(1FFeJ@mVO(?c85S zQV)-F5;Y%__!H-Be5@K@zk9xJC&`>0;X@SHK|0S3%u{OS*}0`F>QEVb71mcUSPjKt zdfq6lr(KVpaW52>zStT$ZVhNa#}?f=X6`W&vArk56Rbu z7lYlfyVw?cG~)eNNat_ncLr)4oO^2PP^+F(IF1U#r%SoIg2_AwzNfGjoVrD4VV1C9 zk8_Vm3*FAp#K8)ED*RN$aT>eyG2B!#3ge#B`8z^BhS8wrX{7hrS+BQ1 zLsg5nD|lGpTw&6wyh~d*RJ3|&#}w+{+19$ecCwE7=yxm}E}-juJKj*o4Z1ibh?$$? zdI;p(8MLroBjVRfZY7+Xi0qr_`)LrKIem|HCxS-sWZlWwF6ZWsb_Sh1*&xQ^+b0{S ziD}|oDAa)wvt0R+T29=ZZQm)!>G8Hqs}>zCwO?9v<(}pAc4{ys(Asd=kLg`Vc!tn2in@cwd|jS@5g!QQtM+0KSf)R zlJh^>w3_r)`0ME8UwzAUwDN~#^-# z823}>xU3VrtKr;$Om>B_O)bAplyiS!ypE1}D%s;ZDf%^)QpUf$PlY{U%W$}FRXq3C z!1t-v_aW$oR8K^|zX$S${C)YS?&PI%!=Ui$airDjMj9dirg=wl%)jS)lRr_%TdRDr zW#g+zF2ITQp(9><-HNyQ4r8p)1QqaQ9P zy?)$Qt(5V#`CY&F9qHGqG19kcgXr~IcK*)U-~8{nzGO=pUyCgt^F&(Bz2$tYhOyFw z366f|Bh(u@2Q~6Ppv}wQoA0>B#~t(?3f@K)bv@8qPozfW%jZ)GucLY-XLYRev&rw9 z<9cw2eV(-8ecfI-HW+6;=EM_79}9$6_1TA0WgI({wa_xV1b z0gQd&*deG^j$PaR2xIr*9)b4e(teX-gINAV|JJ?rj9xQtKNrHk_k_C}Y5NZ8N39al zcV(<`G$U1`zMj82;F^vq-n7+h9RuCnd!JG6qxV@^$4gu7Rj?)xVViSK57sgdh5_R3 zJX{h+T={`?KDVtyjJfKT>hsoqN_|0~Thg@~m9tL1OLi=Y6|&}t>sz>Kif&YK-*M_s zrM6vz_qWc*%k1CQ7)lt=p<^&SIrDTeM%?lkF^NwbaAxwH!=tcU@pF*D5J%&_Gx{)d zUwbZ0RNMif64>FI<}{yboz0}$In#IHsp>m zGPK1p)E2Hb>V@N=afEmwv(tPF?%etSb#{%dod=$|RfqHc;ql^Xw{YRsQ&BXoVrG5Z z{paHoQf%sJ&j_!7PkfkYsy;+|ux;R&`w6;x)@jF%$xF*$RCR7lT^qgbg7-1&H0xQ( z-*W8a&&8aZJ$UeSu?g{*fx^6X=h{J@wB$R&dbt~`HTU9ZnMRkrEA*#ht-Q4pIw5?* zeiw93%$-W_$IzPYYe`)yv?-iW-PuRPqD31U@vEalh22hgDhtF?In5XDPn%Ax=nU7Q zMK%YJmS3hWD$9g)y|7O0{+z-Hm`i3X^d5I`r zJdJOgd987e{oTtS3O3cmGSokNr@8MURcsz*jkU!H$h`7^U{`}BiZ?t>9 zKPvB#J-L3Jy4+iTW-iQYp6Q2q%Ko3}hk4D5`tf+z zpY7AWZ(r6w-m!naU*xNPfA*PkmIfrb*SZHu(FQ{&&P0 z1{L>OYAq;s@<3|(fQ}Pjon4?CjKze#JLoKp_t$lac2@frR7@aYGb-%l#+6l@<(lvr zxK^Ch*d8GE<~8A-p?{@j^XV+&RC;%gU)#sGW8ZOI`rUCaX`5EHT1lUS{n$Pw|Kj=d zG{RawSK9|f`1f-B*rfQU-RRiS z39PzFi9ArM8N;>X?7H05J=m`!%7eZpA3d!V<%&y9p*h=MYVu4Bx;Mp_`~D+sKOz6y zfa)LWdBE>;tDc~uapgBcx?J?CDfR6SlC*Z2F9YogCQoG9e9C+Gc;~>qT&U;k{dP9j zCmqJb4>jQ|OtFrbioLUQB+z$gz4xAKx$SFQOC8r#;rZ_)ZK?WvKsT42EzFrZj(hb0 z=x%n7KE{(JF&-_fr@D0vW369^eQV#uHB=5Lx1ib|VU8-v;evH-&IQ#GAK`h!SpPQr zL;BtPOxN~7T+!fwa3F2}O;CtF@$9WQnHcxqw(s+cj&r;SXZ z^e~_1y*q}mC}=(ge+hBgcD8g*xzvXy-!ka_2`m+A!#VFy?E{W`BCIf2Td8NO_&wP* zocarq)C4%#S=hJ@jG5Z%xAPP)xfvHY77L03xH83!aW{x^-0DPN$vTBXb{Txh` zR~$ONrkpvpEvwi$@yAn}U8?zq_HT}Tx9!^reaVZxTb=9d<-dCQ4(PX}x*tUqbED!- zIp)TEUsyqxf-9Y`Id>JtrGPArzBH-3K|bz9C;uSlQpN6-p9BjX&gePlf{1Ngo-=kj z@G=M2h1Qn&IlkMdPz}6mIBN+SXB_<4!zW3R{on_4%0`c*yF2$S(_(y7o&||@UMUmq z-rDm;nJ|ej>ESO2};(g3A z?8#v&z8=N!z?q53X5(X1`uKnct+}fACjFwVE!)|mxa=h{6RA0%-&$T@J`b;UEUf)F zt*)_ICzxMzFLvXU4X# zl3rluL;2EL-UU4tG3{z|CA&+`(v#Fg_3Ky=<`2h4)wctbQLwJ*p%eShXRnI??#$#n z)sLzRG?6)o&r9mIRLwZ;Gs$wnY|=g4Bi|s$tcr}Md1p=6;*nZ7V;%#IMQZaXy#~t8|}Ts=iPNV?{srn zi39iMnw#A<6EXR_%GW8iE-txV1;#*bUGjb&vfOL!E7vzU6q`k{ki1Wvx?+5utbAsX z|8_90YX;{hi#}hBVXJ~H-DEi zKW<=*>NepC34YKW+ILQi5^vrp7f4nmT=tz&D@^ni!kmF8)E6pFoA0h2sta;DptVH% zX%1tvO|7k(-Y53$Jljj0Za;RBOSa(?buSx4QHnkQOz*ZP*X_ty*dSES!7%nwgMpMZ1s zH_+i9iRT>%ZPVx38ODd4R&u%J62l-k2FrDzDV}_J8iYD*M6wsC>PBD)Un{xhS@>O7_el*6{9*u5AOL(8S`$U-7%`Wja zp#>VFsukBHd+{_e9*hnTpz5cU{j#;p4Q z^t*iag}Q^o_yO-~T+cs$_H8=3-Uj*| zA~qoCqTQnrVoN;?v_C-jZAaCb0$CO1FqAotN{=DsoF7Vzd6ncE|38!GpZ>GLuK6T(P0;Cf3pU{nN){=Q`@ovd_tuo?j!WU-6ow{jEG*Re!{)|nS@KT?%Eh|3?-{Y8z_c$Q= zl;rA34)5`x$@yG@cS~oh&3CZmOIFAp1-x^r&MxcJ1*!S1ZQXNaucz~{0G^P*ETMdS z{9K+LTYdm)-fRvU#hpNL?!ApTJ|TAFjG>pHgP zX}%uM_j{MKC*?WXytUpL&E^>QQgJXy>T;)q^Gd1SQ0u*t zuXysS_(&A4P4TLeyX zF5qCB6ZW-JOQ3Mm#XPZtoqlUS;iKSMpoj~uYYsSl&zpJ5}V4l zn!4nJy*^UaX- z4VRA=zR6V^W#$I(O48{;emp#zuYCV1nUjLP@=GgUNU)LmeL%#i0J=q6Aks?g#-K@@W6Hie{y#6K$BGfX zZ|BPev7K`6#zEyC&N=B~bjBApUof?eDW1r(y>To|0d2Fx6N3|F%gS?n?+R!~$Dtn% zop>tp1r+;SvxxA`P|i4Kd?ohVA+23uoTZO5&h(Epfc@Dv0iU@oJTw6W5{;I`pk|MdWoN3>U=AjBl{=(Fh(%tN1|PrFhM{zE6=$f zw0Q?`_mJH<*UI+^!;Nix+Rq!N^<`tCU$dVsi#E?dWBf2afMCXjy#tAB;}}znn^y5R z+P{#n7pBR$Os`LkEsy5vViSFd-Hv&6*o`QrO~n(8?K|DrICdk2p(J+m=%k96INkRg z503aSc#l%-6n?H~n6YybXM^x`Zgp*D#%TFT#g=1iW~W(y5^Six9p^^);ahdtPuq^o zIZdZc>g(wmF`B!V2BwVs4+@;6^%0Q#} zN7dt7d2TgM>7mlCx- z?Rb`h`gR&Fo-;>y=DAoVk&QHeN1M%2Rn@2hd5&w1_F*51=ENpCN$dM7WVJNeUgvil zH_zT{86Ec~AC552K;#6(A4M!HqVuBz_&vX?;&}KT+K=VF;5N`sc%7f2OeM7|Y`b2L zY_UckW*O_6{b`7YCv!i(6`4TvH;NbPGq%38n`4X`)Ia3@KtEyxcRigw$-^g%a@0#K zj862)kUvUz5z9h(tQ8=&JQ%|O@r5xSV*&cZN5nSZb65shqfURT{Q0Z=bxiRVwVe^i zJ;3*&*pvthPvH+?e8(R8NHK0h*B9XX$KaNoRJWrv`lonvUBd+HY~cJ5kLB?mX;%24 zcg||D6$7PdF4ZT5ai1oBIquaN*N$YrQJ{6Lgsk~Oy0_L3$0BzN`bc*B)^l_8MRxP$ zNa7j-(VsavYzK>~~& zlGB?>BrZ9$Fomk!59oUS8{$e4y`Nm zr|nH@+o=C&y{K~-HjJ!Vh_udD>?d`r;_i}~D=YPw7xoAAzDh@7SxV!Prs279{uaqZ z`nl6^hxNz1gsv;OCU`#>n_s!u|b00`|A>^Y4>{pH*xQ zCbvTD753R;A6^>%udy`+swV0_-DL|uA4K7)u>44}w~STEuh0AL#7~o!zXg1$CN>qq z>&Pb8R@q#;d7lD=;k5koLjX^ zyc&ao4WsR9f=6Is?{jRS|Nd$`Oe5=oE?t&At5NPe-~Yq%utj%neU=;>V&JHKPUIAM zId;fvw(m~{!n9b?_*Ap1>QATyF*3}Y9YROcPzP^gZ4>o7#0I_A(a zKB{01UsG&HWr4CKtS$F(pzKW8ChDwZlr82cFNp4H@R(rzfL}jhz75AE%)%Dtl~SBT zoao~k*DYTUd9LHzpt*-~n5r{O_z@Ow6m{<7S>0T<1i>BF zSYQ$5&oO5BQ=4)z;5?x1Y*goShPKG9W31yuxXYIm*N7P8k3*yr6;n)OZ>U@gylX3j ztxo!&mX+&6Ij36xLag#mj?bBzKkg&wgazD>uCW)Vu7S$^6T2Q_jVU^zzMiIsGc)Ku`G5$KnP<(M#Zqt2h)Y3WnSc{A1jWM;LXMx=Fz;=4;{=_?%bx7>%!PE)i9Djm(@0YvX3jC(;Gu#oayTN*P5eJ6qwL-!E*NX)r%^6F`f zAGI&kj@$F}P*>hEzS8BNldSeCy@hI@<-@$nA@Y3p#8-g^Cx}}mxq7lz^`XgG#W|Tg zhr}F#mr{*g%sr>O?fgmVhpIK^{5gCM)S5su~Xaw>Jeny)VV?&cYjTo4B=w{a!j*$jB;Z4NOa-T0oxmon`g*} zuUZ(BYViCPw2udqr&FM_)?x?sh3V;*mg{DCKXn%plg^m;boUc}D(MDnM|_UAoT|Bq zKI+&8U$JhE9RT?T>WYI8zn_Q1HQGG0@-i@9sYLl} z7;oy?J2~z|`Vd(|`_htfjMUhW{Q6{FWsZ%qWc#>{ayRgLeP_cM)qTci+~zN@zOyen z`AT?0x$l+ms7x}%gyce1XOq@|&ZH1Cp_PY&*R1aZSEG27YqJ^ zs##?D*?c<`uDzClyx2%y>vS0`Y1dAl6OZ4=dzLeZ?H;hbF95z2;@P5myE58Vbdk{8 z3@tj(zaWfrniHO4p71gd zN0YFLIIn?ferO#*>eX<}!vXqf-Mk^80cTE9uZs48@;^q1wV004W!9AJUXy_F#qTjD zPGJ?8HMM=D%En!PNYsEm43JNSR7(r=A+&KgZ4U}_so66*9aS(_EDc+M_6_uOw&xrD z1#Q(~w^$H-?&Nt><6EX{xbLqzdr6218@FLEi zCLP4oeqUI=^`V7(fpO*Ne?{M;;b+f|->ysPoqMOIxr#es%p|qu&-k`h(u2ZhG=2Cu z>6p(AavtV3!QP9Wq;clRm)vaKQ@yD})TM%u?UjVNU$E+{OnR_}-KU8!o0y!lblu3S z1&VaaduPWAxpQ!0Vr5?+ZjZMp))4iExy0NUzo>=%;@sJ?-gaLpcyt{1(zM2q&4JE@ zF+Y!S9kHC|F4#2lR<0-9#b6^?D! z^<>)33D$Oa@5q9Zr`yrFdnk`2Vq?cif8MTL$Ii(EI3~;hwxN@LY{!Jo=1#?PgRH}KUuvAst>S>h z7dfGEM`!b+vcgIe9nG;T@p*wha1WhvTo(+yU?KvAV=43~&kO>aV^UB|7#=oqV3(Lxw2dU$> zNl&-mMO;T}&&fAyQH&PbS~1Ug_W||0qx}bIQ{xBy1m90jJig8Eku7+K{%xKw)A`8% zAv!GUZRnE_TE@PZ-|a^DyMOn;JT3;~RIK$%*7DW#Zq=718dR})-L3iq)(=$viEBmU zL(}fHsa+|tWCgQtg!MrF2fV|i?km|%ZpBAq*;xy>8q0iuacH=f$+(~w#w`ucs_Ah- z*AdPkUaA)-@lX}bU`-9QHmTVjAY_dJ0aZPS+U3|F7xxP8%`iH@0nc9-d>QiHfK0a=agwd$OEwC0Qp z_v1Lv&l~LaRNW#aK8&zc*oHm09O`q!=St-Um#<3o^GdBy6MgrYdG2+O?jE~Gl&jKD zkKuFjm4|d@k8>&?bvshND9}It)+`<+_ZR29*ejtf*rT(C{>yMk_cH5^=&u0UCcEHC zEq99;WMt#(6n#A2l5++>E>iYq^?Y3!-of_N^qwkjtGg?4kL-_CT)pI4$(>lt&NSaX zV5}{Ljc|mRB3nmFCK&{cFb;~jiCf>k@&vR*c>)S|>D10GkTzsJp3t_b9EW)C!S4&U zNmM2n>(E8)_hw~_b0RBYFyOwa=8Ltr7*kAf5o}Llc}9&*bU&aKw9h`ke6U_N(Ahc2 zn>EH)q`ieXZTqB^KsrQ*H@UT z!!48!XP=eR5zxyh$hOI^7f%y0`bsaZv7fX``d{DV{Tz~RC%G^yu!@p0n($*7!!Sjc zb$xs(`mf15&^T3czuEE4${*m^>r&oL#08sYezNO`v~aC)e}?4&)ey#dwxC;+FRrBc zR15X}`vgXqgT>@O8#dAZU3box!pL!AL(QHvDhH^8g8WjTIu|d{Jx)h>1~11d$1kw` zGuC>wN_q}+ji+?z`W4(fkK6t$*T(a4!ue#omy@5QpzL3dG1SWj5A*y7v|s) zL;q>_DAiBhS@b}@WBZle{-t1|1{0L|DPC|?pLMocEEDUTyAs|BS&Fqd$o1P4n~3$A z>WE!3KVp2N3FQVH)}M&SmL^vXm8X{9Sx8*~Wgk#6KgQ1tx-_gK+VZo?uFAH_?Z~kc zlO6UkY~{;$Xiva;lowRHHg}KlF+fWOU#<8|Erj%ak3nW2`op{>TMqYYQ3{rqRih1K z?=IildBi{;NguxKmD!tuzK6X1fwiT0v?o<#SK*1;Yo+8I$(ffJ4;?p#wt+jJj*@l( z_%Ze}rCVJZdt{&PdCYm>bJ1N{vyAg^U0N_E9Y0-4&a4vvNkI);Zq~fBwE&7FT1x-^hnp<6z!uniwnb zmnQClWjPD*JmX7WR!10X z*x?wpU77nK{8Fq-byA*n{QhuF&_>v-XU!eXHK(o+OSF-f8YM$H8)fUcCH3{(adBPB|fiXOk3HCzXO@gstuNMr|;e- z?v;A-EFGCT+WY4G;62Lo?!aDLP`x$#dyZ|v7+8vj#F{he_mYXt=h})C>rc8NVQog0 zL_07xwjm%dQol>hPO?SA=k%}0cPQ)dnJifHnUxa&`*3OEfq(Lzv+%P#{6(tyhdRN| zB0wx9%+;-V&zJWQx5@V1x$TELH??eizc#Gbn%VH8UaD8GhUK$b&fpW&>*wWFxCGB& zJh}aid|sBu-!7?sf`tdD?wEbVgu|E|TQ<8SOt1R3zaB}NPt|*eRCgimJ$;AT?`fL# z=f&UG$&PQH$G`8~_L27Ro^F-Zv%se#l+!98!(4mqCgbMPZPwntju1bMWM%T(d+RwP zoIS*7!x)MucYLUmUlQg$=X;^;x0^>CKyzBwR&Vf8uBTQ=;k2kIezhlg( zI@ga??K1{gj&U};@#6Po)HM;mMV?oGr?el=x*WrWF-=D(hjtEhKgS*PQ42116>YT# zk7@m#T{qEoT=Dz$KTqi&_M`DZJx`d1Dec2vS8~^g<$!WGtRbACVbD0|{7r9tvBr?~ z+$g0z#MsKRPJ#IjjN9Wqmv14S9r00pW*h1=byuH=y_RCdLeN7g$E^NzbT{cVs}BQZ zPp(l7kE8cTgX5h~(dOpAWa9CB+U?aUr@ub*I+J#H_-+u*def*K{=B)lxv?3IgWl)S zIGBgMcyroocW0a3JNa!R=-v0i@nqDCW*c|$r|5^bzx?Gdn?L^e<7VcMx9jTHA5vQx zL_zNn-umHZcaC*>upI{qW0QdiU*c?T1g% zr)Y4KS-WY6aqn&BpMPX}@Jr^OpQ22LJKK<^Gry*_y#^}-Q(d;;85s4a^wnLuN3cbo zqCfn-|Bc`NhyD3kdomeBxA=9?p0$65Kf^({JsXUp&AWIU{nG8Xr*Uug>wI?e?!zyg zcHDcvz1~|K8;ZRfgQR;*8PxFm;B>G@I*}hvmJ?M(L-EYh#v;E3IzB{ZR!M{(H{TY0BzFjFE#Yd53|2EGC7hyaI^7TO%krkfC_ow+vzq82Y zJ7}RBb!jZ8i|u=gSgr5Ou=08b5t6pV1CAONaMRP#~?5^{KDp zEz*F=8i<}Zkv7=-b9j8uS{~m1*Ym64PN`DgDPM)x%43I~Bjh|@G~k|$t7dT!R?AkcMfEI$U86 z)&(oC9V@R^6}0&*(#=tn{q?K4m0}97<4$++n>_W3xkW&+r@4^0 z+f#UVeO3Ff!QC3(_`f%|^ZWac=6)`tc{vXZ=8x~<_HBDJ7{oK{?|0qtwD&HWjNVPA zJO6nD>yrPEJ8{G3^%@d9JdOndT7+`j2iU$hIKaTh-0 zE`0vnDD8dREuMTnI{SE0xhm~{KD*ejot8dlVHDit+w~Q_md^LTX_wI6%Koam2fLq7 zFN(WYM;GVcv}dQ~m1F44Z*F?i_?z}FZLaJWF1;w~h2OMaX>(=2L2uUX_P=Sj+~mq$ zL3W5{#qTg>yWy217{sM0_@-S`i!1va&BGZ;I`Mazx!?H8k-$Y%g=W9$0Hn>8{l>H4 zd(7Q5`wXq$v|*L3u1&N1rSfj=^y+h|iOmB?U((JW9;+XW)HnC->Fb8QLT3M0>w?90 zQl)eMq13BbE?}0=&3~;K$f{U#?2e;&mRY_wFz~fk&Ga{G?f*dw_@75h7zWMT86sU? zS9cIGDvJ^%d=FX!M$eRH*Lg%-$j!S4*%?aAy~80^Ae^BDi9bgJkQ^I`08J4xgNwn@ zPZv*d;s>;Yz4PHEX$|MKBlX#Fdw3SNYjw~*YH^UQ>|I{9il}LThB2_DP_iH%ML~ES z?V)8Ekt2rJjSsV6v_lc%r#Ob)o|1!)#={h~Eym#B-cN#(XOuukvEWS_A*z#(5{(DWj``oO% z?Wp^mww#-OLGNMj)w1;~1^}(E9>e6-`rFHTpRCs5f?j7lhXH<<&Q;^jj38`(ABv}z zSL<}t%++Gj`#!60wZC#4H{m>fwL<%%5m3vk`yNk+-=}M6cxBJGy;*S#lE>rhyYz3G zUpWd8v!n0QKQ_Fw=gIv0OdQ&MuHQ;89*6he=hU0#SL^fb@5FVm;nh9&X4CJ(aj50h z)`VUN&3u>6x#?$m|E?!4e%XnOC+&ytbL6Pym3`0J!|y|N*zmJGm+pJtiSl&o&yL}= zJ?q8aXa7y}&yS+l4hGTf_ZtSc|Li!<+KbNjBM54J^%(lo@oW};ry)q=-^eidl0IKy zAl#JpzRpl6FMGDa|4K%>R--k-u<`EV&l~EN8Si@kz6QCFLnJFt%ZzfZtJdIbwNdWH z2DH_hb{hwxk`uutS;`8~%)#qBZ z^!f8H*@{wh!_FYWs|DY(o_XG?b2bQqu=miO_LjEiJ-6EH3$Jni#c8iS8~YAmtJ&nE zt8EeE5xmi>0Nr#Ger2m!@44sNoQ&h;GnemIw}FH2Rbl)q+A+_3<*nCgcY5Jx348h6 z?}ZbX+h;h`pU0g$IO^32bP?pg`WB@2H>LeeX&=t%Xwzvw{Z@S8%Z~R94)Lcb^J8W= zXisLnAagSvk1`bu@cB8@pUoyQFudErtUvE;z%Fdwfcn%KkB1Ti)CtF(%~3lB-nfa= zY2U&)VpzLgun8Les6G2Q9S5c9bUZ!l#lR9dR4BuJ?vFFkc$SeR$jthKSfT(k0esM% zg^RytYQPgBY%0v4#PX2oVQU$*8pa!$t9}o@A934p=3x+qnNAOyoP;pa06v)Y)f=!@ z)ORMBPmv%x^FbJF&?o;oX;0gu%s->~sMDMNLC@kBo1dbac|?aJlRlp{eDp0xFoJ?N zpGL4TXM<>PGl1@q`X8nLfBE!7=5N$8{PXFDUo!WDcreq8tQhgeczU}@J;Z;O&NzHG?!>+6eY+F(zGNojaB%}G{wcz<@!$TN`3@bb zdg0dG<(UCPghs2>Ugpx`+rMSr{OiA(4`{e=*F>lj0%l48 z%F9fqgL^pU8MfzBe=&59Z^OJg3*Hsp_%bX-8;W2bGotTbGkOc`&%Nz9YtQ-{{QcV7joDZp+Is(XBc69+{_7|B10>y2J?oF^=n>>RuyOCQ5^*6s6_>ZR?1 z5}J7<#PsH8`$Imx?q__(dCw8cbwATQSw79E{;cDJ5=`iHfBIMLndw7u9E#Plz% zmzi!GKQn7Gi1&dHde49Y-m@Q}JJEZFE-CidhmBr)c-EdIKdkmS=g{(H;vEn4SL3gXwWtpQz?s1{_t1cP|ehBLnQ_Dcpgk}piv zCOiz+!#oVQak^b&*q2Z@CDIjK!JuJ`GkALsZWb`o2N1z-NI;uWYjE$+VkIJ*;iI%U z8Akz*$dxEzBBB^);vQU0u&z_3Nn?Y92wzddk*|zU1H$VZzsr2_)ax&1hDsPI%S(Ug zW_C?OwDL+4A%&s$IJ0K3p1B>|_abUADd5r^+c>|zkx<8=Ge<$#OOAxZqTfLI49D%D z7gVv0f6(r_a&YEamS{Y|CSfZVdhG|i;MmI|n9?BhlGAlgf1-###r>N{1HAa5Y1l+q zd{mmoxGl87ZQi_T?|v|z$Jk463d0yYfxG}3)D-@XQE1RIKJFc=R*7ZDRzV8Ezi0&0 zG0E`mwyle5i%LL;^h#JfB_EQ8N`ptP3A!^}{p~oVr(tgquiE9`dQl&_(v+8$XR1DX z;o8dM*0GY|4W_|6Bz7R*_N3hzfG#kA;~dZ7B8Ab8v{h=In;MLeO4|3ma6N-oh(SC< zrDi?Tn{_wL!FC79R2laNlbHJ@Ucu)AR>ZS^!Qr-+Lrc|U-T4D(J;7+g9-LL&Nwk6( z@>$O)cA?Iy>`;(F1*kh60Ef`rCswkzeS;da(wgl3dd4O9bv;Ro6MqI}FK;tm=Em-u z%P#`GY~B;*(p>h0X+x>3A?07tkGvQ#^ zqva(Xyd4vtQcTX>XkyiG&|YCL-CHCK*l744YQph+f~L1#umN&CkWU+QX)y%i=8d?4 z*%&U&evgi~=9_8`8<{FFs#FWhYz}?GnU6Q&;h>FcfPWy3zuSIC!~GW;9JKhZ%^$o& zqI_p2aYM#~Oz*KhngHK>| z4557bq4bDaaF36kIrF05nmyCIJ?(XSz{UfhGE&7woG~W}4PtNDmMI#Dqur|q*KE7* zvJ<*&^As~*GV9mO*|{8EKW}-{o3@OY)E~a2<;sBVmp6X#9#GVgLPOS5r^K_7&Hy<; z#=n2f{Pqw1EeZNG9ANl zAZ-j7Bs7hZCB`K1Tl!|$oJZ!C5P_6$L!3fe_bZ)l@^0y?qX%zKdqqs*#yvQ-s{<3k^FYE}TiM2OJrq&*f^}(;q^0qwM;cLzLWGMx z8ACTH?t|dh2hmXa4~%RIFGbQID{^LIzOei*f?Enn!HNw6-Z^}?1B$*&nW~edib%_v zSdMign%|6(F`3ifh0(WX@y|~CIhJdM8<3P8lPnZR?FlHHGrR`wSO>TvX$T{-+>zke zWYkLSFx&;C4V&2*N(~MFgJwHDqL%1>JVf^csvgoJ?Jbf%tv+ro$0uaQ%(tAOkjM;s zElbT#2T*lxL5Ygh7!St}IE!_oLMEmI%h+cLEduQemH?&!V_4_WpiPzE#eWv zjg>Xiq-3os&DY)AJg>c42&LcSTzhl_BlX0nw1%Q=Dsg@tPpBqVX>K&Q?aL~4dOf&q zCTNTdGL(`!!BvMN5i37pTg}XwJ8!ZyXzvm&DxEGma03`ZUoGS99JIP<)*}`I>rcZ~ zJ3fu|8r@=BQ)I+UN{QWr*`Vm`A7@R`A;KntC)%l-0xjCZeov?e!v^8RRli z_M6{zW`$mO*$E$dpc6$(9?uinW%qLXX4acpCIh???PIfU@i1Yvtoxxd7m=?EZVx7y z8wUTnlMxkG57ZCm+lI=H=s#cDg(ov-@9ts%Sf#j;jnFdtdGNNqMJdwtn; zqQs)*Mq;uiXTI>5zu=%_%keYsQOnW{wm&9mZYmu1#~*P~e^fV>$OLSsRy}w(gd_7< z+$y;O7{rTVUSW@nKy>QZILQX6*m1op8{vkM&mQ2uhQ*QwjVUoB&O#hv=0eA=tfPY3 zpGQNoNu$U-BmEe0(AY;1(e1Aqe3-T;tSj;PQZ^~WA;@JwD=?ml-vPfjCfN;)a*^i5 zR<%yT5IIuD-MN{!3NHG>F|0JuFBysK+Q^h}6U}~`E_j(qhn|ysuh$`M?Zk({Msb+` zI7pW>*!%y7QapCu#-_aq2K7X=8vpx${XY*VFo{a>zyH_&D+fdACz;#v7%rKh*G9@7 z_IeXN8fE;aSfhAMn}9|JxU^cFJl*B_b7Xl+i2M! zW2F^Lv`lSRi(aOXxd^s&z?OUMqmWi)8*sIZKIpc3KAy4deH||zLdueaF0x84dVD@&Yyr_HPNjbveU)`u0dE(_l;;zt_ z_~5aKylmhj#3ViE3~pBpP*DI7Ox%1ol~+jctYz!?I0`cg{A1aYz9( z;CNj-bKY2o|ILy&)dI$U(!_2J8_(IR+j;-49WSEpyKsCv=>7}w6&QH$oi&AbRv#9z zzyU~?wv}guuU8JmSz;Z3PGZs&AZJ+gZey0m93SWa_FA2Kv%B;#&~iNKi7CcDzy1MF z5m>)obx=-6J#gPcmeSh{bUY)TdbVFnP|o;PXxD1JW`Dab{prp!uxfO_EbYk_^BmDV zTwxCNrMq9$i%2hPBm}}E*4_cD+8Aj_cC*d15*5*%hmO-c#WqGp59TT4hBG!=BOb*ZiA=$ubn)V; zO^QM2R$zOe$Z9IcArma3_Gp0eqatO772T_ z3F1sRn5?IN!5B4irU;iJ!+0hhj0WKVj)a&RVMJD>@CJqi^YY^ByV1f>3K_t9j{`ET z!Nu7bi|q=R0m*J02INwc0q9mp7M1DI3o6h4%x}}q`w=Fd;oZPd7dY5~#PFMl zcuvQ_`G$kev^^bY`OYF*^Eg`CFqjLIDy%qrphm|ws+uS(g?kWj5(H_9N`tT(z)Nf# zw?i?Er-j(gx?4M&>NzW$VA)|ZPZ;xuikZbcs5o#^Pv8=V!4Z>Y&yad_!yANdLS7e(HcJqhFL?02 zq>V)HwmsxOQ17tgjiBQ%mI+6-qz7rWsD_Iy(K7mYJMVg?SSuH&D(vNyLsxa1Jrrvs zD4V5E>lo=qt$A&#U-bZfPP6%{MRSZ=P7J&(YBCUBzWCJ-Tz@_P)ols$)j|8u@?JB1 z&l>D7VUkPSK)EC`%U{r zIik)et%iQK|F8z-hM>bg>vYP0von(ZVW-2`E2Xn?2JtV>>n8HL(eFjtz=_TXvWo>| z+4=N?WVNJuN70(V*BC)NM0B+%iNlJ%98CR4$kkVrTu{zCDsGl{$iIA&R}T$4(zlMq z9rK1gs%C!Hzp=yDK8N~O`AU(|&-%A@#ei+O=x6V58Vj#{KCyFS%YLS!=A8KAkDv@; z_y)+K(}?|_ViSwvaY)%U1Cb_Df+#sI`wyK?hYVOXB%k@oJ4ym{(s1ORHF-y z9K!hC!6Fj3jK=TOz?ijJJW74xMPylFV)DcWrxh*<+H)S#1F{7SHK<;cHYO$`OQ}=R z9ryY`UehV1%uy(Tu@q^d7n2XSuN(RFLkEt}5FLZ)l)FJ4gRo?-N+?E;|4xi@GTa7Aeo@FE(gjPH#V)M`ye z6lNMu)=$NIL!D%TaWA%PB`6*Y0@dzD=B$lA!nwG-{Q*lvsGoaIhEgK{^)Z4}#11qH zsYTs*{g0nb3{jiRrhUqXRtk9uVpCYY6Z`=$*xaO_IUwFb_ zsK4sfhE=(Eh(3zli=PF${cG}Q{085#?L;mscSMLKSAyr3biAZJ+bSi^;+DVc0EynF zGJh;`_l71E|38!T{^_cimOdW5Pp&U(%Y;z*lS_Q9s{Aw$>Y9+U^n20 zpEiQ+7)@`a;3|_2Crm4828XBYB|j$z_5#Y=$XE+P%_-mA;5Gu*5Nueq>2hQ|{ZnNJ zAZBbhB`0Z2tNWu8QD2wy7mo|yawu^QvLYD@W!P}D$W(2mA59jtaA zyp9gilhqYv{DA0i({cTB!=j2m;)c0wfQD8J4Bi3#ck_TzG=r?8mlk&qN zKl+3KjF^xABaKJ#AC+_u3XReJ&NTDt<3OD(~0>>bwWrYl+ z(;5@WYp@hfQX;kIKV(9ODbkE1{<{4^7?{I_CZXFl=jxEkJMG2uaF&+$C}AEn)^!;y z-3TVcLGc&*SQeByPwD_uls;vw(+20=^yP8;bn`zG-LU4P9J3V3LZWEEGerAv<|69R z0nxEK9g!)HXDShZ^c>|reo$-98DM<`> z#IW2z@{J|B7AY%seyF`)$tM-fII|=2-6i=L7L0_1UlO*R6#3bkcEWBVX24|YFp8c% z2tS~ePYubBYq8_xx1FQ0mUtDUir#4XO3l?Hnv@YG#HI8#Nz$KtJa9E192*Y|;$^lV znWwX+D{Vo)7&|+T#O*fq{CSToJym~gjLo6n5C2MeT2D+rsbut&cI?QL z6#kfKYXyfSE1edBm)YnnFUT`8J$WPS09+FogmMt}!7{nk>EAP!E-qMB=4;#fgBFH0 zB@7eJkf`Vq0JvJ2`237Ep*6;Ew($ z)+npNzgsNeXI^XO=fC)7mjrUC(3JdTfE8S%pAc%1y$UO0AIqh)c%`7lTQXjA>jxQv_-YlmeqeSHDQk4avqV?xJ{ZWkxA5 zKZANe$$_pfh5hoBq^5|M3h`ijUpQArFWT9{g>l^o##I$8yY}|&7xJydz3_%Rx)FB? zFI*zrR|n8yWERTK7N3#TQ>k+|gDDPNc7_o^NZTW0i;f*sOJzl_%f>HT znXYDbm|9cgw4zm)C||1;uP;muqI0PLO>1Qmz!OU+^oLoGD?4e=dk_w7N*0XgCi zGdL(Z<9eBrq!;YUKoE`wqd|AbA@`U@I=DrKp*0~z+SDSGx3|v@km#z8LwgxAzUWO5ox)xwhS#V+@V6Kp6ElfDcIp)`e?5P4c@4U%4aHs|pBPYO|tt$!TCjsryMSv*;5B%s2biAJ#l((r zCKxk-z>k?Vm<@Cj6GZvV+U;6jfAaRNVsf^^ObrWB8AS}_I3!oK^di@-%kun6jDo>8 z@zJ;IN&`dX4S)L|)CB)wX>0Vl7H|zfl+max#zqgX^y?dG51LBGUBQQnx}R-3m)3Ut zThy*6%wm*m({$*i6ngaWU|EBWGa z4_E+nVFlJ{UCrW5ud&1=>rv2fRS*afQLu{TdGjY?R=mzzd>7R&0k`*3{$r2*tGSTX z$V+%p;wamYUoScDWGkhm`qd74T6*{`yAUmgKD1VtsYzped6K=I&BQ768ow4lB6Yw$ z7w8-$;4Cz+Pz2NkIoWK&)o3V&W|-Sp;i^s=y*EA6*6zn6J9^#@_jI8f*3Ba(iu9SK zF=42BP%GA7z4M1XYBOd&C%@X1v@vQ=tjoZBlY*XLy|?B}-&!T}tG)k94snN0!+E>r z>g=Wg>2xi-{!MC(xCQFhzEiXR{9~PW9ga2r{?D{M*GrRFwm)3E(xyV_NZB+k6lEyX%nISvPcc@u4`}UuO{37CDeXd8{t1_Z zE(R+JkP!f6N|drUp3le~3cc&;VZWb#F!RG8ECD#9)cm$`Xe(Gxpq_{!k78svQ!Fjg z3&#@@n8}-p?QA52P&x;rJUYm7H{I~n{RdKC({_(q<|4+XJ-&TKO58-z z7Ab;Dk|%>rBt!sY2<|<(pZz`O)PgDil;|YgJ;~!o5|&y{o#l6yDxC3rWWZ13u&HHU9)eZy)CMs+Dg=kIIU%afRDE& zXrRc(@{grKe}6>YwO{7l;>*1I`r3Dz4)S2>WgcAq19dF~?v|QWjsJ;jORn}<2Sf1TDh)f&+zi+>)gto@^LmVAGsj*j~9 zv(N1HebzO?FoQY08)K(znWJ@P@3qd**)&IXZTix<1;&YKUMvfYOV5vA*C!{|{Dn1P z^Nz;AM`O+#=Dd|X&fke8xo%=KzIlPBe*{JrvcsO2YyOhHyytk)z0Jk|Dz<#Aoh$#Z z&i#+@=e`v)yv!$353f-VtUz8%I9Er}!<;^BOw9M#KhS&kCHC`MaGunW``#_mlKGhS z{6VgR=nrZAsP}i2{Uz*3rhi1&7Uz#Co3BsI`y1L5G;Y>w)P}daLK=VJJZR0c{p?J> zd`dT)vIH#uhM4l;eWbNoQY@4|+WoZOdB#RXo{ljr+yQr`11 zX3Adgb9CCdwoT{-rn{NG0Umfk-ZS+>p$G3fgMr%4uJ>a6;0#;*`g`Z={6CJzh&GIG z;`ot<{gRmXW>SasE%y4#yC_TN&pmR;<~T3focqD=^E*4Y75Mpqt_^ND0mg8*|Pl4}vGY!q2bNPvQFfbxq=Ujx7*p*&MsO5+^b`Px5n&e;%!p zaTphkW9xZowL-@qht=7*7=7P4ROaL1hqV(_@)#fO4C_0)_F>a0mba6J@nj7vb7#2s z?L*}-8TJZpt)l#1{>46i*xffCu3CORYK7gcGipCiM%^2$Sk6y|z8xPyQRfFf?J#$#_JH?rAHLJcI-fyAJb*EVI z%)oed>fN0k7_-SuEBsQ}Z$^!)?VY!@E${l5)@^-09#x_5hv_72Z>@f{5B)qlH;bv+ z?B(s|J)PuzqwJ#-UR}daY*@ zpkb%fU5rOCY^9~>PL$f-wgZjGFTyLCV!Gr!QtwtC5gJ|A?_a~vT8JBuX zt9Uh?1eF8OEk9_sx074r0JJ$g4vnK-tcR2SjQYImSKlLTkQNT~Yk5_>H7_i!zz@u! zF>lp@zD?t*)nMfBqTRX6~d|i%Ti}Y?~ zRBPe;G>%p+n&RI$=2jEv*slh_?@>(4!4zrD-nkAPq%(VN19M$lLw{oqCrjeDhEas^ zZeUEn)8#ese`A7l=54aM*oUiW`?$8PuwYw2SL_^)X**)f^am`PpgsTg$VjZErjs zh_M9fSO(Ll<__if8f5$kb0~s5N0Yt{>s+qf^{2~}tV+JEA7G9k(>{#9hkx__s(E(= zym|m#F{1e(eLRJ{wZ z3grp<>J~s2d@Fna8uw;SW3VBa^{Q>4Mc#yYjZ3(0u&%W#=z@A4#)>iv^z8YQz~8{y zN3Ev6b^6sc@JC+ZX?h>lbqVvCS@L}`?%uZ5C~s*@!-ekE9-{SPYjbQh zdZ05v|26jIR>R*=pCi-*mAPmWWf9f`c)2};@og=mo40X{hii~og$GjiGkD^*0Q8t{ zK=wD2MrD0hn{S*(<UJC~rUvmjx1F_W-a1s5R@mL4or!fk zA7gkwb&Fs(i+iwxSo!_gb~v%GdsNC@@6(Q2p>! zV{;^3)hL4v-7OV*2jk)XIC*4z&E%pAwgBV~cn#a(G=w#B7L;GE&BS;%U`NS@0ngJo z9*g6JO@Dt_vawV*sMqC~VXgW7Dcn1&9c4WevM1K798MU%$iui%PQFgO8P0hLbHFj| z=-x?ta=mRey9=;?h{w|QrBPkMbMwdIWGb-OX`Hm&0^dBFAm3K727UanHH*NPwZeAd z>llFS;$RKW^>Dmk3wBb!ATQlDC!i0nE3j^`E|n#Wa|d*ky1894K)#KD&B0cA0^2&V z-oP875n1AS=)>kV1lQYX`oQyOQ=#u0riWUnlK~Tri&GdA(sv-o3HP4IXrF2hV#5e< zo@#I9dvO1K{JW-8 zXntRWu7Q6~hR#z&@7p@quzI-zc>NNI3D7-X!}C?U$cP zpWTvts&)^@A^1n<6QTcV<-A35Z3z5x67MJ8Lwj^fIGyazb*SilPBWb+z(>fl`H1<) zb5;Ey)qap&xvd0jz5+{C$-klT3@U*EbbmpwFDKqL*;$NxfG-Fbf4l*lb=xy4^+$g^ zZL#^H{hT`-YXfFga2vO`KC@Ne6QY0GVfJ#&_>W@?COcOty$p7B2sDV-+57N|hzC4i ztO4i%-5VrLl7WQ0Bz@Jy3v{fsz>_XYBVZQM?6 z|to?%gAmR6>#|?h9 z4}QQJV{VaEtj}Stk2DS=&wUHPdZXSF^{()tTlIJitWuTchCBxA4gR6=Yz`;r!-}=0 zak#_Yf%7-#QJQOj_E}uRxB{+;IlMw&f9V8Bb68X4ttPB}gW@<_im{=tMxVrBbFxu3 z1N51@G!AGB#=Kv;uokVRam03Q)D=afjquR{12KLokWZey<|K2dYlvt1oL_?q_wCtp z>N>;P!81Pi^o4?5dH~;v#nNCN8^u>coU;&fM@)cNevEjwQHOUCI~6>{$OFMoVHfbm z+IL6yXYt{%XlzVoCl8}O((Z_f##!)cdmLDIk zg#Wv-n)9r=p-jwBwqQMW&@USw*T+IX!1XEC5L->ZYYuxLFGdMtz;`u&%6w?)gL8XZ zJ_4;DY0jhk^g+g~BpqP=>)=E0!CrvRJ**UvXUD?_P1ggTC^|WgY4LH9Oxq>Hvy0t> zIV8IQdaR3c13P^m``!urI_9=#!054v_0f*x#A;M#;D5~rOrDXJl22mHMfm**-VN@b zb-NqeWaR(-c0BC)lRCFwuj2;EJAk#)nBkz~ICU*w#V|_z!Y)L|Q5GiAF#yn}QUXls zI|qRyXNVav&vEQvT+l0jdCd3fqrCCO;Nu&MI+P9s<1%*DIiN-YPmi#VeW2tM*@6gR3d{Ng#u>ywj{6 zzjzQ3i9@&QqzB@;K2X=X8fu91p;o#Kr`Ob*rBj9%!8_!wYuKE1e zEWc5R`6s+*v3=63#uc==Lt6)H%z3!*kL6oEj-kdDv}d#WlRka+SkV4~EuNq)nkVB( z%vZ=9*X)&X>2y%!Uc}$j`K!Km3vC+4wSb={BYP_Rw3jeA$!mS*3ERoy!8@;Y^Wl{| z(sX}^z9PKa8_g(|IT5;39W&`e;1|Gl%D6XR*U|SxeM@){o<%G%|KeSTJU+YiVG&zGsYCJtcl1O0*{nhoQ8K811&<| zrTY!ct=O5DzxHm8r{17EU59k!nyRH7x&(L%3}7$ z6=DL^Bi#1G^DOTvFtrjd*7QW5{B~nDL3<7uXfpJ{gL?QLbPdn{$(W*~0r0^J`Ji3c zd1-%)#h3s~lW!q$63Lt#&-=`0Ieum_)&%xdW6Bb9_wK<~Q=Ap`4!mcLwCBpc+e|$p z`+ICK?1H-ci{kIX^S2TMG-NIZ^kP@&2$2JrBG%)2eLWtonQw`h5wIHa0r*2Zz--7v znf=1EfSn!mBWA$EfO!qsF8Lt0`z6Yag}58qX6?h@qbl%5{Qzx8Cgs3*JRNgZr7F;| zyC7Z7<>XHMB!3ccFzPtOabfR>x*GjSXXxPXz`roI8jll#O+dO)?i*=QknO;|_7Uvd z68LKCARonlGk<|}1ILn#1~YYha%>zg0sYlj7>o_pIWTTO7j&Hw#ZJCVMl+3mTHc4n zPdCYDxQu1eKcP>v-i`B-+FHo?pRSiY5f9dRWPtS(*>Qy_=-dtB5uR(!D?Y)7kL?%n zGl6%xuSha4=a*_9FdO0-%-Pya;Fn={#%Np?2qrZ>hQgi$KVZ}j9l}`;8-W!E;Bz4^1fOVbm7I;p3o%{+KG1wxX-8>Y zsV;}cNbhUDJDW4ur$@PN(!Oc2aKYai4#H=V=S2LBWWEZrd_>zW<6VtdCJ@7t4^6SH zHq&X~Zvib>tw6(HQ(Q#W3S5D%y~kJ-__XyrvT=u{ne;8Wo+mp77>3ssQD1=Dpsz{^^}Xx^Xzw5f zYTkdJ>i_0;!*zz#*>;opx!mVDT0wnh7iU`sYz@r)7pk*>HARdF_sI_eeou{?%_pX7 ze>mp8Hq|WvF7q*NiMfG-6>8T?phF@-KTFlYY)l?t6XJ6#oNP^8Pae~e^WrsFRP%)~ z2E;qVav5Y9W1Se^*@_yGv0{fXrXb_LD5qkLW!(qr9Opp(XDkaX%=I80IyEh3c!DOl zW;5Zt!MqrL#+(g~wv+ZJC)XjiL-(GD z&%|=e^3_HJ>r6Ux!tp(e>vdTyv$2bH8JB(gup_;u+O(Me!0s1k@j8Hv5WZ=U9iL+y z&VsSp4bs0$Ye@Ar1y*-~^DkpO5qU37&%i*xKJJUrK#>pfu_?w5G)CVek2)P_yinE* z^l%+(Qs5nin{oXqF0b+`k6E*Rfd5&%>ws$~#vy9PlH){r*&)p#ODC$a#)$F~rCz+= zg4U!rXPicWt46dwOOWdi)C7? zUCGCBoTq*&woY+jYgj2VxkkI1rO#f)Au6_9#JZvNf*-BS`G1xloj>hIt1|if{b-F& zuldn&?SbY${0r$+AUf5Y*k-fZy=N|?6qo8~Hsm*9I;=aSdPS$m^J@)%h5TwAD8~jm zvA3KAKH-=N$g}Nf7#(rOk!&OSJR{2e`Q%Tlabk|?#=wWT7VRS78t~yPh9xMjEM!p5 z4Rox)Wa#I_J{9Q@5A)q37su!?Y$xCn@(FoN+v9x}NSA|*^mg`fvBlbJjJadobO-JF zp)#`@^DUp(vpRl-mw0@yz~Y}6^B?+=eK?6Tg-`t$%P{C$$|JW6lSd^!cb>l|`7!Mu zmv?|u7I%sqDPxj&SB=Xj{MJQ+-$|#mhW>G&&|*^4{T!uj^<9Mq=gQYVJN`Xp@$Z6? zYodC2W0TFhGMA#-S`D`;z7g7B-^IApsE7I6*xz|AHeIam%zlOU)m7HVQ2PxCI}K?( zbD;kW{0gP&W&Vr}#rLWyl>FKl)7O zu!pteJobA1%UytL|L_aN$XLJ9Z)N`Kj{CMOZo_G%`8-LV1~HmNdxmK5!zsFYR1ep{ z{XcuaUFgHqd5x3E$MT$0^B(+VtOvfDiuzuqremYz;Y(xkJ9^s~+s8T#@d?^*3v?u# z*VXh<+mEnAz5v`{Y)tSMP-g97Wev1lu)QxvWMl4_^|j$xe5=g=Fdkit_?6Ht&6;O{^dE)fxqvlSWx#c}dLe--9kR zfX6EHjF|5=#!tq>Jm7WSPBS0xcL1Lt#S2)^f&YrgLrCWvZ`$6MSPq?I_~9d5%S-<% zo+Dt^Vr4r)``IvN45NT=0qZFG#Cn6c9)#^@v5Oyg-j!nE7)t}&@W5pS#sXt>sV)TT zG6jENEU_#0olsoC=6gDX&jd1uu@Dx&KE!K=`-gy^wpOz{?ReFy8kgdGR~A_7pw4T| zazay9*N*$TdS!+=Q5KZABl^5eCFj?;mUPOb59&QbiLLV*L0+>tV{v-6??z%5^mRs= zexMp7=5_JC3g5SbIt%!+40@#eO!}1h?^FjYc_QXF!p3@xE*)2R1l=TREINdnIHo3j zbc?zeWp|ydEx{TVPPdXB)OQ&*ad|7wIY^zHp+j)b70yqU<5`R1#f7CUbNa+vGq7Jv zr#6?g>rkyTo0qn?PVwmlZB)!gdBR#9a0QdoM=n2i(tgerAN8M&?`*<%@NQM=3|ap) zNXb0zlT-77vUUyi60iRNUY~*QFvZ*-`V_KmG@dWpE9lvJ4HMYi3EK-Zo1l+1^yd?- z#VJy353jSDMOly8#Tdhm=?;uHQ4VRY=Nqb99!~>XvoC-wu-Hv;N^z;S@NZ~OMS0ae zX!Un0Pm`?0>khiat3IL)cxj&_j1R|(I_%h?dKQpVW^=Kog6b(dj}M|&;yE#A=JWmT z_QycqZrKX%*H)tvn#22NUN4C@$?uGG8gz!b{b9bGsM9cx9Y4imX(f$|agTB;QKIkE~H?e;sW5ZWkO$Wv)XnqFpwxZv)ya9g~@ebD1%KS!BFZZ)_ z_(NO=lkiRCUJjin|Ao3^&V9qUc2~7;ie6M~`pFnT-VSwM$jq@fY42O6Z==)(WYiYS zlFvmke=76_Uk~gB!&oX^({#`93)3+T>#RI+rZ4zjX^Z^WJMKSXJNGxBSNqo=)OaB1 z1n_gpq0^YYZ#CwtyQFMUy@L`zME_42->~RAs$Ze@@3sDjGZvG zDY3zcTtI2E1z))G8m5xxBN(#ZMPghp#Pvy*`sdbT{j+Q2?rSG&vM9C_>ns^xo@sUJ zdL3w7PjHikxpZ3G^|NhDoZpYv`D=1K&(Re3vGQ7`I6qIZZQ7@?##(XIdtfgEnIBB- zDeuhvFMUJCC#cN_%)zSi!gFny$Kp9Y+_U0YC7BPSwIaU{_v6%9J)0b>$XVb%JsuyC zwQEAJ$h`;m${qK5%dXqnB|tKme43tjD&KV zw<34XV)4a2&S673Oy*jY+_P@qaX;+$DVq9XkG&!Fv|4wUtTpOmPICmx@z!e z3R-)w=`4LtS}hb|ff4!|vL;`~gMt5gz^`hK3UQ9|cSe4K+M;?%g*Oy?%l?UT22RpF zT@#Rq4~cdZTM@?!8se-G%o$UCpg3PZ?B95%dZu6?Y&z8@(m4c-u1a3_T8&XE_v1FH z)?|pX!m)Y3%4}8R`h{_;wnx%*Cv4q=7S9qgdqr^>HNP>gRVkKW71g;V#*VpIB{rR` zcjU2g?R*wh4{)3lajb#$twnxbO#yt21*}`5KLhtjE9cT+{i%WYO0DtIcsN0ytzrY! zvFc}PXmvR=Wo=S9u7n*{_~X<$5wb1jhp@8(lI{Mp{hHes>e!Vz$^5&zKkS?8r8Qcz zmIPvrZQ96Y158qbz($eOfdzEJv(@z^^o|DgMh;$Ql?g;w*{pQqaAHYPi-iM|Ba zI}=0ZsuOc0U6`o%Lcgd|z*-tLx2nv8*J&o(lJ)+naVBK)`(z$dZzrF~)e0YR$Mmls z&D)wh8xHzZs!g~{@UpT;A92R}RGZJ-X7{hRokMkGg8xO>O4Jch?HS8?A%CH+0v@Nc zd62i`*sOn4F$D52#?HC!VzoOQ7jzCv4TPdEk>5?)*O@#kN$ykf0VSa=!1|Ji@IwjK zkkuB@JYtNL+KL#StWRq@=VJgfi5*j<@?LZv1I&qLT+4R&^r8RP3?V!x!U5ff)Q0e)Kx{m5-J z?zPiK4}{aAl}KpTfO^nghV7}sUEu2J50 zhVfizZ$NrK4&`0(%p_rZ^thvbUIfM8@I0A*nV*O9${xg+mK%Qd-@=kUp0baPWMBbw z?&8@$`40H*9D8l7LqQp%R@at@g@F$v{1Sf7Akgh7Y$C=LY0YU&;I9O}&-VCsx3Xqc z)Yvw7|AyN3&Krlg&o!FTK2&xt-WBKrj+5}5KlRK2Irm8Qg^-^_eH6%9oMVe?s=K6|O6Ny9n)t4{MZjM&kmVx5W6xSOdl_6OA*@ zwm|!44AItAQJ={@eS_j`2K+P zK2Ch55kDJF=!MQ?;@+=`%2PNr=G*e=mEcSx?a+_(t zs9oT>p+*nCJEh0+`;-G(PL#Fkc-1cM$wJ+4ON^d1S6&}iqP^Vd^9IhvfQGE|%JGt*LC65$;kI#0azLWIs1YkFsSl2mIu=n-Cg!ePo zqE=VdxePkE`_(Cy(cjpCjOX3{4EmWbNj_`!6FS1Muzj&#@k!bhb?thjFFF_#nHw|A zL2LLE&zEVor+32;(|2vsm6b zELJY!#WW{n|JV1Y<|5yjpEVEAEjq1Dk{fl;f*)E~AB=TpvVNSMiJ3l2t9~R*D`U;= zN6<;2e`boz$n&M-nT@PZ?U@b6+IvHgmD^gJuNd!d zR_k`a57Y8&s7t|r5P4;T*Wj?TQbiy6`0Tt|3cIHJW@l)q=iB~ka~NV@xzF-Ito~Fx zS7*!kaXwY~4%dbAIO%pN&+NP(g{IXx=uz&!aR0O6f6wddHiECw_f78ivl)NQdF^Ss z#y`1sEKf)^FI-0L7U|>ta$NK&C#m}FEC$WiC$67o=k%m~WmZ!Vw@dpIFsGxgrCLil z$NUu9Nl{ZtbuO6iqBRA@pCMd+FoX_a2_GA4LU5@_~D@@GY+sSa7?Z(z3_NoX{4$Gwci_Ys zeXOok)Ty)m%wqrGGwlsgeKNk+X;Q2+zNCHF{(+qzXGBi3%g<#?jv=-IBF{j3W*ZgM zfgBrkx5!U+3HMd;JPrALgoBjY4es~V`8jpjbU1aMTbv_PbK18FKZuP>)FomJ3UlyB z8*v`Peac$&UZ8JT=F62DO1}4iokd6ab2?8EF(lUCV_bxE1=c2G%@)419f!C_rYz{o zYLP|lalcw090B(?#J5A}Y`mj7$1(7;OLg#5v432_YqHLh&I=SamGh`7qpFP0#+myX zF&{RMbAp7{1u!j(ZmI{P42+Jl5f${-yDXvlhiXB@gmB@o$Upb7}Z|UO(@U zpHna6mfBf%;*8HY-hI4N_#|;&UBb7|@W<76wex!re*jL7V`CKa7vD5^v34#IbL#|q z-wK?(N%x~w%6}kVT0NtPy(jACbS(cu%_@&aYdFM9)Nv-x+K*#@T^1AQzjl@x_eJ9P zy4{+WwkGcWBhGj! z0#=IiZQK^6&o}7!FUP8Q?D)NY2HEf7wUd3sa+Id&k^J=m_v5k6Im68HdGI~7?eUrK zqb}xumHI5EL+;Y@dos>1V{9xYUq$B5l#A2>x!GE-9M?&t=zi*DIu_zxK1+ z7#1qaQFX6o~|W zJU4Da{G;Y`i5Plj*n;DE$RHGgrA>X7p%n_ zwS54II2`$uCaX!_SO@Ok^>_NdRc@15y&L;>1pD?P#@JLIEoWdZRSzn>Zg83H%l#y} z3~1*UfDO%yJ-T$p0p_S~#5riK=KjM8IU?JkoZEh)4^4;aZG*h)`jlz`U)Fy$)^92& zF7tCjPo{Ii3Ellpn-|JYQ$N%0#CKQFkDiN|KL1Vx%C?Z98iod>Ducezfi9*Cd&=O1V z*bJhHx>wIBwebv4q@{jtLaevW_>RF|sS{7r=+#)*s2zV3gZHD%Pm95|ZYeKHdv?|D ztpI=K*|`Yk#j(aB)>lFvuV3kVI(52dpQ)~WlSMgCL5u6C-wqfg&lw!+G@pS?F0BTu z6~{H^XI!v7U2?qfIk2zBm2Ts+9TMLlT;unU#>F+|+<2`sp4&qHnHDp`STxD}jLU|Q zX&LK&7P=}!wo_*-j`?|A9rk@s;`KOIRp))^`D2jBlwP!p*OAQkWu41{cnE9a_?c>^Rvs#^1E>0LFE^|IB<{SLCOIQ|ndrl^P4p9@2N5HMth~mpFg=N?m^j z{nRrLB$m82p)GdysdF$f?ph~Iy`;0d!-r{VZSmU)xM##*^(FCs%eZ#S#C`gucAj)5 z=+al(c$cWxP-3fXJhMB^UoXd43Co)b_Ez3Y?TJb~LouARy%6Ua-53^=o|b7B>E0) zA9xSxy+jPm=G5DYbDZx$20Gr=2G<33%-2WoFT7cJ*O;o;mv_pysFQI}o3K}GpC}iA z-*m-2i(nruCXrinwm%QnNG-k;=W$vHpX+)yw~S-a!&o37yFX9FaH7Pw9{y%_OaG+$5n0s*(>MYdNNziCGA&+OtF zmM}C&d$6P-$pO6^YDt-h=rd`!ZmXLtUSLegB}`9^?f~f7BJhF zkvL}vX$H21>lyY9xf%LF+U&^$uZhuy^ivGNHbDfOO>3J;vy*@Sm@>Rn@ z`dN3We8oTW`zenD{w+NHeB$`KLhARH>FhPWUrd)>Q|`;D(>Ez7hR@IaeJo*JPb(=q zCH30_bZ#QIAv_n)_me4mI+JJos(Cn>=h679I=G!{`$aSMduDtiX0NS>zQONui*i*R`-&pyxcw{%*H81;bmwAJUJkGP-Td$ifN zJr`~%FVBjmhU+1& zSJQkG`Yt>Fwh;Sn#*FqSVZChwV{vrmN09iA6aRKDv)M|2YCCJJO%-R^qy2pS``kNG z^TN(A9(BdJ9wLUO#gXlN_kd@xgWQvD<++yM_-$}~A1|!S4d|bviQmf%*#4T#Z^*-X z0$v3yL}!(5*#0!nN7Sb93APYf`{3u2mwdh`uEDH(5@?`I6^%JtK+|Eta-4k|y8s&Rm zNBQzsqh2uvc?14V?3b%CT<8vxXW*WSW9~9*E!FSC;_o^};kLmCJx4MExb1mqjrzcY zMVM=VXBXgivRmJ`ymsZs@ZG!rm5UaemF*6CozFYhTAKF!uU@!zSE1>DeE06%<-2g< zxIYIAXXCrkyOrx~_V2_mm(S6U;dgI8{oB92`^#Vc@-Fx5+Y9mQcc~YrZs@Me^}r-+|NI6!cF8lKXYpS?CzI~)jGmE;?m0fW#g^fpMQRv`}@EBo4YmrH{U^fKZd!# z)adrZLXLvTwUbqrtMmb#rz`I3hhgJ?ArHp^jMTzxskitx(?l-n~yUu z;_I5Tfh0Nj)AwvQgmL9Iq2sP{>zSLY_HX_gtq;B{ZswjAa5v|Lc$-?9t=G#4_+Vx3 zE~nmlwy`elMey#44@jl)yTFWqZ{Br4-FEx8xhKzeFLT!+wPQMthh#GS+;nAz>)hfg zw=~x-{KjWtn_{C;4jatI%kr}u-2PkMmzXzK4yC329pW@}1`U}hS zfxd7v_v3f4BDrY2^6d4G-+jVIbGfa#%6(bpKIgtz&(P52a8(U)C_ zPb@Fl?_XDorMp@mbgI>>ITHA%^}Bvpvds0<(>J5oC&PCbN{?T zX3Uv6F7irKfjM`HL%GoB*c5V}1Dx*J!2Rn*MrW6z3D)AJc>A-M@hA4cuj~hObh8Nm zyv|t*=xdcj1+p>MKwat^n2+RZjaq<-&J(-Ar?xXA*^ue4T+=zE=E{e(a@U(xNZtR+ z77aV6XSF6JiQbqIP97!=jai2rpDO%;is)?)Z+kdu-d1A9Z(yh?3ct+(JDR!B-Cg9| zV7WeUveFpO;0d@V+3au09=U8`Q$qA|yOp^FW`S1f;YDt-S+idv*MGXmtyhQ6!j3v# zw3d9txQIWP15L7p6?ceV_{CVgAZMAmh8W`o(lN|>ER5D>XrqFV5A#()S)d2y4Va?n z{onun%*KEg;+>E2)lYF3Q>AsTByHf9wfjczJnrYM^0vJI7_nc&yRdLz*66P{3iVJm z{P5FTPJANbBe2xv&tAA)fE)$x8n7v-SntVmBVsoXJUll5Su$~*BF5$LN(fC~$W|`b zv(*B41<8NOIG8sUaRSPj$<98L?6&BSdwMoz0JiRYKJj>Y%TtYVzbZU=iF^bt<}Q|N{FP1cGS{O{kYmuU_%4|S))1J##mWKO zJ$J?6E`hwaAt+im`oa6@GJfTfVFE&SXuRQtjqmV=X6Duf+Y4OyhBO?=C|Izqx7bAf z;Vq0Q@}{U8V4!PMa4;5s5p6(7;fm$*Rv01Sbr5ghtDL!-Zg8mp`B?BL$}?aVTrS&; zU_E#E3$$Tc`1DRRBNP%13XG?_2UbDV#@S(q`U_wKbPf8{ht*kNqbv8%Q7&8nueoAc z_yn;l(;cyRbM28Ex`aC1t&6J&Bi@+@8a`;LXaj396)nvqHzEO0!5f2#u#fd&r~a!8xgjFHBR4KN4xDM=`Y{5TU0EkZO% zF{}bwENtSM9EX<|l-w&>MHPdiz3yqz7bs@NnFMV$o1pfiCNVQgQp62-XdBH~h6) z6DWzaO9~oEy)*V)ppo_tUCMapcJJC7VrzWd6@O(sS!0XmvW9K(mjqF;fJ{d)^Y2N_ z@w8e5OldMbM(Zrmv-|Xf4>2SFZCD^Fb8G^Ik*ih5ib} zPw=Rm*c&O*d=ZhWnQ>Jd2T<75T8vG^6>R^@lN6*b4LNIYvI&4p;`cZ57X;OA^ac>h z+qcrIIMvv{|GQ8^r=IxJXY?bL2bo97RNRS|E)ve(TNQB9x+<&1^*CFhtmXYgvgWM` z41$f7Epc%d?7=Zo7R64C^HWlrBI-HKpNbHFW_@Kq$rR>H^~zQy)s5CfW2q^XmqwM{ zT0H1i+Ii*mA5#AEPpQev8KC0z%|q7=m|vWFLe>6Fh9XgR$%zwgAOpoOfnmPzydCNI z#~=~IFzza#2Tg=GsN)j&Tvut#jTB8WARWDl{R6?jKY+D|;h}9-%=C}nu>t=0-A|V= zpIZ}ggbc7zV~V+#t^UAnsY>LHiaHXiL`;CU$gssH@u)-yZ&j`qh~A4*YoYcEz5ra7 z9g`cx_=Sgh*aPWM4{0F0rLx&4O$*xGis65M10Qud5m{ z(m%aPhtj-|H~3a#VsC*Or0Zr5#ISn)G}PTq~cB2YK--bq=9TqKA2Wq7Z~na_*)l$!6j4}hC-$+Nbos! z%w+RIZC=D7jD#+vI4U)8$=HO1maFT8dd0rQ!@5FENQxL&wDHlwieLGpKfzYxGk@}u z{!|{pv9U*DNX7o+s+Pa6MUqp`zQQls9Oa^d90y+HUUJH_7cco+Z!a;P7n?1*nP?{` z7BaSiyz}H@eo|li^&;jq-SbT}Dh(<;^;(m9BKmIqH{r(1aO1t^F_0OC%}nHv_znWJ-`twZ|pz+&Zq}2iu>#T5v=vZ>|UY~ zd$U?0SZ2VQB4aJBF*dSi3SeL4W{Vw$Yc4Wc(z-zxOSA}{BluXBE1O|4CEm7y_nRZ76$}9m=D?s)CiK<^ zoS(Zl1D zbPQTHbbOH*vt8=zQdg|8jt7-5)yb#CL!^P&!$Vv1#F$WEaF!#n!oS$$Ww&mmB`FaW}eu68A12L!-qK z7RY4G*SZd!>(%s4mg|EdaNcFCxKD$Jc%m=E4Rskb@+YFQiCGKhmopFOU_NUKV^A^z z=Z8r|7gVgv(_~8YpI8#1n6I^jNe0nZtTf{khp;-lUFrp0W;WLgtu28#8OJfzYx+C$ zfVp8GyeSH@hg?IgupS`?V8&gcQPEmbCx;=!lM_s6M-Gu?JNSy=KQ90b?SZE84;M1) zf>fa}E*f2Ynk)j4>&aW4m>mf?LH111WePZJMfH`F~2~Vcy zZ*UkeVkwYJE3g^?A9#3`Xa<+o*0a1K7J7N!z~ZOg=03itER#xFFL7Y`XGdgfMII0( z2PluFUO2IM{m)27zlmHoJ5=_TPfm?ffuZ5*LybsfN7^(`GMSe@ar1|as-SNO$j1(` z);=_#{T)XQVx-GNB_$rHW+gp=yqH#8EP)Mp1A0F^rSl0F>yUfiL^AnfN)^I=ft>Ij zctcE_(eL139%$lhY{r!-mXm%z4Oj8|zok+{RB-XK2;K7+EPHnS340+`lJG*b@(pk8 zZ5&FZ;pi1ClrB;*u3UGQCCyTz_>nFV>%U1lha9hEy3!o@q2~r8(O{s~WEy3pf+*+K zZ>TFl8BG?d%Sitw$@)SVMn#8!GVm%-u)&a!z44ZZt+&tPJ~m0CSLy>p}Q|LUyFr}gD*9r*t%a_zrLc0?{w-Dti# z$U{A1pf{Oh5+yQX`dpKLO5Vpf-Df^`DUdTPqkDsO9B-46EI@+pl(CU$LR?COtHk95 zvDHR;A}kh|2aB`w4ZkPf*J_dCcGNCQ*qN~iICTA~osW!IkX!q$NK6OFTL2gltlxED<6Dv#O#A4Aj z3cgXeM0N;Hf$yT*DOWquP`VZfF`~Z!s6$TM6IH>m65kjOYn&@6BbO3%pw1D0OY@BW zz{eAHOrLaSQK&=;GE-|LxHeOXB$!a-N%S`f0en<)0~h*zoae`rv;OrI&z_gdI9J@z zO%N4QT4;-W8dyeLQd&uKMY|f-S>dwrOrnT6*nW{?~H94hEnF2_*Ei>gJ6}O0- zsm=zBvxWl@ieK(E_(31QPx_#dpX1mcZ-{}s3tk3}v|7pfH8b~jkqIG4_^XVv^GGCb zL)u(1jteXiho*vs<2@ZzyTK_VqP=`<7rdb;VP#~)uvXy)%S-Xal~Q2mrubg3fH==^ zs~}Xa-K*676vr|ZwJZ0a=-V2uMJO96BOFhP?^9`Cl7Kui#otky5%gnWFP1rl7o#}d z{ug3)$(AWnekMwO(gEw)7E^^Rk}!NenacU}^vs-A|8kL=VnGC^0+KR0GpUkyk+VUC zhq=x2HK7v*?FFfew+gAxoQ?C6%J>@~hoDSWUy>nl&QsS(P7Vbx)mA)Tq>++uWH|uv z>_JbhRw5Pg2>O=%n;gKj#qLsXkFQBms?I`{XQ@AZ8PM611JYt#KYsV9xcs1iTo$Y4 z+c|)J{!ESkne)#HckJc)XqkXCToIg^;`kI&idDfmR_zQzy=o&)3-&ip+zX!;$xh-4 z{fX}Xp3x^3`8&C&+?;r9WlgacKwZi|Xqs%l+0%m1NkTJ6xS>Mq)xz;`cNweqq8SLG zYKHK}+QqQ1xjHDV03AJ6vX6mc3Q<~zm~mLkRC&e2jqC=2ySGVg{X@okKheG^n1Lw0 zP&)6C56)xcX!dv>0r!evQbg`WIHPY0@u=nx|L!boy+_br2{yoeDv}XskBO%G8Srpa z$VE|o4zDg`!jghsO74TwdGI200sMoS%uxWFHVRS3fe{gCR^>*vE5uvN#Fo+)7W7kM z+rb$evTfI8_T05*Vuy<5w`pE0Z%V;UVf_h1vWj+M-FTy~XedDnxl$Ph=TD~{z6^0? z^f{@N)3#B{QL=o9nD4KwqCk-#HJ_kSQK?c@q!;-*Bkcc}i5+MgC6i3bq4Pyf)DTb# zPPUZ6SbPjG>z9|bOKJyZM%nb`-zojTk`An~U$uNw45CG1L*^N@3}lY(C^Wia4$m%d$o{UF-+(^bo&9ue`N*hqDryjYL+JDl#r}{ROBg3y2Z9 ztLV=sHW2a#Wpi<1B%mS>xrJwUG3O`~J(vXnvuti6;TdG_HX&bva=tN_a({*o_fiz| zM=Vc<2nyi`+ZBd8$u4<|ebA;Ng!zgndOS#YcrT2dP?gvf=Nu8g#CP;RYe zVAOvV>#xv6?rl){{el`4Fq9gnm1ju@mE0n`H+K(_DtU~a8gKANeh`B|J@AI#KrTm1ct$*RLxcC-aJrtQGB`+#&wT2O<(p)1_!O=1KkQAG zt-*tzQa34%^;y}>ApVnOS$j2uqK4rV$n&_!nN(Oo1^S%2%I;q_IHD?Lz|omk3TBm- zs1AV!rEH*FJUwO5SsY%$$W1m%ZOD%ny2+w#(qdyI6~QtmYY`r3b302P^Q4SuNhK1p zdeYBQ=yRfao^RA6TW0x*6F-s{^)poN1ws|iB`u;HjciQ5l~rS>Kf%h%Y80S0Kxt#{`Y_Ye=S_(xF2>>loWCLkN@y;|Cvj+oRw}= zE9}Md7dbCkTAvc8ctw8tl=F9#kgNrhJU99KPoBlIGi8b4{jAd^CpsFrRLL9yIOdHM$+hlr(}>M zdg_2<0&TO=-=!xc3j02a=Pu%!3ow2kW9t^pz2&1DEPHreVIH!SSic7C=09myIdS8w zEO7DL6U*l&m8o~0J!X|${EswG(d|rDW_L~o(dqVS51VeMoons30zw5M(ZHq}b|!st zY7G=%LHhwc<}Ree^Ifn9bZ`he^n(?a0yClo!@Ajc+dQleGj7pGwGA8wc5w-g+3I@z zCNFjpW^L}#xA!o2jqN^6Kgo6Fe^BEQo`?3P@HVZau#q1^9vsWo5PGay`{h^3-GED% zA2XaLogoqmhR{C1%3JOTB^D7pp-;(2d%`)8?1$C=9%oB;tfjU%(OgGKIAai!y@&BH?kq9CC|RFNRpv5Jqdb_oOCt_~s?D4e z;5#S%m9^jOPk-Vw$y!9IX1p}}a}bjIYp(DK?*AWD{JFpW)l0!0_k{RpK;uQvI<;o( z0p{X~QW*08(#t5BUAUuS(+=M}i(_N!!4`<3WNc{?E#W32fZ!1iV=GR&wn+{nh^rWQ zYdZ?!tz$24&Y^|j!tvvGZm6ZcG77yka{TA#*hXhmzJZFS)EAIh)z&WaiGTb~#BB5~ z<-2tr132+^9I;{VCvA!B{onsxX)P1T#z5mg6XB!`D67*7E`qttY-Zs8Tu^Tz$)kzJIRiT zN$e2&r)kL-h5g0N*4Yx8-phUd^5UTRO#zVT4UNcj%+)L57MzsUkUpq43Ou6b0C}oM zZsgbwbpC|M4y7ljcA=0Dt)>1TUV$6h^Czf)Fku?TJC&GjWJ~F>B;pE>mtg7d=S@I0 zYIvBN)`ra9svAnz^4vl)Pl}01P+iNGClHu4soFb#(A zTg&GB^m8izC+W_~n$`VFHJh0^XX#}KmGwfYV{*|minrA9al~`p;6z>p0Y%2r=q-x} zUf_>YWhRm}SY}#bj7-(=uP_N}w(PT%p0wiDMIec_FA|A0-DqYd$FidAFI1PEHntpm z{`j40Z&&{VD62Rcsqu&=UvggJC%>gCnxFg4yp|K9b=I2vnz2Bv*)tL$v-q%EW{tQY z2blJtvkWX()By0jlQ3sWGvZ`b;bh^aqU9oVXp^d$n};~ZENhoWd!COWI-fsnuCZ22 zDJWCI9cmSn!cuWmJg&WB!FYXTlL0|xaYR)3V=5VLN64q4H zpQkqQP?d`BS# z>Z4TUlX{S@ek8j57^3{>pC|c&o!tJDdi~y9B80`;j=45J!k;iflJ^AxAX9$TQ+|DrgZOp@!HjgLB0AV zU#~voZ{Nf3HxG|%xYj-6T7*CA^4<}D8u~N+{qkX6ubP7v{cX-$neE}v-rzPe2QZ$Y zU+dK2`jEBpWsv>O?;5M#?;rDC*8G3hnAx>X!vID*2WpM>D(6JXP&M- zKL2s;Cgw7OpEJ5vY@Iz9k~f208+_x~I&}x$wdvaMChJ<}`bAE@TYVTgH|n$2{NWFi zo0s@)06zyr)9&Cb*?67)dYk_sUGS~fzF8N%Aa|XcUhQFUn|~nwxGy}s#3#R#UcYtR z=ifVDr~Jl#A_H`@!R`%Tq!Itwse_(3n4UMDv!D5W`r@TI^Lzch0Y448R~Y{hIxw;a zDChN?P6K`p?|-A5f9rbvF*YNcXTH7dvu(;t>--He@{N2PJp!*jvU^{?nT~>g8~zPk zUp^f6Ys7pO$8GlQ!*8bFxAJtSu?8JgUp+jt>(*`SA5Y&ibe)U1b_BS#;o$f}t~~m&6(Gd7%$l5Yb*wzXBoG{zEcnQO2t-~vH`A6B&-$&Db1fRX?tMvCh_}OE0Ze`B9 zbBjMCKCT^qZ?}4Yzwh$*(E!$Rz@9DkZoZ9H|H!t_UdwZ6{2T3j_MCw?2TXP{=hWXn z!q3M}vyS$!EA61S-y>Gw*yE6}hhC@FK3XN?fFI|^j|I0v#~+8)*|-?thnVN%;fJ*o zRPy+N><-4YY9BV8VtG4h7*Ey^Kb*Yx?L*}-89KfdKs%$}*7gcLz+K$@qL$R`P8pZ}cOgucaws#)?p!#ihYd8IaIdm3I?Rqgj%%}Iy*ZXd5 zH|+)W=gF|WwTe;Hy7f2XgZL17J+f+5_D=JDY6r$~GHMqm!-oxi#Qo04kA5$vMq{?L z4^=*ff%q^qUW?3O7e6MAANej=LC?4O2hbneidlFO%_(660 zpmk&BQ$Joc{;+nbJ#!A_&>Zy^&akz?4?A~?6QHr-S;fiQ3Kmh_S7pdPgv&S4BRZ#61Gt67~fdd74Z7whwf25D7LtjA4XB?l~S3d%OHM?s}VE*g_ z+II~nvWo4QRg)iBw_72s0knf3Y9E(+cI$aE7T6 z)1e>w`1_Ya{G8dSA0JE3rgf9YcQ)eh0X%OvjDyphzen1%nv)r<8Liy}KcGE)c;Bjh z*tTv9Tl_#c(jWTp?NWC+4)*wQ^2Hd}E~qRgwd-9+8C$#FEnCQEwd)EzhadCaPQ2=) zJ1oH3?c_(^C!w+7AMv(Z-u1gy{NDGi=DMQIW7OlZt_Yd zU_5lP#~t>zgHrE+y25DGLuKrFtI*BcxE6)pY*JutD{Hm1<~-is*XWENdM_YP3OWOC z{W2ML^P^fzU2CatkT)j9{dNp8(Ft|A8i=_4;~M!F_?SKdK_5o=wpM5W$ zeKK(U#e92P%X6Sll+79HMBf1#JHtBJ2Cgd(lTnxJpx(k9-GgrQBb?`i>(DrNQY`_` ziTQ3jhw97%dX9%ZppleYxt3OQF6RJxDDRBg8_u7VQG@i+v~&0{?KO-5#^a0eNWM_l zpf;Pq`uJ|M3i_spdfs#URhi?#ewjU(gKWVZhCYnlII#X{UHE#Hv5l=A_Kwgd&hf;$ z&Zkxhs z4Ezn)WcXR|VLaQ3&Z~kypTXwBI?nQUj{;ZV8pwXtb>KFmkdU`>3GVN(Uy_L%*$&am z4(D6IPx*0i3K+zQ5Nm*bK|KKD@z>^PiTKF3N>$V~OE(a-x|$BSt^&HvX#Gaj2RRiKCGh$&5mMfsYRaZT&6=3rBedSW{tYbNwJJN5$#ESJcRWCIUR!@wgD@H zZo})|#E|sid}LsoOI#;s1hPMBhYsjn82b^{$ir)hkH^D(#C7vC=zs7XP-o)rh)wGr z$|SVo$78QYFvi)WIY<0gglA{4roM|jjyd*&;H!tJgSHZIuEWOujC~=W;5<-&gKh?$ zQ-(HSe#4%mzti|I6*7r)1)eOm6igfI>8q(h>w{R@0H5Lt>=TT)Q3qQ#hrYp10N(?y zELcOtI+8{tFR`5Uz^;S81#1lJl?U4fHoc7VKTJx-8f`j`8`kt0=?(MF;~LsvudMK% zjThDv@K`}x2eQcq;B!V>K6j+=9C#%Jx-7<{iBG%>|D0iW!PjDD2Tp%hppzVa;0k*kOf&Q3HfwkH@L;ryK-;{bp<5|h?Fus!6@Sn}PoWla`?HGLpP8{F03i}Cm!JEpbUORVP*k7MZISS_V+DpHvnAL z*e#Hr{5s&se2lMXoqEqE__iRshr4t7;`$ZvFB|W1F~xVab`2dDk?ptzUF&!A$m4^O zaReG}z=sFy-kaGW*%N5HTd+&OW9T>4@!56~XQM5AL|ZU1)Mx!A=;Ar*&k^|b&ZxVC z=KurrCZM;XNnQ6P(B5IcpyTRp1LO+%BCy#Q0^6N5w8L!ouK`m3fzh^F%A*4u4(+F zyEyhmnKOY7Y<+>BK{ufNu-W*Tj4OU7v*TdzhQ=eq^ktv1sL)dyTj7-15e>Q~xc z1v|ABJ;L-0+Q*(~qp_PJKaCG)&v9*i!g(M!Wvhg`vtCB~Vgn6HzG0l;BZLmxjiwJa zM`<5)FT*h{(B+jpx7E;|6ES@X?FF!=Bh+cr@-yjBokk6L-B)qo6#Y-l&*AZ_CE*Id`c~7&8ny`IJAiflejHVlkzIN{V^CcfA#T6bAAA%h|MYpy$iQ@pTjj489LEplzT?cJ} zec_*ojR_m{N}my~scfIeb70)Mug9?_@N3Z=wZZ-)zI&j)7;a*Hv}%SDM^gEC@Sf|V zCGge~_0VKkpR4|ZkVloLrN3}{dR<%JPy2f( z#(&3UYPbui2o#+}sD=gs5Ae#$Dn&Ts$u+%^p>JBEnzUJ!A&>^{6Q*;1=fFF&H* z#`p->_!E69@nzCwEx;x_v<1vwvDi`^v%22E8iKF2JIi;K_C3bkYCLs`{<$4sY=6M> z0q{PzGl*-kU+aYb&2_438$=8-?qkk<;pY89V$O=|a)D3o)hyCf%v)DV`Zoyh_ahBye;B&pKqgVt@axA^iIt`Heyzn7&u>@;oWW zO8vEeJRv{Gy9!Nb7!Ls6x>Do4ERJ5{aiTc>ES^0T=MUQPGfA0wpNv-mW|KIG=63Tz z_6hBulK<&bQ;iGrI4ANl!Zq1*@u_*MBlKF`)#QIU-m^!jql zVqWtJ;UA1k4k*9HuoUyp(N|`;6z(ZLEX-?$I8MZsV9Ybb<&#ui0UupTjvYc13qn<|s4k8sMCbja?2&)b~%^!t!xSm$+~ zLj*mrwF8PLVBGbF`R+3%e%w}U-flY4a~Blf`J&i7o?rAq{~myr0>4#QtVP=7l-vQ& zlTK3JO|_k=H$wJ=J znj>L&&Sx2UTiw4A|1jQ?uarRNQQTJaL-@rPJk$f5o7Ph*wm`iM{y+E_Wx4LME!ob) z60zQ7c%@+;KIV+}Ntd!*M1O|yKHqKPSaxEb5z($#iNFri?@WKq-zRDGgnXm)nU4F( zISG8Y09ntQXm1LH=X^VCeM5hVYZ5zs8}07;Wy;NIwH{5-3#bp8RnQelyeE7{2kDI1 zm+8s|=uot?#ljL}F6d8UjSlz$SffLJC}0lE;bKmk^Cn;wkWG-iV{(2heh)fM@N7TM zPs#Z_?%#`bnlvgPv-$ssdA%B-eG_%7@E2VSEW|W-yL+g7#p$9jqPJ<_ldk005}yOxcFZ0-=NV)#AD_KdhWZci<_^i}~oc0T%9+ zCPQN*Y$dPLm^sBd#VT;T)`)WIXe%SErGjx67!UWd+Q(Xhty5BRAR*?3MDDN$@B3JD zR^oU7uWeZlZJMy#neB61#$#m7Zi#XpB^$;ga_^Kc20cQ0bPd-EW6GOcZ`iu=XM_5) znI*fZ^BP>fv|KIl;;;=qGS-A>auMO0VXOmr{;q$;FjzgSZH8SstoDL(xWMm6^usA0 z8!+8q1%OXVEba(c3H*;a;grc}HlrL{{{^{H=z};C^d+k;Xm*#A#vo%}Iu^8xA5Q88 zo(tRBO^!cCEH9_hbrOR9;qhi}cW~U8b3NKcjyGYQGTUz$0wZd51RCZ+9&PMJt&8tA zKwjB+Hpw=zPiMFXKZo0I%ykc0-WzJk zyx#|$8Pk#HgsFCc<@BkxC@{cow|!YNM7b_U`Y~K@Ge4}Jifzm&-z3L#AJY$QFRL@~ zm^~2l$2z{Yk2ad>6<{0`LzK8M9i!p;W9HO^jmP+5{XjJgFjg01=?x>oxV25~OJ5c9 z;|Esb2mOJ51>4r1q+>L`71j%r5y&&kS8lA*!|SvHjK%7&u)e2qz*;A&nJA>%r#9j_ z0-u1dI%)Wr!vy`eV;BT=YOPB8oY4gJ>@DMKjtfX<2mav|I&oczwW#+e@q?P1&9n`T zN~#agvt_LNzx1@-<=IeY&rMhluzP^T{Jd+V zXob&}Od12&6$RraW9bxkD1x0RmQfbaj))qXBjMllI`}+Kjy8(cglzU<$Lk`TMP@t$ za9yge^teUagi+8g3Vz|d7?`6r){}881b#x%CtT$awxT>d<+EF0S1AXd?jv(-srY!t zy4x^Ew40Q7qPl|ak}ymL{S|!1_@KyaDDyG=&}^bEW_3GMr!;gHBnv3xBLnN(j~Ism z?4jFFU3+ zD{9#oZw^_`^4n?`uNOd9U)CinxmYo8`w+*#llcw8BEp`D*tM{c|37>0+MUReEQ)@g zUx9t@+O4)_HIG)i)jd6P1Ofy?s0HF_d$kLy1SN`xDG-7^v)1_!_aEM0aw8%im6?@= zP}@Fd_MGiCJ(8-j@(~#suZ+juKF4`FH)&-rZ2qBfo0)cJ*vXpjfB#*(W^5q{>Y9jc&4&{qz9tz0b`v5&i17(^EMvi@W|};jol6N1BCOi z$P9r`M)xvBMShCx0Tp5EDxXc|yai2U_6e!GBfR^U?FZtwvq{1kQtv4k%nbOWJi2B+ z$s5H#8Fi6%*hhQQW%cx~eD*L*KP`ruET_blkgxM;;BMo4pwgwU^ZyP6Z(XP|u!QBM z67SWmC*0?bM} z402LTUdH|0Yh#qU6zU+Lr+$uXIBQ||yy1E=r!(`o?lg(rS*YjmtNfo89f8?_nZFdJmnXALwwR`=;@Z`~#cOou)81~{ zUP*2#Fq%`HIVekz&XvbAysbCi?rIO$>+9{?o#I!BzMBs>@qUze!#w(;V;sn8kXwMf z`ZTVg-m*RW-oc-+_b}eH@1F(3U2oODtd9G$+qHAqSPcqwz^m((CW8^aXMzO%bArCh zEny?jbVF5_Cb>bxFRT@qO1`b?kctmH!V&oiho{mX$i0-ejbb0#L0m_s`whVJrvT+9 z7FQF^0d=o_$Hn_a{X2%o%6Asqw%K=ExpOIJ#$Kly2wA5QjWbuq43)VoV)hqv4zhon zot@)2#vqj2GxG7}`@wPc0%-*BmQ25mv8{Lp+u;?ryV3JI%bka^$FX@_#PI&?nR^C0 zOUk}VzkPW}#C=w5_aVsJTOiMKpMOd7YQfo#bPwj&NU-hYfHvgX8`5nHbRSRvy)76N zT#VKxUA!FLAlFgdmi;M6?C7`QuQ9l z2BW=nt{wO7PPliH^jq~Azr~o@@>Ag2Y=sK_j<40YkJ4;Iv9lieOc&d4L08{!zO2B6 zY-zs-hMbS1|BmG>Df9twX6ttI=_}1=suF5#On)WY8tr^o<%hBLhU8BDIS2`VLUyejL+;HOg4w-A_kS@l3teGlg0E@1@0=2 zA-{^_J?QfZ_-<+YE-9X(Lw9JmvHgtg1K}~lNxSdAozC}U+txv6E0W7?^quK9H<9lH z;d9&$aXzAZ)4TbzaJ*Mz@Hk(nV9Z>$_0|3mUq_S3W`O=@bY?7fB&4Se%4d&5##8)W zr@lm86ZEdNh<{7CTT3lLOwwI5!!EX zKLoxq8&?rypQO(d;b1d=rrzDl*qz89SCQLPU2wxKV@TB;Lh%TjrBZ5 zbGOMM(+F1VF835;T0-8J;5kIs$Tm=n?q*wA@~>L=JDa#a)K|!orcFS_C*_;95_>U- z%ViB$;v3_sy1aHt^p0ZfO}&ZiFv=Y>!d>yD&awL%79(ZfD|Y9DcfZ0Wr_dSPV>uVV zja;uwetO*R4f+yshy4Eh3gp5;_H3h`IhBs-`T^~mPQQPTTo%(MPF4Gauqo{0z09@| z?VFN6q#|Q4B3oAE|JKh2SsrUKw)(bY#}s45@U;&8mtbGon-|cgNS1nt(QM=Voa;Cf z*B@4}kA7tHh|ZI$*CfV!7yf{~(&4^mKFV1Gx({@2#&br*bQ|&ki21fK`0KJL@f#z) z6L?!e#Q&aQ&ho9(X^4B77V^&qJR`aW`W&3K82?x8R#rLV<$9bIwkS(-c`$|x7G0k1 ztlQ*gEo?mojG(`^VM9g#7>e1Wm_D?F_sNf=*F2wbS~HXQU)paIlIO)vhqYK*-KLf# zlPl-WN@ElBhCrjSQVtWo(ED-rg?sT5dBJWcp}oV{YgHEcYFOg?DfzW)@~3K7CYiBN zMBQRKFnlPiwgg?4On?=qN6bd9o+I?NRQZs!?>hqT%B3hDfQe&&GR&BbhhVm5vXF)E zcI!K*;|l&N=O5kcp^Y)vIp~L3He?p|O}dYFF?csH3zTz=cOQK?zX87=XLqsu4i0^| zR30b%9a!8)VZ7^iR36r5ap46uZY0{DPFA7!GcM~DG3KOA_f-rR6d&b4he31(U zk0nPNw)8K6dF-5S73UqwyHDkgPmIlVxkZB9K=%lyOhq=V;?rYq7oQjUwb*dh%>oZs z&#ce#Ww8BH_DIOmomvF$XgRTfVrr&$2I4f{QwcAS=!+iRWiFf{`y*k2z`-v}x z*>Qk;7yXFHKZ|m*1Zh=|BO5pR+5(QKcm8a??4HrcMwM*`sAYeC3$NXm^nt-&L=W>F5QDaSI{vu;vgj}xp2nZj<-Br=u zM6yc$a#&g!`TTgk!BU#>--#LvW#r;0>N&rFkIdohU<{S?iHmfZAkFT*qx==B?j!Ty zaX)cw{l)yb+E(+M?Ot==G~|J2G)~RW-wm?JGf)n2F=yzmy0zQ`%q*~0WzOkZ(Jejr8#H8uP)vActwN1HKL8yx-P$Jhq|C z@^1pJrF)$q6!|q8x%?q{AT%G?$gWB2iruASjC>StJ~ZM%N2-lPo?D=&1Bp{=Y=4lE zaSfhU^pdU1yhf)ins4 z@iogQNNo)HpZ9ml@(7{aL2@np%+&|i?R2snc~K$y5t}F4df6HD$eD3w^N(P8eH$(Dz1JM`dBk9@#`Q^fiTpt< zzUJwDl%tjLC&NZfycTeC1@KUGD#n{o#<%NH3F9ex*S<9-=k|-|G%VI#xSP+=&1B|=l`5VZOm+l4_E!~S>2=`7- zJ9j8|Jq|D@u@8F?#Q+%aK1KhGQm+Gg{w3n*Si!puA4|#A$i_w)DR6~vg6a3C`blNm zr<8+Li>Vd+7sKaeAMKsE7UgUaeZ}}-^a0DFk6WPRtutaIXuMORSy$y%;HmNGLaxQ< z-Rm{x2Si?oIfzufoatF5%Bv^xC+oI*MNcj;xr^u41ANX$u@RJiU={Scc@-BZZo8iY zSs=@DQ0jK{w_I)`-ztN*H<(}4et#z61E#?RaE|g{U-7jM@J=t+u*6=7eV8Ckq5S~b z^*Ahytaq=^?FWN5tws8ev3}$6oD6>K?v3~(v>#^UcY%=%Mg7M8kP_@-EVtDAQLhW~ zBFgkEcMZRf#aO(?#9{d>(f^VAR*HROew7rLB=U{%cq2m}WB#?=e@^C+C!0!!20P_!+vw0Zy1d!Zd4#Zcg>E@Rqh4EtXAt&NsfS)d_>ymj1!ICO-Q znHNI&elv2KwitPhenc_McGE=jI;2rANg4CP+x=bo5KEbugDdee>tbSEVn!V zeP^XPrvIirk4NMyqSjRi*?d~>P!>bJb#KZ!#mE+A<}s7w7`ZHAj0l{m?J|;#}P?(vi83Hr6uO+!%a>_1Q?9z5?AG^Z8?X zE!n3Y^c;z2(@GJ~RXeQa>Iy!+*K$k>-$6BwO5_-b%`@^dWPd9@hDr84E{pDw7X%Cv zY+FIBFa54X+i~AUmKSr*?wwfvDqgQ;Vd}qfpD;!ReUG%<)TC>%xbF_;KW6cn(m%V)@^8Z# zS#VwEoz+j1%>iTc#=}V|eRXlZP<)|SZZY$2o59Sa{S1bfs}s)sRWs?k^Rd&d-}G8< z=T})a_ArYzY+Cbc;1>zLpwxFK8{NGm;aN2*)25K+I?vs=0^S*#b-^oEwOlgg?=Qip{(|wENfY67$|XNtc@+d z!4=w)xP7#r9mmhM-CmR6H>ck<6HQcLV6;_i|5C;a2ifbGjKJ@A#xB*WN}?x0JU2Ai zpjBUIcDE+h%HlUEmYVWMgPiu*%Z8zOR>fTg+6nti&%ygno?l$pYVwr(e^8EU$|&Os z`&P*7JB{pc(ESXA&;B94iOICX&;?YPt5C$c2@I|m$+)H2KNy`Ly5S0&>=boNDO-601`;OMbaY^C|zlY&CV)c7nxcr`Nn3cTHu%$*Zlfvf~?ObH{S8LB0 zG5Qr@_hGS9O!rpS6Zh?wvZ=sn^xeSt2K4KHF6R}|Heu%$_Q1-;=1i9t6XSl62lM=J zs0SFi%eW1ea+gh+e-QSMzRhu-Df=r^OexkULLUbse>0yeQ|Wg$v8dGea1Bz{=Kkq*QQ8I z&~G95+WAZcEO39!I1W4R5T6BjJndLrtMfVT)h(mX`*e0rJCKL>Q0KS6#P0L2*;yn{ z6flVJi^b};gWt1`hP3bRi8K4x-4DAA%V-Mu94dZZ`|m(Fzooll0h6}j?jW9OMT3R7l|=D}fW$(4C^smEdQ zIwE)v_5MB-}6{nOCC=4{4?1JjPIX0+swbsU2Az` z1V58^k{HuZbKhd^$jGO1kr{OJJT~I}s29)eqWI}4@(lM^RO@qbnZ}T->I}4Owl$@{KTT)CdEZY zzL*x6GJX>CS>8tzlE&G4?vrBW%<~`5rGWHN`llxPcpLmbX^u+lYtmR`hfsKk@bgcE zQ4(${W5sL@$XlfC9r*?3PSkz84~sQa>UFXFf=M`H8CPk0h@EDC%!Mu&P+f{{eQw~g zE)(fEO!2T+%6*j8uV(rLdXbw39bi?tDE>$?!~@6(7a{1unWXzI#aGFqOJ`P#uE8%E zO|tR}hD+t=DZv!p1muFB<`z(X?jgFl^FM9uekGZqPdI9$Ul+ zvzkAfk&LY{@J`sMwKz_LwkW>9@8o^xR`X2=O`CEQcY^nu+TVIxx|?m_`FI!oURU|7 zEuJ*S|2VD-pMI;1jq$%ur^@S8qiikXE?6u>8FMJ-*}b5!#bMn{;s26tQ5(n1mu0~&HlG`saZ{s!PUt~5r;V-Ym=L9yM{!F~*?})_{`RDGNlX>LpU0MNNiyGuW z3#ycp5$TlEsV|2-Z^R&5MZaSiTMpw+`(3md*46l@*`R#pqo1dU_m=fg`T8*DM!%C` zc^Au4-&qZEb;>1)wF_B{6z2FI15YnyqB^co45Q+!zhkv0(N0SKa#UL#aD>%I1^Naw zGemg9TG-teD-1WXp z=k7Z2!Z%BAT`TAJ=`faS2 z&J9wvdiTycSY3P5xxd3szWo4See>N{{P)dwKmR3_!cS8#88C&P!iPV9&6sca z5|56)d|A)dq33?#VB~`zr@qK1-qT{fT!ml0s1KLkZ)<<)efjb__33Y^|NP5ezJ*>= z;cDp*SKog8i}&aRN8ehSpDd3oJ-_}4yZT*f>@27A**3+Vr(lA%9$Z@w$Ep8J=mJ3W zEr(w5x3v@at8HQI4JSW;`yq8ivp<6G2L86t# z!wIMBF!W}x!ql(9a{a@Ub^YrH>S4TEEkZbRBY!ns4^D>j=^GC|TRPzzrSZ?RM`xL; z-`ssE-L&c#sZXg_@{d)DV-XTWK~asqEPpV17DJlu@%HEwb$gy`a|0_~1d*jQ;TduL4m zsn^~|@$#QIZLO7D5^wX*WA<~gRwo629noOaoiZAm*C%y&X!imC?>KryUwvRd}d* zIK_WjHoCT4vn`%FPffs-)N{+I%^?|7;EIV?2gu;EPYjVt5%LWNiGjhSdTn;Ue&dp3?F-m3jR! z-fle$$Nv3_18mO;h@X>x;$rG^z7Pg8e$KlYjRME%p){DhN)iC>mE7X=6~tGkQ6YZmjx zkp}7LB*l+F>|86`0ne?#Gmfuu$Ygs9d4>N|2^;*Mh3rJX>*RxeXaoUIgN^6HRODoB z?~k10)PT>Q&(fjo9$?QOW0WS&Zy8&WJYMTce(Ws0^W|ub>@jSPodA#|*wRFf7EAB( zI5qR0RvPZ%W17fp9R#U={DWF(53q$mgKzLTG~j>7$Ai?G^XQ}EK6rGE7uz2)}T*B~{gHXfWk1Sm+$Q#f-e0fUqi!cgG~ ze=g=>=nn$#Bs!3|OMJ$k)cH#s$B7(aD<2x9Kf;f{@(B&GLqZQn}$`Ie+wB&*g6b*sJZrgW>I865hR<4<0~~cm)hTq16XT2h{f;5}FJ6 zvKf6bru6^dM}#HX;}fkfNjyE{%qR2)t9YFIZYm9Huu_W;_Ali)vA0NlEwdDIi1?2G zZJQbEL7iE~HVtfc93AS=Lg>s%SXxPN4<-GA4-X`5(Z__~pQ2U4>@zTNtJEEh^cvQc zB(Ev0NOIZWDY*BR-fZXr_2i@zs8zV~92XBt2*=$ag$0hxlqko-Tf&d2gWtf*kdRE{ zS6q{Dk2G129kfquT_?!(<%kjcMS{Z{CQAeVa~1yJk7o0wWZ z%Mff3%eHBROqXWmoF)7Is5hNDtKk^HRMcffl4bXZu?jV`Oz23F(S+orjH^j4Y*pGc zjBx~vv^IvKBx$uKF|yU82q(d5OvfbcQLp@sK#3C)DheF6BfyyA5F3&UK9Wf&OkZ?} ztV6dl{lx4dzo^!yYrqLuGQM`5mGc2n#2=Cl{pJBM_~Q^1@6cO)TCeVZc>fXA>UVFC zy=|3ZYRO;nVZN&ss#A&wdzkw*|7<WpEdSuqqVCQ@n=ZS?k)};Ix83#yf1bVF*~X;#l%hFi;Ai?r_KkaUz#Odex`Us0JJxsW1#7j<=_}{J z+rOuG`W$S}}uRUQ@t(8+_|ERQwR zF#pP=*LlBkr)Lz8R_l~D!@~P@EqjVI;U4qax`*u>M%a#VkFJDEqPy9j!8Ux0CNC?~c(pmW~)4pjGcs}*1nn$<3 z?RO{-{$en7(U0J9Fk$PuDz~59PAQDyz_dGao?9l0g_Qmp*|y=snVUT?6i**4E?J&{L;R|4?lO)0#^kJhH@VgQsMwwC#x-Ip zE0_6hfv_U$Kil%oSngS2{x>W)LTLJw@c2;{&#U@R-0A)>?2gn8+@kbt)#shV#dUKaRnw_=W=tlxIW$?yN!z3*8fF17%- zTLK3&W3N<4UXH#k$@oYpx_!ehb} z-we9nzGHcH2p0Y6Sq5`+U~DXdeM_ygwUho(<_a4u4 zf%KKk$6s-$k!~R$Jrl99}S$q_eTDIjh``^ zsOL+Q^V4z=Mc+$Yh~oQUK0tSIKP7!f9s|!150YuV_P69GoF>2HIm@?kTHAihYyU9X zAoV3itI%KK7U%-Tz8N_?q@2`X{CVMC1{Xko9-QrXjJ3)oETc0q=Kc}nPfffm8efAY z#uB*YHlsf+z%5pLY|Q#bR*Z zDfP@Sn#E%%X#SL=m~x?sd?w_xNq+L9`%7Lg*^m4WE9^bXiDAu^q|DpMJ8<75T3lo_ zm1+^MS$;9fr$9Adu2{||mgBIQAIZD`<#Sfc0clj3@>8AmU~N=KnCk6fj*Uh@xiMLd zc&zU_rn9g$} zpO-0vQ4W)7fVC4pvs}xkLUY?Z4FhLcM<6!(1f!r`T_Qfa^CAWZBqDRY|TVh_m4w< z#4N|yHP&9DI=Cgw8D28igED(JC-VKbClPEKw05;#Q9`>_uRFfuXE-*e+BA~Am9t6T zpw3D81orof^pn+TzQ8)B=TCd)Oy8(;7Wf_KIjCRQ`jGk6W3akWa8;Zqmd}`KA9B5e z%f+Cp-D+*dF`y7kF~ehX^eOR zLucbU*P7`^rENdQVv{jHw9u2R`O+i49@RzA^n(b8Yf~mS^D}42z~>42g4k>Jt*rB^ z__nJxh{RaTSNl))?cL)f`!%k;KKem@jYsccj=ZA#ukqjgztnBl>hikuc-zpq_h?ML z^_MT5V*c}a;p$7}`twcWu6Xg~`sSilD}G7iWOOgt1N?6H_zwReQ+cVoag#7=zAWHh z&-xl0tzXdpfgK;x<7&AcuGUM>J+$xG2m9Tbqc{FkydnRT7i|O2%P!Y7H`tN4y6_erkcHV0odEEK>hI$!FJX4)%cZkD@k9E_8vm63<#p=s zDe-%X`RIoHYMZ>R)J{&w8%*&ZfS2Y?Id>_7H_U%XG=9Zy&0lLi7_#&29ejq9)P|cn zi-f_R9}brF^SAQjpTA9gPd%K>oT-P7bg$Mk{MCK+8s7Z;?a^y!@CKX ztK-xw;a#vAFXx-o%-f`j%jJA|WFkJI7yJ^YoFGW~v&DM#L&#r+=yN;pq^Ci6oEofG zu$ZCeKYA`Xg5A&2Q;>XI5GWr~Khf+>SmCUHVR&J>T&h4!aGo}f^%3`9-~g5$d0zr= z2D>8tEV%35vG8}`UPq3cee^hM4v!kzo_$~r<(UExh(11qBwZyZz6XOZQ)t#%ISo}7MkVD$}$&5_A6Uh zmj9`FGO{B_&*KZp{$l#E(3Aj6=2O5XN4W2$KWgs-CtNkiZHK(6F4ms#@b=ODXXp?i z0Q3e@vr3`o)fDiLxplr;rQA7sd`b^Rm{Q8Q2k9yG>&eLp&G*+6HX3x^oF4=8cYst5 zwt#QLz*%yyEa79v9el>#(u+PjI-j|ztp~$m%guc0hN)M4qhFDS@Ak7$bMXsyl!b+a8A&^;g7CU*ZyPLW|dxxuF``HOY)!$KqU&pNvQQ!fG`$y(` zzMR4l-X5#|nFt7Uj{W)D`FaJLkqRYCO2M?SWk9~L%aJ-G_H_wAW@sqQ~t$@dF>rv|Fu8mDFI$cjU!f{RJeioT>-;_kql z`BVWzG>F{at1kTsi#4#?KFe=3IA!NA$vBfl7c_<+Y&d@+Lg z&G3PhZX0gaUu;{6T-CP2N)UqeJ0xY+7bp7ZQToweBz>RNJzo=8$%llG2^X6fc;?@4 zk>=2epm!hGu~^Rnf8xQxS&cFD1zD=Ugd-_Hij<8zT?_A7F^Q$z5TDS0Q_3A6GyToMC2h57QhM$D!|?Lo`AQ2&N)@RtYI_VIm!Vu4+T*W9F`7<`=I0_ zo6&&nj2wTa?RFT+SW_h^AqGMULmp!Yhfckvte}i-P^yG}v^b zDR8t@WlEtC@n3EjMFW}yOFt3_aI9)*Vx$ks?@@F_Y(gI_&t!8Ih99)QWRqyFN~~%0 z@W>V!6klKzwu+6^1F!U|zp(eLx3TsPl0zeTh}hdh#^GuKAIsP?88pc@i#xKLD6Hv{ zy4bUg{MwlTn@y3p?lUfXkD3S`T@0{d za-Tdl+GJx^A&W{FYa>w`WX8}ihOzBHG1hpaNH}uOVol<(m9nuS8AqmrZ*1bbDHOj- zT&s|dnJ^?E#0?TCGE>i~S7<5u`P&UDZYj?J`4+?qpfMoWpiGpCPP(8-(t6>fR4H0c z{IzDI!2MuDU3ptXS58Pk?+qhZM{!4tbSOJ!!0{+ffursX6OtP5ZJdShr^tfv`q&l< zqS*#=R@(pz)QcGha@;tOi;M#~ZXC$*KQ+e1x*=0QE^Zyj#jFErlnX|Hx$B|Ie~~=Q zLpm&cinw>K_oNJ|wD~Cl-%r%+7o3A0m?MZo^pykWkM0#QM<@r+_s9FTOJc}-MZcv=Mmn)y6)Js8xcohwz(;~u&yzK=`Ogm z#$)V>)u>$t1^D~)mdB@fVy!&>s8)7i&ZU`{^Kf!)?Ynka$9{IV{!<@*_Gzr_(}i`+ z5&nbr|08@=-I8&-)H#wnVx0NlVhLsxGerm?6)?L&#;e0+{XsuU=eVS zzP)~I@b}iSUJ#$8;}-01Ye>(Ug-x~rI8mRp!an@$Q=98d) zO17yL_W8Cl|G#ee)QDwi6#JM93~NJ8>*U+P{4=85oy@nR5n$bDSi`!P<-Q@s(snp4 zoz|wo?zUUq_PP`PE!E&zkl$PM_ejLiC^gEsZ=~7xY2Z%VSnpT!S%CMOg!<4T4;t*( zx$wVJz8wlb1}zV2Y+bpag?Z7K-%D&xz*o)<-xX+6NQjwueoh#(GOVaEBb2K)GmkYenQt5VX%FPN zmA;{>|L;Be45Lq0Pw~x;a`0kI3IDz&{448aJm2Wc&F~9we4Eb?XVo#_Iq&Z+^RX+P zg;?tzbHAbw-E{$T=b!Ofw3H9_p6bnBY)0KIjQJ44PmE*GeUJCfA+utAU>$*Wdh}WI zv8xZLzjn;;pZOeG@Wk-3kHc1vFNneN+UGgYr7x89!45fIkq<7zSw?rR7@W3O%?(@s zU4_;6VvhZwBONM}A@$gF$t6&umfxN4S@j<{Z2I!;Rk@+?yUx{k} zP|a?w{^eDXeECl?j)Q-f!~DE}@3ZJU;hat<=pQZpg<PLDN}|&GOS}t6ahuRmHE?h-Zxa*rczpUjMQo~!S`uMS2nXK+5(rky-NCy}`jd4$rhL|x4(r1%=K4snT zC|-!or5f{}r*_vg2FO2Ylrt#5Fu<^z6}dg%W6u2D5YHOLy}5{EnPG%KJ6XrNWcsv9 zz9#&W%d}?lafN;6c|faX-s^I(C0cPA+yegZOy7EKy}OX-ss%hjKmUSUBjWW|)J0|f zuvkmFZ^p#!hn?*l8?}jzKE~+(44SIsZ|3^Gny0c_7sylfxF3FQ1wBAKvhh^F)dAuZ z$OK7qkMT~*p-(=?TKtU2LyPrQN7&Cmo*ASy?iSi)hL{g_`*zgg{@H*hGVWo>&zgGv zA|H5+1+QlCjNsY9m~vK^?7ce9%<1;Az8%J4?&HrahR2}6$vE~FY5K(JRHMz%`-go#vic+?%mEF0N!|uu#Er!;^In~ANbw3WdRoNu91c|c#~jez$|{OaxfOjF z=k4w2E{Anyt2qbehVyY{zIc?g7a4>N!MAiag+1N@O(#Br@cDYgq^9a($^;V2eM7eg*h6uPm7v~M&I?!}KL+|V6s1C^r=`^eD ze7d{ZhU|=$OPe9pNK)n7`~vG?13jBC`L2#}n&Up%D6H`->xA478XvAr*;rRBrZd#X zRATkpX{=*Jwf;nnp}RQUT3p?QyzWyE<1=@WJfBB-jA|hw9`iUrQPXkULs>P8IsNt6 zohUc`E%Hh{cNB9Ecu00&th?;8c-~E)YKfk58MrjVyzVtq)>C9F7PBPe%yDA8gOstj zEUm>jEAQ2~P;)*~*E8y8$Lf1v%?_-^Qpn4gQuup$6|bv7@sj-P9USjOGEzB{!CWl} zYow7_M*@B>h<>6xAl6AW=JKF#SEo#d#n>u6CIZc z-`YE;FgA2EZV!dtzPqfSe^5_AqosS6hD{|d54BOJx_~8$KE@x zrM-rGW_)J9%W8B#GY5OSZM-h1v;~&V;%nP7+Mwt5iSnq#ZJZJA$arq11D*qoSUJ2d zUvvhdxO|HaB5Y$aj+)1Qir7w#rq;IeQ6+PB-zv46jrQ4nr7(Yt_gTGQ@;c}}7TYvC z7pQZfZclm~uM-_`e4;asyc1<9v?EBpNTnZp=8UoK54iVmHWa&))c?#JQ3>tG5s#ap z9V3FpEn73jsS2AQi?6i6z=#)CZC^W!K7+I=uJ1gU@qLDls@h-+#bo_k)^I1AV+mw4 zw8zcl9_AWb7i|TgEA&gs-j~sCiZHsCa=u=7=sl}j1hTLgw^A5_E_#l&S3#d_qs|y$ zE)1pzfSf*SV2wzUkE8ilLeg<_4QP8y=e*wuvLqj4O%k*VM|KBwe-?3jFv+Pr_P$Z; zcLU<@ccQ)v<}B)7t9!Q7;-7^rr=*_&+a6yPZ08U6iR&3f8VmHn(#FWQWae&?XH}h7 zN3+4E7qvoi45uo0Fq`nTVaJSe)6_&fYnR$k&0KMR!@tF`m_3x!DQMKFtA+h9{jY z`=-n6;aZHXF)zKJ2PL-|@O4SQVb5-i+%Cd4W76WA?fOrK=oe?QMs-=&^g5;mfSh52H;^he`W>S*{nRdR;jU_PH5rz*4I2|3yM7-MmN z?+3oK^1>7O;T;C%FdRw^0k-Hc#^>Wwhz*OtxUSrZ$5B}actL&Cfa}zo#T4}J@#m@K ze7@o_4D;od`R+#}t(G47<9_!>L`ahN+)~zckgib7m+MsoI#xgieY!4+rSn$p?#ta} zqj-MtrE!UPmuHFLSAH$_5tkN$ieqR%ljd-O1@g^k%6d*t`8^pP6PF_dgg(+-F8g?Fs= zLNPH%un*2``x?;zL(b+)&m~B4Tt4~oMV(f|yHBw~2LzLvAFdG6M}YG%$Ju=4-)~bJ zoQt-Yfj6SC1gv;sb|0<>;c)2>yrt4PHX*#&Hx2F>$9LodIrPCU9laL0pViOJVPYTi zNDW?CKzin_XRv>R!27}yOQV}UhW`+j3in5ZsJ7{!lIMNGNBp>Vb)pq_Q>0aK|9VUo zZYI8Fa}rsvSzJdTn;kNWxdh=2Y6Zo}TNT)s!t>H7OmfiT_w;_p&!Fg@_xt_##^Frb zD>_g|7(0B-LK0Wbba9;0Hjizc=+NRSn)+KRhjpYP&(7R0~opz10O%Cf( zuixXYV31r|CQFeP>HSbsHl-=% zkB}^g8Q2gy4nPytl%NLb`eSV~y-xRI|btvR^*9UgPGgg~!7P zo@K!w&HX$WMGO*YXJQsgdKeu|BN6(jq>e(f6cqD?Qxc3|w!x^jJ*Y7^9|FK=K(OQpIyR-68d&L=nrw zO;zX=I;7Jw{xQ-qOco)Q8lz)!Vij&HLEbHMlSE8hp^(()j9XW{sScrQ2U<|cEhmX_ ze?9f%TWl3X{)>nPd+Tj-$eau@L_5%8PU*>!g$;f!+59RQyFk-8{BS4B+J6Mz{vlYq z4`=@fe0?5Ujh%P_ivBSO8j)OGMf<2ptQ-m-m5QpWtYezYjCYFpNKY~*#a;P<0t?-) zqjX7%v(iq&Q-@`E63POEY7y!E=S44%eE?uT9Mb4Gp-ZMHf3Q8&K2eX~2jlNpLpg;H z=7V@sCf2NCjZ?tc^%AR1E`q$a6gQoj$x=Z`* zssCbobdd4)-)@KY+IRoecIXge^uO5-NqyNoPC?F+hYR$J2pTT4X{SKBL(ZC_Dp$4~nG1cU2qq1XM( zjdO_q^ z@mkgVZ8uHBs;)}?+BxlY>fv!(aHs~3#CFeU7# zcGZSh=TTD|s!y61=2T{r0y%`?181O02R3V%GU zvFBK$d}Yne68G#XEpn&X^MxHc#=$Vx&I^M_^N^bJ&(g^Qan;Dz#rAGwZT~_#qvwHp ze!eWn9)ok`rTF>Zd+@(^4`kjv2G{hhAIVF%l%uc`){9llUC8B_cA<8WFHjyq`sVuS z)_>YjzCwQH+@j^1%My2=<(-02zC zvYypCrOmMLeqGC+KK9G)`$6Yy;)48Y$fb|H>|$5T)u~=Nz4tR1oBTk1OdFV&EF9$W z6r)<3E_R=H#nbw3;&+=$4!U&xaWHFOjFf*9gnn&1|E*HQ91C@LRu3vAjNh%NE0?`Z z?V$qysu(}=TjlcbaWTH+isEJFqucD+#_LuW{p>i6F)>%od>Q%=degH$a*)^#mS`_lmCQ%YlOjoMe6<=NqI#X7rZ6U=D<&*c331(qLY$aBx!wSpGL8^b=V zhZx_j)ECDb1=PQvzizhbrMsYBs$jf1d?(&lE-Ahx$`O;Rp0aqr#vF4)2)M%E@Sf!y zy7JE`UZ|RDW6b!D@+IYNXFSIpi_3$45jQZO++fyQ-%ZYnjrJMLp~vbPmtfDJ4eULO zsR}kx?dO6TKQ3ZB-3+d8n8SL8^>mfzv7@-LVx!cUl-hTt#(lduZi4Jt?52aFs1r+Ke*j0*4Io^P7l(@Fh@s#ISsdnpS%t! zkJ~h#=ZBS9J&idQyM>xRs@6q(C*by}sKtqSLe~ARi!tql&luBZtYt@W-%XYSit;Y; zoB)*b2V<_L!6U$n;^OfeciO@@xirFuYQn?$#k>{pZ$ayYaYTN@L6-7oW%!!mteITbNi-YMpyoO+aVr@fBDJn#2A?qa~tEan~HxWHpy5jW26hq*S; zoI2oQH5dl^*c1mmV{vH*%{huilz4IDv)I5E!1}5XusF**OP{%VrZ=lU45xt)``YXS z3_mMzcfB0uLjv9YVm=zkoG4K}YBj#vrCbLke*iR^*MOg6K7#?v7sSq?l8cV;V`9P& z;lOkLT>^c}oauNmtK%Hk(Yy|Y)2W1w%tc4%X%y961sdfg)Ycr7pL{$oN?lEit6j5P zVoEIM3+G{l!7hr6-3Q}7?Cq_9Lm`S`k79>q%%g^T<{55H+tb>#o*B-n$oHbWfiw80 z=D56UW1KJ567Oc+z%51eD$1!6#YA+ zHOxzbag{LcpnD!_dm-S?;)bKK3W@m$N1y%kU8T^QYVR}QuG?gJ!d%J|g0byDPcPnU z@#~#k-Nl@ajbgie+iqXCOJ}WSsam>iHSU|OTUlq7#kT8vihC{hrE~`81L^ziyUImT z=237un5RMi4tU80&^UT_wGCz4!L+pM-_6<2rpWuC!RlQF^ZRt#h%c+5a&G_F^T+sO zJCO(FcMj0-LHU;Q6apQ1gm(`BQ+S4alfjJoC}VB=_nh}&ed(vi0oJLfJZcg@V?3zF zVvjMNyQTA;YvMInj~?@%V!S)W@Rl*B!!7V}${WSvfy-^0ugp=yaLQPF6mv~aLdqnG5)u{p{1)`8huA$XIGd zyQwy`#ATM(Ki?SLtEIB*#1%7=kgeHK}>)KMDr{#`pt8tSb2p2 zX+W00ZN3rxN4&-yJ=vxOuk;)(I*2!u${*PxcFA^9+TmjBM5kSM#v!hr5`whGTd(9*EW!(kmrL=Nj{~4s!wKtHhkB zOQ0uXq-#?51X@Bl9JtP7^c$MvBCWe4-L`+K!+`QJ&wJflksnXeCKzLF)$mTfDJXy5)$f-bo-DG%(_ykh>2TTM(%oWCD}bxXTkxEIg)B#F)M+&4Mcc0j z=rXpF^F0~g)VwtbXFIxEoLnWZ(|XSDn{+1I!!qWCY6(3M^-h*gty@3E{JC!SZ0q3J zp|i~LjlDpIkp0X2%cR3l?lKLAl;;fO2h2f9HjgsP9n1ASwx78w>Bjw-4t|Px+)9{V z$HWYDIB_;@={KHJGMVQgPiIkBMR!qQ|x8^06z=4^7XSo3J?luNtTti6t}5$%bX zH}-6evZKgrjk&$#x^x zI*-SIUzq{f(lDP|i`!eEnnYW8mse@AiBTlmq_QkP~erUk0zaIBUfsayO-HvV)8-Z^nr4^b~dqk9Q?VK zGw#pgd4G_;e8J}Y^p(6z&8L|_-~Pn&DRL(Bx)r&eQS(9ZkDJKxE^*x<(*w(;HSo7b zcD~yyl|GX0*D2vSrg!)~&K2{x_lXv&d7=|#pEZut=l~xs=(&=gug+`g`quOK zwP*0p)h9I`+EjC8M|Mx6=8(ioahD

olC^Hb104{C<+l*M{D1xl`bMCh4RKJX(gl zC~fKX^Dbe_Avb$_Dq@Iy;39OpgWu#{vP3#iBIwSBmZ7|g#!~WoTll<< zPt0R7r!N2gSEV^|yY8WPWS422Kdf;Cdtk!_Sz~n1{&3ro4PIQA*KsR;-ufzSNYK|J zp2p_1mmbQT?fO_E_kUE|Qq652*_V3Vs)fG%o8e1j+dS}&@4xAbjlQ_$GiJAc=FI(9 z;6g^Cwfrub7TQvC0&MDgDh zD544!-VEdKMOK>Sg*RA_Mwme_${Gc$|oR|044Hs%c#4#fkxnl7z@qiu~PuunxzC=t~O<;D$z>Te5i?d57sZ zv!o>)32o?hq~?hfsinOsoO9S-{vA)_619`lI5Jxwt3$rFf2617Q?t$JsYxYj9qHgX zPNmgJvs5rqo*6BZ%tw*oGDZnCAP)zJgBj2PNbZUf43A*t;R?F{0hYW3a

;MV0AW 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%0DlD9n9c38Q7mL8lwSv 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%0DM6*l^BPH#6Agp7Z7?5 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 -Tq=}kq+_su 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∨>)fZMJR-}F%KLsOkDc>L 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

;+4-v#74T5j6(eBFWNgq}aN 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�szGiF$)6dZPf)lHUecmdtiZELsF1kyi~Vv#ajh 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