From c226ebf47f061fe2e611e80203b64a06993c5a2c Mon Sep 17 00:00:00 2001 From: rishabhkeshan Date: Wed, 18 Dec 2024 11:18:24 +0530 Subject: [PATCH] feat: prettier fix --- frontend/src/components/NewPlayer.tsx | 61 +- frontend/src/components/modals/BuySeeds.tsx | 32 +- .../src/components/modals/HarvestModal.tsx | 27 +- frontend/src/components/modals/PlantModal.tsx | 38 +- frontend/src/components/modals/SellItem.tsx | 37 +- frontend/src/constants.ts | 5 +- frontend/src/hooks/usePaymaster.ts | 29 +- .../src/sway-api/contracts/FarmContract.ts | 1179 ++++++++++------- .../sway-api/contracts/FarmContractFactory.ts | 18 +- frontend/src/sway-api/contracts/common.d.ts | 2 +- frontend/src/sway-api/contracts/index.ts | 4 +- frontend/src/sway-api/index.ts | 2 +- 12 files changed, 823 insertions(+), 611 deletions(-) diff --git a/frontend/src/components/NewPlayer.tsx b/frontend/src/components/NewPlayer.tsx index 44e1d51..e475198 100644 --- a/frontend/src/components/NewPlayer.tsx +++ b/frontend/src/components/NewPlayer.tsx @@ -4,7 +4,11 @@ import { useEffect, useState } from "react"; import type { Dispatch, SetStateAction } from "react"; import type { Modals } from "../constants"; -import { buttonStyle, FUEL_PROVIDER_URL, useGaslessWalletSupported } from "../constants"; +import { + buttonStyle, + FUEL_PROVIDER_URL, + useGaslessWalletSupported, +} from "../constants"; import type { FarmContract } from "../sway-api"; import Loading from "./Loading"; @@ -26,34 +30,38 @@ export default function NewPlayer({ setPlayer, setModal, }: NewPlayerProps) { - const [status, setStatus] = useState<"error" | "loading" | "retrying" | "none">("none"); + const [status, setStatus] = useState< + "error" | "loading" | "retrying" | "none" + >("none"); const [hasFunds, setHasFunds] = useState(false); const { wallet } = useWallet(); const paymaster = usePaymaster(); const isGaslessSupported = useGaslessWalletSupported(); - useEffect(() => { - getBalance(); - }, [wallet]); + useEffect(() => { + getBalance(); + }, [wallet]); - async function getBalance() { - const thisWallet = wallet ?? contract?.account; - console.log(wallet, "wallet"); - const baseAssetId = thisWallet?.provider.getBaseAssetId(); - const balance = await thisWallet!.getBalance(baseAssetId); - const balanceNum = balance?.toNumber(); + async function getBalance() { + const thisWallet = wallet ?? contract?.account; + console.log(wallet, "wallet"); + const baseAssetId = thisWallet?.provider.getBaseAssetId(); + const balance = await thisWallet!.getBalance(baseAssetId); + const balanceNum = balance?.toNumber(); - if (balanceNum) { - setHasFunds(balanceNum > 0); + if (balanceNum) { + setHasFunds(balanceNum > 0); } } async function createPlayerWithoutGasStation() { if (!wallet || !contract) throw new Error("Wallet or contract not found"); - + const addressIdentityInput = { - Address: { bits: Address.fromAddressOrString(wallet.address.toString()).toB256() }, + Address: { + bits: Address.fromAddressOrString(wallet.address.toString()).toB256(), + }, }; const tx = await contract.functions @@ -82,24 +90,24 @@ export default function NewPlayer({ const { coin: gasCoin, jobId } = await paymaster.allocate(); const addressIdentityInput = { - Address: { bits: Address.fromAddressOrString(wallet.address.toString()).toB256() }, + Address: { + bits: Address.fromAddressOrString(wallet.address.toString()).toB256(), + }, }; - const scope = contract.functions - .new_player(addressIdentityInput) - .txParams({ - variableOutputs: 1, - }); + const scope = contract.functions.new_player(addressIdentityInput).txParams({ + variableOutputs: 1, + }); const request = await scope.getTransactionRequest(); - + request.addCoinInput(gasCoin); request.addCoinOutput( gasCoin.owner, gasCoin.amount.sub(maxValuePerCoin), - provider.getBaseAssetId() + provider.getBaseAssetId(), ); request.addChangeOutput(gasCoin.owner, provider.getBaseAssetId()); - + const txCost = await wallet.getTransactionCost(request); const { gasUsed, maxFee } = txCost; request.gasLimit = gasUsed; @@ -131,7 +139,10 @@ export default function NewPlayer({ try { await createPlayerWithGasStation(); } catch (error) { - console.log("Gas station failed, trying direct transaction...", error); + console.log( + "Gas station failed, trying direct transaction...", + error, + ); setStatus("retrying"); await createPlayerWithoutGasStation(); } diff --git a/frontend/src/components/modals/BuySeeds.tsx b/frontend/src/components/modals/BuySeeds.tsx index 9034b2d..af28455 100644 --- a/frontend/src/components/modals/BuySeeds.tsx +++ b/frontend/src/components/modals/BuySeeds.tsx @@ -1,18 +1,11 @@ import { Button, Spinner, BoxCentered } from "@fuel-ui/react"; -import { - type BytesLike, - Address, - bn, - Provider, -} from "fuels"; +import { type BytesLike, Address, bn, Provider } from "fuels"; import type { Dispatch, SetStateAction } from "react"; import { useState } from "react"; import { FUEL_PROVIDER_URL, useGaslessWalletSupported } from "../../constants"; import { buttonStyle, FoodTypeInput } from "../../constants"; import type { FarmContract } from "../../sway-api/contracts/FarmContract"; -import { - useWallet, -} from "@fuels/react"; +import { useWallet } from "@fuels/react"; import { usePaymaster } from "../../hooks/usePaymaster"; interface BuySeedsProps { @@ -28,7 +21,9 @@ export default function BuySeeds({ setCanMove, farmCoinAssetID, }: BuySeedsProps) { - const [status, setStatus] = useState<"error" | "none" | "loading" | "retrying">("none"); + const [status, setStatus] = useState< + "error" | "none" | "loading" | "retrying" + >("none"); const { wallet } = useWallet(); const paymaster = usePaymaster(); const isGaslessSupported = useGaslessWalletSupported(); @@ -81,11 +76,11 @@ export default function BuySeeds({ request.addCoinOutput( gasCoin.owner, gasCoin.amount.sub(maxValuePerCoin), - provider.getBaseAssetId() + provider.getBaseAssetId(), ); request.addChangeOutput(gasCoin.owner, provider.getBaseAssetId()); - const {signature} = await paymaster.fetchSignature(request, jobId); + const { signature } = await paymaster.fetchSignature(request, jobId); request.updateWitnessByOwner(gasCoin.owner, signature); const tx = await wallet.sendTransaction(request, { @@ -99,15 +94,17 @@ export default function BuySeeds({ async function buyWithoutGasStation() { if (!wallet || !contract) throw new Error("Wallet or contract not found"); - + const amount = 10; const realAmount = amount / 1_000_000_000; const inputAmount = bn.parseUnits(realAmount.toFixed(9).toString()); const seedType: FoodTypeInput = FoodTypeInput.Tomatoes; const price = 750_000 * amount; - + const addressIdentityInput = { - Address: { bits: Address.fromAddressOrString(wallet.address.toString()).toB256() }, + Address: { + bits: Address.fromAddressOrString(wallet.address.toString()).toB256(), + }, }; const tx = await contract.functions @@ -136,7 +133,10 @@ export default function BuySeeds({ try { await buyWithGasStation(); } catch (error) { - console.log("Gas station failed, trying direct transaction...", error); + console.log( + "Gas station failed, trying direct transaction...", + error, + ); setStatus("retrying"); await buyWithoutGasStation(); } diff --git a/frontend/src/components/modals/HarvestModal.tsx b/frontend/src/components/modals/HarvestModal.tsx index 29d7f29..d299e86 100644 --- a/frontend/src/components/modals/HarvestModal.tsx +++ b/frontend/src/components/modals/HarvestModal.tsx @@ -2,7 +2,11 @@ import { Spinner, Button, BoxCentered } from "@fuel-ui/react"; import type { Dispatch, SetStateAction } from "react"; import { useState } from "react"; -import { buttonStyle, FUEL_PROVIDER_URL, useGaslessWalletSupported } from "../../constants"; +import { + buttonStyle, + FUEL_PROVIDER_URL, + useGaslessWalletSupported, +} from "../../constants"; import type { FarmContract } from "../../sway-api"; import type { Modals } from "../../constants"; import { useWallet } from "@fuels/react"; @@ -25,16 +29,20 @@ export default function HarvestModal({ setModal, onHarvestSuccess, }: HarvestProps) { - const [status, setStatus] = useState<"error" | "none" | "loading" | "retrying">("none"); + const [status, setStatus] = useState< + "error" | "none" | "loading" | "retrying" + >("none"); const { wallet } = useWallet(); const paymaster = usePaymaster(); const isGaslessSupported = useGaslessWalletSupported(); async function harvestWithoutGasStation() { if (!wallet || !contract) throw new Error("Wallet or contract not found"); - + const addressIdentityInput = { - Address: { bits: Address.fromAddressOrString(wallet.address.toString()).toB256() }, + Address: { + bits: Address.fromAddressOrString(wallet.address.toString()).toB256(), + }, }; const tx = await contract.functions @@ -68,10 +76,10 @@ export default function HarvestModal({ request.addCoinOutput( gasCoin.owner, gasCoin.amount.sub(maxValuePerCoin), - provider.getBaseAssetId() + provider.getBaseAssetId(), ); request.addChangeOutput(gasCoin.owner, provider.getBaseAssetId()); - + const txCost = await wallet.getTransactionCost(request); const { gasUsed, maxFee } = txCost; request.gasLimit = gasUsed; @@ -80,7 +88,7 @@ export default function HarvestModal({ const { signature } = await paymaster.fetchSignature(request, jobId); request.updateWitnessByOwner(gasCoin.owner, signature); const tx = await wallet.sendTransaction(request); - + if (tx) { console.log("tx", tx); onHarvestSuccess(tileArray[0]); @@ -102,7 +110,10 @@ export default function HarvestModal({ try { await harvestWithGasStation(); } catch (error) { - console.log("Gas station failed, trying direct transaction...", error); + console.log( + "Gas station failed, trying direct transaction...", + error, + ); setStatus("retrying"); await harvestWithoutGasStation(); } diff --git a/frontend/src/components/modals/PlantModal.tsx b/frontend/src/components/modals/PlantModal.tsx index 7e00c59..a9b9f50 100644 --- a/frontend/src/components/modals/PlantModal.tsx +++ b/frontend/src/components/modals/PlantModal.tsx @@ -2,7 +2,12 @@ import { Button } from "@fuel-ui/react"; import type { Dispatch, SetStateAction } from "react"; import { useState } from "react"; -import { buttonStyle, FoodTypeInput, FUEL_PROVIDER_URL, useGaslessWalletSupported } from "../../constants"; +import { + buttonStyle, + FoodTypeInput, + FUEL_PROVIDER_URL, + useGaslessWalletSupported, +} from "../../constants"; import type { FarmContract } from "../../sway-api/contracts"; import type { Modals } from "../../constants"; import Loading from "../Loading"; @@ -29,17 +34,21 @@ export default function PlantModal({ onPlantSuccess, setModal, }: PlantModalProps) { - const [status, setStatus] = useState<"error" | "none" | "loading" | "retrying">("none"); + const [status, setStatus] = useState< + "error" | "none" | "loading" | "retrying" + >("none"); const { wallet } = useWallet(); const paymaster = usePaymaster(); const isGaslessSupported = useGaslessWalletSupported(); async function plantWithoutGasStation() { if (!wallet || !contract) throw new Error("Wallet or contract not found"); - + const seedType: FoodTypeInput = FoodTypeInput.Tomatoes; const addressIdentityInput = { - Address: { bits: Address.fromAddressOrString(wallet.address.toString()).toB256() }, + Address: { + bits: Address.fromAddressOrString(wallet.address.toString()).toB256(), + }, }; const tx = await contract.functions @@ -56,7 +65,7 @@ export default function PlantModal({ async function plantWithGasStation() { if (!wallet || !contract) throw new Error("Wallet or contract not found"); - + const provider = await Provider.create(FUEL_PROVIDER_URL); const { maxValuePerCoin } = await paymaster.metadata(); const { coin: gasCoin, jobId } = await paymaster.allocate(); @@ -71,17 +80,17 @@ export default function PlantModal({ const scope = await contract.functions.plant_seed_at_index( seedType, tileArray[0], - addressIdentityInput + addressIdentityInput, ); const request = await scope.getTransactionRequest(); request.addCoinInput(gasCoin); request.addCoinOutput( gasCoin.owner, gasCoin.amount.sub(maxValuePerCoin), - provider.getBaseAssetId() + provider.getBaseAssetId(), ); request.addChangeOutput(gasCoin.owner, provider.getBaseAssetId()); - + const txCost = await wallet.getTransactionCost(request); const { gasUsed, maxFee } = txCost; request.gasLimit = gasUsed; @@ -111,7 +120,10 @@ export default function PlantModal({ try { await plantWithGasStation(); } catch (error) { - console.log("Gas station failed, trying direct transaction...", error); + console.log( + "Gas station failed, trying direct transaction...", + error, + ); setStatus("retrying"); await plantWithoutGasStation(); } @@ -135,12 +147,8 @@ export default function PlantModal({ return (
- {status === "loading" && ( - - )} - {status === "retrying" && ( - - )} + {status === "loading" && } + {status === "retrying" && } {status === "error" && (

Planting failed! Please try again.

diff --git a/frontend/src/components/modals/SellItem.tsx b/frontend/src/components/modals/SellItem.tsx index 8439a1d..86e6f96 100644 --- a/frontend/src/components/modals/SellItem.tsx +++ b/frontend/src/components/modals/SellItem.tsx @@ -3,7 +3,12 @@ import { Address, InputType, Provider, bn } from "fuels"; import type { Dispatch, SetStateAction } from "react"; import { useState } from "react"; -import { buttonStyle, FoodTypeInput, FUEL_PROVIDER_URL, useGaslessWalletSupported } from "../../constants"; +import { + buttonStyle, + FoodTypeInput, + FUEL_PROVIDER_URL, + useGaslessWalletSupported, +} from "../../constants"; import type { FarmContract } from "../../sway-api/contracts"; import Loading from "../Loading"; import { useWallet } from "@fuels/react"; @@ -22,19 +27,23 @@ export default function SellItem({ items, setCanMove, }: SellItemProps) { - const [status, setStatus] = useState<"error" | "none" | "loading" | "retrying">("none"); + const [status, setStatus] = useState< + "error" | "none" | "loading" | "retrying" + >("none"); const { wallet } = useWallet(); const paymaster = usePaymaster(); const isGaslessSupported = useGaslessWalletSupported(); async function sellWithoutGasStation() { if (!wallet || !contract) throw new Error("Wallet or contract not found"); - + const realAmount = items / 1_000_000_000; const inputAmount = bn.parseUnits(realAmount.toFixed(9).toString()); const seedType: FoodTypeInput = FoodTypeInput.Tomatoes; const addressIdentityInput = { - Address: { bits: Address.fromAddressOrString(wallet.address.toString()).toB256() }, + Address: { + bits: Address.fromAddressOrString(wallet.address.toString()).toB256(), + }, }; const tx = await contract.functions @@ -66,16 +75,14 @@ export default function SellItem({ const scope = contract.functions.sell_item( seedType, inputAmount, - addressIdentityInput + addressIdentityInput, ); const request = await scope.getTransactionRequest(); const txCost = await wallet.getTransactionCost(request); const { gasUsed, missingContractIds, outputVariables, maxFee } = txCost; - + // Clean coin inputs before add new coins to the request - request.inputs = request.inputs.filter( - (i) => i.type !== InputType.Coin - ); + request.inputs = request.inputs.filter((i) => i.type !== InputType.Coin); // Adding missing contract ids missingContractIds.forEach((contractId) => { @@ -91,9 +98,12 @@ export default function SellItem({ request.addCoinOutput( gasCoin.owner, gasCoin.amount.sub(maxValuePerCoin), - provider.getChain().consensusParameters.baseAssetId + provider.getChain().consensusParameters.baseAssetId, + ); + request.addChangeOutput( + gasCoin.owner, + provider.getChain().consensusParameters.baseAssetId, ); - request.addChangeOutput(gasCoin.owner, provider.getChain().consensusParameters.baseAssetId); const { signature } = await paymaster.fetchSignature(request, jobId); request.updateWitnessByOwner(gasCoin.owner, signature); @@ -117,7 +127,10 @@ export default function SellItem({ try { await sellWithGasStation(); } catch (error) { - console.log("Gas station failed, trying direct transaction...", error); + console.log( + "Gas station failed, trying direct transaction...", + error, + ); setStatus("retrying"); await sellWithoutGasStation(); } diff --git a/frontend/src/constants.ts b/frontend/src/constants.ts index 1d05915..7321cac 100644 --- a/frontend/src/constants.ts +++ b/frontend/src/constants.ts @@ -95,5 +95,8 @@ export enum FoodTypeInput { export function useGaslessWalletSupported() { const { currentConnector } = useCurrentConnector(); - return currentConnector?.name === "Fuelet Wallet" || currentConnector?.name === "Burner Wallet"; + return ( + currentConnector?.name === "Fuelet Wallet" || + currentConnector?.name === "Burner Wallet" + ); } diff --git a/frontend/src/hooks/usePaymaster.ts b/frontend/src/hooks/usePaymaster.ts index 996972b..910424a 100644 --- a/frontend/src/hooks/usePaymaster.ts +++ b/frontend/src/hooks/usePaymaster.ts @@ -3,7 +3,7 @@ import { Address, type Coin, TransactionRequest, bn } from "fuels"; type PaymasterMetadata = { maxValuePerCoin: string; -} +}; type PaymasterAllocateResponse = { coin: { @@ -16,30 +16,29 @@ type PaymasterAllocateResponse = { }; jobId: string; utxoId: string; -} +}; type PaymasterAllocate = { coin: Coin; jobId: string; utxoId: string; -} +}; export const usePaymaster = () => { - const baseUrl = 'http://167.71.42.88:3000'; + const baseUrl = "http://167.71.42.88:3000"; const metadataUrl = `${baseUrl}/metadata`; const allocateUrl = `${baseUrl}/allocate-coin`; const signUrl = `${baseUrl}/sign`; - const metadata = async (): Promise => { - const { data: MetaDataResponse } = await axios.get(metadataUrl); + const { data: MetaDataResponse } = + await axios.get(metadataUrl); const { maxValuePerCoin } = MetaDataResponse; if (!maxValuePerCoin) { throw new Error("No maxValuePerCoin found"); } - return { maxValuePerCoin}; - } - + return { maxValuePerCoin }; + }; const allocate = async (): Promise => { const { data } = await axios.post(allocateUrl); @@ -60,8 +59,8 @@ export const usePaymaster = () => { txCreatedIdx: bn(data.coin.txCreatedIdx), }; - return { coin: gasCoin, jobId, utxoId } - } + return { coin: gasCoin, jobId, utxoId }; + }; const fetchSignature = async (request: TransactionRequest, jobId: string) => { // return; @@ -84,12 +83,12 @@ export const usePaymaster = () => { throw new Error("Gas coin not found"); } - return { signature: response.data.signature, gasInput, request } - } + return { signature: response.data.signature, gasInput, request }; + }; return { allocate, metadata, fetchSignature, - } -} \ No newline at end of file + }; +}; diff --git a/frontend/src/sway-api/contracts/FarmContract.ts b/frontend/src/sway-api/contracts/FarmContract.ts index 7647d5d..b6da60f 100644 --- a/frontend/src/sway-api/contracts/FarmContract.ts +++ b/frontend/src/sway-api/contracts/FarmContract.ts @@ -21,773 +21,913 @@ import type { FunctionFragment, InvokeFunction, StrSlice, -} from 'fuels'; +} from "fuels"; import type { Option, Enum, Vec } from "./common"; -export enum FoodTypeInput { Tomatoes = 'Tomatoes' }; -export enum FoodTypeOutput { Tomatoes = 'Tomatoes' }; -export type IdentityInput = Enum<{ Address: AddressInput, ContractId: ContractIdInput }>; -export type IdentityOutput = Enum<{ Address: AddressOutput, ContractId: ContractIdOutput }>; -export type InvalidErrorInput = Enum<{ NotEnoughTokens: BigNumberish, NotEnoughSeeds: BigNumberish, IncorrectAssetId: AssetIdInput }>; -export type InvalidErrorOutput = Enum<{ NotEnoughTokens: BN, NotEnoughSeeds: BN, IncorrectAssetId: AssetIdOutput }>; +export enum FoodTypeInput { + Tomatoes = "Tomatoes", +} +export enum FoodTypeOutput { + Tomatoes = "Tomatoes", +} +export type IdentityInput = Enum<{ + Address: AddressInput; + ContractId: ContractIdInput; +}>; +export type IdentityOutput = Enum<{ + Address: AddressOutput; + ContractId: ContractIdOutput; +}>; +export type InvalidErrorInput = Enum<{ + NotEnoughTokens: BigNumberish; + NotEnoughSeeds: BigNumberish; + IncorrectAssetId: AssetIdInput; +}>; +export type InvalidErrorOutput = Enum<{ + NotEnoughTokens: BN; + NotEnoughSeeds: BN; + IncorrectAssetId: AssetIdOutput; +}>; export type AddressInput = { bits: string }; export type AddressOutput = AddressInput; export type AssetIdInput = { bits: string }; export type AssetIdOutput = AssetIdInput; -export type BuySeedsInput = { address: IdentityInput, food_type: FoodTypeInput, amount_bought: BigNumberish, cost: BigNumberish, total_current_amount: BigNumberish }; -export type BuySeedsOutput = { address: IdentityOutput, food_type: FoodTypeOutput, amount_bought: BN, cost: BN, total_current_amount: BN }; +export type BuySeedsInput = { + address: IdentityInput; + food_type: FoodTypeInput; + amount_bought: BigNumberish; + cost: BigNumberish; + total_current_amount: BigNumberish; +}; +export type BuySeedsOutput = { + address: IdentityOutput; + food_type: FoodTypeOutput; + amount_bought: BN; + cost: BN; + total_current_amount: BN; +}; export type ContractIdInput = { bits: string }; export type ContractIdOutput = ContractIdInput; -export type FoodInput = { name: FoodTypeInput, time_planted: Option }; -export type FoodOutput = { name: FoodTypeOutput, time_planted: Option }; -export type GardenVectorInput = { inner: [Option, Option, Option, Option, Option, Option, Option, Option, Option, Option] }; -export type GardenVectorOutput = { inner: [Option, Option, Option, Option, Option, Option, Option, Option, Option, Option] }; -export type HarvestInput = { address: IdentityInput, food_type: FoodTypeInput, index: BigNumberish, timestamp: BigNumberish }; -export type HarvestOutput = { address: IdentityOutput, food_type: FoodTypeOutput, index: BN, timestamp: BN }; -export type LevelUpInput = { address: IdentityInput, player_info: PlayerInput }; -export type LevelUpOutput = { address: IdentityOutput, player_info: PlayerOutput }; +export type FoodInput = { + name: FoodTypeInput; + time_planted: Option; +}; +export type FoodOutput = { name: FoodTypeOutput; time_planted: Option }; +export type GardenVectorInput = { + inner: [ + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + ]; +}; +export type GardenVectorOutput = { + inner: [ + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + ]; +}; +export type HarvestInput = { + address: IdentityInput; + food_type: FoodTypeInput; + index: BigNumberish; + timestamp: BigNumberish; +}; +export type HarvestOutput = { + address: IdentityOutput; + food_type: FoodTypeOutput; + index: BN; + timestamp: BN; +}; +export type LevelUpInput = { address: IdentityInput; player_info: PlayerInput }; +export type LevelUpOutput = { + address: IdentityOutput; + player_info: PlayerOutput; +}; export type NewPlayerInput = { address: IdentityInput }; export type NewPlayerOutput = { address: IdentityOutput }; -export type PlantSeedInput = { address: IdentityInput, food_type: FoodTypeInput, index: BigNumberish, timestamp: BigNumberish }; -export type PlantSeedOutput = { address: IdentityOutput, food_type: FoodTypeOutput, index: BN, timestamp: BN }; -export type PlayerInput = { farming_skill: BigNumberish, total_value_sold: BigNumberish }; -export type PlayerOutput = { farming_skill: BN, total_value_sold: BN }; -export type SellItemInput = { address: IdentityInput, food_type: FoodTypeInput, amount_sold: BigNumberish, value_sold: BigNumberish, player_info: PlayerInput }; -export type SellItemOutput = { address: IdentityOutput, food_type: FoodTypeOutput, amount_sold: BN, value_sold: BN, player_info: PlayerOutput }; +export type PlantSeedInput = { + address: IdentityInput; + food_type: FoodTypeInput; + index: BigNumberish; + timestamp: BigNumberish; +}; +export type PlantSeedOutput = { + address: IdentityOutput; + food_type: FoodTypeOutput; + index: BN; + timestamp: BN; +}; +export type PlayerInput = { + farming_skill: BigNumberish; + total_value_sold: BigNumberish; +}; +export type PlayerOutput = { farming_skill: BN; total_value_sold: BN }; +export type SellItemInput = { + address: IdentityInput; + food_type: FoodTypeInput; + amount_sold: BigNumberish; + value_sold: BigNumberish; + player_info: PlayerInput; +}; +export type SellItemOutput = { + address: IdentityOutput; + food_type: FoodTypeOutput; + amount_sold: BN; + value_sold: BN; + player_info: PlayerOutput; +}; const abi = { - "programType": "contract", - "specVersion": "1", - "encodingVersion": "1", - "concreteTypes": [ + programType: "contract", + specVersion: "1", + encodingVersion: "1", + concreteTypes: [ { - "type": "()", - "concreteTypeId": "2e38e77b22c314a449e91fafed92a43826ac6aa403ae6a8acb6cf58239fbaf5d" + type: "()", + concreteTypeId: + "2e38e77b22c314a449e91fafed92a43826ac6aa403ae6a8acb6cf58239fbaf5d", }, { - "type": "bool", - "concreteTypeId": "b760f44fa5965c2474a3b471467a22c43185152129295af588b022ae50b50903" + type: "bool", + concreteTypeId: + "b760f44fa5965c2474a3b471467a22c43185152129295af588b022ae50b50903", }, { - "type": "enum InvalidError", - "concreteTypeId": "85a139d61290013fdfeb54e57606f4b698f12e78570c66e08fc4dd1edf1cd265", - "metadataTypeId": 2 + type: "enum InvalidError", + concreteTypeId: + "85a139d61290013fdfeb54e57606f4b698f12e78570c66e08fc4dd1edf1cd265", + metadataTypeId: 2, }, { - "type": "enum abi_structs::FoodType", - "concreteTypeId": "dd4644d33ac916b71370850ec51a826df462bfe9036feea1005aaa7b743ab891", - "metadataTypeId": 3 + type: "enum abi_structs::FoodType", + concreteTypeId: + "dd4644d33ac916b71370850ec51a826df462bfe9036feea1005aaa7b743ab891", + metadataTypeId: 3, }, { - "type": "enum std::identity::Identity", - "concreteTypeId": "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335", - "metadataTypeId": 4 + type: "enum std::identity::Identity", + concreteTypeId: + "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335", + metadataTypeId: 4, }, { - "type": "enum std::option::Option", - "concreteTypeId": "ed636438f267ef1563310b87ec731959e3bfb69ddf16987dede7498a2b9b95d4", - "metadataTypeId": 5, - "typeArguments": [ - "22290d0dc88421ed8774b48996fc8ae22f444b3c263e1a5036c9ff625d3d8950" - ] + type: "enum std::option::Option", + concreteTypeId: + "ed636438f267ef1563310b87ec731959e3bfb69ddf16987dede7498a2b9b95d4", + metadataTypeId: 5, + typeArguments: [ + "22290d0dc88421ed8774b48996fc8ae22f444b3c263e1a5036c9ff625d3d8950", + ], }, { - "type": "str", - "concreteTypeId": "8c25cb3686462e9a86d2883c5688a22fe738b0bbc85f458d2d2b5f3f667c6d5a" + type: "str", + concreteTypeId: + "8c25cb3686462e9a86d2883c5688a22fe738b0bbc85f458d2d2b5f3f667c6d5a", }, { - "type": "struct abi_structs::BuySeeds", - "concreteTypeId": "4e346642e8c6fecd12cde09058c03a3b9e844865eb13a855552e98f746ca205d", - "metadataTypeId": 8 + type: "struct abi_structs::BuySeeds", + concreteTypeId: + "4e346642e8c6fecd12cde09058c03a3b9e844865eb13a855552e98f746ca205d", + metadataTypeId: 8, }, { - "type": "struct abi_structs::GardenVector", - "concreteTypeId": "90171ca66641f2636fe239c5a45c1cf9f90cd1ac7913cf986a93efc92d5f8688", - "metadataTypeId": 10 + type: "struct abi_structs::GardenVector", + concreteTypeId: + "90171ca66641f2636fe239c5a45c1cf9f90cd1ac7913cf986a93efc92d5f8688", + metadataTypeId: 10, }, { - "type": "struct abi_structs::Harvest", - "concreteTypeId": "84d62eb49d5b4c0eab9890756db9233139d7befc1680974c7630a0388e32e369", - "metadataTypeId": 11 + type: "struct abi_structs::Harvest", + concreteTypeId: + "84d62eb49d5b4c0eab9890756db9233139d7befc1680974c7630a0388e32e369", + metadataTypeId: 11, }, { - "type": "struct abi_structs::LevelUp", - "concreteTypeId": "8a2c35a45657d95d2be9567638654224d0054c6214a5b410cdc8c470c133a3b3", - "metadataTypeId": 12 + type: "struct abi_structs::LevelUp", + concreteTypeId: + "8a2c35a45657d95d2be9567638654224d0054c6214a5b410cdc8c470c133a3b3", + metadataTypeId: 12, }, { - "type": "struct abi_structs::NewPlayer", - "concreteTypeId": "02599dd8b27fe93ca33ffc3c3d482d044ac47bae38bca27acfcf69463711466b", - "metadataTypeId": 13 + type: "struct abi_structs::NewPlayer", + concreteTypeId: + "02599dd8b27fe93ca33ffc3c3d482d044ac47bae38bca27acfcf69463711466b", + metadataTypeId: 13, }, { - "type": "struct abi_structs::PlantSeed", - "concreteTypeId": "367adc51ef143121cc025b27bca40f0972ae0c837affe871f78ab6fd0d46c0a4", - "metadataTypeId": 14 + type: "struct abi_structs::PlantSeed", + concreteTypeId: + "367adc51ef143121cc025b27bca40f0972ae0c837affe871f78ab6fd0d46c0a4", + metadataTypeId: 14, }, { - "type": "struct abi_structs::Player", - "concreteTypeId": "22290d0dc88421ed8774b48996fc8ae22f444b3c263e1a5036c9ff625d3d8950", - "metadataTypeId": 15 + type: "struct abi_structs::Player", + concreteTypeId: + "22290d0dc88421ed8774b48996fc8ae22f444b3c263e1a5036c9ff625d3d8950", + metadataTypeId: 15, }, { - "type": "struct abi_structs::SellItem", - "concreteTypeId": "9b554f45f74d8490bdfc1ecc51f971eac4cf3df795b0ceeff85c5f74dc77db71", - "metadataTypeId": 16 + type: "struct abi_structs::SellItem", + concreteTypeId: + "9b554f45f74d8490bdfc1ecc51f971eac4cf3df795b0ceeff85c5f74dc77db71", + metadataTypeId: 16, }, { - "type": "struct std::asset_id::AssetId", - "concreteTypeId": "c0710b6731b1dd59799cf6bef33eee3b3b04a2e40e80a0724090215bbf2ca974", - "metadataTypeId": 18 + type: "struct std::asset_id::AssetId", + concreteTypeId: + "c0710b6731b1dd59799cf6bef33eee3b3b04a2e40e80a0724090215bbf2ca974", + metadataTypeId: 18, }, { - "type": "struct std::vec::Vec", - "concreteTypeId": "d5bfe1d4e1ace20166c9b50cadd47e862020561bde24f5189cfc2723f5ed76f4", - "metadataTypeId": 21, - "typeArguments": [ - "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0" - ] + type: "struct std::vec::Vec", + concreteTypeId: + "d5bfe1d4e1ace20166c9b50cadd47e862020561bde24f5189cfc2723f5ed76f4", + metadataTypeId: 21, + typeArguments: [ + "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", + ], }, { - "type": "u64", - "concreteTypeId": "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0" - } + type: "u64", + concreteTypeId: + "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", + }, ], - "metadataTypes": [ + metadataTypes: [ { - "type": "[_; 10]", - "metadataTypeId": 0, - "components": [ + type: "[_; 10]", + metadataTypeId: 0, + components: [ { - "name": "__array_element", - "typeId": 5, - "typeArguments": [ + name: "__array_element", + typeId: 5, + typeArguments: [ { - "name": "", - "typeId": 9 - } - ] - } - ] + name: "", + typeId: 9, + }, + ], + }, + ], }, { - "type": "b256", - "metadataTypeId": 1 + type: "b256", + metadataTypeId: 1, }, { - "type": "enum InvalidError", - "metadataTypeId": 2, - "components": [ + type: "enum InvalidError", + metadataTypeId: 2, + components: [ { - "name": "NotEnoughTokens", - "typeId": "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0" + name: "NotEnoughTokens", + typeId: + "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", }, { - "name": "NotEnoughSeeds", - "typeId": "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0" + name: "NotEnoughSeeds", + typeId: + "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", }, { - "name": "IncorrectAssetId", - "typeId": 18 - } - ] + name: "IncorrectAssetId", + typeId: 18, + }, + ], }, { - "type": "enum abi_structs::FoodType", - "metadataTypeId": 3, - "components": [ + type: "enum abi_structs::FoodType", + metadataTypeId: 3, + components: [ { - "name": "Tomatoes", - "typeId": "2e38e77b22c314a449e91fafed92a43826ac6aa403ae6a8acb6cf58239fbaf5d" - } - ] + name: "Tomatoes", + typeId: + "2e38e77b22c314a449e91fafed92a43826ac6aa403ae6a8acb6cf58239fbaf5d", + }, + ], }, { - "type": "enum std::identity::Identity", - "metadataTypeId": 4, - "components": [ + type: "enum std::identity::Identity", + metadataTypeId: 4, + components: [ { - "name": "Address", - "typeId": 17 + name: "Address", + typeId: 17, }, { - "name": "ContractId", - "typeId": 19 - } - ] + name: "ContractId", + typeId: 19, + }, + ], }, { - "type": "enum std::option::Option", - "metadataTypeId": 5, - "components": [ + type: "enum std::option::Option", + metadataTypeId: 5, + components: [ { - "name": "None", - "typeId": "2e38e77b22c314a449e91fafed92a43826ac6aa403ae6a8acb6cf58239fbaf5d" + name: "None", + typeId: + "2e38e77b22c314a449e91fafed92a43826ac6aa403ae6a8acb6cf58239fbaf5d", }, { - "name": "Some", - "typeId": 6 - } + name: "Some", + typeId: 6, + }, ], - "typeParameters": [ - 6 - ] + typeParameters: [6], }, { - "type": "generic T", - "metadataTypeId": 6 + type: "generic T", + metadataTypeId: 6, }, { - "type": "raw untyped ptr", - "metadataTypeId": 7 + type: "raw untyped ptr", + metadataTypeId: 7, }, { - "type": "struct abi_structs::BuySeeds", - "metadataTypeId": 8, - "components": [ + type: "struct abi_structs::BuySeeds", + metadataTypeId: 8, + components: [ { - "name": "address", - "typeId": 4 + name: "address", + typeId: 4, }, { - "name": "food_type", - "typeId": 3 + name: "food_type", + typeId: 3, }, { - "name": "amount_bought", - "typeId": "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0" + name: "amount_bought", + typeId: + "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", }, { - "name": "cost", - "typeId": "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0" + name: "cost", + typeId: + "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", }, { - "name": "total_current_amount", - "typeId": "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0" - } - ] + name: "total_current_amount", + typeId: + "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", + }, + ], }, { - "type": "struct abi_structs::Food", - "metadataTypeId": 9, - "components": [ + type: "struct abi_structs::Food", + metadataTypeId: 9, + components: [ { - "name": "name", - "typeId": 3 + name: "name", + typeId: 3, }, { - "name": "time_planted", - "typeId": 5, - "typeArguments": [ + name: "time_planted", + typeId: 5, + typeArguments: [ { - "name": "", - "typeId": "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0" - } - ] - } - ] + name: "", + typeId: + "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", + }, + ], + }, + ], }, { - "type": "struct abi_structs::GardenVector", - "metadataTypeId": 10, - "components": [ + type: "struct abi_structs::GardenVector", + metadataTypeId: 10, + components: [ { - "name": "inner", - "typeId": 0 - } - ] + name: "inner", + typeId: 0, + }, + ], }, { - "type": "struct abi_structs::Harvest", - "metadataTypeId": 11, - "components": [ + type: "struct abi_structs::Harvest", + metadataTypeId: 11, + components: [ { - "name": "address", - "typeId": 4 + name: "address", + typeId: 4, }, { - "name": "food_type", - "typeId": 3 + name: "food_type", + typeId: 3, }, { - "name": "index", - "typeId": "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0" + name: "index", + typeId: + "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", }, { - "name": "timestamp", - "typeId": "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0" - } - ] + name: "timestamp", + typeId: + "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", + }, + ], }, { - "type": "struct abi_structs::LevelUp", - "metadataTypeId": 12, - "components": [ + type: "struct abi_structs::LevelUp", + metadataTypeId: 12, + components: [ { - "name": "address", - "typeId": 4 + name: "address", + typeId: 4, }, { - "name": "player_info", - "typeId": 15 - } - ] + name: "player_info", + typeId: 15, + }, + ], }, { - "type": "struct abi_structs::NewPlayer", - "metadataTypeId": 13, - "components": [ + type: "struct abi_structs::NewPlayer", + metadataTypeId: 13, + components: [ { - "name": "address", - "typeId": 4 - } - ] + name: "address", + typeId: 4, + }, + ], }, { - "type": "struct abi_structs::PlantSeed", - "metadataTypeId": 14, - "components": [ + type: "struct abi_structs::PlantSeed", + metadataTypeId: 14, + components: [ { - "name": "address", - "typeId": 4 + name: "address", + typeId: 4, }, { - "name": "food_type", - "typeId": 3 + name: "food_type", + typeId: 3, }, { - "name": "index", - "typeId": "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0" + name: "index", + typeId: + "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", }, { - "name": "timestamp", - "typeId": "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0" - } - ] + name: "timestamp", + typeId: + "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", + }, + ], }, { - "type": "struct abi_structs::Player", - "metadataTypeId": 15, - "components": [ + type: "struct abi_structs::Player", + metadataTypeId: 15, + components: [ { - "name": "farming_skill", - "typeId": "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0" + name: "farming_skill", + typeId: + "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", }, { - "name": "total_value_sold", - "typeId": "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0" - } - ] + name: "total_value_sold", + typeId: + "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", + }, + ], }, { - "type": "struct abi_structs::SellItem", - "metadataTypeId": 16, - "components": [ + type: "struct abi_structs::SellItem", + metadataTypeId: 16, + components: [ { - "name": "address", - "typeId": 4 + name: "address", + typeId: 4, }, { - "name": "food_type", - "typeId": 3 + name: "food_type", + typeId: 3, }, { - "name": "amount_sold", - "typeId": "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0" + name: "amount_sold", + typeId: + "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", }, { - "name": "value_sold", - "typeId": "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0" + name: "value_sold", + typeId: + "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", }, { - "name": "player_info", - "typeId": 15 - } - ] + name: "player_info", + typeId: 15, + }, + ], }, { - "type": "struct std::address::Address", - "metadataTypeId": 17, - "components": [ + type: "struct std::address::Address", + metadataTypeId: 17, + components: [ { - "name": "bits", - "typeId": 1 - } - ] + name: "bits", + typeId: 1, + }, + ], }, { - "type": "struct std::asset_id::AssetId", - "metadataTypeId": 18, - "components": [ + type: "struct std::asset_id::AssetId", + metadataTypeId: 18, + components: [ { - "name": "bits", - "typeId": 1 - } - ] + name: "bits", + typeId: 1, + }, + ], }, { - "type": "struct std::contract_id::ContractId", - "metadataTypeId": 19, - "components": [ + type: "struct std::contract_id::ContractId", + metadataTypeId: 19, + components: [ { - "name": "bits", - "typeId": 1 - } - ] + name: "bits", + typeId: 1, + }, + ], }, { - "type": "struct std::vec::RawVec", - "metadataTypeId": 20, - "components": [ + type: "struct std::vec::RawVec", + metadataTypeId: 20, + components: [ { - "name": "ptr", - "typeId": 7 + name: "ptr", + typeId: 7, }, { - "name": "cap", - "typeId": "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0" - } + name: "cap", + typeId: + "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", + }, ], - "typeParameters": [ - 6 - ] + typeParameters: [6], }, { - "type": "struct std::vec::Vec", - "metadataTypeId": 21, - "components": [ + type: "struct std::vec::Vec", + metadataTypeId: 21, + components: [ { - "name": "buf", - "typeId": 20, - "typeArguments": [ + name: "buf", + typeId: 20, + typeArguments: [ { - "name": "", - "typeId": 6 - } - ] + name: "", + typeId: 6, + }, + ], }, { - "name": "len", - "typeId": "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0" - } + name: "len", + typeId: + "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", + }, ], - "typeParameters": [ - 6 - ] - } + typeParameters: [6], + }, ], - "functions": [ + functions: [ { - "inputs": [ + inputs: [ { - "name": "food_type", - "concreteTypeId": "dd4644d33ac916b71370850ec51a826df462bfe9036feea1005aaa7b743ab891" + name: "food_type", + concreteTypeId: + "dd4644d33ac916b71370850ec51a826df462bfe9036feea1005aaa7b743ab891", }, { - "name": "amount", - "concreteTypeId": "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0" + name: "amount", + concreteTypeId: + "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", }, { - "name": "address", - "concreteTypeId": "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335" - } + name: "address", + concreteTypeId: + "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335", + }, ], - "name": "buy_seeds", - "output": "2e38e77b22c314a449e91fafed92a43826ac6aa403ae6a8acb6cf58239fbaf5d", - "attributes": [ + name: "buy_seeds", + output: + "2e38e77b22c314a449e91fafed92a43826ac6aa403ae6a8acb6cf58239fbaf5d", + attributes: [ { - "name": "storage", - "arguments": [ - "read", - "write" - ] + name: "storage", + arguments: ["read", "write"], }, { - "name": "payable", - "arguments": [] - } - ] + name: "payable", + arguments: [], + }, + ], }, { - "inputs": [ + inputs: [ { - "name": "index", - "concreteTypeId": "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0" + name: "index", + concreteTypeId: + "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", }, { - "name": "address", - "concreteTypeId": "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335" - } + name: "address", + concreteTypeId: + "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335", + }, ], - "name": "can_harvest", - "output": "b760f44fa5965c2474a3b471467a22c43185152129295af588b022ae50b50903", - "attributes": [ + name: "can_harvest", + output: + "b760f44fa5965c2474a3b471467a22c43185152129295af588b022ae50b50903", + attributes: [ { - "name": "storage", - "arguments": [ - "read" - ] - } - ] + name: "storage", + arguments: ["read"], + }, + ], }, { - "inputs": [ + inputs: [ { - "name": "id", - "concreteTypeId": "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335" - } + name: "id", + concreteTypeId: + "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335", + }, ], - "name": "can_level_up", - "output": "b760f44fa5965c2474a3b471467a22c43185152129295af588b022ae50b50903", - "attributes": [ + name: "can_level_up", + output: + "b760f44fa5965c2474a3b471467a22c43185152129295af588b022ae50b50903", + attributes: [ { - "name": "storage", - "arguments": [ - "read" - ] - } - ] + name: "storage", + arguments: ["read"], + }, + ], }, { - "inputs": [], - "name": "get_asset_id", - "output": "c0710b6731b1dd59799cf6bef33eee3b3b04a2e40e80a0724090215bbf2ca974", - "attributes": null + inputs: [], + name: "get_asset_id", + output: + "c0710b6731b1dd59799cf6bef33eee3b3b04a2e40e80a0724090215bbf2ca974", + attributes: null, }, { - "inputs": [ + inputs: [ { - "name": "id", - "concreteTypeId": "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335" - } + name: "id", + concreteTypeId: + "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335", + }, ], - "name": "get_garden_vec", - "output": "90171ca66641f2636fe239c5a45c1cf9f90cd1ac7913cf986a93efc92d5f8688", - "attributes": [ + name: "get_garden_vec", + output: + "90171ca66641f2636fe239c5a45c1cf9f90cd1ac7913cf986a93efc92d5f8688", + attributes: [ { - "name": "storage", - "arguments": [ - "read" - ] - } - ] + name: "storage", + arguments: ["read"], + }, + ], }, { - "inputs": [ + inputs: [ { - "name": "id", - "concreteTypeId": "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335" + name: "id", + concreteTypeId: + "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335", }, { - "name": "item", - "concreteTypeId": "dd4644d33ac916b71370850ec51a826df462bfe9036feea1005aaa7b743ab891" - } + name: "item", + concreteTypeId: + "dd4644d33ac916b71370850ec51a826df462bfe9036feea1005aaa7b743ab891", + }, ], - "name": "get_item_amount", - "output": "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", - "attributes": [ + name: "get_item_amount", + output: + "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", + attributes: [ { - "name": "storage", - "arguments": [ - "read" - ] - } - ] + name: "storage", + arguments: ["read"], + }, + ], }, { - "inputs": [ + inputs: [ { - "name": "id", - "concreteTypeId": "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335" - } + name: "id", + concreteTypeId: + "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335", + }, ], - "name": "get_player", - "output": "ed636438f267ef1563310b87ec731959e3bfb69ddf16987dede7498a2b9b95d4", - "attributes": [ + name: "get_player", + output: + "ed636438f267ef1563310b87ec731959e3bfb69ddf16987dede7498a2b9b95d4", + attributes: [ { - "name": "storage", - "arguments": [ - "read" - ] - } - ] + name: "storage", + arguments: ["read"], + }, + ], }, { - "inputs": [ + inputs: [ { - "name": "id", - "concreteTypeId": "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335" + name: "id", + concreteTypeId: + "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335", }, { - "name": "item", - "concreteTypeId": "dd4644d33ac916b71370850ec51a826df462bfe9036feea1005aaa7b743ab891" - } + name: "item", + concreteTypeId: + "dd4644d33ac916b71370850ec51a826df462bfe9036feea1005aaa7b743ab891", + }, ], - "name": "get_seed_amount", - "output": "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", - "attributes": [ + name: "get_seed_amount", + output: + "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", + attributes: [ { - "name": "storage", - "arguments": [ - "read" - ] - } - ] + name: "storage", + arguments: ["read"], + }, + ], }, { - "inputs": [ + inputs: [ { - "name": "indexes", - "concreteTypeId": "d5bfe1d4e1ace20166c9b50cadd47e862020561bde24f5189cfc2723f5ed76f4" + name: "indexes", + concreteTypeId: + "d5bfe1d4e1ace20166c9b50cadd47e862020561bde24f5189cfc2723f5ed76f4", }, { - "name": "address", - "concreteTypeId": "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335" - } + name: "address", + concreteTypeId: + "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335", + }, ], - "name": "harvest", - "output": "2e38e77b22c314a449e91fafed92a43826ac6aa403ae6a8acb6cf58239fbaf5d", - "attributes": [ + name: "harvest", + output: + "2e38e77b22c314a449e91fafed92a43826ac6aa403ae6a8acb6cf58239fbaf5d", + attributes: [ { - "name": "storage", - "arguments": [ - "read", - "write" - ] - } - ] + name: "storage", + arguments: ["read", "write"], + }, + ], }, { - "inputs": [ + inputs: [ { - "name": "address", - "concreteTypeId": "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335" - } + name: "address", + concreteTypeId: + "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335", + }, ], - "name": "level_up", - "output": "2e38e77b22c314a449e91fafed92a43826ac6aa403ae6a8acb6cf58239fbaf5d", - "attributes": [ + name: "level_up", + output: + "2e38e77b22c314a449e91fafed92a43826ac6aa403ae6a8acb6cf58239fbaf5d", + attributes: [ { - "name": "storage", - "arguments": [ - "read", - "write" - ] - } - ] + name: "storage", + arguments: ["read", "write"], + }, + ], }, { - "inputs": [ + inputs: [ { - "name": "address", - "concreteTypeId": "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335" - } + name: "address", + concreteTypeId: + "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335", + }, ], - "name": "new_player", - "output": "2e38e77b22c314a449e91fafed92a43826ac6aa403ae6a8acb6cf58239fbaf5d", - "attributes": [ + name: "new_player", + output: + "2e38e77b22c314a449e91fafed92a43826ac6aa403ae6a8acb6cf58239fbaf5d", + attributes: [ { - "name": "storage", - "arguments": [ - "read", - "write" - ] - } - ] + name: "storage", + arguments: ["read", "write"], + }, + ], }, { - "inputs": [ + inputs: [ { - "name": "food_type", - "concreteTypeId": "dd4644d33ac916b71370850ec51a826df462bfe9036feea1005aaa7b743ab891" + name: "food_type", + concreteTypeId: + "dd4644d33ac916b71370850ec51a826df462bfe9036feea1005aaa7b743ab891", }, { - "name": "index", - "concreteTypeId": "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0" + name: "index", + concreteTypeId: + "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", }, { - "name": "address", - "concreteTypeId": "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335" - } + name: "address", + concreteTypeId: + "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335", + }, ], - "name": "plant_seed_at_index", - "output": "2e38e77b22c314a449e91fafed92a43826ac6aa403ae6a8acb6cf58239fbaf5d", - "attributes": [ + name: "plant_seed_at_index", + output: + "2e38e77b22c314a449e91fafed92a43826ac6aa403ae6a8acb6cf58239fbaf5d", + attributes: [ { - "name": "storage", - "arguments": [ - "read", - "write" - ] - } - ] + name: "storage", + arguments: ["read", "write"], + }, + ], }, { - "inputs": [ + inputs: [ { - "name": "food_type", - "concreteTypeId": "dd4644d33ac916b71370850ec51a826df462bfe9036feea1005aaa7b743ab891" + name: "food_type", + concreteTypeId: + "dd4644d33ac916b71370850ec51a826df462bfe9036feea1005aaa7b743ab891", }, { - "name": "amount", - "concreteTypeId": "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0" + name: "amount", + concreteTypeId: + "1506e6f44c1d6291cdf46395a8e573276a4fa79e8ace3fc891e092ef32d1b0a0", }, { - "name": "address", - "concreteTypeId": "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335" - } + name: "address", + concreteTypeId: + "ab7cd04e05be58e3fc15d424c2c4a57f824a2a2d97d67252440a3925ebdc1335", + }, ], - "name": "sell_item", - "output": "2e38e77b22c314a449e91fafed92a43826ac6aa403ae6a8acb6cf58239fbaf5d", - "attributes": [ + name: "sell_item", + output: + "2e38e77b22c314a449e91fafed92a43826ac6aa403ae6a8acb6cf58239fbaf5d", + attributes: [ { - "name": "storage", - "arguments": [ - "read", - "write" - ] - } - ] - } + name: "storage", + arguments: ["read", "write"], + }, + ], + }, ], - "loggedTypes": [ + loggedTypes: [ { - "logId": "9629041069892043071", - "concreteTypeId": "85a139d61290013fdfeb54e57606f4b698f12e78570c66e08fc4dd1edf1cd265" + logId: "9629041069892043071", + concreteTypeId: + "85a139d61290013fdfeb54e57606f4b698f12e78570c66e08fc4dd1edf1cd265", }, { - "logId": "5635241471306563277", - "concreteTypeId": "4e346642e8c6fecd12cde09058c03a3b9e844865eb13a855552e98f746ca205d" + logId: "5635241471306563277", + concreteTypeId: + "4e346642e8c6fecd12cde09058c03a3b9e844865eb13a855552e98f746ca205d", }, { - "logId": "10098701174489624218", - "concreteTypeId": "8c25cb3686462e9a86d2883c5688a22fe738b0bbc85f458d2d2b5f3f667c6d5a" + logId: "10098701174489624218", + concreteTypeId: + "8c25cb3686462e9a86d2883c5688a22fe738b0bbc85f458d2d2b5f3f667c6d5a", }, { - "logId": "9571889411291565070", - "concreteTypeId": "84d62eb49d5b4c0eab9890756db9233139d7befc1680974c7630a0388e32e369" + logId: "9571889411291565070", + concreteTypeId: + "84d62eb49d5b4c0eab9890756db9233139d7befc1680974c7630a0388e32e369", }, { - "logId": "9956391856148830557", - "concreteTypeId": "8a2c35a45657d95d2be9567638654224d0054c6214a5b410cdc8c470c133a3b3" + logId: "9956391856148830557", + concreteTypeId: + "8a2c35a45657d95d2be9567638654224d0054c6214a5b410cdc8c470c133a3b3", }, { - "logId": "169340015036328252", - "concreteTypeId": "02599dd8b27fe93ca33ffc3c3d482d044ac47bae38bca27acfcf69463711466b" + logId: "169340015036328252", + concreteTypeId: + "02599dd8b27fe93ca33ffc3c3d482d044ac47bae38bca27acfcf69463711466b", }, { - "logId": "3925692269668348193", - "concreteTypeId": "367adc51ef143121cc025b27bca40f0972ae0c837affe871f78ab6fd0d46c0a4" + logId: "3925692269668348193", + concreteTypeId: + "367adc51ef143121cc025b27bca40f0972ae0c837affe871f78ab6fd0d46c0a4", }, { - "logId": "11192939610819626128", - "concreteTypeId": "9b554f45f74d8490bdfc1ecc51f971eac4cf3df795b0ceeff85c5f74dc77db71" - } + logId: "11192939610819626128", + concreteTypeId: + "9b554f45f74d8490bdfc1ecc51f971eac4cf3df795b0ceeff85c5f74dc77db71", + }, ], - "messagesTypes": [], - "configurables": [] + messagesTypes: [], + configurables: [], }; const storageSlots: StorageSlot[] = []; @@ -820,19 +960,40 @@ export class FarmContract extends Contract { declare interface: FarmContractInterface; declare functions: { - buy_seeds: InvokeFunction<[food_type: FoodTypeInput, amount: BigNumberish, address: IdentityInput], void>; - can_harvest: InvokeFunction<[index: BigNumberish, address: IdentityInput], boolean>; + buy_seeds: InvokeFunction< + [food_type: FoodTypeInput, amount: BigNumberish, address: IdentityInput], + void + >; + can_harvest: InvokeFunction< + [index: BigNumberish, address: IdentityInput], + boolean + >; can_level_up: InvokeFunction<[id: IdentityInput], boolean>; get_asset_id: InvokeFunction<[], AssetIdOutput>; get_garden_vec: InvokeFunction<[id: IdentityInput], GardenVectorOutput>; - get_item_amount: InvokeFunction<[id: IdentityInput, item: FoodTypeInput], BN>; + get_item_amount: InvokeFunction< + [id: IdentityInput, item: FoodTypeInput], + BN + >; get_player: InvokeFunction<[id: IdentityInput], Option>; - get_seed_amount: InvokeFunction<[id: IdentityInput, item: FoodTypeInput], BN>; - harvest: InvokeFunction<[indexes: Vec, address: IdentityInput], void>; + get_seed_amount: InvokeFunction< + [id: IdentityInput, item: FoodTypeInput], + BN + >; + harvest: InvokeFunction< + [indexes: Vec, address: IdentityInput], + void + >; level_up: InvokeFunction<[address: IdentityInput], void>; new_player: InvokeFunction<[address: IdentityInput], void>; - plant_seed_at_index: InvokeFunction<[food_type: FoodTypeInput, index: BigNumberish, address: IdentityInput], void>; - sell_item: InvokeFunction<[food_type: FoodTypeInput, amount: BigNumberish, address: IdentityInput], void>; + plant_seed_at_index: InvokeFunction< + [food_type: FoodTypeInput, index: BigNumberish, address: IdentityInput], + void + >; + sell_item: InvokeFunction< + [food_type: FoodTypeInput, amount: BigNumberish, address: IdentityInput], + void + >; }; constructor( diff --git a/frontend/src/sway-api/contracts/FarmContractFactory.ts b/frontend/src/sway-api/contracts/FarmContractFactory.ts index 03860ff..beb179d 100644 --- a/frontend/src/sway-api/contracts/FarmContractFactory.ts +++ b/frontend/src/sway-api/contracts/FarmContractFactory.ts @@ -11,14 +11,20 @@ */ import { Contract, ContractFactory, decompressBytecode } from "fuels"; -import type { Provider, Account, DeployContractOptions, DeployContractResult } from "fuels"; +import type { + Provider, + Account, + DeployContractOptions, + DeployContractResult, +} from "fuels"; import { FarmContract } from "./FarmContract"; -const bytecode = decompressBytecode("H4sIAAAAAAAAA+19CXxU53XvHW2IfbRheYTNYEtYjmNbxmDL2G5G1igaRai6isDgYFkiBhvHxMZjIDh1bNVLjLMSJ3V5SRfy4ib0JWlGQoBYDErT19CmzaNtmkf70lfymrT4Fb2qv8YJbha//1m+e7+5984gsrQ0qX4/uMvc+y1n/84537mJqRZnq+OUOPx3KDXw+kQs/vrrdM9JnHWdjzi3b8mmnLcMTjqxRGrIGZyc8aGBzoMfGmjPxbIZp7KhrdGJt9XS/V0D7Qd3JV5xnOS5G5213z9d4n7/dNlWZ1Z/ov0k/f4Cfn/B7TwyNTgZeyKbuuFkvH3MoTaa22qHs+nlp+KdYym+7igbRp9d6NPRPj+Mdz880Jnj5xs6GlPxtrIU7n8E9z8S0edN2udH8ftH3c6jeDa2E32eyu9zRSq/T1zj94j2liU6qb1LfjWbvq2S3hnoPvirbu/RyqyLd3vKHbevpTK7Cud9dSm3MxfH/Xhzx3Inu/L2+njv2ARf99Q5Az2O05CpHY53LRsebEs6GNNpHVNcxnTrSR0T3seY0ovW2teJV+LBsV1BczXjcruPnMNcn3TbkpXZlTzPCbc9l8ymqf3GVDa91MBZ2k/deMbuf6Bz6s3xjvhENrP8dLx7bBhtxJu7yibQ7unByarH0c5MHN/jdh7bxL91NOLZN7Taz2ZT15zgNuka/SdeSTqJb4dgOofGvT0186WB9qnOeJszkV2JPgErt/v4bszhX0ADs3H8TjYVd7k9bw7XO/4clg1nM4t22v0TjBLfTgb6mzml/V2N/jLcXxr9cTtVDr0/OFmSRJ9zcFycTVXt9udAc1y81u+jFu9esZPfZRhQnzTHIG5m/oX0Wfkl9NmV32f1kPa5Uvvsyaaqp/L7vGJ3oM+90+jzgPb5ZvT5lvw+a1zt8x3ocx6OD2ZTNUOBPscDfZ6YRp//RfqseBx9dtt9ut3HdgCH/wP9zcfxpNt+bKfV16lAX2em0dcT0lf5t9DXyvy+jtejj79DX7Nw/JbbfrzZ6utcfl9X1k+jr3ulr7L/ib56An21oo9/0HmdQV8Zv68rmwN9tU6jr4z29Qj6+uVAX2vRxz+irxk4nkVfwnvSVybQl8iL4n1dK32V7kFfvYG+CF//hL4qcZxCXxa+rtwU6GvHNPqqlr5KRtCXG+hrL/p4VfH1XfQ1bvVl8TT3tfv8fVV+T/qK7UdffYG+TqCP19BXDY7/ir5OWX3tDfQ1DZqv/Ib29Sj6emugrzPo44foC7Iy9iP0dc7qK0DzV06D5iu/KH05JWjzV25KOQ767Kc+Ia9XqbzWdmtbSIZKOy1BXDQmuk86bu/hLdBHrc09TZD7Kyr5Pbrugr5ai+t1+yFT5b47kKwcWDPSm83cNsXXeNftaSH91kzPg7+TOE82d5U7g2djJ6B3mvm6rc4Br5+BzG5ubluWcjucZu0Xuhb9pJds0XlnRIcsMXKnRXRI3R7RxSLLE98M6o85jGu38/A49ADaIF3WxO/wNevSuiT1Qfo8DNPZx+X9I6L7+P031Nu6MGwH1L6odsVjsCsek3Yx2fx2PyH6ON5MfQ+erS53u+JJhZvYCwTnzJVGHgGOpCOprZDO+k3qJ9lWngKeVxOeB7qn7ox3JScwhmegF8dVdgPetRODZ0saCM58TTBNA2ei3wzfcl9uB3BEtkHHBtDPwWeyK5ecUxslQ7ZMNnUV20G4bmluawIOWlh/J74ZhGF8FfSHjCFNtsaG1ED76Ltq2hymVdDoDUqrSxtkDmt0DmtpDgP3Tt0VXz88MbBm6m3x1e7EQP/UunhfCnOreB26UHDhz60zem5Xsx5lOmK6uXqvvge6I/66RGlAbJDwHKorlQ7iPh1dM5xPRwm2raLpqPaz+v5aPF8v77+xUt+v1/czhd+v+9/6/hafDm8TnWxsQr0e6DzwenQbTf8MeMm80wSvZ0B3JXcxvDIEr1UYg4EX2mJ4LdrNOF/FOE9lU4vEDl1FcKuDjZXkOeMaY2rC2AvRwMLvYnxst9D4spmksVlAa4SP5ISPx7RnC4bbueyMaSebvvlc/lhrHKXPZra121pIxoDeNtJ5i5xvo/NWOYfsaWvBHNReTC0WfKQdl2RRmK+bvpAAnTbhXzYFOcrP1vAYouE9489V9rQCvq2Cs1vMeqaV7ej2kQzsGdbFbjeeY35jO4TnBHnQastRkXMEl6AMuPoPzdjAR3erzB9gPnpw6p74A3smBu6fGoxv3EX8NMT8NIj7A1smBtZNrY/fNUT89XbiL19HXMq4j9YRNadER4wPCbxJR9wi+lHHmnVx3b8f92874eM6Dbv9ZdKp0AVl4NfYcdYFyr/ZVLPilniKbPirxSbK4N2ONPTNAh6bgXcYDlWXC8zHd1p82prPp5cyjUfjrIZ1KN4/6fPpNWY9yHwaIe/PyDvHTg1OfvJ/4bm6wcnF38hm4vX5Ovz6uK/DG1WWB/tf0JdNXc7rosQZzO9bhOtgf5fV6RjPWLLAzFFlQXyLXgOuHxsGn1e7XSoXu54Bjm9gG9+XhzeYdQz4Oo011g0TzEtDtB5dALoz/Bikg4XghaqkL1O2kkxp9mXKBsB7Ia8lw2vS2n+g9bLbPQ67J5ZSGLEcFn1P47p+U/64rt/F41qL53uaeJ0bPa6GFZApZj1I75KsEjtUZZ2BP/jlxjCMF34V8zK0aN7X9RHRYtQae9FqiwfvVR7ckG93XbqlCE+VCk8d3GPx1HAeT5nrlbft8WVdE955eRfbU5B74KkDKvvYvgJPiZ5inlqGeTQbuxXzIFmzYFdxnop3Cb0dnPJ56g0CG5+nFMdRNF19VumV5KDhKfO+0X3M5wV05yJ937XoXXBr/BHtB9+H+c1aAH8PYL6RYA6bE7Z81V/hfhWOfw1bS3SV54+4zvJdFLKt6t5JbQOX5Ed6L87fC1vovQ3SzzI64v57cP/9uP+eOrl/n9ov97P90ju1Kd7TAlzFh0geDk5Wz8GYsK6unptNV4lMYP3Zkcq6102xzKRr+IhkTKngmDJm/mFZ1DAfdGvp+Ebix1t8foQfJA3aEb2pMqDlZL5dd4PYVERbRD/pG8T/xb6qYnZeAmsZtM19o23xX2yx9bzKevb3gD+lnzTpwsYIfdvwuKdvXfAP4JJ4JQiL8jVqaz+FvuNiXxx8KsybM1XWHMXav+pp2Lbi92IZc2Oz7TeCH5BgxXQGXnoOvxvZqrR6O9vshpYHz854Evh/kvol+oNNe0s2hWe4zRsVDobu69nOoXmEfV0V9Uzn3Qd3ePBqf9nFOfULe9yp93g2feMmbTel/jnBOV3zGG8xPkv9/QqFNZ4z4+HnrmiRa9wne6Mr6fURzYtLXIOTMC7KvqO4QH8yf8BkGD7Qzwz0Hvx0TVfjxPaME4PPuGmgy4nVdEEGrow7uFdK1+i3pKEH/s7Jm58duAsyFPfw3rN1q5cNb1/F71UR7QXw+kiil/q8+fm6nqSzfSU/V4H3nic/a0NXE/jzqqcxhqebezYMD6w7+Pxg2xDZJOx7cXsc8cf2NAEG153M9w8GZUHtlSSf4Zst4bZ7Vk3EMSe0/zjafzx6TT73hYEOpwTyIDXYFsda5+CTKkue3OY4H/DtyMuL2P4171D5S/KzRe1IpnW+Zn2/mP2z+gytaQi3LFtAT63Aq67lCuG16aOCu4ofDLQf+AHGw37LAuN5VMezyZfHN+f5h6FzMsXXyGXsn4NPOM93GYZ5VRPxbVMb6+kHVKe+I6BTM4V1atV1olMP1Ps6tfVMvk6Va+hQWncbHfo7AR3qBHSo8Z8ZHcr+tcI6dN4OgdkB4j2jQw3PGh06URjmVQ36Ptm1KkuWmveVl28ez5M16VrW82FZOKNcZOGB0yxbaK3feyCHudZT7AFrGtEPdN1RDrgfWK1r9Xas27finGSct27H2p5lvtsGXkrfPmT7qbLpRp4T98NwqmUfA9u2kXCq6NGxkS+Mx4ZYh9Hb0kb6ujz/djZ1nfFvAA7Ux+VMU4XXStXfV/qltbzC8laxMw0sU0tlPWquM0uFZtI0prIUZExdNtUoNjPdY5pYxDI3cYbwF6UfKxYoDk94/Zp2UzxXwPLWnN8mrUlvNHQn1+kVxoZVHDcZOa/zqOPnzdwD/f9Xnben39B+ni8LNBSIKy0RfBaMK5V+gPAFPg7EVkI25I3Ud1MH28YPKh9vzufjyzkGFs3H1VcLH8PnSP4m4WPxBdI1+xiPYn3grSt/w15Xwse42+3Eu+rvET/jfsh/9RGwr7HJ+FiNr7El4GtcW9zXOIN9vegnZ/ka+R3L18gyOZrHK17S98/5+FmSJ1f5PawJA77EDSq7vwNe/Q5kN9NIAVu8TGmw0pLdRo6o7G4UGiwou0vnq+zeUVx2zz9gye53Ks4fCsjuZGGczz8uOM9tsmQ3r1Us2c3XiLHusGT3R/Nl91W78mX3VRLb9GU3x/UKy+65MwVmuV0+Xq82fhzF6yVsj0XDfO4hff9UNhPT9xtYdoRhW8VxWrd7NClrYqK7N8r6eiXeZV/ltWL70e88/gTHHIus39Q/sW8I/as9uEzlHa55/Depnaq/u7imdUiqlmkhPM7yrdLm2B5f9qzI00ewi5+AvfOEWZdBZ7zJeya91Niv5l3BkS9vZZ1r5GJ6hcghuu5oxLiajM2ucrG2iE+nnPkDfGX5TpeK7Pbl3q58uXel0aUF5F7JL6vcs2JdUXJv3qu+3GNYJGnNGG9L05zUFq8xaySWXdCxD6m+PaznQX3Lvh3Wt5nbU/ou6SXQSmNgrXJ5TnSS0YXBeZQ9oni0/F0r8nVfCn0wrHGfx3uVGS9iFOhz5VU71EdM9gNwUcdy1PB0uM85c0THj53xdfwKw5Os48WW0HuZGuF5hTFgklX4UByBzoPwYVpS+Jh4vIw102jwpf0uEnnM8CGZHoLP1TLW/TI2Gav4yHWsAxgL7JzhfDtnEa8vCvNkWY3SpBUPuNX4NBTuy/Ptu8zyiQgbJP+d9OXijy5og5QyPaJfeYdtEG3Xt0Esu4ZskBuMH0x57Vbjk1UbZKnYZ/48RF75tlT+dWap5IHkzyP/mXRC4jGF5/ElpVuK6xlbStr152H8XjqPpcYfaGwpfy2M94k/dW32xDYndi38sLw2C8u+K27QWAz6JJ8KzfkmM36yN3BdW0C+ly0R+X5kj8WzsgY0PvB0o8Q1fJuZZWFhWirdp+PxYZFaYdZfioMms15U+NayLzNaXpaJH6LzCMkElZfLjB2j8vImY3caeWlooIC8jJWovLTyY6Lk5dzfNfLSXxvXF4mxzOU8Fti0ZFOzXzabajW2vKyDzXV6scqvQv7bxb0Sk72J53IPjwHnePdu5vF6lWuR43ijxnr2+jC7ycBc7apFO4rbVQ7bCYBRXq5GBIyGjF1lYBTR1kcE3nVsw0b7NmOPCy3uF58P+5uOZuAfex72MfnHjK9J42zG97BMdK/xPaRbjTzg32GDPgtYSx5GBs+KX8lrLxp+ybcK7JezbBXY49yHveixyHfn/KnatGSLKOyXnwvA3tBEIdi/TWGfl5MTAftYEPZYLxdZtzt/prZfix8DbJU1nRcDzM0AvNgecrvxnBcDXMx6FvZvy/RigIuajG/u1xxnxouVkpuZaN/jJDpPO9txj3IY4XdLwedWQnoL44sRfDmP81X8ey3u7MZ7v45n33KO25lv2vmI4yAGLm3BN4d/Saw5knxOY25YWSv+MOQrYk7c3gv0jt/m/Ig2U6ZNzB02r8kNxHGyEbkhDLd4czvg0I18Sc8GyFVo+6mI9t9ktb9J2t/lJLpPS/7aJOTOP+aCeLqJ/IhuP/rwfO9B/6ZzbaL/pFPTsxz/YNe4sEFWOlcQfiRvs5x944F3bhH/ZMscPCc+dPhYIp67XnJH47NBKwIHzvMJ0RPnQyLndRZgMAe5rrMHenOzru4r60+8miJ4bEq8ljTweFMEvFsteHvwtOCd9OAN2OMZzQ+FnYNcXoV563lwekF9cF4tzi2aiWrfxulJG6e0PhTeC8F0CcGe1/eTxDf5PA//6wHF+ZboOIuzjHm3HzCgfIe+8hSPl/zF7fthJ7TMgP+Y6AVr044UxrFb8qUohkK8vgzzidN8Tp4HJ9C3/nwixnlacQ4bN1eitm/sJvDs4FmH4Ck4aocNrjEN7bfe6jcCjjHkuqLfNei3P7LfHylN3u52jpwBLk+KHV2LdXzu9poO+O7TTiPOEzhP4ZzHBPrdO3g2Xofnz0XrHWeF6B2mc17zYA6UP0jxKsTtRtb690coFiL3u+I0T3N/t9HveB46ivUX2ZIN6B8xL6cS7Z8q0H9CZD3amiwjGiQ/dlJkzAjpQtMH5WOE+6b+UpwjRXhubl7dCDy7gDfg+VoqiOdFFp6HbTxTjjf7KECboB3Ko0g29+737je48OVB1gy2tQjPUP/AscoR9nWgf4rpGTobtvC9KKL/IY8vM0PS3iTBW9vuttsmXwvNfdmw8uSQxZMRbZepnpG5mdyuxHdYt/wFYJkL69wY582i/13GFkb/GfFDY250nEQeT3vunIlFDkDvatsPgRcW6dpvBZ2DBsAb7Gfw1oL0Lq0D4fsgXzfZ6hNu5yjhVdaZ3SOk60skphllWzu/K+u/3F7PV965j2hV3u8cpfictNs+usX4oNHu7sJ62vmy2gTQ8WKvu+37xI9C9Nw+6p93j45b66RrdT5JjAG+JNmPgDGQLw/tLCP6dQv71p3tOpchay7Ea946Fm0RLRjYqFyNbEtw15nbYc2B/Cv+uHUd5vaOnuTznkaiBXsOtL7QOYzQfOqbO5kHk7Lui+y3Q+dAfGrmQH5eaw4jU9YcWovMYallm5k5eLFRf9yYQ/s+wQPlqLaPUr6qnHfu82IIgJ0XmwG9n4j2wTuaX0S+QLFV0bZnl+K+l9MDGl4O2XrZQHfu8mWxsrfi+iai6ReI18J8/qTF57t8Xhx2Er3g937gifwzsGt47JNp2n9CdgtgDpmzLlcxsCY3A/1x7mm8r86p6+tIbXc5nlqOeyUNq1c7S1Y5TvNlG1KJtVuceN+G1GAf2el4Hnt70B7WDkPIZXaRp+3MBp4p5gY4Ic+uk+Ubx5MMXSReTZJc2ZV4rcXM5ckIXW/JTG8upIOTqo9dnhdyEdFHvYmrh/0FzjxZX9Dcy+i9TXzerj7FbqyhZDyQod54jAx/Pdr28MZTb41n3IzH6ss1fQHOswDn2WS7kS8w3lGWquuoY93JcIYMa1i9KqVwdgjOmNem7N0kYzomAHOHz/vqSOclaX8Tft8JuCPHxa0G3GvQH+U3GrhTLlEU3GGTePN8PcImwT4D0RXZTJmzJIP7GYylN4f8iWQp3cOxDHq2nGl+kmQPr10IlmSHsBxU3ZG5EBsdfbieDqAxTy4jOS48Dv0He7cc8iMOuJMNVun2pDSGz/AnuQBeolwxtaFFN57PLtZ1iLdOINtA9kSpX+aT7WNJf80Rsqts/pvw1kndUw9rDtAWygFKuMg9IFqZhL3Ynxvm8/79dL5HaKiJ1oB7cJ30fludSmbX4nz1ctJVqTs4hxLPGJshrKsnLHgbnvLmas+zrgf6EjkTNTgmXoUOLDqvkmZ+tx/vEt135rx8MIwH+j1qP9Ws58UPQXMm+QabSt+J2KP2fuXRSrUte9AH6Yik6IVckZiuw74bXjupHwIymPQo+yhwfk5/Y/8crqfo2u2I0z3e5we5Xq/3KD7K98Cn8EOLzz7CZ8D5veC5NLUP2ZmGrP4ld83IScFX+fAtHeVvhT1SATraAl6Zx/YG5RmJPq/C/SHYyrSOo3fbJWdl1XC8g3wU+fDZ5pR+h+3xtnjMbgcw3cVrK8RFSIaQvEFfs/i+5w+hNS3xPq0RgcewzLXxPO7RyBrIOKwNCB7g9zt5X2UX4NKbw/4C+ChWOov0WL6Ic2GS2APilF2K8WPdsJpo5J40rwmm7gZOdZ0ww7qGXGFcQybqPoDO3GrZv4l+utEPjrhepEf0Q20nXbRBcVb1vzJ9QU6AvijvDbJW9TH/DtzuRLu9siaJolPPrtA1Ca9xXLd3BDqFno9Y19PzZC8TrnvqiLbH+byjieyfVj7vWg47YuTcp3pqP4nfydfPOXjAn5cDjbHJeofi0p2j9Z/qaEzyusfQqj0Pww88J/C/9wyvh8xcqf+9GNuwN7aOFpIhsLXKhzk2yvswyCcO/lhN6wdavwDv/vrF0EXE+sGT00nQGesA/KsAH8zAmGT90IY1DZ2rHGX8dJKOZVmMtUTIfgn5q8y+4SWUa5baUsg/ZemRkrVh3TyS470LopuB+6i8u9L3stzhtRivN3bKnhbozw6HbCSMfT/ZlSRvXdKleAZry0j7TuK3JGvoPX4WtODtdRqhtYyc94+q3UC2C9GZxPYT38QY/yaUG1Ci7RJ8IT9ZNyJ32+hzzD1st9g6Vtb6Pu5gF4do+ir1l0Dn8pr0FJ9jTUrn5CfBeF2CpcAx9P7NBBc8S7mkrL9JFpl80UD89Ac8H9gTBdayWEuH9LVNi2ozwG8B28SyT1ogGypAjzPAy+Jvo9wQ6Qe+tybymZTjN7ExKIeA7Aqsg9mOgQ9AdSjshWLrXccN2Astxq8Y4QOOw15pUT8hz9WsN0MxZayX0bd7nnW8Zd8LLs2el+h2seZqo3yXHNZVkbLsgwG8Uy6FwTvBjfeuQxeWBvdsAb87onNSnBfoN7VRmBYKyNEf6JyxDig6570BeDcTvGm9p2NKkP8wGAsm3xjGQPwscNe1cWAMTcTz6nsogp/Y3+PZWm2TclK0zUi/f5zWGHhO8lAKt/lnOv+955m/2uMezusL4DIRwKWs8QSXLdG86FxFfs0C8uxjOj7Y8EXHpz5fGR/L7JXgR6yNYKOXQjeUqQ3v2+bAH3iR9qrSut/wPXy/oX5sOZbXD+fiEl9Dbkf49Jcbf73mBdfjedi65LuHzbESece45rVtXxq2S6qcfG8Dfcg7XpMrF1iBsL4Z3LvpvIF9+uSXA37dPs0h7ltOPmCp6RAdC+AYA9ovYb/eZEsZ7Kgy2EkVsDUq7ulBnpSVK6xwt+Fh5GBpUFeCD9g3b8ms0ggcVSb68Xw7YNcJ/cj2f62BzcwlsNMS6S3k73XqEH/TNWkJ1dPA3itnoJ/88xxjQEwnhKOoMQV1thlTvl5aY60p2mGzsG8lHWVvc7wStLQQvL5Q+f6RgTbX+MQ30znGu1Dqfjj1bpsbV5+K+JnIJuE8/1Wh9uHvXk3t4/16zVei+a9gO6vwO7erXta9KbSvKGi3Ow+SrQhbVnR8hC8Kzzxg+iYbtIjP6s26RiL+IZvmJJ+TvduO+IM5h2+nQDyS46xce8ReG6wm2xn6vfA836Xju0xheyme31sEV8/p85di3gsV9si7dKlfxgXRFvP+6rSjtA6dH7JhouiqZBq0bq3nxRZsAF9RfI/iKKDxUr/eCe3t8uDZYmBo1lfqL8Ga3xvbdOQz2X+F5ECzxgSxTyFXsWSlyEryZdB1HeST8uT8YvJkmzOjj2Hcm6sEb1Y09KWAl9QMnM9Q24vkkex7FbtW9pXDNmec+zI3Srb/NGK0M4rEaD17H+3HLZuf8DAclOXIx7mE5qrtxSPWAdb6NSbjXUfrV7SJ9aAl265kf1po3YgYg1k3to8QXVA8jc6b8Tz519VHMNKivGOuW8nvaPkLriR5CZrH3pVcCXBRClkOXZGMQV+UDLalSukZ8tkRz1D/Uf5K8Nuo5ZsWP7EFe+IlUysC9xFrCMe50MZnNL4iufLyHsXwtN5OiMclH4Rkme6RA6/MwTunPZ84YnvGx514ZSgkX4Cn7cLLwMFrbhEfQ74NC//YI+QfA3+SPxdrItaltN6A7cSx1S34rVV82LL+CIz9o6Tr3TWA0VqSKeUYX77exti4xsgdPci9ZLwvk6PPB7YNWtRvRva0ifvQuxF+M5t/hL57Se/6NK62K+mZcrVdSYeBPtQP0kvx9pYgvUf55dTf6Ptr4F/Imb29RM9RtZUAM65/pTxr4rCS7y458uTP5ToKvPbN0NqX/WqR+wvgn+KaFkqzxhch+w7Fv8Z+B/XtvRlt6l5c1g0nuc2I/c7bnLJPWzrW+PYoR159e6O79DfTz066Dvj2xvWe7dubV8i3hz6vVFvjTmofPH0neLoPMaGM+FTIt1f25/eg9hjauRO/r7FrjkXX/IA8z29rk9B3eerWnrK3kpyhvCfhH+A07IuJpEXO60FcHnYt+XIhY+LkByy7R44lpr4XtVs8H6DkhNhibIdx7D4fJhUz8mMooDHeG72K/Bf58bvC9gvv+1KZqbEyxFCNfGlzIW9HXbRBMTzO2WVcmz2Q8B8Xrg3hfDcczwOMtW3YhhVoexPFSP3YIfmtRXaGZXDF17S9jNUe+SBNe/Bjkq9thOosmfYQ9yvYnubhs9/OtEd+O9Me4tSjuzUmbdo7XaQ98aHkxWBHySdq4sgSmxQforf3Wn2FJk4Zj+blivutPQ8ap2ReNnFKL9cO8upm0HQtaLqO4pRKvyciciFsWvPjaJ7M4rg05yFa63rkeOfmRKzrhziu3435+vkaXn4rja9QzjvsprdE0IngWOCWA7wySiembY3tM04gq6JpEG3PiqAZoXWxF/zYfueoTwfkOzbn3YgfaKyO1ozWXClPwshpWtOYue4slCeN8Twb4FmJXbNtQ3KT8npCOS9mnuNF5pmO4GMf/u0jEguXefpwprlpPgOe3+HnZpPONnk0oI3ieTTYS5lv21v0YtOI+D4kDgp/SUEYfTUQG0ZNFoWRHbfWcet6YEfEesCmb2s94Pmi11q+aNBQ2Be9Da6ICF80577wHn7fF01xXfYD45mpC/BFW3W3QAu+L5p8GMYXDZlQzBftDJ7HF431RFFfNORgcV/0Nqf83QE/1knLj3UStuBOA8sCvuhLCMZsQ57HFw2Y/855fNFnzuOLzlv7Gd9klC8Y81qmvtiifkHYUjcW8bvZsAzQGeIkFK/jGHM51oNx8btpLQjGUy/Zu2xXou0Qn4XiMMZOJT87+UQoXkd4Lr4Gmy82qRcrHqfYl8aKxzWmFrQNSjjf0I8Vj5OsLBArLsX4iGdjKbUnH9D6IhorPnimSKz4wXCs+LjsrWfZdZzsSStWfJzsyUCs+Dh0xPRjxdCnB8WejH2P2h/oHPneQPfIP7trUKMxFCs+sAd+0a9hPyv8K9jz5+V+7V+LWPFn9d3v2rHi7WXOAtq7p7ndlQOACfTFyewq2kMInl6DWkGAFWQstTWDYq+QxbuifnfXHQa94PyuVfRsBcdKzHPeb1Qn4whsK9ovuAH5/eQD1WescbudL09lU7Tn0cSmx+KY21N839sLiaMXmwbdXHBsOgY6/3Fj04DDRR6bhn7i/R7TjU3j+c2/eLHpkp35Mhg05ceH2JfLuckcu0HNNZfqR5GcJ/o1ch5tXECMw8S2o/tgnevnMPm6JCq+Yfk4TzvXwFfVTrTHfgUn6OMs6jcLjsXK2T+fz0xye3ydDNsvSFcznwvoZMktI50sOXDwzbDfhuwczL2D8t1mI5YyBzw5N97XkiqSUzihOYUT9yCnMI66fKS7kdeGOkkuaudyPE3tOe6b7CKj1ymmrvdHyF+q90fieO609Rxsrij9P1PqIkj8j32tkk9jcAbYFPEL/ST+0WrSq4V9pDbt7QnmyEXtedjmzOZ6p8YG0Zhbs+aNU1yX48Sct+7T5J7i+aQluXxd7udwFc6nic0O5H2RfCygy2NzTUzD1+VYk/h5X14u7fR0Oa9TjW+I5JKly0d3ROR97bkwXV7539Q3tJraJ50AXdDrroGsDOd95aDvFkCmkn/ZzuPeDV1eo++uCutywCJPl7MvFHRDunrkBMcm8nQ55G3E7+46yHI6z9Pl+pz3G+lyrAV4PW90uT5jjRuyPm7232ueGfb4gy/pvrfvlGSAl2eW+zHyzBCf+XnW5TP7L0yXzxz8BdHlkb7N8/jYo2KDZQVigz/JusaWw3l6UnKHCtoAmnMU1Cdoo6idUXoi6DuAvQJ7Bjk4fj9zrJiB5fNQ20bW9DvZVu9jmUPrwEr7Hts+XYi98podfRaNb5bs4dwBjIX3nBH9ghcaUmXQ1ajHobwg92pD9zivHXsEIu6XFrhfVuB+eYH7FQXuzyhwH7mFkfdnBu8Dpoj/E0ypZoDATuUb9GYxH5DJAy++T3GbM/dbaldBZ8tesOjn5vHeT/UdyPdExCaCfocN1gf/kJ+HQvVAUSeJaQ960aM9rK+K+jIs2uMxrw3bgXNmBuxAqsdj7ECNfVDdj2CMbg5yuDw/i7HJpO6Y5IvS/klj3+mezFDfbCvYe24DvAU6Lro3xsKJ+g5hbyJuOCRxQ5KvlDtBPiXIipCvcM5fsV3Dc2e/IsFZ9tAgB4eu7b025Ac2e0sj2tK6qAoP8eXtNT7LwH6NqHXxheTcXEgeRYF8Kw9eJQtWp1NUk7FGjg26XwE55pGx2avVpwldm9Zv8rBtBF8AaiIi9ymcMzP/CybX3c7DIDlG8odx7u/ZwZoq5G+01za7AzTt7cMO7FMcAq9zjk4AT/9d94uSrCd9KPFwsecFd/iuAeU7Cu6aaD/VfKx74pDRVWQLSB4q04vQLeqo8r5HvQ8Y1JAtQrbHNPcEafxlGZ7fQLHiusEO5KN1xCthy9SaGjqANce4sI5agHXUJZwTRfuR/NiBV4sOc5daNKLnJc4l9+naq5NCORDRMaM5XP9T8ys0ZoS4iRczGvFqjkFftWLOizHWK/L3tgFX4bWWRY+JjJfDRrpoMjaOGurjgsfSr+g59GPpIJ37e0JL/kWvkcPK18/pdZleN+h1uVzHvqDXFXqN2od8PUP3mOJbL3xdqdeb9Xqm2YMKGl3AOnkN6ix6upLqPuE8jRpQHau8+LevN83vtaHffR0qz+C3Eo43h59Tneo9V1rgOdWx3nNlBZ5Tnes9V17gOdXB3nMVBZ5Tnew9N6PAc6qjveckvm4957aPYw9CrEx/nxn+/WWshUh3I0bdfRxrOq6pRvbQ2901qAf4n3i5ILzAN005u7RujMRHvg3ltRPGC+GC7c9V9A0Urn0rvjheW97rrhmz7MtfbNzA7489Ys7nflJemS5u8vEB/GSqpLYn44tj0sDPKO/p+XnGD2IVtNahfOR/E1k2bfzk4YP4p1rq+efxD9Ys/0HxQ/44wH3VxaZrps8/Nj6If2rl21l5/HP0osMPdCXgHhu72HTOT59/bHwQ/9RF6B987+vfCD+ouYZ6Nfju6EWmd/79+MfGB/HPggj9c2jPT4oft/3wacD97otN71z0+MnDB/HPJUH9swH5BOoLLIwft/0QfV+D9ltcNLrn5wZHeTghHro0rIPaR6hOFucGMW68byMV4J3A7wXxE34uGj/h56LxE34uGj/h56LxE34uGj/h56LxE34uGj/2czY+4MfiYx/yHznnCz6OovlzJbL3GXtbJN846DurekRjr/BXsd+F/DFc85RzfrRGC/xgmjdIucVBP+us/xuus4QcQVNXiernd49SLgX5K+GLJt8W8sHZj0m+rZHKQjW10HZW25Z6MdK2V3cKeyARpxzFtzCxD4f9xOwr03pa5FcOtlf9S9oefVvXtOfV+IKfk/K0W6kW1PTyvqvNHjk7T9v3maG2k+Unoxoo8kwn8oW95ylvO8pHVvWylbNtfGTkTzR51RSDMz6yW+Ajq4KPrNrKq8a+dG9fjdJGzKpPNKslz19LNNKP+lJUK74PeFuH2nV0fhfOB2mvB84HaA/ROH1TV/eLjMNnHbVfZM7vh/eLaB19/aaCv1/kkNTGFx8N4h5RsJj1THi/yCGJLzKcce7n9/WjTcqpNn4f7J8qtF9kJteRyd8vcoh4QHMCDpvfTD9UGyawX+Qw7fu6gP0i8S9ofh9qwRyGP3cE9VxG3uT2HhrHN/QQG61w/P0i+K1zpMPeL4KYP74FxnMlv2856hnDV0qyO43vv/M+DtRz2Q+6k3w73duB58ZAL3RvK2SK1PIP9E81HDjPNLzHBLTi0VLM1IAKx0lR3xU1jLAnGTTBe0iC8VGb/ko1J8mmP/iqKeeF6Y9r/VHOgdIfzpn+EFf29ys1R9Pf3LdH7Fei/P8I+mOeUvobAT1H0d/sxoj9Sn48XPLTTU4K6E/3MkmbQtOR9FeJmEmQ/nh/gclJOR3Yr3QqTH/7sBfkQuiviusfwb+PGMboaciNIciNddhjtDtMf/itM7c+TH88V6U/zr+BHLLpz/jvbfpDbIPvEf2pDMvvf7ww/YFWwvRnxSJjmnfEeo7hnT/nmmvy9RzX1DN6TmLzoud2FdZzc14K6zndfyMxFMgBxD9kj4TuoRyRWmSyR2JvkT0Sl4X3mejeG9Ejfq1B0dGqR+y6kH7Nq8DcTb0roiujRyh+Y/SInIseWcF1grtzc3w9Atj6ORhRe37z+ZhjLUj8n0Q8Lj/2Bhx6torJy7DkQZmf6z+Idtbx3kSqpcm5L8sHALsMaqL5tUglR4XxBr2l9c3c7n36/fDltFc0K3tFx074e0XHTmjcVWqodaFmGp0jhwl0ncKeT8Ri8Qxqwpq+0T79hvYp/4n5k2nH2kuyALzSFd57hL1BXFN0jPZGGV8hcsa5nqWRI8QrXJMNtox+d7V24raureCbWKvVBsXH5J3+MaoR9mIgN46/mwTY/zrG8iLw+Otam4DGc6t8Nzv3IsZfoK56jHPVNAfO7OMSG0NkCuJfkrcCfqa9yW/1Y2R870eIY76Id5A7CZ0Q2mMSeyG0T7l9VGrgS/uIn3ntU/3iOxW2X8M5fVcs+Btd/0HgNxrXnVZ919ECv5txLyrwu8b6nHn6ezB3Zgfgfz1w4n1nFN8oIT8d1YLXnLcR5OA71/B9r/4avqvj1197juRfAVh1evtmfFiRPDCwQiwR+UjI/+V8JOSzQRbfTXtXI+orcE1o1SNa24L3Jhpd4er82vSc5n0jnVtwatRrA5c6vdYYKMXoR5Cn6NwI/puy6tahztfITsTub1jf4c6BTFhq/w74aU4Gw4Oe3YRnr9Vnr+PfffhSTqGBLz2bwbNX67Nv4N/9dikmZLfbjGeb1nf0oeZofAn/7rfbEmi3Es8u1nav4N/9dslXYdfPG8ecL+H7Pp7Izo/8dgDsCP3+lrOb8gLRz1Xg093I2yxHX9Af9N0lMy7UyPXHRfCtx/NXor9G/s2nKanL4Y/pHJ5ZxPf9tqTunzfH3Am0den6jn6qb5Hg3017VF/Y+74p6hR7uiFnvudneLBX6aaM5Ip8D8V5EXvnL0cbtN+Xvs+Ob9xCJnRjHcQymXOtdS/Zcuf2rrqTomMg+18bCtYYtfPXUfecdTvvQQ3VyBDdjtoVrM+kBgPygdF3TG2yej0nm4VyaWPkW6ihHNq0M1evy/SaatvSdblec57eevgI6BsI4WOMxsDXfi11Lxc/Ki9wrcmPWw9YYrzNZOdQ/jV9X0Fheqt1TTC/zlzbssu6Z/iSct/NPcObJs+Q/SG8z0tksMiCbtRKQF1en85g36A9rntCv1FeJtMZZBE9J3TGOTk0FjxXonLKtIdvDnvtET0SP6EOJe+VNG25Vlucp+PdE5mA3DSTGwx4Fc+dy6tNH8gn2kW0EaXvtjl1XJeRcsjXt5VS/7sVD7stPKyyrgmWd5hrS8cQbsw9g5uEdc/ghmAGOcQ15YTHREZS/WOSkVWqewH7ZBnnVmsNfft5zjH2+Z3ehS0Qn4f7xO/ARzKe967kJKscgL3oywF6l/aJ0XckyKaELEjODfRLtYNNv7TX2PQ7i2rG4F1ee+A4K9Cn9z0gtEE5LaZPeo9zufAM5B9kUX5/p01//I7u883L5VpD9iTlBlMNoNCeRMsu1doustcCeyCCvqAFLfTNQFPTT+u267dtuPYJ1xCmvRCFvmmP3DP+BpG/JrBtfrRJe6/9Ou+0FpVn7Dr2qP0WvYZdIPWixPdl1hPyXRKp5eLVaoFdchtsdqoJNBN2+0f9uipF94lY35IwucN59X/Qj+YW+jY8ZFuIF638OfgjTY2udrMWyMu7+nsr7+pd+XlXpZWBvKv/Esi7ekMg7+pIIO9qZSDv6m8CeVcPR+RdzWZ7bp2dd0VxChOD2BDh5za/Uxwi/3ffzy3P+HGI0HPq5/ae0zhE6Dn1c3vPaRwi9Jz6ub3nNA4Rek793N5zGocIPad+bu85jUOEnlM/t/ecxiH85yTvqqqMvxPFa9W0yZPQWIT9rMnB2hDMwdrorrNzsP4TR9PBkeRgxU9FwD6Ep/x4hNdmGEdePhbqy4fzse5z19n5WL/YeJJ8rPjnIuD/Y/PTdPGUjxvgKpybBVzZuVk/n7iS3Kw49huFcPAzl33TxlUeboivQnlawJWdp/UfC1eSpxVfFYGDi0ZPTZ+vbNwQX4VytoArO2fr4sCV5GxVjUXg4KLRVz99vrJxQ3wVyt8Cruz8rZ8triR/q2pnBA4uGp3178dXNm6Ir0K5XMCVncv14+FKcrmq7o7AwUWjsy56XOXhhvgqlNd1v7vOzuuKxpXkdVW1BHFxseitnxt85eGHeCuU43Wf5HjBBx3CRaF8L4u/CuZ7BXBVMN8rgKuC+V4BXBXM9wrgqmC+VwBXBfO9ArgqmO8VwFXBfK8Ars6X70V+sHC+V8Set/PleyUmf/J8r9r7fnb5XjX/76eb79Vw+Keb79XA9f9+NvleDbdcQL7X7dPL94qulUDfMoh3LKNvB8SmUev1lFXrlWuMBsb9VKBuJNWWN7VeJT9Bar0C74Vq2td+P6JGpMCY5i61Xoe0RoWp9Urf6TS1Xr26xWGc1T4dUcNT6qBS/FNqve6Yfq3XhXY+hWmP4vt2rddd06/1utB8H9OmKamdLXOnONxerq/i+YGV385T5xb+af3ef17dV8GJ5N+QDDK1N/355O3pNfVJQnj/dkTdV6r3E1X39Zci6r6eCvvvS618kPJM4n7Q3b1WPgjGG6a/yz6v9Ec1tkB/Y7znUOuWRuQ/Nfytleegdsg+ycHgfdr8jVDOwYiulb7QfF+J4vEUM6nxvvlLspO+Z8pxhELvX/b7A227QvU4cGxH/PRTiKV+qqHtGYoR/3YihfrwnVOP4jsfE/g+4Fb5PmDut6PrHTRMar0D2neJb6kML0QNj9PyPerlWmsBSih/LN+Gj4rkK/h1q4lXcN0XtLE4kCdH/ANdsRV1f5Brxnz4McwXsWMvHw/fmjU1wRE7LkyXif9j5Tdo7t0+or+MqXcbHbNbiJgFv+fJQoxfcs2Ynse886hvDW1zLuFv9wO2ewDnPfG2CoLvNoXvdoIv/cZ1PHw4kH1qwWF/UvOSGMduR1Jg0fExqs+Dby2O0T7/jNSsQO4Hfx+sSWt3RsHikvsJB8ghOOd2U81SyDitvcV1cfg7DL+GMQ+34Zq+34Rr6FTUPTM1cyinCOeA3bIIel8wKfwGfvJi7KUmxm7FbuY1J9bpfnnYD4DLuxQuOwgumJd+k6qO9jq+D/V7pC4p6fTOcZJXwCPlMI1TPW6No40hdmbsiOC46lBfg/mW6u9hDi9Tvd+M8O1hypmR886xyHwlvI+8MyOHpT4k1hPQHziPzL2ou4aeB8+9jfpyOw/rmNlPDt0UJePquB6FfB/R9HFY6lEynR7U2mohncO1eUHHyDMkm5vX/tSG5t0exbcg6DfYz10bhuOoH8Uyi3MuxpGDGNkmf9cC8LB05FFPjwWenak5xh/EM2vpHar3UDgvpZZrUeP5L2GfDXKqRr6EvOA/kPobsQ/h+oO4/lD0uC6bzd/boBwkzkWiuiKc88m2xQtEV+HvO4TrHwvNPaY0926hOa7Ja2iuOp/mEGf1aI5rbpvYLXKgCtHcgoF8mmNbRemMvlUQNb8arsca0PdiS4jN533zIgzXas55A1yupnfQB+XAmvxOreMVegffu/DsAaNXJV9J8rXoe8CzKLfP5H/R9wJwP605OKg/kWuHLGqn/N9sevY4HXH/DtzvwP076vjdQviimsyF7chgDcNwXP2ygxpX5zxNo1eL1C6066+cC3zr41cof3Ogf+rxeF9qArV3tG7ecqonN9/tcZulnlgHappxjcmA3OTa1ZQrBX5le5RyjJFnzXWDtF4+2aNBXbrwfQE6ob1PSidUGzKSD457dKLfE+ZcJ+sbKmF9VP8j/1s1mHuonoltD82fCsjn9yivPMF662zsh27vcfqeosCgdx99t9DwzkP5vHOUZIjyDnzVHu/sl70SkbxzyRvzYXKU9qEqTPYXgMmCx8Iy+ihyQzz56X3nKiB3tVYjy12Vn8cg60R+Bp7l+vKQU38EGHwZsurL2P+htvSGiG9sVd9Ma0LNjUX+59ST4Bvo7inUx4nDnhkTGwjwANw+6baxfpdaeO3Hof+P4VuFh6hWKHQ8rT9R55hgzrlthwFzqakm+j4KjnNOaw2hv9Wxqm2Oeord47CZoutXYtxsu0Bv+Lk17Yck7zBa3z2pcPkqwQ7y+6usb7RuEO5J3UzGwzhqd0XiYUz7FBknePBr/7QfQs1D7FEoqlvqPmnqWWO+38M4fkh6BfD+VaXfp/S7108zr98/9Ux8466JgXunno2vH4Y9FvtjvPdHA/0jfxxtw17+WR5j/77dyEV7lHwsOG5F/uNefP8ccOpA/vehXXyOb6FHt1HN9EUwioZDdZ1+1591NOjiV9gm5PUDeKgTdNF9bC1sJKnNRj4P4TfYhWwfkV/A2ChUAxM2IfHefthrhfB9mcyrc5R0htkfJbVRGWf7I7/bBnh8U95DzrpHJ0dkjVbQLk4kFUcnYLPxPtvmto/RPGHnmXk+Y89T68PmzxPwO0HfJHS7j8g3B5gnjlC+J+a7HDxRcD3QrLy1Fu1vcXuPZZDjTvjD2qUceytSzTgneU7nND6xe9tSkp8IuxdwpRw58F74G3Ooh5cmXhP9GPsyclQrUT8c+WNGzxl7eL4tb/cmBvXbYJTLJDL3vUqzz4l9cozqgxl5K98zFnm7OV/e7qP1ivjZ2sw+Hayj2lFLnfFJtHCE/A8t4i/Yr7XgovwFl9+QL4dR+96Xw/AFRNHEovvCe0COyXf9mI+PeHtyCtAH1+MD7L4IOH5Rngn18UGlO+REx98FPOJ7+9inxD5AkpPjO4qvixfvpLaTwBHgvFPh/LzKhvepHfB+sgMGHp76QPyduYmBB6c+GH9gD8mIL4M/T/P+pbYFXIuF6ZauO5ZgTMdAk2N0jf4XgGYh04eIZrcTzX7ZvRf8sQEwXF8BeB45hXPQ6xLQEfAeTa9fA5+sFT6BH+2s82GfT9LgE+rvKPkEdF18lHAre88698O+L8QHl5YrnvxvIIiNb3ge35KOwm99v74Hn4unZ2F7eXrW+85SQKd3qJ4FHXp6Vmr1y3qa4vYfC7yT9L4t33mY9ALgCFruPiy2juwLxfq9kB0xi2UN6ITgZXSK74dC/2hLvuNk0Urim0BmfjuXYXyaZz5GOPi4j4OXFAdoq/cQrVt1PQ5da76R0gl5Qboa/Fl4bT7vKxhPKjB/rbE/RmMUu0lsBOJp0OLQ70D/fBp0RPnRXAs0LI/Kz4qtDRnjyaD5LIPevu2xwUc3btzwKHK26e/e9Q8Nblqf3b7xUVgMer154/aNmwe3baHrzx9d9vmBbz3W/ZfO/H/4yr8eW/HqzIlT+x/uc//ye88e+9fGt/z1/Ru3cnuD69/58LaHtjqmLdPGow8+sHlzcv3m7Mb1Gx5LvnP9Du33oYe3Jjc+9PC2+zclN+5AT9TO+kcfxf8PbODfN75rcMvm9Y9tzMrzcu41tHHHA49upTlseeKVc58/m/rioi2jfzv7745//ZZXJgeev3TLZzbe8e4Xtl/7ow9pdwX/qN/712c3bHxocPvGe7mfh8yMMJaHNmyUET+6cfPmwQe2bnynvnfiucVPnHnxsZaX75z4retu+1r67S8t/LW648Mff/pLXUs/Pe+pOLVLjxu40LU9nz/hP6eEL7JbTtPh1o//sfx47R9OPPvJW75evSv2ptf5z3F+edl9d5z5wx/96QeavnLTe9983cef+fp1Y7+5buW8971x+Ut3rvmrAX0uVnLXb54affKV22569zf6/qn2hsWfWN3b8b2eZ3adPLl6y/W/Xf7XX8+87cNPb4i9cN/4jHWf/eH8971j7osPvH/uIUhk/M1+JLf14YeTG9dnNz+WB6WDb5TjgRN63KTHzXpkWsERlSHpbz8ojf7GGJc4ggLpb99LelQy2PeMHlvkOPonevwDOea+ocevyfELOp7f0/Z/b0qP+KIS/75Hjp+d0OO4HD/Xqtd79ajPfU77/VxGjntv0+MyOX5G+/v0bj1qO5/W9/Zov3sYf47zW/r7b+nvn9D5fELn8xS4ko/INqe/h/X35TqeGsGDU6Pzrlb4VD8uxzhW03zUcc7VfuY2y3GOjmeOjmeWwnvWb8hx5t16VDzN1HlW6nUlvgDLR+2nUvupWKtHV45lCvcy7a9U4Vya06PCuXTP/wds2yG5sL0AAA=="); +const bytecode = decompressBytecode( + "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", +); export class FarmContractFactory extends ContractFactory { - static readonly bytecode = bytecode; constructor(accountOrProvider: Account | Provider) { @@ -26,7 +32,7 @@ export class FarmContractFactory extends ContractFactory { } override deploy( - deployOptions?: DeployContractOptions + deployOptions?: DeployContractOptions, ): Promise> { return super.deploy({ storageSlots: FarmContract.storageSlots, @@ -34,9 +40,9 @@ export class FarmContractFactory extends ContractFactory { }); } - static async deploy ( + static async deploy( wallet: Account, - options: DeployContractOptions = {} + options: DeployContractOptions = {}, ): Promise> { const factory = new FarmContractFactory(wallet); return factory.deploy(options); diff --git a/frontend/src/sway-api/contracts/common.d.ts b/frontend/src/sway-api/contracts/common.d.ts index edeab8e..2a16711 100644 --- a/frontend/src/sway-api/contracts/common.d.ts +++ b/frontend/src/sway-api/contracts/common.d.ts @@ -30,4 +30,4 @@ export type Vec = T[]; * Mimics Sway Result enum type. * Ok represents the success case, while Err represents the error case. */ -export type Result = Enum<{Ok: T, Err: E}>; +export type Result = Enum<{ Ok: T; Err: E }>; diff --git a/frontend/src/sway-api/contracts/index.ts b/frontend/src/sway-api/contracts/index.ts index 481230b..747f79a 100644 --- a/frontend/src/sway-api/contracts/index.ts +++ b/frontend/src/sway-api/contracts/index.ts @@ -10,5 +10,5 @@ Fuel-Core version: 0.40.0 */ -export { FarmContract } from './FarmContract'; -export { FarmContractFactory } from './FarmContractFactory'; +export { FarmContract } from "./FarmContract"; +export { FarmContractFactory } from "./FarmContractFactory"; diff --git a/frontend/src/sway-api/index.ts b/frontend/src/sway-api/index.ts index c7041c4..14371ab 100644 --- a/frontend/src/sway-api/index.ts +++ b/frontend/src/sway-api/index.ts @@ -1 +1 @@ -export * from './contracts'; +export * from "./contracts";