From 6b4c00fb66f1f68f583257f914e09b3ffb5e89ec Mon Sep 17 00:00:00 2001 From: Carlos Castillo Date: Thu, 18 Jun 2026 19:39:59 -0600 Subject: [PATCH 1/4] feat(connector): add Chipi connector to default connectors Adds a "Connect with Chipi" connector. Chipi is a hosted smart-account wallet (passkey, gasless via paymaster) following the same hosted model as the Ready and Cartridge connectors. It wraps the published @chipi-stack/starknet-connector transport: the connector opens the hosted wallet (connect.chipipay.com) in a popup and forwards get-starknet wallet_* RPC over postMessage; it holds no keys. - src/connectors/chipi: ChipiConnector (extends StarknetkitConnector) + icon. account() builds a starknet WalletAccount over the postMessage SWO, mirroring the webwallet connector. Self-registers on window so getAvailableWallets marks it installed (otherwise the modal routes it to the download screen). - Added to defaultConnectors() next to the controller connector. - Dependency: @chipi-stack/starknet-connector ^0.1.2. Build + check pass (no new errors). Verified end to end on mainnet through the starknetkit modal: connect, signTypedData, and a gasless execute, alongside Braavos. Co-Authored-By: Claude Opus 4.8 (1M context) --- package.json | 1 + pnpm-lock.yaml | 72 +++++++++++- src/connectors/chipi/constants.ts | 4 + src/connectors/chipi/index.ts | 176 ++++++++++++++++++++++++++++++ src/helpers/defaultConnectors.ts | 2 + 5 files changed, 253 insertions(+), 2 deletions(-) create mode 100644 src/connectors/chipi/constants.ts create mode 100644 src/connectors/chipi/index.ts diff --git a/package.json b/package.json index 68b7e9c..312c6c4 100644 --- a/package.json +++ b/package.json @@ -107,6 +107,7 @@ "dependencies": { "@argent/x-ui": "^1.109.0", "@cartridge/controller": "^0.12.1", + "@chipi-stack/starknet-connector": "^0.1.2", "@starknet-io/get-starknet": "^4.0.8", "@starknet-io/get-starknet-core": "^4.0.8", "@starknet-io/types-js": "0.8.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 20e7e1d..e038929 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,10 +10,13 @@ importers: dependencies: '@argent/x-ui': specifier: ^1.109.0 - version: 1.109.1(50baa19d61e59b7a5451649a04b14fca) + version: 1.109.1(nhw32lzwxti3rls5x54ajowld4) '@cartridge/controller': specifier: ^0.12.1 version: 0.12.1(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + '@chipi-stack/starknet-connector': + specifier: ^0.1.2 + version: 0.1.2(@starknet-react/core@5.0.3(bufferutil@4.0.9)(get-starknet-core@4.0.0)(react@18.3.1)(starknet@8.5.2)(typescript@5.9.2)(utf-8-validate@5.0.10))(starknet@8.5.2) '@starknet-io/get-starknet': specifier: ^4.0.8 version: 4.0.8 @@ -499,6 +502,13 @@ packages: peerDependencies: react: '>=16.8.0' + '@chipi-stack/starknet-connector@0.1.2': + resolution: {integrity: sha512-NF1xsvcmfPVyQHYe8QQf4xNR8Aks3ADgae97be7YjaZCGuBnH+Y2/e1UmCW4Uis7JZSW86//qRFZF5l6G5y86Q==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@starknet-react/core': '>=3' + starknet: '>=8.1.2' + '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -1638,6 +1648,16 @@ packages: '@starknet-io/types-js@0.9.1': resolution: {integrity: sha512-ngLjOFuWOI4EFij8V+nl5tgHVACr6jqgLNUQbgD+AgnTcAN33SemBPXDIsovwK1Mz1U04Cz3qjDOnTq7067ZQw==} + '@starknet-react/chains@5.0.3': + resolution: {integrity: sha512-TxP391OTWgaqujT9Hu1Siljye54IHjEXrgkUuhMfxzf9sCu5q42ZzZgu9hLm0NcJgg9Fx2t75J0WB6eYmQ26fw==} + + '@starknet-react/core@5.0.3': + resolution: {integrity: sha512-BxtcYL+SPqqDo1cpzfNYcYmSY4Ifjz1O5vq5vDdjx2iHEvHYzxBMjnyacJ+JsdRlQiuLNRGInooC/yzFkMrHAQ==} + peerDependencies: + get-starknet-core: ^4.0.0 + react: ^18.0 + starknet: ^8.1.2 + '@sveltejs/vite-plugin-svelte-inspector@1.0.4': resolution: {integrity: sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==} engines: {node: ^14.18.0 || >= 16} @@ -1653,6 +1673,14 @@ packages: svelte: ^3.54.0 || ^4.0.0 || ^5.0.0-next.0 vite: ^4.0.0 + '@tanstack/query-core@5.101.0': + resolution: {integrity: sha512-cQetA74EB+seWySv1TTKr828TnP0u39m6LykwDXIo84SNortpDkp30TMEjkqtYCNP9c40uT/iwl6MLiufEt0Ow==} + + '@tanstack/react-query@5.101.0': + resolution: {integrity: sha512-rLlJXSpkqfizLWgkR5+eLeIk0MvTx/meEIR7LRjxic+qxiQP8zVjq7BqQkiCMNLQBlLfuOLqqr6KO5GtrDlmSg==} + peerDependencies: + react: ^18 || ^19 + '@telegram-apps/bridge@1.9.2': resolution: {integrity: sha512-SJLcNWLXhbbZr9MiqFH/g2ceuitSJKMxUIZysK4zUNyTUNuonrQG80Q/yrO+XiNbKUj8WdDNM86NBARhuyyinQ==} deprecated: This package is not supported anymore. Use @tma.js/bridge instead @@ -3560,6 +3588,10 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + get-starknet-core@4.0.0: + resolution: {integrity: sha512-6pLmidQZkC3wZsrHY99grQHoGpuuXqkbSP65F8ov1/JsEI8DDLkhsAuLCKFzNOK56cJp+f1bWWfTJ57e9r5eqQ==} + deprecated: Package no longer supported. Please use @starknet-io/get-starknet-core + get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -6931,7 +6963,7 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.30 - '@argent/x-ui@1.109.1(50baa19d61e59b7a5451649a04b14fca)': + '@argent/x-ui@1.109.1(nhw32lzwxti3rls5x54ajowld4)': dependencies: '@chakra-ui/react': 2.10.9(@emotion/react@11.14.0(@types/react@18.3.24)(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.3.24)(react@18.3.1))(@types/react@18.3.24)(react@18.3.1))(@types/react@18.3.24)(framer-motion@11.18.2(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@emotion/react': 11.14.0(@types/react@18.3.24)(react@18.3.1) @@ -7286,6 +7318,12 @@ snapshots: lodash.mergewith: 4.6.2 react: 18.3.1 + '@chipi-stack/starknet-connector@0.1.2(@starknet-react/core@5.0.3(bufferutil@4.0.9)(get-starknet-core@4.0.0)(react@18.3.1)(starknet@8.5.2)(typescript@5.9.2)(utf-8-validate@5.0.10))(starknet@8.5.2)': + dependencies: + '@starknet-io/types-js': 0.7.10 + '@starknet-react/core': 5.0.3(bufferutil@4.0.9)(get-starknet-core@4.0.0)(react@18.3.1)(starknet@8.5.2)(typescript@5.9.2)(utf-8-validate@5.0.10) + starknet: 8.5.2 + '@colors/colors@1.5.0': optional: true @@ -8697,6 +8735,25 @@ snapshots: '@starknet-io/types-js@0.9.1': {} + '@starknet-react/chains@5.0.3': {} + + '@starknet-react/core@5.0.3(bufferutil@4.0.9)(get-starknet-core@4.0.0)(react@18.3.1)(starknet@8.5.2)(typescript@5.9.2)(utf-8-validate@5.0.10)': + dependencies: + '@starknet-io/types-js': 0.7.10 + '@starknet-react/chains': 5.0.3 + '@tanstack/react-query': 5.101.0(react@18.3.1) + abi-wan-kanabi: 2.2.4 + eventemitter3: 5.0.1 + get-starknet-core: 4.0.0 + react: 18.3.1 + starknet: 8.5.2 + viem: 2.37.2(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) + zod: 3.25.76 + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + '@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.5.3(svelte@4.2.20)(vite@4.5.14(@types/node@20.19.12)(terser@5.44.0)))(svelte@4.2.20)(vite@4.5.14(@types/node@20.19.12)(terser@5.44.0))': dependencies: '@sveltejs/vite-plugin-svelte': 2.5.3(svelte@4.2.20)(vite@4.5.14(@types/node@20.19.12)(terser@5.44.0)) @@ -8720,6 +8777,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@tanstack/query-core@5.101.0': {} + + '@tanstack/react-query@5.101.0(react@18.3.1)': + dependencies: + '@tanstack/query-core': 5.101.0 + react: 18.3.1 + '@telegram-apps/bridge@1.9.2': dependencies: '@telegram-apps/signals': 1.1.2 @@ -11422,6 +11486,10 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 + get-starknet-core@4.0.0: + dependencies: + '@starknet-io/types-js': 0.7.10 + get-stream@6.0.1: {} get-stream@7.0.1: {} diff --git a/src/connectors/chipi/constants.ts b/src/connectors/chipi/constants.ts new file mode 100644 index 0000000..2cab8fe --- /dev/null +++ b/src/connectors/chipi/constants.ts @@ -0,0 +1,4 @@ +// Chipi brand wallet icon: the official "CHIPI PAY" wordmark on a white +// rounded tile (256x256 PNG data-URI). +export const CHIPI_ICON = + "data:image/png;base64,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" diff --git a/src/connectors/chipi/index.ts b/src/connectors/chipi/index.ts new file mode 100644 index 0000000..e525490 --- /dev/null +++ b/src/connectors/chipi/index.ts @@ -0,0 +1,176 @@ +import type { + RequestFnCall, + RpcMessage, + RpcTypeToMessageMap, + StarknetWindowObject, +} from "@starknet-io/types-js" +import { + WalletAccount, + type AccountInterface, + type ProviderInterface, + type ProviderOptions, +} from "starknet" +import { ChipiPopupTransport, registerChipiWallet } from "@chipi-stack/starknet-connector" +import { + ConnectorNotAvailableError, + ConnectorNotConnectedError, + UserRejectedRequestError, +} from "../../errors" +import { + StarknetkitConnector, + type ConnectArgs, + type ConnectorData, + type ConnectorIcons, +} from "../connector" +import { CHIPI_ICON } from "./constants" + +/** Starknet mainnet chain id (felt of the shortstring "SN_MAIN"). */ +const SN_MAIN = BigInt("0x534e5f4d41494e") +const DEFAULT_WALLET_URL = "https://connect.chipipay.com" + +export interface ChipiConnectorOptions { + /** Hosted wallet base URL. Defaults to `https://connect.chipipay.com`. */ + walletUrl?: string +} + +/** + * "Connect with Chipi" connector for Starknetkit. + * + * Chipi is a hosted smart-account wallet (passkey, gasless via paymaster). The + * connector opens the hosted wallet in a popup and forwards get-starknet + * `wallet_*` RPC over postMessage; it holds no keys. This is the same hosted + * model as the Ready and Cartridge connectors. It wraps the published + * `@chipi-stack/starknet-connector` transport. + */ +export class ChipiConnector extends StarknetkitConnector { + private _transport: ChipiPopupTransport + private _wallet: StarknetWindowObject | null = null + private _address: string | null = null + + constructor(options: ChipiConnectorOptions = {}) { + super() + this._transport = new ChipiPopupTransport({ + walletUrl: options.walletUrl ?? DEFAULT_WALLET_URL, + mode: "popup", + }) + // Self-register on window so get-starknet's getAvailableWallets discovers + // the wallet. Starknetkit's modal marks a connector "installed" only when its + // id is found among the scanned wallets; without this it routes a hosted + // wallet to the "download" screen. Same approach as Cartridge Controller. + registerChipiWallet(this.buildWallet()) + } + + get id(): string { + return "chipi" + } + + get name(): string { + return "Connect with Chipi" + } + + get icon(): ConnectorIcons { + return { light: CHIPI_ICON, dark: CHIPI_ICON } + } + + get wallet(): StarknetWindowObject { + if (!this._wallet) { + throw new ConnectorNotConnectedError() + } + return this._wallet + } + + available(): boolean { + return typeof window !== "undefined" + } + + async ready(): Promise { + return this._address !== null + } + + /** Build the postMessage-backed get-starknet window object over the transport. */ + private buildWallet(): StarknetWindowObject { + if (this._wallet) { + return this._wallet + } + const transport = this._transport + this._wallet = { + id: this.id, + name: this.name, + version: "1.0.0", + icon: CHIPI_ICON, + request: ((call: RpcMessage) => + transport.request(call)) as StarknetWindowObject["request"], + on: ((event: string, handler: (data: unknown) => void) => { + if (event === "accountsChanged" || event === "networkChanged") { + transport.on(event, handler) + } + }) as StarknetWindowObject["on"], + off: ((event: string, handler: (data: unknown) => void) => { + if (event === "accountsChanged" || event === "networkChanged") { + transport.off(event, handler) + } + }) as StarknetWindowObject["off"], + } + return this._wallet + } + + async connect(_args: ConnectArgs = {}): Promise { + if (!this.available()) { + throw new ConnectorNotAvailableError() + } + await this._transport.open() + this.buildWallet() + const accounts = (await this._transport.request({ + type: "wallet_requestAccounts", + })) as string[] + const account = accounts?.[0] + if (!account) { + throw new UserRejectedRequestError() + } + this._address = account + const chainId = SN_MAIN + + /** + * @dev This emit ensures compatibility with starknet-react + */ + this.emit("connect", { account, chainId }) + + return { account, chainId } + } + + async disconnect(): Promise { + this._transport.close() + this._wallet = null + this._address = null + + /** + * @dev This emit ensures compatibility with starknet-react + */ + this.emit("disconnect") + } + + async account( + provider: ProviderOptions | ProviderInterface, + ): Promise { + if (!this._wallet || !this._address) { + throw new ConnectorNotConnectedError() + } + return new WalletAccount({ + provider, + walletProvider: this._wallet, + address: this._address, + }) + } + + async chainId(): Promise { + return SN_MAIN + } + + async request( + call: RequestFnCall, + ): Promise { + return this._transport.request(call) as Promise< + RpcTypeToMessageMap[T]["result"] + > + } +} diff --git a/src/helpers/defaultConnectors.ts b/src/helpers/defaultConnectors.ts index 9bb2937..383a105 100644 --- a/src/helpers/defaultConnectors.ts +++ b/src/helpers/defaultConnectors.ts @@ -3,6 +3,7 @@ import { type ArgentMobileConnectorOptions } from "../connectors/argent/argentMo import { BraavosMobileBaseConnector } from "../connectors/braavosMobile" import { KeplrMobileBaseConnector } from "../connectors/keplrMobile" import { ControllerConnector } from "../connectors/controller" +import { ChipiConnector } from "../connectors/chipi" import { Braavos } from "../connectors/injected/braavos" import { Fordefi } from "../connectors/injected/fordefi" import { Keplr } from "../connectors/injected/keplr" @@ -38,6 +39,7 @@ export const defaultConnectors = (): StarknetkitConnector[] => { } defaultConnectors.push(new ControllerConnector()) + defaultConnectors.push(new ChipiConnector()) if (isMobileDevice()) { defaultConnectors.push(new BraavosMobileBaseConnector()) From 6d13b162c5f607527bfa6131258d4a72273ddee0 Mon Sep 17 00:00:00 2001 From: Carlos Castillo Date: Thu, 18 Jun 2026 21:05:07 -0600 Subject: [PATCH 2/4] chore(chipi): default to wallet.chipipay.com + bump to ^0.1.3 The Chipi hosted wallet authenticates on the wallet.chipipay.com domain, so that is the working host. Updates the connector dep to ^0.1.3 (whose own default also points there). Co-Authored-By: Claude Opus 4.8 (1M context) --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- src/connectors/chipi/index.ts | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 312c6c4..2f920b9 100644 --- a/package.json +++ b/package.json @@ -107,7 +107,7 @@ "dependencies": { "@argent/x-ui": "^1.109.0", "@cartridge/controller": "^0.12.1", - "@chipi-stack/starknet-connector": "^0.1.2", + "@chipi-stack/starknet-connector": "^0.1.3", "@starknet-io/get-starknet": "^4.0.8", "@starknet-io/get-starknet-core": "^4.0.8", "@starknet-io/types-js": "0.8.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e038929..de41386 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,8 +15,8 @@ importers: specifier: ^0.12.1 version: 0.12.1(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) '@chipi-stack/starknet-connector': - specifier: ^0.1.2 - version: 0.1.2(@starknet-react/core@5.0.3(bufferutil@4.0.9)(get-starknet-core@4.0.0)(react@18.3.1)(starknet@8.5.2)(typescript@5.9.2)(utf-8-validate@5.0.10))(starknet@8.5.2) + specifier: ^0.1.3 + version: 0.1.3(@starknet-react/core@5.0.3(bufferutil@4.0.9)(get-starknet-core@4.0.0)(react@18.3.1)(starknet@8.5.2)(typescript@5.9.2)(utf-8-validate@5.0.10))(starknet@8.5.2) '@starknet-io/get-starknet': specifier: ^4.0.8 version: 4.0.8 @@ -502,8 +502,8 @@ packages: peerDependencies: react: '>=16.8.0' - '@chipi-stack/starknet-connector@0.1.2': - resolution: {integrity: sha512-NF1xsvcmfPVyQHYe8QQf4xNR8Aks3ADgae97be7YjaZCGuBnH+Y2/e1UmCW4Uis7JZSW86//qRFZF5l6G5y86Q==} + '@chipi-stack/starknet-connector@0.1.3': + resolution: {integrity: sha512-QUKToAy0v8wuHK0bixvUvDhZ/HuloRt2lnkhQUwBETIiKLM59Xe1Dli+qM4H7ebpuq9Qu0Y2PatCOoaTHlbTsg==} engines: {node: '>=20.19.0'} peerDependencies: '@starknet-react/core': '>=3' @@ -7318,7 +7318,7 @@ snapshots: lodash.mergewith: 4.6.2 react: 18.3.1 - '@chipi-stack/starknet-connector@0.1.2(@starknet-react/core@5.0.3(bufferutil@4.0.9)(get-starknet-core@4.0.0)(react@18.3.1)(starknet@8.5.2)(typescript@5.9.2)(utf-8-validate@5.0.10))(starknet@8.5.2)': + '@chipi-stack/starknet-connector@0.1.3(@starknet-react/core@5.0.3(bufferutil@4.0.9)(get-starknet-core@4.0.0)(react@18.3.1)(starknet@8.5.2)(typescript@5.9.2)(utf-8-validate@5.0.10))(starknet@8.5.2)': dependencies: '@starknet-io/types-js': 0.7.10 '@starknet-react/core': 5.0.3(bufferutil@4.0.9)(get-starknet-core@4.0.0)(react@18.3.1)(starknet@8.5.2)(typescript@5.9.2)(utf-8-validate@5.0.10) diff --git a/src/connectors/chipi/index.ts b/src/connectors/chipi/index.ts index e525490..af2dc52 100644 --- a/src/connectors/chipi/index.ts +++ b/src/connectors/chipi/index.ts @@ -26,10 +26,10 @@ import { CHIPI_ICON } from "./constants" /** Starknet mainnet chain id (felt of the shortstring "SN_MAIN"). */ const SN_MAIN = BigInt("0x534e5f4d41494e") -const DEFAULT_WALLET_URL = "https://connect.chipipay.com" +const DEFAULT_WALLET_URL = "https://wallet.chipipay.com" export interface ChipiConnectorOptions { - /** Hosted wallet base URL. Defaults to `https://connect.chipipay.com`. */ + /** Hosted wallet base URL. Defaults to `https://wallet.chipipay.com`. */ walletUrl?: string } From 1db02451cc9ac0e6c66bacecb3559efcbc81d514 Mon Sep 17 00:00:00 2001 From: Carlos Castillo Date: Fri, 19 Jun 2026 09:37:07 -0600 Subject: [PATCH 3/4] =?UTF-8?q?chore(chipi):=20bump=20connector=20to=20^0.?= =?UTF-8?q?1.4=20(re-send=20on=20ready=20=E2=86=92=20seamless=20new-user)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 2f920b9..c757ce8 100644 --- a/package.json +++ b/package.json @@ -107,7 +107,7 @@ "dependencies": { "@argent/x-ui": "^1.109.0", "@cartridge/controller": "^0.12.1", - "@chipi-stack/starknet-connector": "^0.1.3", + "@chipi-stack/starknet-connector": "^0.1.4", "@starknet-io/get-starknet": "^4.0.8", "@starknet-io/get-starknet-core": "^4.0.8", "@starknet-io/types-js": "0.8.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index de41386..6654386 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,8 +15,8 @@ importers: specifier: ^0.12.1 version: 0.12.1(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) '@chipi-stack/starknet-connector': - specifier: ^0.1.3 - version: 0.1.3(@starknet-react/core@5.0.3(bufferutil@4.0.9)(get-starknet-core@4.0.0)(react@18.3.1)(starknet@8.5.2)(typescript@5.9.2)(utf-8-validate@5.0.10))(starknet@8.5.2) + specifier: ^0.1.4 + version: 0.1.4(@starknet-react/core@5.0.3(bufferutil@4.0.9)(get-starknet-core@4.0.0)(react@18.3.1)(starknet@8.5.2)(typescript@5.9.2)(utf-8-validate@5.0.10))(starknet@8.5.2) '@starknet-io/get-starknet': specifier: ^4.0.8 version: 4.0.8 @@ -502,8 +502,8 @@ packages: peerDependencies: react: '>=16.8.0' - '@chipi-stack/starknet-connector@0.1.3': - resolution: {integrity: sha512-QUKToAy0v8wuHK0bixvUvDhZ/HuloRt2lnkhQUwBETIiKLM59Xe1Dli+qM4H7ebpuq9Qu0Y2PatCOoaTHlbTsg==} + '@chipi-stack/starknet-connector@0.1.4': + resolution: {integrity: sha512-Mlmjw9tMqXtDI1pFgfguOJdWOmZYmKVsDG7AfAQ3gC7pj/luv3liULXzoAORg8MrT0Q2EEfM8lwYwdX2QPyrrQ==} engines: {node: '>=20.19.0'} peerDependencies: '@starknet-react/core': '>=3' @@ -7318,7 +7318,7 @@ snapshots: lodash.mergewith: 4.6.2 react: 18.3.1 - '@chipi-stack/starknet-connector@0.1.3(@starknet-react/core@5.0.3(bufferutil@4.0.9)(get-starknet-core@4.0.0)(react@18.3.1)(starknet@8.5.2)(typescript@5.9.2)(utf-8-validate@5.0.10))(starknet@8.5.2)': + '@chipi-stack/starknet-connector@0.1.4(@starknet-react/core@5.0.3(bufferutil@4.0.9)(get-starknet-core@4.0.0)(react@18.3.1)(starknet@8.5.2)(typescript@5.9.2)(utf-8-validate@5.0.10))(starknet@8.5.2)': dependencies: '@starknet-io/types-js': 0.7.10 '@starknet-react/core': 5.0.3(bufferutil@4.0.9)(get-starknet-core@4.0.0)(react@18.3.1)(starknet@8.5.2)(typescript@5.9.2)(utf-8-validate@5.0.10) From be00e5a2e3ae0a48d42934e61820dc2708061d62 Mon Sep 17 00:00:00 2001 From: Carlos Castillo Date: Thu, 23 Jul 2026 17:55:53 -0600 Subject: [PATCH 4/4] chore(chipi): bump to starknet-connector 0.2.0, update brand icon 0.2.0 adds the chipi() factory and fixes the default icon upstream; this connector still passes its own explicit icon, so bump it here too rather than relying on the (now fixed) upstream default. --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- src/connectors/chipi/constants.ts | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index c757ce8..eaf704b 100644 --- a/package.json +++ b/package.json @@ -107,7 +107,7 @@ "dependencies": { "@argent/x-ui": "^1.109.0", "@cartridge/controller": "^0.12.1", - "@chipi-stack/starknet-connector": "^0.1.4", + "@chipi-stack/starknet-connector": "^0.2.0", "@starknet-io/get-starknet": "^4.0.8", "@starknet-io/get-starknet-core": "^4.0.8", "@starknet-io/types-js": "0.8.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6654386..13ae548 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,8 +15,8 @@ importers: specifier: ^0.12.1 version: 0.12.1(@types/react@18.3.24)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.9.2)(utf-8-validate@5.0.10)(zod@3.25.76) '@chipi-stack/starknet-connector': - specifier: ^0.1.4 - version: 0.1.4(@starknet-react/core@5.0.3(bufferutil@4.0.9)(get-starknet-core@4.0.0)(react@18.3.1)(starknet@8.5.2)(typescript@5.9.2)(utf-8-validate@5.0.10))(starknet@8.5.2) + specifier: ^0.2.0 + version: 0.2.0(@starknet-react/core@5.0.3(bufferutil@4.0.9)(get-starknet-core@4.0.0)(react@18.3.1)(starknet@8.5.2)(typescript@5.9.2)(utf-8-validate@5.0.10))(starknet@8.5.2) '@starknet-io/get-starknet': specifier: ^4.0.8 version: 4.0.8 @@ -502,8 +502,8 @@ packages: peerDependencies: react: '>=16.8.0' - '@chipi-stack/starknet-connector@0.1.4': - resolution: {integrity: sha512-Mlmjw9tMqXtDI1pFgfguOJdWOmZYmKVsDG7AfAQ3gC7pj/luv3liULXzoAORg8MrT0Q2EEfM8lwYwdX2QPyrrQ==} + '@chipi-stack/starknet-connector@0.2.0': + resolution: {integrity: sha512-EDszaoZ+WvNfZFf/NS1W5d02FqUAGBo+PpU+0mfC+TMLC+UtRVAPIvrGFBvYxUMA3884tr9+I0fkcxFRlldNbQ==} engines: {node: '>=20.19.0'} peerDependencies: '@starknet-react/core': '>=3' @@ -7318,7 +7318,7 @@ snapshots: lodash.mergewith: 4.6.2 react: 18.3.1 - '@chipi-stack/starknet-connector@0.1.4(@starknet-react/core@5.0.3(bufferutil@4.0.9)(get-starknet-core@4.0.0)(react@18.3.1)(starknet@8.5.2)(typescript@5.9.2)(utf-8-validate@5.0.10))(starknet@8.5.2)': + '@chipi-stack/starknet-connector@0.2.0(@starknet-react/core@5.0.3(bufferutil@4.0.9)(get-starknet-core@4.0.0)(react@18.3.1)(starknet@8.5.2)(typescript@5.9.2)(utf-8-validate@5.0.10))(starknet@8.5.2)': dependencies: '@starknet-io/types-js': 0.7.10 '@starknet-react/core': 5.0.3(bufferutil@4.0.9)(get-starknet-core@4.0.0)(react@18.3.1)(starknet@8.5.2)(typescript@5.9.2)(utf-8-validate@5.0.10) diff --git a/src/connectors/chipi/constants.ts b/src/connectors/chipi/constants.ts index 2cab8fe..093ba9a 100644 --- a/src/connectors/chipi/constants.ts +++ b/src/connectors/chipi/constants.ts @@ -1,4 +1,4 @@ -// Chipi brand wallet icon: the official "CHIPI PAY" wordmark on a white -// rounded tile (256x256 PNG data-URI). +// Chipi brand wallet icon: the current luchador mark (same asset used by +// the Chipi Wallet browser extension's toolbar icon). export const CHIPI_ICON = - "data:image/png;base64,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" + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAYtklEQVR4nK2aB5hU5b3/P+8pM7Mzs7uzlWV3YWlL7yUiiIIBARGDRrmWRK9GvV5jTCyJmibYYr2KXQJEicQIasQuAgsiTQEBAZGyC0vZ3mann/L+n/csplyjuff/3HeeszN75syZX3u/318Zwf/nWr58ub63aK9Qr+dPme8AUsrOIa0cXBRwkoVB3e1JOumQdgVJDTetY6cNR2b8NVbafzgZDr5TPHDA75Fd97vrrru0eYCYP9/938jhCfC/WVJK9RkhhPjrF0kpI8t2vPLz1PHmURUVkZky1oLPiqNbGWTcQqYkpDV0K4Ahcsk1Cynr2RunOO8ex3E+C5YXtgbzi9d/ZZi5c+cqg/zfL2Wlr15vzGw/c3XLpmte2/fuJauOr3vunMtnSgOh7Km+XCknv+Fwi0M5zroFC936N1bJYyvelSffWSdbDhx6UkpZ6hlk+XL9/9wDUkpNWf0LKUv7wcB7lt73+mvPvpIba+sgFU3QUNds5582QBg9C3UnbSE8P6lD8w6h67iawLRc6t/dQk5GUBDJc31ZATnvsmu1i6fOEnUi0Rga0uO6/LKKlbKqyhBTptj/QiZh/E+Ef/75baYQwtpem5yx9NHHXtq2bW3BtlUbaWttc3LG9EV2KxJFY3oZuVdMJ1YcRE+mPOGVuQU66BoYGo4QZBl+evTIp61qN/WdcS1ZU8svljzJ9kMH7Gu+e36xX5jL49HoXJGTs7KqqsqY8i1KCCG8eP7W9VVMbttpnb161cvL751/Y0EsHnX1oE8UTxkucm+cQ6dPgiaIJVO4toXuSlzXRSgtNIHUhaeQkJqyGoGASVZaEko4tL+4ipNrd0HK5vtnTHUfvvomLbtv94xvWN+Lc/Pz35RS6kII559ZPwZF36rAXXdJbd++FeJnN541tWr1yhfue/CWkmQm5lRcNkX3Tx9FIqjTqYM0lHS6khVNiS0lUrq4QqBMpL5Ek11bQHMF+S02lqHRHoKQC+GoTedftnDi7c18d9gYd/Gtv9YCvQui3c48bbIQ/s++Ct+vBFfPK/buNc9sat/010359SXF/PlCvvbaJc6nGz989IFHby+x/bbd54bZOpdMoCGiE9NddOGiuRJdumgqaFToKE10HaEpdTRwXe9wkeR1SmZ9ZDN5i0XI0ujUNRpLswncMJPyfzuLNZ9v12584j6H5iM5nccOPiulzJ43b95fBWfFCqWMvKCpbcLHVWuHfqMCymDqwj3bW3/8xf4dfWOJNqf3VTMN++LxtNpJT2ihBPXiXFnW7cKgvwaosrd6v+u895YmyK9NcG6gkhnpMvIbLLSAichkaHKSZF09jdCA7qz+bIe+o2afHWivPS3ZefyGefPmyXXr1umeJ+bOdZQyr6//8MlrHrzPr30bXLquW/7ss488vuilJwLdzh6pWRMH0B5PoGlGFyZKiaMLXNGFm8rCX+ngqm2hZNYND31cKTFs6N7o0DevjLElA+hdLzGVot4+l7TJBMUXTsDJDnDLghdFTfV+mWw4NksZcvKUKY4KI7UnqPn0ppc+/GCo8BnuN3pAfUh9/5Gaw5bj2rLo8u/Snp+FcCS6pnmxrbCyoMMlNyk8Rbpc5+JKV2EPww5anLYhSkm9g2GYmGlJ71SA7gUl9CmtYGQyQiDu4hMGfQ/EGbK5icj4weSO6MX+Y3Vaq50h6HdHSSlPV3pKubN423vPVF15868ef2vjVtexHO1rMKrco4TfsOFwzz8ufu+luoajAXU+lUkJ1w2ieWGj4eo62SmXyVszuDZ8NCVMcy4Iy0W4EqlJSo4nuKq9D5+dbGZdjwSpIj+l6RB10SaMpEmfRBb9a+L4o0kuqImQ8kuWlMVxw6Znw7fW77CHjewXbj6x4xJg8+5Pdtx/5/0LJ63+eJd97cyJRl7Q4GsKrFixQnnF8UeMEQuXPjVp2+5NbuH4gVom7EdYtmd17+66TrAjwxlGD0bnVqC9v4EtY/00lZlYhsA24XC+heGEuKP/VEZ/sYm1Bz4nUZbDYvNT0gZoBRkGbGtmvN6Ty0bN5KFDb9KebVAweTSpjw9x/5PLxXmzx8pho3r0k1JmzZt39YzVH+9yn77pUu2GaYNAZr6uwFcr7cbsttZ6V4tkUfLTCziZ5aBZNtIwupTQBOEkFPqyGTFwJHdIg3e3fMaGYAtHyjTaSnzEC7LYeOQovZt7UK+3UHphf9oGR6jTU0TdNJptUXAoTPV7raw5uJVaX4xgg8tgJ4eC0YPZ+tE2OnVb2D5LRWT4yIm6SMjQtJlj+8ma2gZe23zgmxUIGAlhCkfBtpuQGRSKKVBUMY6KcMWqacj3ZSNTaSrLKripXy8mxY+yLVbNgeP1Hlq1p1Is2/Qm5VcNR5tSSGtzM4lUmqSbxsZCjggSCgR5+6lPsIs1zkr5GTtnAMuOhpDrJRnDIeUmlNstMxTIpG03FEtliAQCbD5Q980KqGU5GYTKYzzRZRdBuW4XzgOm7RIwDYQp2NNylNWH9hENS4J9s+k/oJJgqYuTitP2aSt7t27DjJbjP6McR4t79zFMjazqFA2rDtJrRi6jZ/Qhpqc4eLyOxpqWLhmQKgVRqUz7gqV3fKIFzekvr97uzrvkdP2Fm2d/swK6oXdlegpdDJWQOR5sKg84UqLjw8y4WLaFnWPwm2efpbbjIIUBPy0Ji6jhIEqCDJhayYwrT2fotDA7nt9L9LVW/LMr6dQsIm06mb98zuhzKyiZ1J0/P/w2e17dRaEMcLKhS4G0xzd+v5QyuOi9hyKaobN7/1GRticSj3Z4UM0/QyIpNN2zulLAbyINHVfXsA2NcEoyZGs7/XbHSWJR62/nWKyeJ645n/fvuZoF11/EX352Jf81/nRy3jnJ3eMfYd2buxl+y0gMp5XUxyfIDxagfVTHoInlmAMj3D7xHrKrGrl/zixen/8jpo4Z7JmvM21zONU0avWJ9zYsWrD8NCNhM+/672s4GTTT/889oGB0V/XeDqlQVlnf0JGa4yVnPeotTt9hc7EYii8fGuMtFIYtjIBBZ2cMKR0WrVhFcyrN3VfP4qnbL2ff0VauvPM5MAwGXVnJ9mcO4y63yHZSFJ/Zj6evfoprhn6HC2eezm0PLKRX4XnopygxaguS2f6sV+5dMXrrB9vlI9d9X4woC9Pa2oxmGP/oAcXAc+fOdTfX1Aw65pq3Ji1HamgecKroUVBQejTFuKYQ48uG0ruoJ+3RDtwcSbAom7q2BFY6wy+unEn/inJm/nIhI6++l4XvVHH5zLP45OnNtCfTlJyXR8Egh8LvlbD9k33ktkqijsOYq36Fa5qMHNCLtmjMkym7sIRP39zJkvv+4J43bqi47pxRRFtbPYZX+co/KDB58mT1vwxlZ18kunU/P+U4jpCukCoOXYljOxwcksWfR8a47fBy/lyzkbZkgqQ/Tr+J/Vm/5zC6L4uISPLQtbMY1Ks7R5vbWLHmE84eV0mJCFC7+yRud4k+xsAtEpw8VEffku5s3nPAA4fiSDaO0Dna0IzuM6jfU8fvbniQHoX52qPXz8aNtf59qP/3PTC56w00N245jjRNpGV7cSYcG106dGS5fD7Mz7vTA/zpbIdDORlOHqrlnCvOYHNDHWt2HiMvN0xHUx0VBRHvfmeP7MfYXvl0xhP4fBohO0Dt20eQ9Rn0gEGWT2fGhNEoQ02bMIJdtc3sPd6IzzR56NbHoCPJolsuoTzgYNkqlBWWqOf/rkCX/BiaJh1N041QEBlN4e6pxRCqGAHdBelIYlk6ibAgTwQ4tqGarBwfs++5gOuefpkVm2pBM7jryuks+MmlPPjjS3j0pbV0RASDRvRmwwMb+OL+Lbx102v0G9iHNV/uY1z/Xrzz0C2cMWIIdz6/guLe3bAzNnY0zqJbL+esvhE6E0mEZnjZucdHKkH8p5vYcA1HaDgKMlMO0aqdBIbMIu7aCLWhhcCv6Qze1cl1vc7lRGsdmxZvY9BNlZz/0kXcffcanlkNAwoKKSnM5xdbXmd3qpl/f2Yuu97fi/joGBsfu4H/fPhP7PpwJ+Nvnc7ND/2RSZWVbD5czaAfjCPcEOODp1bzXzfM5eIJ/WhprEc3/Z6XviqQXMf5RwWKQFsul+uRlNFsp1OMnTtHxGuqSZ5sJUuCq2moh2Nq5DZZTGotoKywAMuXxtqY4svUPnrOLeIn719J9c4TnNxdz/6YRWHRAP5z4mS0gJ8tt23lyctnUxCG2y6fxQVP/5GxV43l7MUXUb+vjhkDx9CzqBtLf/onT6bxg3qSTMRA93XV2CoZUFWeI8EX/EcFhgqRObU5PqlIJNITr/mh78iadexas4bSg42YA4o8ElM28KFzJJDgt7VvcsQfIz4+QsX+TvIeaKR1gE1kRC6lpw2BgIte5tAea8OX1oiUhHnoL2v549owx9pi5PQIk7TaEUmLQYW9yWxPI5o6Ke3IYSeQsWyE7gdho3lpjKpTJFnBIH/ZeRJDVTnr1q3Tsg9ki5wL8iekQuYPN8TrpzWarunqQoy9eBZ7VldR++wblDx4Da0BDd11ac7XWHmmwNEc0mYQXIduLSbX9pjG6wd2sP6zo2j+OsovzKOiTwma48NxXf5t3nlUbzlJ6/Eolfkhpk/ugVamkc6kOPHqcaz2LCaPGU5p3h5PWO2U19EUMwgvBTF1OB6T/PbFdzFOFcvufnn84naSy4/VN7Jnz1Gqq4/T2dqK09iI7jdJn2gjUB/FN7iUTGcMVQpFfQqvJCLjeCTRHpAs2/Ex23OS+HsEGHNFP1rtKMtufg/nZJJoQweKenKzw0gHUpbFp69swQmajL58BKN/1J/NK+r4vVHDwZajXYioaosu0ZGa7nU7AnkFPPDU29Q0NGNEZWpwVX3V3KUv/OHaTe9vkJtXfeyk2xKKs/7WsRCq9eBQ++TrlP3yMlq6Z2MlEpinsLir8pXs7aNRW5Qhv95i2un5NFvtLL10KRcNG0uP3sVM+V5fcnQH27JwrAxWxqYtkaC2NcG8375P+D4fFRURtgU1kr3D6DsEht6FfioLUDyUG8nj7R21vPDhFsaeMx7jtnt/+un6leuCX2770pP1OyPGGFNmD2NweTlZwVKaQt04FpHs/XIDbz2wgKO/WkLPu35IR3kOmYSqj7VTPR9oKDSI5Qfp0ZSkcHAeC+e/wm1TJnPhtHGcdd3vWD+oN3MmDKO8IIRwVSnpMLA0zIQhxaQyU1m05gDnTDuLrNp2EjV13n5THla7V4Vflt9HdbvNrU+8Qn6PYm58/LcYC3/zfDCnsNi+8ubb9fOnzBbjSkvp4bZDMkrKivBFsBg9P0PovArISfDWL3/PibuXUXL9ucRH9iCdSqKr9qGmI4SOnpFk+UwyAlKtaSq/U4AZb+LRH1/AsrXbeezlD3BcB9uVjO1bzr0/moaVcbBtiaZqjmSA6tdX0byzmnNGDKQiP4tMOuUlxXYgh589/AK1bR3c/uwzbs+y/prxgwW/kxMuPs+o0Itp3fw5zy5bxIkvPiMT78QMF+LrXYkxpg8FZ/bg7DsuxUnFePful6l78i0qbv0+8UElJHCxPXbpgtjOtGql6PgLgqz99CBTR0xm6kCX6cPPI2brJGwX5bjsgJ+gCQ2d8Myqjzjj1hnU7a6jetdeskyDB685j1wtRSyRIqdbGXcsXc2Hn+1n5o3XOTMvukwvi2aeFwtlrTyydh2rH36BT1Z/BPbfWpF5AZPckB9b6FhFeYy/diZzrptF1SPLWTpvqXdN8fRRhC+YgN2/lJhleShR+UkTUwf60QeaLL7wD8zpM5BzR/ehJC9EKJiFYeheStAcS7D9cANLPvqU3j8YyrmTp/DwFc9x+GgN106fwKM/PItktJXcwm4sWLWP2xe9yqhzpju//tOLem/kmlEFJXPEhB/MlpteessTple3AmZ+ZwgTB/diYEUxxZEwAVMnnbFZt/0g9/3pQ9z+Jdz33C0k9lXzzCOvsnXLF/gjQfLPHkHwvNPI9Ckmtz1D7y21jJ5ZiJ6vs3bxRpp3NSJStsfgXmVqCvyFQcK9c5kwbQz+pMnCny+j5staLp08lsevno6WaCacV8Rj7+/hl394g17DR7l3Ll+uDSuMHDu9oHCMEKLJy4v6l3bjF5dOZ/qInnQLmWBnyNg2jtekVXvIJZjloyUt+M2SD3lj134uv2IqYyYM4/fLVrFx5eauHCo/i7wx/QkOKKMkN5+SujTl/cP0GFdMqCRA2nHwaSZeT1yXpDoztB5o45PlO1jz+lbvHr+5bBa3XTABq62OYG6EJz7Ywx1L3qCscoC8fvFL7qTh/Z2JucGZpjDXVskqQ1w8aYx8+D9mUx7WiLVHsR3H42vvcapFLk/lHaYuCeTmU/VFPc+t/JjDjc0Es4Psr28kVFlM2/6TpNtSf6P2gInpaPgMQagggBEyvE67aRqkk2naGuMkOjzyZ1hFKff8+2xmDO9JZ3sz2QWFPPbmdu5c8jrl/QfJq55a7Mw8c7wxWEv+JOILPfVV613Uv3KvDDkJkukMuqF5eb/XFzxFBKrLdooMkKKr6xwKh9ECITqSaVKuj5nzniV5RjF0WMRXH2HO8KHUNTVRF+2kM5PxcD+RypCyuu7V5lgIQ0PaLpNHD+a6c8YxqX938vwaqVQCf143Fqzcwq9fXEnF0FHujx5/Xkw5fbQY7ks/GDFDd7h/13I3zFQ7aTQM3fQYTwkpNFXAfDUlOjWo8FJAw3tWqEA8rmic7GCEiC9APJEhpySbTgPO7VVGxaAK4lKhku6RnEIp1WHQAkHufPUdnNHd+HLLIaYN6cul4/tQd6IOSw9jZRVw6zNv8uLqzQwcP8n9yZOLtME9S5xhZmperhm+V1WNgr/N57wubVe7UBFGF/mqNNrLt92/zRW8DPBUSHnkJVVertJZgala6UKQV55PdVCnQViM61VIXUMHrpVGWpmuUZPPIJzrozAU5KShkZUX5PCxOuLRTnIjuRyMavz0yRdYv+8w42bOca9/cIE2rDS/Y3RB1nWGMJYvl1Kfq4RXecVfFVC5hlQtQ93rtqm4yc4Jo3k9cberA+0xoYYq8l0riZVRcau8ZOPYFqmMjdACOLqLWRzicLSD7oNH4+8e8tJeJ60aY15/h/yS7hSsyaFWSsywn45YGj1czAtrtvHbJStpSqY5/ye32XNvvtPoH9KPjyvwzRbC2FklpTFFiK+Nm5QBPWGUEsoxWiiXlz76goRl09bWyYmWdlqicaJJm1gqzQNXzWRMzwjJRAJDE7TEUzR2RglkF2FJSV5lEVv21BLNCM9Dmq5jKLZSAxDHRboZ0oovNJPcghx2f97CnN8t44NPd1FQXiFvmHe/893vXWBUak71sPzw94QQe75JeE8BVV2ph2ulyMkv4O5XN3H/yx987UKVuGWbJvW1Teg9c72s0PQb1JzooMVK0T8vTCptUdCvmF1rD7LzSAvfqcgh2hnH0FUqrOG6KRKWw/G2GMagEg9Sd57cy8G6er575dWc9R83ibFDBxv9Sa/qmx2+QgjRcGpG9o2DPkNFiutkyMnJZfGaPZ7wOd1y6DWuL9VbD+O0xrn/onMZXJRHujPOoLI80pm012Y0A0Gqdu/BzvFhhkxS6SR6to/Q8O78ZvEbvPW768kOOSSSSS8tLiou5I3tx9jT0MCoHgOJHmrx9s6cG2+S3/v13ZRKKz424N6XZ4YfUUKfmo1969BbUxs2FM7io+oWblu4EiPLYNBFIykcWUqiI8bAogImVXSnAId+vfIpLMnBsWxMXdCUFKzYuJ2ycb1IOxaahGQiScVZffncn2Tu3UvYdTJBRmQh/Tms2tvEzc+9Ssnkfshs1SwT3t6Q/iC5ruVM6xa6LN8XeEAoHOmaU/zLnx0YilQa0wY3PfkaScdmwIyhGL1C1K6vwc24TOzfG5FMYvs1Siq7kUl1enVouKAbv37+XRoLDQYPLyHa2dnVAnMFcTvNwLmj2Lu+mlkPLqE8EMTw6dSkYhRO6UPBqFJSttr4mrcBdSmEHUvFwdikkIYVK1CzsH8lvKeA+mM7koztep3onPIIPt0gWtvuXdCnuFi1WSjrVURu2IcbzCPmmPz896tYvPMzRlx7JvFM0oPirkmqQieNeCZF2Zm9sUaUE6/vJGVAZc98RMggFk8QCAW88FFL6IbqARlghuYK0fL3P2n4lwqoeK4oDHLT3LP52VMrOLGlhuwj7bQdavb6nU9v3sza7AgTGirJjWRxrKmDVZ8f5LCRZPjVE8n4HWTG7ZrGeyyuoLdrMplIpNACGqHKiFfxpO0MxDJdvCMFUqUtIIM5YTXwaYSsNnVCTSXnz5//P1NASJdMMkGf7vneiZM7TwDqgNJxPYlM7MvW7Ueo2rLF4zYj10/R2DIGD+9Owk7jqq7BKYZTHlRMrkaWCt08QV1w0opnuuhcXaouUV1NN9WlQF5RoZoVnBBCdJ76JczfD2y/df0/T7CFAZt7w1AAAAAASUVORK5CYII="