From 22564b43846d5f446237eb31320e14d27616ef47 Mon Sep 17 00:00:00 2001 From: Josh Hannan Date: Tue, 9 Jan 2024 17:12:27 -0600 Subject: [PATCH] add event args, global burn method, balance interface, and clean up tests --- .github/workflows/ci.yml | 4 +- .github/workflows/release.yml | 31 - contracts/ExampleToken-v2.cdc | 271 -- contracts/ExampleToken.cdc | 331 +-- contracts/FungibleToken-v2.cdc | 201 -- contracts/FungibleToken.cdc | 236 +- contracts/utility/NonFungibleToken.cdc | 2 +- contracts/utility/ViewResolver.cdc | 6 +- coverage.json | 2767 +++---------------- flow.json | 17 +- lib/go/contracts/contracts.go | 27 +- lib/go/contracts/internal/assets/assets.go | 70 +- lib/go/templates/forward_templates.go | 48 +- lib/go/templates/go.mod | 7 +- lib/go/templates/go.sum | 11 + lib/go/templates/script_templates.go | 13 +- lib/go/templates/templates.go | 105 +- lib/go/templates/transaction_templates.go | 90 +- lib/go/test/forwarding_test.go | 38 +- lib/go/test/go.mod | 73 +- lib/go/test/go.sum | 334 ++- lib/go/test/test.go | 10 +- lib/go/test/token_test.go | 386 +-- lib/go/test/token_test_helpers.go | 94 +- tests/example_token_tests.cdc | 60 +- tests/metadata_views_tests.cdc | 70 +- tests/private_receiver_forwarder_tests.cdc | 107 +- tests/scripts/get_supported_vault_types.cdc | 2 +- tests/scripts/get_token_metadata.cdc | 1 + tests/scripts/get_unsupported_view.cdc | 3 +- tests/scripts/get_vault_display.cdc | 3 +- tests/scripts/get_views.cdc | 3 +- tests/switchboard_tests.cdc | 8 +- tests/test_helpers.cdc | 29 +- 34 files changed, 1363 insertions(+), 4095 deletions(-) delete mode 100644 .github/workflows/release.yml delete mode 100644 contracts/ExampleToken-v2.cdc delete mode 100644 contracts/FungibleToken-v2.cdc diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6468c608..89bdb4a2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,7 +11,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 with: - go-version: '1.19.x' + go-version: '1.20.x' - uses: actions/cache@v1 with: path: ~/go/pkg/mod @@ -19,7 +19,7 @@ jobs: restore-keys: | ${{ runner.os }}-go- - name: Install Flow CLI - run: sh -ci "$(curl -fsSL https://raw.githubusercontent.com/onflow/flow-cli/master/install.sh)" -- v1.5.0-stable-cadence.3 + run: sh -ci "$(curl -fsSL https://raw.githubusercontent.com/onflow/flow-cli/master/install.sh)" -- v1.9.2-stable-cadence.1 - name: Flow CLI Version run: flow version - name: Update PATH diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index bb6336eb..00000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: "🚀 release" - -on: - push: - branches: - - master - -concurrency: ${{ github.workflow }}-${{ github.ref }} - -jobs: - release: - name: 🚀 release - runs-on: ubuntu-latest - steps: - - name: 📚 checkout - uses: actions/checkout@v2.4.2 - - name: 🟢 node - uses: actions/setup-node@v3.2.0 - with: - node-version: 15 - registry-url: https://registry.npmjs.org - - name: Install Dependencies - run: npm i - - name: Create Release Pull Request or Publish to npm - id: changesets - uses: changesets/action@v1 - with: - publish: npm run release - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/contracts/ExampleToken-v2.cdc b/contracts/ExampleToken-v2.cdc deleted file mode 100644 index cd5e643e..00000000 --- a/contracts/ExampleToken-v2.cdc +++ /dev/null @@ -1,271 +0,0 @@ -import FungibleToken from "FungibleToken" -import MetadataViews from "MetadataViews" -import FungibleTokenMetadataViews from "FungibleTokenMetadataViews" -import ViewResolver from "ViewResolver" - -access(all) contract ExampleToken: ViewResolver { - - /// The event that is emitted when new tokens are minted - access(all) event TokensMinted(amount: UFix64, type: String) - - /// Total supply of ExampleTokens in existence - access(all) var totalSupply: UFix64 - - /// Admin Path - access(all) let AdminStoragePath: StoragePath - - /// User Paths - access(all) let VaultStoragePath: StoragePath - access(all) let VaultPublicPath: PublicPath - access(all) let ReceiverPublicPath: PublicPath - - /// Function to return the types that the contract implements - access(all) view fun getVaultTypes(): [Type] { - let typeArray: [Type] = [Type<@ExampleToken.Vault>()] - return typeArray - } - - access(all) view fun getViews(): [Type] { - let vaultRef = self.account.capabilities.borrow<&ExampleToken.Vault>(/public/exampleTokenVault) - ?? panic("Could not borrow a reference to the vault resolver") - - return vaultRef.getViews() - } - - access(all) fun resolveView(_ view: Type): AnyStruct? { - let vaultRef = self.account.capabilities.borrow<&ExampleToken.Vault>(/public/exampleTokenVault) - ?? panic("Could not borrow a reference to the vault resolver") - - return vaultRef.resolveView(view) - } - - /// Vault - /// - /// Each user stores an instance of only the Vault in their storage - /// The functions in the Vault and governed by the pre and post conditions - /// in FungibleToken when they are called. - /// The checks happen at runtime whenever a function is called. - /// - /// Resources can only be created in the context of the contract that they - /// are defined in, so there is no way for a malicious user to create Vaults - /// out of thin air. A special Minter resource needs to be defined to mint - /// new tokens. - /// - access(all) resource Vault: FungibleToken.Vault { - - /// The total balance of this vault - access(all) var balance: UFix64 - - access(self) var storagePath: StoragePath - access(self) var publicPath: PublicPath - access(self) var receiverPath: PublicPath - - /// Returns the storage path where the vault should typically be stored - access(all) view fun getDefaultStoragePath(): StoragePath? { - return self.storagePath - } - - /// Returns the public path where this vault should have a public capability - access(all) view fun getDefaultPublicPath(): PublicPath? { - return self.publicPath - } - - /// Returns the public path where this vault's Receiver should have a public capability - access(all) view fun getDefaultReceiverPath(): PublicPath? { - return self.receiverPath - } - - access(all) view fun getViews(): [Type] { - return [ - Type(), - Type(), - Type(), - Type() - ] - } - - access(all) fun resolveView(_ view: Type): AnyStruct? { - switch view { - case Type(): - return FungibleTokenMetadataViews.FTView( - ftDisplay: self.resolveView(Type()) as! FungibleTokenMetadataViews.FTDisplay?, - ftVaultData: self.resolveView(Type()) as! FungibleTokenMetadataViews.FTVaultData? - ) - case Type(): - let media = MetadataViews.Media( - file: MetadataViews.HTTPFile( - url: "https://assets.website-files.com/5f6294c0c7a8cdd643b1c820/5f6294c0c7a8cda55cb1c936_Flow_Wordmark.svg" - ), - mediaType: "image/svg+xml" - ) - let medias = MetadataViews.Medias([media]) - return FungibleTokenMetadataViews.FTDisplay( - name: "Example Fungible Token", - symbol: "EFT", - description: "This fungible token is used as an example to help you develop your next FT #onFlow.", - externalURL: MetadataViews.ExternalURL("https://example-ft.onflow.org"), - logos: medias, - socials: { - "twitter": MetadataViews.ExternalURL("https://twitter.com/flow_blockchain") - } - ) - case Type(): - let vaultRef = ExampleToken.account.storage.borrow<&ExampleToken.Vault>(from: self.storagePath) - ?? panic("Could not borrow a reference to the stored vault") - return FungibleTokenMetadataViews.FTVaultData( - storagePath: self.storagePath, - receiverPath: self.receiverPath, - metadataPath: self.publicPath, - providerPath: /private/exampleTokenVault, - receiverLinkedType: Type<&{FungibleToken.Receiver}>(), - metadataLinkedType: Type<&ExampleToken.Vault>(), - providerLinkedType: Type<&ExampleToken.Vault>(), - createEmptyVaultFunction: (fun(): @{FungibleToken.Vault} { - return <-vaultRef.createEmptyVault() - }) - ) - case Type(): - return FungibleTokenMetadataViews.TotalSupply( - totalSupply: ExampleToken.totalSupply - ) - } - return nil - } - - /// getSupportedVaultTypes optionally returns a list of vault types that this receiver accepts - access(all) view fun getSupportedVaultTypes(): {Type: Bool} { - let supportedTypes: {Type: Bool} = {} - supportedTypes[self.getType()] = true - return supportedTypes - } - - access(all) view fun isSupportedVaultType(type: Type): Bool { - return self.getSupportedVaultTypes()[type] ?? false - } - - // initialize the balance at resource creation time - init(balance: UFix64) { - self.balance = balance - let identifier = "exampleTokenVault" - self.storagePath = StoragePath(identifier: identifier)! - self.publicPath = PublicPath(identifier: identifier)! - self.receiverPath = PublicPath(identifier: "exampleTokenReceiver")! - } - - /// Get the balance of the vault - access(all) view fun getBalance(): UFix64 { - return self.balance - } - - /// withdraw - /// - /// Function that takes an amount as an argument - /// and withdraws that amount from the Vault. - /// - /// It creates a new temporary Vault that is used to hold - /// the tokens that are being transferred. It returns the newly - /// created Vault to the context that called so it can be deposited - /// elsewhere. - /// - access(FungibleToken.Withdrawable) fun withdraw(amount: UFix64): @ExampleToken.Vault { - self.balance = self.balance - amount - return <-create Vault(balance: amount) - } - - /// deposit - /// - /// Function that takes a Vault object as an argument and adds - /// its balance to the balance of the owners Vault. - /// - /// It is allowed to destroy the sent Vault because the Vault - /// was a temporary holder of the tokens. The Vault's balance has - /// been consumed and therefore can be destroyed. - /// - access(all) fun deposit(from: @{FungibleToken.Vault}) { - let vault <- from as! @ExampleToken.Vault - self.balance = self.balance + vault.balance - vault.balance = 0.0 - destroy vault - } - - /// createEmptyVault - /// - /// Function that creates a new Vault with a balance of zero - /// and returns it to the calling context. A user must call this function - /// and store the returned Vault in their storage in order to allow their - /// account to be able to receive deposits of this token type. - /// - access(all) fun createEmptyVault(): @ExampleToken.Vault { - return <-create Vault(balance: 0.0) - } - } - - /// Minter - /// - /// Resource object that token admin accounts can hold to mint new tokens. - /// - access(all) resource Minter { - /// mintTokens - /// - /// Function that mints new tokens, adds them to the total supply, - /// and returns them to the calling context. - /// - access(all) fun mintTokens(amount: UFix64): @ExampleToken.Vault { - ExampleToken.totalSupply = ExampleToken.totalSupply + amount - emit TokensMinted(amount: amount, type: self.getType().identifier) - return <-create Vault(balance: amount) - } - } - - /// createEmptyVault - /// - /// Function that creates a new Vault with a balance of zero - /// and returns it to the calling context. A user must call this function - /// and store the returned Vault in their storage in order to allow their - /// account to be able to receive deposits of this token type. - /// - access(all) fun createEmptyVault(): @ExampleToken.Vault { - return <- create Vault(balance: 0.0) - } - - /// Function that destroys a Vault instance, effectively burning the tokens. - /// - /// @param from: The Vault resource containing the tokens to burn - /// - // TODO: Revisit if removal of custom destructors passes - // Will need to add an update to total supply - // See https://github.com/onflow/flips/pull/131 - access(all) fun burnTokens(from: @ExampleToken.Vault) { - if from.balance > 0.0 { - ExampleToken.totalSupply = ExampleToken.totalSupply - from.getBalance() - } - destroy from - } - - init() { - self.totalSupply = 1000.0 - - self.AdminStoragePath = /storage/exampleTokenAdmin - - // Create the Vault with the total supply of tokens and save it in storage - // - let vault <- create Vault(balance: self.totalSupply) - self.VaultStoragePath = vault.getDefaultStoragePath()! - self.VaultPublicPath = vault.getDefaultPublicPath()! - self.ReceiverPublicPath = vault.getDefaultReceiverPath()! - - self.account.storage.save(<-vault, to: self.VaultStoragePath) - - // Create a public capability to the stored Vault that exposes - // the `deposit` method and getAcceptedTypes method through the `Receiver` interface - // and the `getBalance()` method through the `Balance` interface - // - let exampleTokenCap = self.account.capabilities.storage.issue<&Vault>(self.VaultStoragePath) - self.account.capabilities.publish(exampleTokenCap, at: self.VaultPublicPath) - let receiverCap = self.account.capabilities.storage.issue<&{FungibleToken.Receiver}>(self.VaultStoragePath) - self.account.capabilities.publish(receiverCap, at: self.ReceiverPublicPath) - - let admin <- create Minter() - self.account.storage.save(<-admin, to: self.AdminStoragePath) - } -} diff --git a/contracts/ExampleToken.cdc b/contracts/ExampleToken.cdc index 5f9d3c35..ca9f244c 100644 --- a/contracts/ExampleToken.cdc +++ b/contracts/ExampleToken.cdc @@ -1,39 +1,46 @@ -import "FungibleToken" -import "MetadataViews" -import "FungibleTokenMetadataViews" +import FungibleToken from "FungibleToken" +import MetadataViews from "MetadataViews" +import FungibleTokenMetadataViews from "FungibleTokenMetadataViews" +import ViewResolver from "ViewResolver" -access(all) contract ExampleToken: FungibleToken { +access(all) contract ExampleToken: ViewResolver { + + /// The event that is emitted when new tokens are minted + access(all) event TokensMinted(amount: UFix64, type: String) /// Total supply of ExampleTokens in existence access(all) var totalSupply: UFix64 - - /// Storage and Public Paths + + /// Admin Path + access(all) let AdminStoragePath: StoragePath + + /// User Paths access(all) let VaultStoragePath: StoragePath access(all) let VaultPublicPath: PublicPath access(all) let ReceiverPublicPath: PublicPath - access(all) let AdminStoragePath: StoragePath - - /// The event that is emitted when the contract is created - access(all) event TokensInitialized(initialSupply: UFix64) - /// The event that is emitted when tokens are withdrawn from a Vault - access(all) event TokensWithdrawn(amount: UFix64, from: Address?) - - /// The event that is emitted when tokens are deposited to a Vault - access(all) event TokensDeposited(amount: UFix64, to: Address?) - - /// The event that is emitted when new tokens are minted - access(all) event TokensMinted(amount: UFix64) - - /// The event that is emitted when tokens are destroyed - access(all) event TokensBurned(amount: UFix64) + /// Function to return the types that the contract implements + access(all) view fun getVaultTypes(): [Type] { + let typeArray: [Type] = [Type<@ExampleToken.Vault>()] + return typeArray + } - /// The event that is emitted when a new minter resource is created - access(all) event MinterCreated(allowedAmount: UFix64) + access(all) view fun getViews(): [Type] { + let vaultRef = self.account.capabilities.borrow<&ExampleToken.Vault>(/public/exampleTokenVault) + ?? panic("Could not borrow a reference to the vault resolver") + + return vaultRef.getViews() + } - /// The event that is emitted when a new burner resource is created - access(all) event BurnerCreated() + access(all) fun resolveView(_ view: Type): AnyStruct? { + let vaultRef = self.account.capabilities.borrow<&ExampleToken.Vault>(/public/exampleTokenVault) + ?? panic("Could not borrow a reference to the vault resolver") + + return vaultRef.resolveView(view) + } + /// Vault + /// /// Each user stores an instance of only the Vault in their storage /// The functions in the Vault and governed by the pre and post conditions /// in FungibleToken when they are called. @@ -44,71 +51,39 @@ access(all) contract ExampleToken: FungibleToken { /// out of thin air. A special Minter resource needs to be defined to mint /// new tokens. /// - access(all) resource Vault: FungibleToken.Provider, FungibleToken.Receiver, FungibleToken.Balance, MetadataViews.Resolver { + access(all) resource Vault: FungibleToken.Vault { /// The total balance of this vault access(all) var balance: UFix64 - /// Initialize the balance at resource creation time - init(balance: UFix64) { - self.balance = balance - } + access(self) var storagePath: StoragePath + access(self) var publicPath: PublicPath + access(self) var receiverPath: PublicPath - /// Function that takes an amount as an argument - /// and withdraws that amount from the Vault. - /// It creates a new temporary Vault that is used to hold - /// the money that is being transferred. It returns the newly - /// created Vault to the context that called so it can be deposited - /// elsewhere. - /// - /// @param amount: The amount of tokens to be withdrawn from the vault - /// @return The Vault resource containing the withdrawn funds - /// - access(FungibleToken.Withdrawable) fun withdraw(amount: UFix64): @FungibleToken.Vault { - self.balance = self.balance - amount - emit TokensWithdrawn(amount: amount, from: self.owner?.address) - return <-create Vault(balance: amount) + /// Returns the storage path where the vault should typically be stored + access(all) view fun getDefaultStoragePath(): StoragePath? { + return self.storagePath } - /// Function that takes a Vault object as an argument and adds - /// its balance to the balance of the owners Vault. - /// It is allowed to destroy the sent Vault because the Vault - /// was a temporary holder of the tokens. The Vault's balance has - /// been consumed and therefore can be destroyed. - /// - /// @param from: The Vault resource containing the funds that will be deposited - /// - access(all) fun deposit(from: @FungibleToken.Vault) { - let vault <- from as! @ExampleToken.Vault - self.balance = self.balance + vault.balance - emit TokensDeposited(amount: vault.balance, to: self.owner?.address) - vault.balance = 0.0 - destroy vault + /// Returns the public path where this vault should have a public capability + access(all) view fun getDefaultPublicPath(): PublicPath? { + return self.publicPath } - destroy() { - if self.balance > 0.0 { - ExampleToken.totalSupply = ExampleToken.totalSupply - self.balance - } + /// Returns the public path where this vault's Receiver should have a public capability + access(all) view fun getDefaultReceiverPath(): PublicPath? { + return self.receiverPath } - /// The way of getting all the Metadata Views implemented by ExampleToken - /// - /// @return An array of Types defining the implemented views. This value will be used by - /// developers to know which parameter to pass to the resolveView() method. - /// - access(all) view fun getViews(): [Type]{ - return [Type(), - Type(), - Type(), - Type()] + access(all) view fun getViews(): [Type] { + return [ + Type(), + Type(), + Type(), + Type() + ] } - /// The way of getting a Metadata View out of the ExampleToken - /// - /// @param view: The Type of the desired view. - /// @return A structure representing the requested view. - /// access(all) fun resolveView(_ view: Type): AnyStruct? { switch view { case Type(): @@ -118,7 +93,7 @@ access(all) contract ExampleToken: FungibleToken { ) case Type(): let media = MetadataViews.Media( - file: MetadataViews.HTTPFile( + file: MetadataViews.HTTPFile( url: "https://assets.website-files.com/5f6294c0c7a8cdd643b1c820/5f6294c0c7a8cda55cb1c936_Flow_Wordmark.svg" ), mediaType: "image/svg+xml" @@ -135,135 +110,161 @@ access(all) contract ExampleToken: FungibleToken { } ) case Type(): + let vaultRef = ExampleToken.account.storage.borrow<&ExampleToken.Vault>(from: self.storagePath) + ?? panic("Could not borrow a reference to the stored vault") return FungibleTokenMetadataViews.FTVaultData( - storagePath: ExampleToken.VaultStoragePath, - receiverPath: ExampleToken.ReceiverPublicPath, - metadataPath: ExampleToken.VaultPublicPath, + storagePath: self.storagePath, + receiverPath: self.receiverPath, + metadataPath: self.publicPath, providerPath: /private/exampleTokenVault, - receiverLinkedType: Type<&ExampleToken.Vault{FungibleToken.Receiver}>(), - metadataLinkedType: Type<&ExampleToken.Vault{FungibleToken.Balance, MetadataViews.Resolver}>(), - providerLinkedType: Type<&ExampleToken.Vault{FungibleToken.Provider}>(), - createEmptyVaultFunction: (fun(): @ExampleToken.Vault { - return <-ExampleToken.createEmptyVault() + receiverLinkedType: Type<&{FungibleToken.Receiver}>(), + metadataLinkedType: Type<&ExampleToken.Vault>(), + providerLinkedType: Type<&ExampleToken.Vault>(), + createEmptyVaultFunction: (fun(): @{FungibleToken.Vault} { + return <-vaultRef.createEmptyVault() }) ) case Type(): - return FungibleTokenMetadataViews.TotalSupply(totalSupply: ExampleToken.totalSupply) + return FungibleTokenMetadataViews.TotalSupply( + totalSupply: ExampleToken.totalSupply + ) } return nil } - } - /// Function that creates a new Vault with a balance of zero - /// and returns it to the calling context. A user must call this function - /// and store the returned Vault in their storage in order to allow their - /// account to be able to receive deposits of this token type. - /// - /// @return The new Vault resource - /// - access(all) fun createEmptyVault(): @Vault { - return <-create Vault(balance: 0.0) - } + /// getSupportedVaultTypes optionally returns a list of vault types that this receiver accepts + access(all) view fun getSupportedVaultTypes(): {Type: Bool} { + let supportedTypes: {Type: Bool} = {} + supportedTypes[self.getType()] = true + return supportedTypes + } - access(all) resource Administrator { + access(all) view fun isSupportedVaultType(type: Type): Bool { + return self.getSupportedVaultTypes()[type] ?? false + } + + // initialize the balance at resource creation time + init(balance: UFix64) { + self.balance = balance + let identifier = "exampleTokenVault" + self.storagePath = StoragePath(identifier: identifier)! + self.publicPath = PublicPath(identifier: identifier)! + self.receiverPath = PublicPath(identifier: "exampleTokenReceiver")! + } + + /// Get the balance of the vault + access(all) view fun getBalance(): UFix64 { + return self.balance + } + + /// withdraw + /// + /// Function that takes an amount as an argument + /// and withdraws that amount from the Vault. + /// + /// It creates a new temporary Vault that is used to hold + /// the tokens that are being transferred. It returns the newly + /// created Vault to the context that called so it can be deposited + /// elsewhere. + /// + access(FungibleToken.Withdrawable) fun withdraw(amount: UFix64): @ExampleToken.Vault { + self.balance = self.balance - amount + return <-create Vault(balance: amount) + } - /// Function that creates and returns a new minter resource + /// deposit /// - /// @param allowedAmount: The maximum quantity of tokens that the minter could create - /// @return The Minter resource that would allow to mint tokens + /// Function that takes a Vault object as an argument and adds + /// its balance to the balance of the owners Vault. + /// + /// It is allowed to destroy the sent Vault because the Vault + /// was a temporary holder of the tokens. The Vault's balance has + /// been consumed and therefore can be destroyed. /// - access(all) fun createNewMinter(allowedAmount: UFix64): @Minter { - emit MinterCreated(allowedAmount: allowedAmount) - return <-create Minter(allowedAmount: allowedAmount) + access(all) fun deposit(from: @{FungibleToken.Vault}) { + let vault <- from as! @ExampleToken.Vault + self.balance = self.balance + vault.balance + vault.balance = 0.0 + destroy vault } - /// Function that creates and returns a new burner resource + /// createEmptyVault /// - /// @return The Burner resource + /// Function that creates a new Vault with a balance of zero + /// and returns it to the calling context. A user must call this function + /// and store the returned Vault in their storage in order to allow their + /// account to be able to receive deposits of this token type. /// - access(all) fun createNewBurner(): @Burner { - emit BurnerCreated() - return <-create Burner() + access(all) fun createEmptyVault(): @ExampleToken.Vault { + return <-create Vault(balance: 0.0) } } + /// Minter + /// /// Resource object that token admin accounts can hold to mint new tokens. /// access(all) resource Minter { - - /// The amount of tokens that the minter is allowed to mint - access(all) var allowedAmount: UFix64 - + /// mintTokens + /// /// Function that mints new tokens, adds them to the total supply, /// and returns them to the calling context. /// - /// @param amount: The quantity of tokens to mint - /// @return The Vault resource containing the minted tokens - /// access(all) fun mintTokens(amount: UFix64): @ExampleToken.Vault { - pre { - amount > 0.0: "Amount minted must be greater than zero" - amount <= self.allowedAmount: "Amount minted must be less than the allowed amount" - } ExampleToken.totalSupply = ExampleToken.totalSupply + amount - self.allowedAmount = self.allowedAmount - amount - emit TokensMinted(amount: amount) + emit TokensMinted(amount: amount, type: self.getType().identifier) return <-create Vault(balance: amount) } - - init(allowedAmount: UFix64) { - self.allowedAmount = allowedAmount - } } - /// Resource object that token admin accounts can hold to burn tokens. + /// createEmptyVault + /// + /// Function that creates a new Vault with a balance of zero + /// and returns it to the calling context. A user must call this function + /// and store the returned Vault in their storage in order to allow their + /// account to be able to receive deposits of this token type. /// - access(all) resource Burner { + access(all) fun createEmptyVault(): @ExampleToken.Vault { + return <- create Vault(balance: 0.0) + } - /// Function that destroys a Vault instance, effectively burning the tokens. - /// - /// Note: the burned tokens are automatically subtracted from the - /// total supply in the Vault destructor. - /// - /// @param from: The Vault resource containing the tokens to burn - /// - access(all) fun burnTokens(from: @FungibleToken.Vault) { - let vault <- from as! @ExampleToken.Vault - let amount = vault.balance - destroy vault - emit TokensBurned(amount: amount) + /// Function that destroys a Vault instance, effectively burning the tokens. + /// + /// @param from: The Vault resource containing the tokens to burn + /// + /// Will need to add an update to total supply + /// See https://github.com/onflow/flips/pull/131 + access(all) fun burnTokens(from: @ExampleToken.Vault) { + if from.balance > 0.0 { + ExampleToken.totalSupply = ExampleToken.totalSupply - from.getBalance() } + FungibleToken.burn(<-from) } init() { self.totalSupply = 1000.0 - self.VaultStoragePath = /storage/exampleTokenVault - self.VaultPublicPath = /public/exampleTokenMetadata - self.ReceiverPublicPath = /public/exampleTokenReceiver - self.AdminStoragePath = /storage/exampleTokenAdmin - // Create the Vault with the total supply of tokens and save it in storage. + self.AdminStoragePath = /storage/exampleTokenAdmin + + // Create the Vault with the total supply of tokens and save it in storage + // let vault <- create Vault(balance: self.totalSupply) - self.account.save(<-vault, to: self.VaultStoragePath) + self.VaultStoragePath = vault.getDefaultStoragePath()! + self.VaultPublicPath = vault.getDefaultPublicPath()! + self.ReceiverPublicPath = vault.getDefaultReceiverPath()! + + self.account.storage.save(<-vault, to: self.VaultStoragePath) // Create a public capability to the stored Vault that exposes - // the `deposit` method through the `Receiver` interface. - self.account.link<&{FungibleToken.Receiver}>( - self.ReceiverPublicPath, - target: self.VaultStoragePath - ) - - // Create a public capability to the stored Vault that only exposes - // the `balance` field and the `resolveView` method through the `Balance` interface - self.account.link<&ExampleToken.Vault{FungibleToken.Balance}>( - self.VaultPublicPath, - target: self.VaultStoragePath - ) - - let admin <- create Administrator() - self.account.save(<-admin, to: self.AdminStoragePath) - - // Emit an event that shows that the contract was initialized - emit TokensInitialized(initialSupply: self.totalSupply) + // the `deposit` method and getAcceptedTypes method through the `Receiver` interface + // and the `getBalance()` method through the `Balance` interface + // + let exampleTokenCap = self.account.capabilities.storage.issue<&Vault>(self.VaultStoragePath) + self.account.capabilities.publish(exampleTokenCap, at: self.VaultPublicPath) + let receiverCap = self.account.capabilities.storage.issue<&{FungibleToken.Receiver}>(self.VaultStoragePath) + self.account.capabilities.publish(receiverCap, at: self.ReceiverPublicPath) + + let admin <- create Minter() + self.account.storage.save(<-admin, to: self.AdminStoragePath) } } diff --git a/contracts/FungibleToken-v2.cdc b/contracts/FungibleToken-v2.cdc deleted file mode 100644 index 3703979d..00000000 --- a/contracts/FungibleToken-v2.cdc +++ /dev/null @@ -1,201 +0,0 @@ -/** - -# The Flow Fungible Token standard - -## `FungibleToken` contract - -The Fungible Token standard is no longer an interface -that all fungible token contracts would have to conform to. - -If a users wants to deploy a new token contract, their contract -does not need to implement the FungibleToken interface, but their tokens -do need to implement the interfaces defined in this contract. - -## `Vault` resource interface - -Each fungible token resource type needs to implement the `Vault` resource interface. - -## `Provider`, `Receiver`, and `Balance` resource interfaces - -These interfaces declare pre-conditions and post-conditions that restrict -the execution of the functions in the Vault. - -They are separate because it gives the user the ability to share -a reference to their Vault that only exposes the fields functions -in one or more of the interfaces. - -It also gives users the ability to make custom resources that implement -these interfaces to do various things with the tokens. -For example, a faucet can be implemented by conforming -to the Provider interface. - -*/ - -import ViewResolver from "ViewResolver" - -/// FungibleToken -/// -/// Fungible Token implementations are no longer required to implement the fungible token -/// interface. We still have it as an interface here because there are some useful -/// utility methods that many projects will still want to have on their contracts, -/// but they are by no means required. all that is required is that the token -/// implements the `Vault` interface -access(all) contract FungibleToken { - - // An entitlement for allowing the withdrawal of tokens from a Vault - access(all) entitlement Withdrawable - - /// The event that is emitted when tokens are withdrawn from a Vault - access(all) event Withdraw(amount: UFix64, from: Address?, type: String) - - /// The event that is emitted when tokens are deposited to a Vault - access(all) event Deposit(amount: UFix64, to: Address?, type: String) - - /// Provider - /// - /// The interface that enforces the requirements for withdrawing - /// tokens from the implementing type. - /// - /// It does not enforce requirements on `balance` here, - /// because it leaves open the possibility of creating custom providers - /// that do not necessarily need their own balance. - /// - access(all) resource interface Provider { - - /// withdraw subtracts tokens from the owner's Vault - /// and returns a Vault with the removed tokens. - /// - /// The function's access level is public, but this is not a problem - /// because only the owner storing the resource in their account - /// can initially call this function. - /// - /// The owner may grant other accounts access by creating a private - /// capability that allows specific other users to access - /// the provider resource through a reference. - /// - /// The owner may also grant all accounts access by creating a public - /// capability that allows all users to access the provider - /// resource through a reference. - /// - access(Withdrawable) fun withdraw(amount: UFix64): @{Vault} { - post { - // `result` refers to the return value - result.getBalance() == amount: - "Withdrawal amount must be the same as the balance of the withdrawn Vault" - emit Withdraw(amount: amount, from: self.owner?.address, type: self.getType().identifier) - } - } - } - - /// Receiver - /// - /// The interface that enforces the requirements for depositing - /// tokens into the implementing type. - /// - /// We do not include a condition that checks the balance because - /// we want to give users the ability to make custom receivers that - /// can do custom things with the tokens, like split them up and - /// send them to different places. - /// - access(all) resource interface Receiver { - - /// deposit takes a Vault and deposits it into the implementing resource type - /// - access(all) fun deposit(from: @{Vault}) - - /// getSupportedVaultTypes optionally returns a list of vault types that this receiver accepts - access(all) view fun getSupportedVaultTypes(): {Type: Bool} { - pre { true: "dummy" } - } - - /// Returns whether or not the given type is accepted by the Receiver - /// A vault that can accept any type should just return true by default - access(all) view fun isSupportedVaultType(type: Type): Bool { - pre { true: "dummy" } - } - } - - /// Vault - /// - /// Ideally, this interface would also conform to Receiver, Balance, Transferor, Provider, and Resolver - /// but that is not supported yet - /// - access(all) resource interface Vault: Receiver, Provider, ViewResolver.Resolver { - - //access(all) event ResourceDestroyed(balance: UFix64 = self.getBalance(), type: Type = self.getType().identifier) - - /// Get the balance of the vault - access(all) view fun getBalance(): UFix64 - - /// getSupportedVaultTypes optionally returns a list of vault types that this receiver accepts - access(all) view fun getSupportedVaultTypes(): {Type: Bool} { - // Below check is implemented to make sure that run-time type would - // only get returned when the parent resource conforms with `FungibleToken.Vault`. - if self.getType().isSubtype(of: Type<@{FungibleToken.Vault}>()) { - return {self.getType(): true} - } else { - // Return an empty dictionary as the default value for resource who don't - // implement `FungibleToken.Vault`, such as `FungibleTokenSwitchboard`, `TokenForwarder` etc. - return {} - } - } - - access(all) view fun isSupportedVaultType(type: Type): Bool { - return self.getSupportedVaultTypes()[type] ?? false - } - - /// Returns the storage path where the vault should typically be stored - access(all) view fun getDefaultStoragePath(): StoragePath? - - /// Returns the public path where this vault should have a public capability - access(all) view fun getDefaultPublicPath(): PublicPath? - - /// Returns the public path where this vault's Receiver should have a public capability - /// Publishing a Receiver Capability at a different path enables alternate Receiver implementations to be used - /// in the same canonical namespace as the underlying Vault. - access(all) view fun getDefaultReceiverPath(): PublicPath? { - return nil - } - - /// withdraw subtracts `amount` from the Vault's balance - /// and returns a new Vault with the subtracted balance - /// - access(Withdrawable) fun withdraw(amount: UFix64): @{Vault} { - pre { - self.getBalance() >= amount: - "Amount withdrawn must be less than or equal than the balance of the Vault" - } - post { - // use the special function `before` to get the value of the `balance` field - // at the beginning of the function execution - // - self.getBalance() == before(self.getBalance()) - amount: - "New Vault balance must be the difference of the previous balance and the withdrawn Vault balance" - } - } - - /// deposit takes a Vault and adds its balance to the balance of this Vault - /// - access(all) fun deposit(from: @{FungibleToken.Vault}) { - // Assert that the concrete type of the deposited vault is the same - // as the vault that is accepting the deposit - pre { - from.isInstance(self.getType()): - "Cannot deposit an incompatible token type" - emit Deposit(amount: from.getBalance(), to: self.owner?.address, type: from.getType().identifier) - } - post { - self.getBalance() == before(self.getBalance()) + before(from.getBalance()): - "New Vault balance must be the sum of the previous balance and the deposited Vault" - } - } - - /// createEmptyVault allows any user to create a new Vault that has a zero balance - /// - access(all) fun createEmptyVault(): @{Vault} { - post { - result.getBalance() == 0.0: "The newly created Vault must have zero balance" - } - } - } -} \ No newline at end of file diff --git a/contracts/FungibleToken.cdc b/contracts/FungibleToken.cdc index dd85bc4d..8a150af3 100644 --- a/contracts/FungibleToken.cdc +++ b/contracts/FungibleToken.cdc @@ -2,21 +2,18 @@ # The Flow Fungible Token standard -## `FungibleToken` contract interface +## `FungibleToken` contract -The interface that all Fungible Token contracts would have to conform to. -If a users wants to deploy a new token contract, their contract -would need to implement the FungibleToken interface. - -Their contract would have to follow all the rules and naming -that the interface specifies. +The Fungible Token standard is no longer an interface +that all fungible token contracts would have to conform to. -## `Vault` resource +If a users wants to deploy a new token contract, their contract +does not need to implement the FungibleToken interface, but their tokens +do need to implement the interfaces defined in this contract. -Each account that owns tokens would need to have an instance -of the Vault resource stored in their account storage. +## `Vault` resource interface -The Vault resource has methods that the owner and other users can call. +Each fungible token resource type needs to implement the `Vault` resource interface. ## `Provider`, `Receiver`, and `Balance` resource interfaces @@ -32,35 +29,43 @@ these interfaces to do various things with the tokens. For example, a faucet can be implemented by conforming to the Provider interface. -By using resources and interfaces, users of Fungible Token contracts -can send and receive tokens peer-to-peer, without having to interact -with a central ledger smart contract. To send tokens to another user, -a user would simply withdraw the tokens from their Vault, then call -the deposit function on another user's Vault to complete the transfer. - */ -/// The interface that Fungible Token contracts implement. +import ViewResolver from "ViewResolver" + +/// FungibleToken /// -access(all) contract interface FungibleToken { +/// Fungible Token implementations are no longer required to implement the fungible token +/// interface. We still have it as an interface here because there are some useful +/// utility methods that many projects will still want to have on their contracts, +/// but they are by no means required. all that is required is that the token +/// implements the `Vault` interface +access(all) contract FungibleToken { // An entitlement for allowing the withdrawal of tokens from a Vault access(all) entitlement Withdrawable - /// The total number of tokens in existence. - /// It is up to the implementer to ensure that the total supply - /// stays accurate and up to date - access(all) var totalSupply: UFix64 + /// The event that is emitted when tokens are withdrawn from a Vault + access(all) event Withdraw(amount: UFix64, type: String, from: Address?, fromUUID: UInt64, withdrawnUUID: UInt64) - /// The event that is emitted when the contract is created - access(all) event TokensInitialized(initialSupply: UFix64) + /// The event that is emitted when tokens are deposited to a Vault + access(all) event Deposit(amount: UFix64, type: String, to: Address?, toUUID: UInt64, depositedUUID: UInt64) - /// The event that is emitted when tokens are withdrawn from a Vault - access(all) event TokensWithdrawn(amount: UFix64, from: Address?) + /// Event that is emitted when the global burn method is called with a non-zero balance + access(all) event Burn(amount: UFix64, type: String, fromUUID: UInt64) - /// The event that is emitted when tokens are deposited into a Vault - access(all) event TokensDeposited(amount: UFix64, to: Address?) + /// Balance + /// + /// The interface that provides standard functions\ + /// for getting balance information + /// + access(all) resource interface Balance { + /// Get the balance of the vault + access(all) view fun getBalance(): UFix64 + } + /// Provider + /// /// The interface that enforces the requirements for withdrawing /// tokens from the implementing type. /// @@ -70,33 +75,25 @@ access(all) contract interface FungibleToken { /// access(all) resource interface Provider { - /// Subtracts tokens from the owner's Vault + /// withdraw subtracts tokens from the implementing resource /// and returns a Vault with the removed tokens. /// - /// The function's access level is public, but this is not a problem - /// because only the owner storing the resource in their account - /// can initially call this function. + /// The function's access level is `access(Withdrawable)` + /// So in order to access it, one would either need the object itself + /// or an entitled reference with `Withdrawable`. /// - /// The owner may grant other accounts access by creating a private - /// capability that allows specific other users to access - /// the provider resource through a reference. - /// - /// The owner may also grant all accounts access by creating a public - /// capability that allows all users to access the provider - /// resource through a reference. - /// - /// @param amount: The amount of tokens to be withdrawn from the vault - /// @return The Vault resource containing the withdrawn funds - /// - access(Withdrawable) fun withdraw(amount: UFix64): @Vault { + access(Withdrawable) fun withdraw(amount: UFix64): @{Vault} { post { // `result` refers to the return value - result.balance == amount: + result.getBalance() == amount: "Withdrawal amount must be the same as the balance of the withdrawn Vault" + emit Withdraw(amount: amount, type: self.getType().identifier, from: self.owner?.address, fromUUID: self.uuid, withdrawnUUID: result.uuid) } } } + /// Receiver + /// /// The interface that enforces the requirements for depositing /// tokens into the implementing type. /// @@ -107,28 +104,36 @@ access(all) contract interface FungibleToken { /// access(all) resource interface Receiver { - /// Takes a Vault and deposits it into the implementing resource type + /// deposit takes a Vault and deposits it into the implementing resource type /// - /// @param from: The Vault resource containing the funds that will be deposited - /// - access(all) fun deposit(from: @Vault) - - /// Below is referenced from the FLIP #69 https://github.com/onflow/flips/blob/main/flips/20230206-fungible-token-vault-type-discovery.md - /// - /// Returns the dictionary of Vault types that the the receiver is able to accept in its `deposit` method - /// this then it would return `{Type<@FlowToken.Vault>(): true}` and if any custom receiver - /// uses the default implementation then it would return empty dictionary as its parent - /// resource doesn't conform with the `FungibleToken.Vault` resource. - /// - /// Custom receiver implementations are expected to upgrade their contracts to add an implementation - /// that supports this method because it is very valuable for various applications to have. - /// - /// @return dictionary of supported deposit vault types by the implementing resource. - /// + access(all) fun deposit(from: @{Vault}) + + /// getSupportedVaultTypes optionally returns a list of vault types that this receiver accepts + access(all) view fun getSupportedVaultTypes(): {Type: Bool} + + /// Returns whether or not the given type is accepted by the Receiver + /// A vault that can accept any type should just return true by default + access(all) view fun isSupportedVaultType(type: Type): Bool + } + + /// Vault + /// + /// Ideally, this interface would also conform to Receiver, Balance, Transferor, Provider, and Resolver + /// but that is not supported yet + /// + access(all) resource interface Vault: Receiver, Provider, Balance, ViewResolver.Resolver { + + /// Field that tracks the balance of a vault + access(all) var balance: UFix64 + + /// Get the balance of the vault + access(all) view fun getBalance(): UFix64 + + /// getSupportedVaultTypes optionally returns a list of vault types that this receiver accepts access(all) view fun getSupportedVaultTypes(): {Type: Bool} { // Below check is implemented to make sure that run-time type would // only get returned when the parent resource conforms with `FungibleToken.Vault`. - if self.getType().isSubtype(of: Type<@FungibleToken.Vault>()) { + if self.getType().isSubtype(of: Type<@{FungibleToken.Vault}>()) { return {self.getType(): true} } else { // Return an empty dictionary as the default value for resource who don't @@ -136,105 +141,72 @@ access(all) contract interface FungibleToken { return {} } } - } - /// The interface that contains the `balance` field of the Vault - /// and enforces that when new Vaults are created, the balance - /// is initialized correctly. - /// - access(all) resource interface Balance { - - /// The total balance of a vault - /// - access(all) var balance: UFix64 - - init(balance: UFix64) { - post { - self.balance == balance: - "Balance must be initialized to the initial balance" - } + /// Checks if the given type is supported by this Vault + access(all) view fun isSupportedVaultType(type: Type): Bool { + return self.getSupportedVaultTypes()[type] ?? false } - /// Function that returns all the Metadata Views implemented by a Fungible Token - /// - /// @return An array of Types defining the implemented views. This value will be used by - /// developers to know which parameter to pass to the resolveView() method. - /// - access(all) view fun getViews(): [Type] { - return [] - } + /// Returns the storage path where the vault should typically be stored + access(all) view fun getDefaultStoragePath(): StoragePath? - /// Function that resolves a metadata view for this fungible token by type. - /// - /// @param view: The Type of the desired view. - /// @return A structure representing the requested view. - /// - access(all) fun resolveView(_ view: Type): AnyStruct? { + /// Returns the public path where this vault should have a public capability + access(all) view fun getDefaultPublicPath(): PublicPath? + + /// Returns the public path where this vault's Receiver should have a public capability + /// Publishing a Receiver Capability at a different path enables alternate Receiver implementations to be used + /// in the same canonical namespace as the underlying Vault. + access(all) view fun getDefaultReceiverPath(): PublicPath? { return nil } - } - /// The resource that contains the functions to send and receive tokens. - /// The declaration of a concrete type in a contract interface means that - /// every Fungible Token contract that implements the FungibleToken interface - /// must define a concrete `Vault` resource that conforms to the `Provider`, `Receiver`, - /// and `Balance` interfaces, and declares their required fields and functions - /// - access(all) resource Vault: Provider, Receiver, Balance { - - /// The total balance of the vault - access(all) var balance: UFix64 - - // The conforming type must declare an initializer - // that allows providing the initial balance of the Vault - // - init(balance: UFix64) - - /// Subtracts `amount` from the Vault's balance + /// withdraw subtracts `amount` from the Vault's balance /// and returns a new Vault with the subtracted balance /// - /// @param amount: The amount of tokens to be withdrawn from the vault - /// @return The Vault resource containing the withdrawn funds - /// - access(Withdrawable) fun withdraw(amount: UFix64): @Vault { + access(Withdrawable) fun withdraw(amount: UFix64): @{Vault} { pre { - self.balance >= amount: + self.getBalance() >= amount: "Amount withdrawn must be less than or equal than the balance of the Vault" } post { // use the special function `before` to get the value of the `balance` field // at the beginning of the function execution // - self.balance == before(self.balance) - amount: - "New Vault balance must be the difference of the previous balance and the withdrawn Vault" + self.getBalance() == before(self.getBalance()) - amount: + "New Vault balance must be the difference of the previous balance and the withdrawn Vault balance" } } - /// Takes a Vault and deposits it into the implementing resource type - /// - /// @param from: The Vault resource containing the funds that will be deposited + /// deposit takes a Vault and adds its balance to the balance of this Vault /// - access(all) fun deposit(from: @Vault) { + access(all) fun deposit(from: @{FungibleToken.Vault}) { // Assert that the concrete type of the deposited vault is the same // as the vault that is accepting the deposit pre { from.isInstance(self.getType()): "Cannot deposit an incompatible token type" + emit Deposit(amount: from.getBalance(), type: from.getType().identifier, to: self.owner?.address, toUUID: self.uuid, depositedUUID: from.uuid) } post { - self.balance == before(self.balance) + before(from.balance): + self.getBalance() == before(self.getBalance()) + before(from.getBalance()): "New Vault balance must be the sum of the previous balance and the deposited Vault" } } + + /// createEmptyVault allows any user to create a new Vault that has a zero balance + /// + access(all) fun createEmptyVault(): @{Vault} { + post { + result.getBalance() == 0.0: "The newly created Vault must have zero balance" + } + } } - /// Allows any user to create a new Vault that has a zero balance - /// - /// @return The new Vault resource - /// - access(all) fun createEmptyVault(): @Vault { - post { - result.balance == 0.0: "The newly created Vault must have zero balance" + /// Global method to burn any FungibleToken Vault + access(all) fun burn(_ vault: @{FungibleToken.Vault}) { + if vault.balance > 0.0 { + emit Burn(amount: vault.balance, type: vault.getType().identifier, fromUUID: vault.uuid) } + destroy vault } -} +} \ No newline at end of file diff --git a/contracts/utility/NonFungibleToken.cdc b/contracts/utility/NonFungibleToken.cdc index f2b8fb7c..67049c63 100644 --- a/contracts/utility/NonFungibleToken.cdc +++ b/contracts/utility/NonFungibleToken.cdc @@ -90,7 +90,7 @@ access(all) contract NonFungibleToken { /// The unique ID that each NFT has access(all) view fun getID(): UInt64 - // access(all) event ResourceDestroyed(uuid: UInt64 = self.uuid, type: Type = self.getType().identifier) + // access(all) event ResourceDestroyed(uuid: UInt64 = self.uuid, type: self.getType().identifier) /// Get a reference to an NFT that this NFT owns /// Both arguments are optional to allow the NFT to choose diff --git a/contracts/utility/ViewResolver.cdc b/contracts/utility/ViewResolver.cdc index d84467a0..e1a02661 100644 --- a/contracts/utility/ViewResolver.cdc +++ b/contracts/utility/ViewResolver.cdc @@ -39,10 +39,8 @@ access(all) contract interface ViewResolver { /// access(all) resource interface ResolverCollection { access(all) view fun borrowViewResolver(id: UInt64): &{Resolver}? { - pre { true: "dummy" } - } - access(all) view fun getIDs(): [UInt64] { - pre { true: "dummy" } + return nil } + access(all) view fun getIDs(): [UInt64] } } diff --git a/coverage.json b/coverage.json index abf31285..fc4f27d4 100644 --- a/coverage.json +++ b/coverage.json @@ -1,19 +1,272 @@ { "coverage": { -<<<<<<< HEAD - "A.0000000000000001.MetadataViews": { -======= "A.0000000000000007.ExampleToken": { ->>>>>>> master + "line_hits": { + "101": 4, + "102": 4, + "113": 3, + "115": 3, + "124": 2, + "128": 0, + "132": 1, + "137": 0, + "138": 0, + "139": 0, + "143": 0, + "148": 20, + "149": 20, + "150": 20, + "151": 20, + "152": 20, + "157": 72, + "171": 7, + "172": 7, + "185": 6, + "186": 6, + "187": 6, + "188": 6, + "199": 2, + "214": 1, + "215": 1, + "216": 1, + "228": 6, + "238": 1, + "239": 1, + "24": 0, + "241": 1, + "245": 4, + "247": 4, + "25": 0, + "251": 4, + "252": 4, + "253": 4, + "254": 4, + "256": 4, + "262": 4, + "263": 4, + "264": 4, + "265": 4, + "267": 4, + "268": 4, + "29": 0, + "32": 0, + "36": 0, + "39": 0, + "65": 4, + "70": 4, + "75": 4, + "79": 1, + "88": 10, + "90": 2, + "95": 4 + }, + "missed_lines": [ + 24, + 25, + 29, + 32, + 36, + 39, + 128, + 137, + 138, + 139, + 143 + ], + "statements": 57, + "percentage": "80.7%" + }, + "A.0000000000000007.FungibleToken": { + "line_hits": { + "136": 0, + "137": 0, + "141": 0, + "147": 0, + "160": 0, + "168": 8, + "175": 15, + "186": 6, + "188": 6, + "191": 18, + "200": 2, + "207": 1, + "208": 1, + "210": 1, + "88": 7, + "90": 7 + }, + "missed_lines": [ + 136, + 137, + 141, + 147, + 160 + ], + "statements": 16, + "percentage": "68.8%" + }, + "A.0000000000000007.FungibleTokenMetadataViews": { + "line_hits": { + "102": 2, + "103": 2, + "104": 2, + "107": 0, + "155": 3, + "156": 3, + "157": 3, + "159": 3, + "160": 3, + "161": 3, + "162": 3, + "163": 3, + "164": 3, + "165": 3, + "166": 3, + "176": 1, + "177": 1, + "178": 1, + "181": 0, + "189": 0, + "27": 2, + "28": 2, + "38": 2, + "39": 2, + "40": 2, + "42": 0, + "87": 5, + "88": 5, + "89": 5, + "90": 5, + "91": 5, + "92": 5 + }, + "missed_lines": [ + 42, + 107, + 181, + 189 + ], + "statements": 32, + "percentage": "87.5%" + }, + "A.0000000000000007.FungibleTokenSwitchboard": { + "line_hits": { + "102": 0, + "104": 0, + "107": 0, + "110": 0, + "138": 0, + "140": 0, + "143": 0, + "164": 1, + "167": 1, + "168": 1, + "172": 1, + "174": 1, + "176": 1, + "195": 1, + "198": 1, + "201": 1, + "215": 4, + "219": 3, + "222": 3, + "239": 0, + "242": 0, + "244": 0, + "248": 0, + "249": 0, + "254": 0, + "256": 0, + "257": 0, + "266": 1, + "267": 0, + "270": 1, + "282": 1, + "283": 0, + "286": 1, + "297": 0, + "298": 0, + "299": 0, + "300": 0, + "303": 0, + "314": 0, + "316": 0, + "317": 0, + "319": 0, + "322": 0, + "330": 4, + "331": 4, + "332": 2, + "333": 2, + "336": 4, + "342": 0, + "343": 0, + "344": 0, + "345": 0, + "350": 1, + "359": 1, + "363": 1, + "364": 1, + "365": 1, + "68": 1, + "71": 1, + "74": 1, + "77": 1, + "82": 0, + "94": 0, + "97": 0, + "98": 0 + }, + "missed_lines": [ + 82, + 94, + 97, + 98, + 102, + 104, + 107, + 110, + 138, + 140, + 143, + 239, + 242, + 244, + 248, + 249, + 254, + 256, + 257, + 267, + 283, + 297, + 298, + 299, + 300, + 303, + 314, + 316, + 317, + 319, + 322, + 342, + 343, + 344, + 345 + ], + "statements": 65, + "percentage": "46.2%" + }, + "A.0000000000000007.MetadataViews": { "line_hits": { "111": 0, "112": 0, "121": 0, "122": 0, "125": 0, - "143": 4, - "144": 4, - "156": 4, + "143": 5, + "144": 5, + "156": 5, "166": 0, "167": 0, "168": 0, @@ -23,7 +276,7 @@ "192": 0, "193": 0, "196": 0, - "208": 8, + "208": 10, "218": 0, "219": 0, "220": 0, @@ -127,8 +380,8 @@ "716": 0, "717": 0, "720": 0, - "81": 4, - "85": 0 + "81": 5, + "85": 3 }, "missed_lines": [ 48, @@ -138,7 +391,6 @@ 61, 62, 65, - 85, 111, 112, 121, @@ -251,2447 +503,96 @@ 720 ], "statements": 123, - "percentage": "4.1%" + "percentage": "4.9%" }, - "A.0000000000000002.FungibleTokenMetadataViews": { + "A.0000000000000007.PrivateReceiverForwarder": { + "line_hits": { + "35": 1, + "37": 1, + "39": 1, + "41": 1, + "46": 2, + "48": 2, + "55": 2, + "62": 1, + "64": 1, + "68": 1, + "75": 1, + "77": 1, + "78": 1, + "80": 1 + }, + "missed_lines": [], + "statements": 14, + "percentage": "100.0%" + }, + "A.0000000000000007.TokenForwarding": { "line_hits": { - "102": 0, "103": 0, "104": 0, - "107": 0, - "155": 4, - "156": 4, - "157": 4, - "159": 4, - "160": 4, - "161": 4, - "162": 4, - "163": 4, - "164": 4, - "165": 4, - "166": 4, - "176": 0, - "177": 0, - "178": 0, - "181": 0, - "189": 0, - "27": 4, - "28": 4, - "38": 0, - "39": 0, - "40": 0, - "42": 0, - "87": 4, - "88": 4, - "89": 4, - "90": 4, - "91": 4, - "92": 4 + "105": 0, + "106": 0, + "111": 1, + "113": 1, + "120": 1, + "52": 1, + "54": 1, + "56": 1, + "58": 1, + "64": 0, + "74": 0, + "81": 0, + "83": 0, + "91": 0, + "92": 0, + "94": 0, + "95": 0, + "96": 0, + "97": 0 }, "missed_lines": [ - 38, - 39, - 40, - 42, - 102, + 64, + 74, + 81, + 83, + 91, + 92, + 94, + 95, + 96, + 97, 103, 104, - 107, - 176, - 177, - 178, - 181, - 189 + 105, + 106 ], - "statements": 32, - "percentage": "59.4%" - }, - "A.0000000000000005.ExampleToken": { - "line_hits": { - "101": 2, - "102": 2, - "113": 2, - "115": 2, - "124": 1, - "128": 0, - "132": 1, - "137": 0, - "138": 0, - "139": 0, - "143": 0, - "148": 12, - "149": 12, - "150": 12, - "151": 12, - "152": 12, - "157": 48, - "171": 6, - "172": 6, - "185": 5, - "186": 5, - "187": 5, - "188": 5, - "192": 0, - "195": 0, - "199": 0, - "210": 1, - "216": 7, - "217": 1, - "233": 1, - "234": 1, - "235": 1, - "24": 0, - "247": 2, - "25": 0, - "258": 1, - "262": 2, - "264": 2, - "268": 2, - "269": 2, - "270": 2, - "271": 2, - "273": 2, - "279": 2, - "280": 2, - "281": 2, - "282": 2, - "284": 2, - "285": 2, - "29": 0, - "32": 0, - "36": 0, - "39": 0, - "65": 2, - "70": 2, - "75": 2, - "79": 1, - "88": 6, - "90": 1, - "95": 2 - }, - "missed_lines": [ - 24, - 25, - 29, - 32, - 36, - 39, - 128, - 137, - 138, - 139, - 143, - 192, - 195, - 199 - ], - "statements": 60, - "percentage": "76.7%" - }, -<<<<<<< HEAD - "A.0000000000000005.FungibleToken": { - "line_hits": { - "108": 6, - "133": 4, - "139": 0, - "148": 0, - "167": 0, - "168": 0, - "172": 0, - "177": 0, - "182": 0, - "187": 0, - "194": 0, - "209": 7, - "216": 13, - "227": 5, - "232": 15, - "241": 0, - "251": 1, - "51": 0, - "52": 0, - "58": 0, - "59": 0, - "65": 0, - "66": 0, - "73": 0, - "74": 0, - "76": 0 - }, - "missed_lines": [ - 51, - 52, - 58, - 59, - 65, - 66, - 73, - 74, - 76, - 139, - 148, - 167, - 168, - 172, - 177, - 182, - 187, - 194, - 241 - ], - "statements": 26, - "percentage": "26.9%" - }, - "A.0000000000000005.FungibleTokenMetadataViews": { -======= - "A.0000000000000007.FungibleTokenMetadataViews": { ->>>>>>> master - "line_hits": { - "102": 1, - "103": 1, - "104": 1, - "107": 0, - "155": 2, - "156": 2, - "157": 2, - "159": 2, - "160": 2, - "161": 2, - "162": 2, - "163": 2, - "164": 2, - "165": 2, - "166": 2, - "176": 1, - "177": 1, - "178": 1, - "181": 0, - "189": 0, - "27": 1, - "28": 1, - "38": 1, - "39": 1, - "40": 1, - "42": 0, - "87": 2, - "88": 2, - "89": 2, - "90": 2, - "91": 2, - "92": 2 - }, - "missed_lines": [ - 42, - 107, - 181, - 189 - ], - "statements": 32, - "percentage": "87.5%" - }, -<<<<<<< HEAD - "A.0000000000000005.FungibleTokenSwitchboard": { -======= - "A.0000000000000007.FungibleTokenSwitchboard": { ->>>>>>> master - "line_hits": { - "102": 0, - "104": 0, - "107": 0, - "110": 0, - "138": 0, - "140": 0, - "143": 0, - "164": 1, - "167": 1, - "168": 1, - "172": 1, - "174": 1, - "176": 1, - "195": 1, - "198": 1, - "201": 1, - "215": 4, - "219": 3, - "222": 3, - "239": 0, - "242": 0, - "244": 0, - "248": 0, - "249": 0, - "254": 0, - "256": 0, - "257": 0, - "266": 1, - "267": 0, - "270": 1, - "282": 1, - "283": 0, - "286": 1, - "297": 0, - "298": 0, - "299": 0, - "300": 0, - "303": 0, - "314": 0, - "316": 0, - "317": 0, - "319": 0, - "322": 0, - "330": 4, - "331": 4, - "332": 2, - "333": 2, - "336": 4, - "342": 0, - "343": 0, - "344": 0, - "345": 0, - "350": 1, - "359": 1, - "363": 1, - "364": 1, - "365": 1, - "68": 1, - "71": 1, - "74": 1, - "77": 1, - "82": 0, - "94": 0, - "97": 0, - "98": 0 - }, - "missed_lines": [ - 82, - 94, - 97, - 98, - 102, - 104, - 107, - 110, - 138, - 140, - 143, - 239, - 242, - 244, - 248, - 249, - 254, - 256, - 257, - 267, - 283, - 297, - 298, - 299, - 300, - 303, - 314, - 316, - 317, - 319, - 322, - 342, - 343, - 344, - 345 - ], - "statements": 65, - "percentage": "46.2%" - }, -<<<<<<< HEAD - "A.0000000000000005.MetadataViews": { -======= - "A.0000000000000007.TokenForwarding": { ->>>>>>> master - "line_hits": { - "111": 0, - "112": 0, - "121": 0, - "122": 0, - "125": 0, - "143": 2, - "144": 2, - "156": 2, - "166": 0, - "167": 0, - "168": 0, - "171": 0, - "181": 0, - "191": 0, - "192": 0, - "193": 0, - "196": 0, - "208": 4, - "218": 0, - "219": 0, - "220": 0, - "223": 0, - "257": 0, - "259": 0, - "260": 0, - "261": 0, - "276": 0, - "277": 0, - "278": 0, - "280": 0, - "282": 0, - "290": 0, - "300": 0, - "301": 0, - "302": 0, - "305": 0, - "315": 0, - "340": 0, - "341": 0, - "342": 0, - "343": 0, - "354": 0, - "362": 0, - "372": 0, - "373": 0, - "374": 0, - "377": 0, - "392": 0, - "393": 0, - "394": 0, - "398": 0, - "399": 0, - "400": 0, - "401": 0, - "404": 0, - "432": 0, - "433": 0, - "435": 0, - "436": 0, - "437": 0, - "450": 0, - "460": 0, - "461": 0, - "462": 0, - "465": 0, - "478": 0, - "48": 0, - "488": 0, - "489": 0, - "49": 0, - "490": 0, - "493": 0, - "50": 0, - "513": 0, - "514": 0, - "517": 0, - "518": 0, - "519": 0, - "529": 0, - "530": 0, - "531": 0, - "534": 0, - "561": 0, - "562": 0, - "563": 0, - "564": 0, - "565": 0, - "566": 0, - "567": 0, - "568": 0, - "579": 0, - "580": 0, - "581": 0, - "584": 0, - "60": 0, - "61": 0, - "62": 0, - "640": 0, - "641": 0, - "643": 0, - "644": 0, - "645": 0, - "646": 0, - "647": 0, - "648": 0, - "649": 0, - "65": 0, - "659": 0, - "660": 0, - "661": 0, - "664": 0, - "699": 0, - "700": 0, - "701": 0, - "702": 0, - "703": 0, - "704": 0, - "715": 0, - "716": 0, - "717": 0, - "720": 0, - "81": 2, - "85": 1 - }, - "missed_lines": [ - 48, - 49, - 50, - 60, - 61, - 62, - 65, - 111, - 112, - 121, - 122, - 125, - 166, - 167, - 168, - 171, - 181, - 191, - 192, - 193, - 196, - 218, - 219, - 220, - 223, - 257, - 259, - 260, - 261, - 276, - 277, - 278, - 280, - 282, - 290, - 300, - 301, - 302, - 305, - 315, - 340, - 341, - 342, - 343, - 354, - 362, - 372, - 373, - 374, - 377, - 392, - 393, - 394, - 398, - 399, - 400, - 401, - 404, - 432, - 433, - 435, - 436, - 437, - 450, - 460, - 461, - 462, - 465, - 478, - 488, - 489, - 490, - 493, - 513, - 514, - 517, - 518, - 519, - 529, - 530, - 531, - 534, - 561, - 562, - 563, - 564, - 565, - 566, - 567, - 568, - 579, - 580, - 581, - 584, - 640, - 641, - 643, - 644, - 645, - 646, - 647, - 648, - 649, - 659, - 660, - 661, - 664, - 699, - 700, - 701, - 702, - 703, - 704, - 715, - 716, - 717, - 720 - ], - "statements": 123, - "percentage": "4.9%" - }, - "A.0000000000000005.TokenForwarding": { - "line_hits": { - "103": 0, - "104": 0, - "105": 0, - "106": 0, - "111": 1, - "113": 1, - "120": 1, - "52": 1, - "54": 1, - "56": 1, - "58": 1, - "64": 0, - "74": 0, - "81": 0, - "83": 0, - "91": 0, - "92": 0, - "94": 0, - "95": 0, - "96": 0, - "97": 0 - }, - "missed_lines": [ - 64, - 74, - 81, - 83, - 91, - 92, - 94, - 95, - 96, - 97, - 103, - 104, - 105, - 106 - ], -<<<<<<< HEAD - "statements": 21, - "percentage": "33.3%" - }, - "A.0000000000000006.ExampleToken": { - "line_hits": { - "101": 2, - "102": 2, - "113": 1, - "115": 1, - "124": 1, - "128": 0, - "132": 0, - "137": 0, - "138": 0, - "139": 0, - "143": 0, - "148": 8, - "149": 8, - "150": 8, - "151": 8, - "152": 8, - "157": 14, - "171": 1, - "172": 1, - "185": 1, - "186": 1, - "187": 1, - "188": 1, - "192": 0, - "195": 0, - "199": 0, - "210": 1, - "216": 1, - "217": 0, - "233": 0, - "234": 0, - "235": 0, - "24": 0, - "247": 4, - "25": 0, - "258": 0, - "262": 2, - "264": 2, - "268": 2, - "269": 2, - "270": 2, - "271": 2, - "273": 2, - "279": 2, - "280": 2, - "281": 2, - "282": 2, - "284": 2, - "285": 2, - "29": 0, - "32": 0, - "36": 0, - "39": 0, - "65": 2, - "70": 2, - "75": 2, - "79": 0, - "88": 4, - "90": 1, - "95": 2 - }, - "missed_lines": [ - 24, - 25, - 29, - 32, - 36, - 39, - 79, - 128, - 132, - 137, - 138, - 139, - 143, - 192, - 195, - 199, - 217, - 233, - 234, - 235, - 258 - ], - "statements": 60, - "percentage": "65.0%" - }, - "A.0000000000000006.FungibleToken": { - "line_hits": { - "108": 1, - "133": 0, - "139": 0, - "148": 0, - "167": 0, - "168": 0, - "172": 0, - "177": 0, - "182": 0, - "187": 0, - "194": 0, - "209": 1, - "216": 2, - "227": 1, - "232": 3, - "241": 0, - "251": 1, - "51": 0, - "52": 0, - "58": 0, - "59": 0, - "65": 0, - "66": 0, - "73": 0, - "74": 0, - "76": 0 - }, - "missed_lines": [ - 51, - 52, - 58, - 59, - 65, - 66, - 73, - 74, - 76, - 133, - 139, - 148, - 167, - 168, - 172, - 177, - 182, - 187, - 194, - 241 - ], - "statements": 26, - "percentage": "23.1%" - }, - "A.0000000000000006.FungibleTokenMetadataViews": { - "line_hits": { - "102": 1, - "103": 1, - "104": 1, - "107": 0, - "155": 1, - "156": 1, - "157": 1, - "159": 1, - "160": 1, - "161": 1, - "162": 1, - "163": 1, - "164": 1, - "165": 1, - "166": 1, - "176": 0, - "177": 0, - "178": 0, - "181": 0, - "189": 0, - "27": 1, - "28": 1, - "38": 1, - "39": 1, - "40": 1, - "42": 0, - "87": 3, - "88": 3, - "89": 3, - "90": 3, - "91": 3, - "92": 3 - }, - "missed_lines": [ - 42, - 107, - 176, - 177, - 178, - 181, - 189 - ], - "statements": 32, - "percentage": "78.1%" - }, - "A.0000000000000006.MetadataViews": { - "line_hits": { - "111": 0, - "112": 0, - "121": 0, - "122": 0, - "125": 0, - "143": 3, - "144": 3, - "156": 3, - "166": 0, - "167": 0, - "168": 0, - "171": 0, - "181": 0, - "191": 0, - "192": 0, - "193": 0, - "196": 0, - "208": 6, - "218": 0, - "219": 0, - "220": 0, - "223": 0, - "257": 0, - "259": 0, - "260": 0, - "261": 0, - "276": 0, - "277": 0, - "278": 0, - "280": 0, - "282": 0, - "290": 0, - "300": 0, - "301": 0, - "302": 0, - "305": 0, - "315": 0, - "340": 0, - "341": 0, - "342": 0, - "343": 0, - "354": 0, - "362": 0, - "372": 0, - "373": 0, - "374": 0, - "377": 0, - "392": 0, - "393": 0, - "394": 0, - "398": 0, - "399": 0, - "400": 0, - "401": 0, - "404": 0, - "432": 0, - "433": 0, - "435": 0, - "436": 0, - "437": 0, - "450": 0, - "460": 0, - "461": 0, - "462": 0, - "465": 0, - "478": 0, - "48": 0, - "488": 0, - "489": 0, - "49": 0, - "490": 0, - "493": 0, - "50": 0, - "513": 0, - "514": 0, - "517": 0, - "518": 0, - "519": 0, - "529": 0, - "530": 0, - "531": 0, - "534": 0, - "561": 0, - "562": 0, - "563": 0, - "564": 0, - "565": 0, - "566": 0, - "567": 0, - "568": 0, - "579": 0, - "580": 0, - "581": 0, - "584": 0, - "60": 0, - "61": 0, - "62": 0, - "640": 0, - "641": 0, - "643": 0, - "644": 0, - "645": 0, - "646": 0, - "647": 0, - "648": 0, - "649": 0, - "65": 0, - "659": 0, - "660": 0, - "661": 0, - "664": 0, - "699": 0, - "700": 0, - "701": 0, - "702": 0, - "703": 0, - "704": 0, - "715": 0, - "716": 0, - "717": 0, - "720": 0, - "81": 3, - "85": 2 - }, - "missed_lines": [ - 48, - 49, - 50, - 60, - 61, - 62, - 65, - 111, - 112, - 121, - 122, - 125, - 166, - 167, - 168, - 171, - 181, - 191, - 192, - 193, - 196, - 218, - 219, - 220, - 223, - 257, - 259, - 260, - 261, - 276, - 277, - 278, - 280, - 282, - 290, - 300, - 301, - 302, - 305, - 315, - 340, - 341, - 342, - 343, - 354, - 362, - 372, - 373, - 374, - 377, - 392, - 393, - 394, - 398, - 399, - 400, - 401, - 404, - 432, - 433, - 435, - 436, - 437, - 450, - 460, - 461, - 462, - 465, - 478, - 488, - 489, - 490, - 493, - 513, - 514, - 517, - 518, - 519, - 529, - 530, - 531, - 534, - 561, - 562, - 563, - 564, - 565, - 566, - 567, - 568, - 579, - 580, - 581, - 584, - 640, - 641, - 643, - 644, - 645, - 646, - 647, - 648, - 649, - 659, - 660, - 661, - 664, - 699, - 700, - 701, - 702, - 703, - 704, - 715, - 716, - 717, - 720 - ], - "statements": 123, - "percentage": "4.9%" - }, - "A.0000000000000006.PrivateReceiverForwarder": { - "line_hits": { - "35": 1, - "37": 1, - "39": 1, - "41": 1, - "46": 2, - "48": 2, - "55": 2, - "62": 1, - "64": 1, - "68": 1, - "75": 1, - "77": 1, - "78": 1, - "80": 1 - }, - "missed_lines": [], - "statements": 14, - "percentage": "100.0%" - }, - "S.test_helpers.cdc": { - "line_hits": { - "101": 12, - "111": 0, - "112": 0, - "113": 0, - "114": 0, - "115": 0, - "120": 4, - "121": 4, - "127": 0, - "128": 0, - "13": 26, - "130": 0, - "135": 0, - "136": 0, - "137": 0, - "140": 0, - "145": 0, - "146": 0, - "147": 0, - "148": 0, - "153": 0, - "154": 0, - "155": 0, - "157": 0, - "20": 26, - "21": 26, - "22": 0, - "27": 1, - "34": 1, - "35": 1, - "36": 0, - "41": 6, - "42": 6, - "44": 6, - "45": 0, - "50": 6, - "54": 0, - "55": 0, - "57": 0, - "58": 0, - "62": 6, - "64": 6, - "65": 6, - "66": 6, - "69": 6, - "76": 6, - "77": 6, - "78": 0, - "79": 0, - "80": 0, - "81": 0, - "82": 0, - "87": 0, - "88": 0, - "90": 0, - "92": 6, - "93": 0, - "97": 6 - }, - "missed_lines": [ - 22, - 36, - 45, - 54, - 55, - 57, - 58, - 78, - 79, - 80, - 81, - 82, - 87, - 88, - 90, - 93, - 111, - 112, - 113, - 114, - 115, - 127, - 128, - 130, - 135, - 136, - 137, - 140, - 145, - 146, - 147, - 148, - 153, - 154, - 155, - 157 - ], - "statements": 58, - "percentage": "37.9%" - }, - "s.0178708f612fcd38aad604c7a34765ed02e8c02d21402fa97d8eb1f807449e97": { - "line_hits": { - "11": 1, - "29": 1, - "32": 1, - "35": 1, - "37": 1, - "38": 1, - "39": 1, - "9": 1 - }, - "missed_lines": [], - "statements": 8, - "percentage": "100.0%" - }, - "s.1c2ae16c88a02a785df5e1cd1d13ac7480ea9d1d535c0b7a51e385f401312290": { - "line_hits": { - "7": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "s.5e5199bcd53f1ca1f47a00f09c8813741c57aeb0fe0116df0030d4de8584961d": { - "line_hits": { - "11": 1, - "13": 1, - "16": 1, - "19": 1, - "20": 1, - "21": 1, - "22": 1, - "23": 1, - "24": 1, - "26": 1 - }, - "missed_lines": [], - "statements": 10, - "percentage": "100.0%" - }, - "s.968860617d44655c8151028ecde7930f88886bec1ffc0f84e3e31e7f6987298c": { - "line_hits": { - "12": 1, - "14": 1, - "17": 1, - "20": 1, - "21": 1, - "22": 1, - "23": 1, - "24": 1, - "25": 1, - "26": 1, - "27": 1, - "28": 1, - "29": 1, - "31": 1, - "33": 1 - }, - "missed_lines": [], - "statements": 15, - "percentage": "100.0%" - }, - "s.a0c911887b25ae1e94167a43a0eafb691a21e42e0352e46086d0680d7ea371ea": { - "line_hits": { - "10": 4, - "13": 4 - }, - "missed_lines": [], - "statements": 2, - "percentage": "100.0%" - }, - "s.b460d9db17658d985790a9fef2a69d7bf43f4201c0017a19abacb58cbd84c481": { - "line_hits": { - "8": 5 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "s.bbf425446dfcc52dc8bf55b6ba6846f7c9d75a5a0fb7ad21b38eb86a926a5b0c": { - "line_hits": { - "10": 1, - "11": 1, - "14": 1, - "16": 1 - }, - "missed_lines": [], - "statements": 4, - "percentage": "100.0%" - }, - "s.cfde43c8a8e8aa0091187d6dc0c6fcfdc9d9b34391b646ae48d442ea96972580": { - "line_hits": { - "11": 1, - "13": 1, - "16": 1, - "18": 1 - }, - "missed_lines": [], - "statements": 4, - "percentage": "100.0%" - }, - "s.d73baed538ea82e8e511054f83365951b4544201019e03acc58f5f00aebfdf66": { - "line_hits": { - "12": 1, - "14": 1, - "17": 1, - "18": 1, - "25": 1, - "27": 1 - }, - "missed_lines": [], - "statements": 6, - "percentage": "100.0%" - }, - "s.fbc367fa0fbbaaa2c2f38bc45573895b2dbc50de782f23b913f6885c01ce7c09": { - "line_hits": { - "8": 4 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.002288cb94db4814eeb83dc76fa9b34f253a2f50102c25b3cff29ed9b9511786": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.01b95976b38b86e784e6bc28191374498a60805b531973c692afb95d39825a16": { - "line_hits": { - "17": 4, - "20": 4, - "24": 4, - "25": 16, - "27": 16, - "28": 16, - "29": 12, - "32": 16, - "35": 16 - }, - "missed_lines": [], - "statements": 9, - "percentage": "100.0%" - }, - "t.0810507f3f482461f71c33a4d021407239b11eac3a3f5ceb9a913bb9a9dc4cc3": { - "line_hits": { - "12": 1, - "14": 0, - "17": 1, - "19": 1, - "26": 1, - "27": 1, - "30": 1, - "34": 1, - "38": 1, - "40": 1, - "43": 1, - "47": 1 - }, - "missed_lines": [ - 14 - ], - "statements": 12, - "percentage": "91.7%" - }, - "t.089833d285884dcf5976a68ed5a96759376cf436a552fc1b3149f08417322010": { - "line_hits": { - "12": 4, - "17": 4 - }, - "missed_lines": [], - "statements": 2, - "percentage": "100.0%" - }, - "t.0b1d83a6cae2d91606ff21c070df3ea14debe3a0413412628965747d48fffb57": { - "line_hits": { - "19": 1, - "23": 1, - "29": 1, - "32": 1, - "36": 1 - }, - "missed_lines": [], - "statements": 5, - "percentage": "100.0%" - }, - "t.0c50dc22c32ef385a7f077e5df07472782506b26edb27fbeed68e989f072a3c3": { - "line_hits": { - "3": 4 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.0ccbe00a98f7a8cc6c8483f276ad775312f07c0ef69e0b6f79ccfc30a0cbfbaa": { - "line_hits": { - "13": 1, - "14": 0, - "5": 1, - "8": 1, - "9": 1 - }, - "missed_lines": [ - 14 - ], - "statements": 5, - "percentage": "80.0%" - }, - "t.0d7b4546b7995fe75ec1d855928885348e3c7b38a9986c5fd4b9af2a96bec10a": { - "line_hits": { - "3": 4 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.0f44c79fd649804fdca9750a6d29f5d206a0c73964ffd6e51c54c5c2571744f9": { - "line_hits": { - "3": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.109f8f33bc4945c2d3faff8aee29abc36037e0edfe68bbca32008a7aaaaa0d6f": { - "line_hits": { - "10": 4, - "12": 4, - "6": 4 - }, - "missed_lines": [], - "statements": 3, - "percentage": "100.0%" - }, - "t.18b05afb55daff4000a9bbcc715448a930373f9e04af0ba8a9cd02b875571b44": { - "line_hits": { - "35": 1, - "39": 1, - "40": 1, - "43": 1, - "46": 1, - "49": 1, - "52": 1, - "55": 1 - }, - "missed_lines": [], - "statements": 8, - "percentage": "100.0%" - }, - "t.1a30eff2a1c3e4eccb89ea97b1f65c5edc4e2503260c10173da23a2770092113": { - "line_hits": { - "12": 1, - "14": 0, - "17": 1, - "19": 1, - "26": 1, - "27": 1, - "30": 1, - "34": 1, - "38": 1, - "40": 1, - "43": 1, - "47": 1 - }, - "missed_lines": [ - 14 - ], - "statements": 12, - "percentage": "91.7%" - }, - "t.1c105c70572b4f988eceb8009d97c64cb131c2057b250b281bb403dcf69a07ee": { - "line_hits": { - "3": 4 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.27d1302c0c423768b4ebbd19af89ec6cda49588b6c0c93b54f9c4e46b2cb3869": { - "line_hits": { - "13": 1, - "14": 0, - "5": 1, - "8": 1, - "9": 1 - }, - "missed_lines": [ - 14 - ], - "statements": 5, - "percentage": "80.0%" - }, - "t.28d67993f18685ca2f376ffe66eebb217610fb57317cfa4e9af6d5eea953c94e": { - "line_hits": { - "4": 4, - "5": 4 - }, - "missed_lines": [], - "statements": 2, - "percentage": "100.0%" - }, - "t.2a1f5b74af939ba03e679f0209f1480c3cefb26f6a509394b2035215b43102b0": { - "line_hits": { - "4": 4 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.2bd6abc997796cb6fa5c47934c2d223ce70e05bbd5bcdeab08924e5e2c57ff13": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.2cce7a9d299f39bf7573616a60415cff27f4fc7616984a34c07ffc4481b8c9aa": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.2d7cc2da0848b2f1a685f1d43031f2c8a21b50f7cd45c28a23109bd452b1dc20": { - "line_hits": { - "13": 1, - "14": 0, - "5": 1, - "8": 1, - "9": 1 - }, - "missed_lines": [ - 14 - ], - "statements": 5, - "percentage": "80.0%" - }, - "t.2e9b747ec3b2a797fa34117673fd9676eb124a503a2c7773694d702e7cf0d2f2": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.376768733562cedfb07c678bb5a6545f73681e96c36e94214665e9b451429ef0": { - "line_hits": { - "17": 1, - "18": 1, - "22": 1, - "23": 1, - "26": 1, - "35": 1 - }, - "missed_lines": [], - "statements": 6, - "percentage": "100.0%" - }, - "t.380b9f276aa043d167c6bec5f78a57a3f458ca9eca6b69b58682af7dc3d6ecde": { - "line_hits": { - "13": 1, - "14": 0, - "5": 1, - "8": 1, - "9": 1 - }, - "missed_lines": [ - 14 - ], - "statements": 5, - "percentage": "80.0%" - }, - "t.3925e4ced5cdd4e48bcc8ff2a28fc082e47f76200806d2d36cc6bd4ac61ca11c": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.403af29116a053dde8748bfd86519bd838f875ff0e2c7b4458d0046697911b05": { - "line_hits": { - "12": 1, - "13": 0, - "17": 1, - "23": 1, - "24": 1, - "28": 1, - "31": 1, - "36": 1, - "39": 1 - }, - "missed_lines": [ - 13 - ], - "statements": 9, - "percentage": "88.9%" - }, - "t.42e55c78c2fb91dc7ee0f7621614a13bde82abe9b93466864fe19a42169b50ea": { - "line_hits": { - "3": 2, - "4": 2 - }, - "missed_lines": [], - "statements": 2, - "percentage": "100.0%" - }, - "t.4a812e7899cdaea4ab83cf230867f23b7497c421612ea676c5fd3b5858cf8557": { - "line_hits": { - "3": 4 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.4a9e4c6c786320fc2e262590e43f52ef3a8aafa1962da81ab7826fcc5fe69497": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.4eb78b824d5830920f96ea19fbc697fa7b4e2035a85b721cdaa82a55745d6a72": { - "line_hits": { - "13": 1, - "14": 0, - "5": 1, - "8": 1, - "9": 1 - }, - "missed_lines": [ - 14 - ], - "statements": 5, - "percentage": "80.0%" - }, - "t.51cb7e31a44623b75940d365996ce5b57960758784a827e0ff210452118a9e31": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.51cc20374d74a4eaf93e58bb4e7b3b0f3122689fa728be862cd5f187c2ed7c2c": { - "line_hits": { - "10": 4, - "14": 4, - "20": 4, - "21": 4, - "23": 4, - "25": 4 - }, - "missed_lines": [], - "statements": 6, - "percentage": "100.0%" - }, - "t.5277aba887fdb3e748e0c930cb1ed59ccb5d957973ee59497c8219de52ac9f1c": { - "line_hits": { - "14": 1, - "15": 0, - "18": 1, - "21": 1, - "24": 1, - "27": 1, - "30": 1, - "33": 1 - }, - "missed_lines": [ - 15 - ], - "statements": 8, - "percentage": "87.5%" - }, - "t.54895ac6257422ac1dffdf1dff930d7b697b3a33f1e3b4d6c8790b01e5db4012": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.559dbd7c1167821a83e1d7d39f4496c13ea3a3c8219d2e6003462a59812dce38": { - "line_hits": { - "3": 1, - "4": 1 - }, - "missed_lines": [], - "statements": 2, - "percentage": "100.0%" - }, - "t.57f6efe965b4e98ca3023c087f287326a30def559b8e0ecdc56300cace21bca9": { - "line_hits": { - "13": 1, - "14": 0, - "5": 1, - "8": 1, - "9": 1 - }, - "missed_lines": [ - 14 - ], - "statements": 5, - "percentage": "80.0%" - }, - "t.58b60466e0278f2b134451ad96f46838047ec93a5d9f3ece83e6a7c9a8af5172": { - "line_hits": { - "3": 4 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.5c4a703caebcb0226d7e73a10eb8d2031741eabddf0d74ab1b055969427f3305": { - "line_hits": { - "19": 1, - "23": 1, - "29": 0, - "32": 0, - "36": 0 - }, - "missed_lines": [ - 29, - 32, - 36 - ], - "statements": 5, - "percentage": "40.0%" - }, - "t.5d2cd3f8cf88755b546a097afee8392611acf19899dc8e44fc47abeeb07d10b8": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.5ecf8dd319c86aa28e8a2b0c43a7cbc28237d51a3107b6e1b7f71217d3739f62": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.5fb45291fa90424025dabf7c1de686d01df74cbd163eb232c71e0b1a2b17f6be": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.65eaea8fc9e65893facc065a5e27d2bc6a206e2f4ec80d909228d31129b2ffc5": { - "line_hits": { - "13": 1, - "14": 0, - "5": 1, - "8": 1, - "9": 1 - }, - "missed_lines": [ - 14 - ], - "statements": 5, - "percentage": "80.0%" - }, - "t.6a5b53bb76e8c0b38ea23026ed6ca3cfbba62818926517efee9f7534a443e663": { - "line_hits": { - "19": 1, - "22": 1, - "25": 1, - "30": 1, - "35": 1 - }, - "missed_lines": [], - "statements": 4, - "percentage": "100.0%" - }, - "t.6c69213faaf020ef60df106e58985b4c29fa447e0851b4e49ca6cc526142d283": { - "line_hits": { - "3": 4, - "4": 4 - }, - "missed_lines": [], - "statements": 2, - "percentage": "100.0%" - }, - "t.6e5c97bf075a91092b07eb80400948577f4cf1ffb08d83e6ab3b1123c48aa36b": { - "line_hits": { - "13": 1, - "14": 0, - "5": 1, - "8": 1, - "9": 1 - }, - "missed_lines": [ - 14 - ], - "statements": 5, - "percentage": "80.0%" - }, - "t.6e858341e7b33642272ffc86eed2cec0798b5e65e99e9070bfbdc0e8d0fb3927": { - "line_hits": { - "3": 1, - "4": 1 - }, - "missed_lines": [], - "statements": 2, - "percentage": "100.0%" - }, - "t.70c6d04aa77c68e850a1976b5c6440f12f7b7656bf8d998fbf19404e824a5576": { - "line_hits": { - "13": 1, - "14": 0, - "5": 1, - "8": 1, - "9": 1 - }, - "missed_lines": [ - 14 - ], - "statements": 5, - "percentage": "80.0%" - }, - "t.722c5b65e4df8305439d702b3a41e07f5f833fe0519b3bde1f96a3bd8c4d2a23": { - "line_hits": { - "3": 4 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.740fa139eecd88b9b7b1a68ad5a4376bbef0cdaefffde380c7ad1d914bade581": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.77dc9b5052b70a5fc8935459390f6e5f6eaf9193eb91af1b6ba951ef9cfd3e28": { - "line_hits": { - "3": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.7a579aacf3fd16c085c5bfe6aefe35fca78232eec159b0a87b40151cf74fd859": { - "line_hits": { - "3": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.7db863f3f3ae492382da5a2cc1698a38b260ac536fa77fd37585d2c235e5a469": { - "line_hits": { - "10": 4, - "13": 4, - "14": 4, - "15": 4, - "16": 4, - "7": 4 - }, - "missed_lines": [], - "statements": 6, - "percentage": "100.0%" - }, - "t.7dddc82e5999307971f82f7343e9405acc7eb0b7a6cc505b5941754aad235184": { - "line_hits": { - "3": 4, - "4": 4 - }, - "missed_lines": [], - "statements": 2, - "percentage": "100.0%" - }, - "t.7e23ce1054b879e26553b8ef6c30986cd324bc299c11456ac745d1172b6cb6e2": { - "line_hits": { - "3": 4 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.8258709f1a8e2c0eb7d2a0300b496f74acf9a30773321c6c84118fa1e671c8bb": { - "line_hits": { - "17": 1, - "20": 1, - "27": 1, - "29": 1 - }, - "missed_lines": [], - "statements": 4, - "percentage": "100.0%" - }, - "t.87ea1a30814a7f615863a314de41fc276108950de8036af388c9596aa01d0fc3": { - "line_hits": { - "3": 4 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.883049d293a35a2595cbaa3cf9b9299ab6476bea109918408aa136b4cc51a061": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.8b1a9afb70ca26edc4d9c92c799643be55298c473c08303cebff712efe747ceb": { - "line_hits": { - "18": 1, - "26": 1, - "29": 1, - "33": 1 - }, - "missed_lines": [], - "statements": 4, - "percentage": "100.0%" - }, - "t.8ba2f0b89a9528ffe70098b6b25d35e7084d592cc6b5230805a49e1cecddbb25": { - "line_hits": { - "14": 1, - "15": 0, - "18": 1, - "21": 1, - "24": 1, - "27": 1, - "30": 1, - "33": 1 - }, - "missed_lines": [ - 15 - ], - "statements": 8, - "percentage": "87.5%" - }, - "t.8ec2bdd41232721508b99fb380d3e49b1b644070f7cefd317571274eab46a3ba": { - "line_hits": { - "3": 4, - "4": 4 - }, - "missed_lines": [], - "statements": 2, - "percentage": "100.0%" - }, - "t.8ee64553cf0dfee1948d8ce7cbfef1490b823f4330e098ed41c49cecb8db2c00": { - "line_hits": { - "3": 4 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.929da8fbe39a851e92dd1b36e67ef9adc2c7441cab5a13c541f99e8799669a0d": { - "line_hits": { - "3": 1, - "4": 1 - }, - "missed_lines": [], - "statements": 2, - "percentage": "100.0%" - }, - "t.93a2e04fde62324ce5977447d694ce3c935d13bed6f799a5efa19c30eae4ee2c": { - "line_hits": { - "17": 1, - "25": 1, - "27": 1, - "30": 1, - "35": 1, - "36": 1, - "39": 0 - }, - "missed_lines": [ - 39 - ], - "statements": 7, - "percentage": "85.7%" - }, - "t.93dab38100c8493feb94fe6380f5d6056f5843b5d60b597b16fde9269a87931f": { - "line_hits": { - "14": 1, - "15": 0, - "18": 1, - "21": 1, - "24": 1, - "27": 1, - "30": 1, - "33": 1 - }, - "missed_lines": [ - 15 - ], - "statements": 8, - "percentage": "87.5%" - }, - "t.94d24376993f271e3883df5c3ade7e1af34bab02793d57c3f67c38e913453917": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.95fcb1658513e046d559d4595dc385dbb6d64999dce4a3c6246177a492c814ea": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.9686455664df39c2a6e71bbc25993065e90f3d4fc6c01aa046fc5ed31c84043b": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.9dcb3f19b77170e16e6870f99c7fa05293da491dec6610dc9565b9b57785c0dc": { - "line_hits": { - "18": 1, - "26": 1, - "29": 1, - "33": 1 - }, - "missed_lines": [], - "statements": 4, - "percentage": "100.0%" - }, - "t.9eb7fc02b57b901c0f781d28920f5decc26af79c864d5d4f9ab6448b7cc1b543": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.a0b072f258ad63296da257e139cab6874588334323ca35425100f942f2d10caf": { - "line_hits": { - "14": 1, - "19": 1, - "22": 1, - "25": 1, - "28": 1, - "31": 1, - "32": 1, - "35": 1, - "36": 1 - }, - "missed_lines": [], - "statements": 9, - "percentage": "100.0%" - }, - "t.a24a8eb0a2d40563d375ef4e39c645605c68c1a59dba54d8936af123bd9c757f": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.a5f6f99e90f13282ca83b1afb572f58ef8807ebea1b291f493940cc6a7d7ded3": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.aa792e9bda1176bd8a0082ae6e4b5cebf78c8c14d486420213e17f9afc1bbec2": { - "line_hits": { - "3": 4 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.aacf4cf48264f79e0df9e4a1931e458df4b30a474620938600985fba16f212f3": { - "line_hits": { - "13": 1, - "14": 0, - "5": 1, - "8": 1, - "9": 1 - }, - "missed_lines": [ - 14 - ], - "statements": 5, - "percentage": "80.0%" - }, - "t.ab0f8b93019f8bc2bde5ffaf6b43fe89f379073e683ba14a0c2ae4a418d7387c": { - "line_hits": { - "13": 1, - "14": 0, - "5": 1, - "8": 1, - "9": 1 - }, - "missed_lines": [ - 14 - ], - "statements": 5, - "percentage": "80.0%" - }, - "t.b2aba9deb52ae7672d27f4bfc51c7a3eb01c809aa6662793ab7f61733500b64c": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.b63d8de32ab5d20c4cf51ff467f0059c51399409c6cde5cc27f70bbd18f94684": { - "line_hits": { - "18": 1, - "26": 1, - "29": 1, - "33": 1 - }, - "missed_lines": [], - "statements": 4, - "percentage": "100.0%" - }, - "t.b73d23b449b2512e3d3a8dcc55c4ce695401117b62d777cac313df192e79c95e": { - "line_hits": { - "3": 1, - "4": 1 - }, - "missed_lines": [], - "statements": 2, - "percentage": "100.0%" - }, - "t.b88a0215c93cf64c7f8c4dc6e0701bf5ee4e249fcaed847d567521667832ebcc": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.bc63a16492290609513165006e1b54cc73335c6ed239f143883c2113808b4eea": { - "line_hits": { - "16": 1, - "20": 1, - "29": 1 - }, - "missed_lines": [], - "statements": 3, - "percentage": "100.0%" - }, - "t.bed69a76fb783b73f5943686d4768773ab5380594d38d42391e1c1c019278f82": { - "line_hits": { - "18": 1, - "20": 0, - "22": 0, - "23": 0, - "25": 0, - "26": 0, - "28": 0, - "29": 0, - "33": 1, - "38": 1, - "46": 1, - "48": 0, - "50": 0, - "51": 0, - "53": 0, - "56": 0, - "60": 0, - "61": 0, - "64": 1, - "73": 1 - }, - "missed_lines": [ - 20, - 22, - 23, - 25, - 26, - 28, - 29, - 48, - 50, - 51, - 53, - 56, - 60, - 61 - ], - "statements": 20, - "percentage": "30.0%" - }, - "t.bf9297aac903f6b4a1620b7d3733a68e9bcfb04eb708a3a5cf7527250d714599": { - "line_hits": { - "14": 1, - "15": 0, - "18": 1, - "21": 1, - "24": 1, - "27": 1, - "30": 1, - "33": 1 - }, - "missed_lines": [ - 15 - ], - "statements": 8, - "percentage": "87.5%" - }, - "t.c9102bd340263848d46bdcde35e175a2eef7d1e755abb985d50bcea1c83cde9d": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.c930599fd7ec56d5e21101566787a617e53f6642d8ba34667c2de7b5f94b5abd": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.cccbdde665259c760bfae773a7d20923be2810c68a4096bccee19f30aa423648": { - "line_hits": { - "3": 1, - "4": 1 - }, - "missed_lines": [], - "statements": 2, - "percentage": "100.0%" - }, - "t.ced06ab831f5d667e91ae90abbef1000a642ac7fe68674fd2520d85138b6c42e": { - "line_hits": { - "3": 4 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.d10168d2efc71db947671dfe4046e5877bfaabbcb94ffe209f8a342d83b09ea4": { - "line_hits": { - "13": 1, - "14": 0, - "5": 1, - "8": 1, - "9": 1 - }, - "missed_lines": [ - 14 - ], - "statements": 5, - "percentage": "80.0%" - }, - "t.d14976e72cf9b938bfa508c5522bb9b723234ea9621278bc554276a5e443c3f8": { - "line_hits": { - "13": 1, - "14": 0, - "5": 1, - "8": 1, - "9": 1 - }, - "missed_lines": [ - 14 - ], - "statements": 5, - "percentage": "80.0%" - }, - "t.d2945f0342aceff1a5a3e9d2c19d121c88bb2de9a8955809a0c8593d20ceead5": { - "line_hits": { - "3": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.d33c9f69ed1153ecc256be690f9a8a2e4796f4e1cfd4c8e8f4626b508924289c": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.dd339f65b20c7f799aaf12a5dd60688e6fe8187ffdab2cd2e1722c0bca3e9a58": { - "line_hits": { - "3": 4 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.de89480315752407732cf81e5f212550639d9b7ae6418e77d38c1174828f37ea": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.e8bc9dcece7a5163300b102e48ecd8fab32c32304307674baf80db85fe6cc619": { - "line_hits": { - "20": 1, - "23": 1, - "27": 1, - "35": 1, - "38": 1, - "42": 1 - }, - "missed_lines": [], - "statements": 5, - "percentage": "100.0%" - }, - "t.eb806bac3b94252b4b8af184eae8013aad815d47b40f3baeff2dbbb45d56c15e": { - "line_hits": { - "16": 4, - "17": 4, - "18": 4, - "19": 0, - "20": 0, - "23": 4 - }, - "missed_lines": [ - 19, - 20 - ], - "statements": 6, - "percentage": "66.7%" - }, - "t.edb67b867728fefec64fab5077b91d8a3c3c267947408e9927bf863246a35445": { - "line_hits": { - "3": 4 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.edcb1c2fb8ed81f8c8c572915973fa847f3920517d4327e3fda414b58a0653f8": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - }, - "t.ef452ac4a4f27af0eb886f28fe325085bcf89429a6b74e0028b232da8548f8d4": { - "line_hits": { - "6": 4, - "9": 4 - }, - "missed_lines": [], - "statements": 2, - "percentage": "100.0%" - }, - "t.f7b29cbe2e66afdb7fcd85c8846ae2648e393b8c2439a1ca35155047bd52e22c": { - "line_hits": { - "3": 1, - "4": 1 - }, - "missed_lines": [], - "statements": 2, - "percentage": "100.0%" - }, - "t.fffef85a0434b0845815696573453ef4b727e0784872506e5ebb87f7d15c15ba": { - "line_hits": { - "4": 1 - }, - "missed_lines": [], - "statements": 1, - "percentage": "100.0%" - } - }, - "excluded_locations": [ - "A.0000000000000001.StakingProxy", - "A.0000000000000001.FlowStakingCollection", - "I.Crypto", - "I.Test", - "A.0000000000000001.FlowServiceAccount", - "A.0000000000000001.FlowIDTableStaking", - "A.0000000000000001.ExampleNFT", - "A.0000000000000001.NodeVersionBeacon", - "A.0000000000000001.FlowEpoch", - "A.0000000000000004.FlowFees", - "A.0000000000000001.FlowClusterQC", - "A.0000000000000001.FlowDKG", - "s.7465737400000000000000000000000000000000000000000000000000000000", - "A.0000000000000001.LockedTokens", - "A.0000000000000001.FlowStorageFees", - "A.0000000000000003.FlowToken", - "A.0000000000000002.FungibleToken" -======= - "statements": 17, - "percentage": "41.2%" + "statements": 21, + "percentage": "33.3%" } }, "excluded_locations": [ "A.0000000000000002.FungibleToken", - "A.0000000000000002.FungibleTokenMetadataViews", - "A.0000000000000001.FlowClusterQC", - "A.0000000000000001.FlowIDTableStaking", - "A.0000000000000001.NFTStorefront", - "I.Crypto", + "A.0000000000000001.NonFungibleToken", "A.0000000000000001.NodeVersionBeacon", + "I.Crypto", "A.0000000000000001.FlowServiceAccount", - "A.0000000000000001.FlowDKG", - "A.0000000000000001.LockedTokens", - "A.0000000000000001.FlowStakingCollection", + "A.0000000000000001.FlowStorageFees", + "A.0000000000000004.FlowFees", "A.0000000000000001.ExampleNFT", "I.Test", - "A.0000000000000001.StakingProxy", - "A.0000000000000004.FlowFees", - "A.0000000000000001.FlowStorageFees", + "A.0000000000000002.FungibleTokenMetadataViews", + "A.0000000000000001.FlowIDTableStaking", "A.0000000000000001.FlowEpoch", - "A.0000000000000001.NFTStorefrontV2", - "s.7465737400000000000000000000000000000000000000000000000000000000", "A.0000000000000003.FlowToken", - "A.0000000000000001.ViewResolver", + "A.0000000000000001.FlowStakingCollection", + "A.0000000000000001.StakingProxy", "A.0000000000000001.MetadataViews", - "A.0000000000000001.NonFungibleToken" ->>>>>>> master + "A.0000000000000001.FlowDKG", + "A.0000000000000001.ViewResolver", + "A.0000000000000001.FlowClusterQC", + "A.0000000000000001.RandomBeaconHistory", + "I.BlockchainHelpers", + "s.7465737400000000000000000000000000000000000000000000000000000000", + "A.0000000000000001.LockedTokens" ] } \ No newline at end of file diff --git a/flow.json b/flow.json index e5d595f3..bdbd0270 100644 --- a/flow.json +++ b/flow.json @@ -4,6 +4,7 @@ "source": "./contracts/FungibleToken.cdc", "aliases": { "emulator": "0xee82856bf20e2aa6", + "testing": "0x0000000000000007", "testnet": "0x9a0766d93b6608b7", "mainnet": "0xf233dcee88fe0abe" } @@ -27,7 +28,7 @@ } }, "ExampleToken": { - "source": "./contracts/ExampleToken-v2.cdc", + "source": "./contracts/ExampleToken.cdc", "aliases": { "emulator": "0xf8d6e0586b0a20c7", "testing": "0x0000000000000007" @@ -36,7 +37,8 @@ "PrivateReceiverForwarder": { "source": "./contracts/utility/PrivateReceiverForwarder.cdc", "aliases": { - "emulator": "0xf8d6e0586b0a20c7" + "emulator": "0xf8d6e0586b0a20c7", + "testing": "0x0000000000000007" } }, "TokenForwarding": { @@ -46,10 +48,20 @@ "testing": "0x0000000000000007" } }, + "ViewResolver": { + "source": "./contracts/utility/ViewResolver.cdc", + "aliases": { + "emulator": "0xf8d6e0586b0a20c7", + "testing": "0x0000000000000007", + "mainnet": "0x1d7e57aa55817448", + "testnet": "0x631e88ae7f1d7c20" + } + }, "NonFungibleToken": { "source": "./contracts/utility/NonFungibleToken.cdc", "aliases": { "emulator": "0xf8d6e0586b0a20c7", + "testing": "0x0000000000000007", "mainnet": "0x1d7e57aa55817448", "testnet": "0x631e88ae7f1d7c20" } @@ -58,6 +70,7 @@ "source": "./contracts/utility/MetadataViews.cdc", "aliases": { "emulator": "0xf8d6e0586b0a20c7", + "testing": "0x0000000000000007", "mainnet": "0x1d7e57aa55817448", "testnet": "0x631e88ae7f1d7c20" } diff --git a/lib/go/contracts/contracts.go b/lib/go/contracts/contracts.go index 66b8d396..4ea82235 100644 --- a/lib/go/contracts/contracts.go +++ b/lib/go/contracts/contracts.go @@ -22,9 +22,7 @@ var ( const ( filenameFungibleToken = "FungibleToken.cdc" - filenameFungibleTokenV2 = "FungibleToken-v2.cdc" filenameExampleToken = "ExampleToken.cdc" - filenameExampleTokenV2 = "ExampleToken-v2.cdc" filenameTokenForwarding = "utility/TokenForwarding.cdc" filenamePrivateForwarder = "utility/PrivateReceiverForwarder.cdc" filenameFTSwitchboard = "FungibleTokenSwitchboard.cdc" @@ -33,16 +31,18 @@ const ( filenameMultipleVaults = "MultipleVaults.cdc" ) -// FungibleToken returns the FungibleToken contract interface. -func FungibleToken() []byte { +// FungibleTokenV2 returns the FungibleToken-v2 contract. +func FungibleToken(resolverAddr string) []byte { code := assets.MustAssetString(filenameFungibleToken) + code = placeholderViewResolver.ReplaceAllString(code, "0x"+resolverAddr) + return []byte(code) } // FungibleTokenV2 returns the FungibleToken-v2 contract. func FungibleTokenV2(resolverAddr string) []byte { - code := assets.MustAssetString(filenameFungibleTokenV2) + code := assets.MustAssetString(filenameFungibleToken) code = placeholderViewResolver.ReplaceAllString(code, "0x"+resolverAddr) @@ -78,25 +78,12 @@ func MultipleVaults(fungibleTokenAddr string) []byte { return []byte(code) } -// ExampleToken returns the ExampleToken contract. +// ExampleToken returns the second version of the ExampleToken contract. // // The returned contract will import the FungibleToken interface from the specified address. -func ExampleToken(fungibleTokenAddr, metadataViewsAddr, ftMetadataViewsAddr string) []byte { +func ExampleToken(fungibleTokenAddr, metadataViewsAddr, ftMetadataViewsAddr, viewResolverAddr, multipleVaultsAddr string) []byte { code := assets.MustAssetString(filenameExampleToken) - code = placeholderFungibleToken.ReplaceAllString(code, "0x"+fungibleTokenAddr) - code = placeholderMetadataViews.ReplaceAllString(code, "0x"+metadataViewsAddr) - code = placeholderFTMetadataViews.ReplaceAllString(code, "0x"+ftMetadataViewsAddr) - - return []byte(code) -} - -// ExampleTokenV2 returns the second version of the ExampleToken contract. -// -// The returned contract will import the FungibleToken interface from the specified address. -func ExampleTokenV2(fungibleTokenAddr, metadataViewsAddr, ftMetadataViewsAddr, viewResolverAddr, multipleVaultsAddr string) []byte { - code := assets.MustAssetString(filenameExampleTokenV2) - code = placeholderFungibleToken.ReplaceAllString(code, "0x"+fungibleTokenAddr) code = placeholderMetadataViews.ReplaceAllString(code, "0x"+metadataViewsAddr) code = placeholderFTMetadataViews.ReplaceAllString(code, "0x"+ftMetadataViewsAddr) diff --git a/lib/go/contracts/internal/assets/assets.go b/lib/go/contracts/internal/assets/assets.go index 9886ad1e..35dbc6fa 100644 --- a/lib/go/contracts/internal/assets/assets.go +++ b/lib/go/contracts/internal/assets/assets.go @@ -1,17 +1,15 @@ // Code generated by go-bindata. DO NOT EDIT. // sources: -// ../../../contracts/ExampleToken-v2.cdc (11.769kB) -// ../../../contracts/ExampleToken.cdc (11.958kB) -// ../../../contracts/FungibleToken-v2.cdc (8.511kB) -// ../../../contracts/FungibleToken.cdc (10.016kB) +// ../../../contracts/ExampleToken.cdc (11.72kB) +// ../../../contracts/FungibleToken.cdc (9.007kB) // ../../../contracts/FungibleTokenMetadataViews.cdc (7.408kB) // ../../../contracts/FungibleTokenSwitchboard.cdc (18.059kB) // ../../../contracts/MultipleVaults.cdc (775B) // ../../../contracts/utility/MetadataViews.cdc (26.648kB) -// ../../../contracts/utility/NonFungibleToken.cdc (8.173kB) +// ../../../contracts/utility/NonFungibleToken.cdc (8.146kB) // ../../../contracts/utility/PrivateReceiverForwarder.cdc (2.699kB) // ../../../contracts/utility/TokenForwarding.cdc (5.29kB) -// ../../../contracts/utility/ViewResolver.cdc (1.749kB) +// ../../../contracts/utility/ViewResolver.cdc (1.692kB) package assets @@ -81,27 +79,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _exampletokenV2Cdc = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xdc\x3a\x5b\x73\xdb\x36\xd6\xef\xfe\x15\x27\xfa\x66\xfa\x49\x53\x47\x72\x7a\xc9\xb6\x9a\x38\x6e\xda\xc4\xbb\x3b\xd3\x4e\x33\x89\xdb\x3e\x64\x32\x09\x44\x1e\x4a\xd8\x90\x00\x07\x00\x25\xab\x1e\xff\xf7\x9d\x03\x80\x24\xc0\x8b\x2c\x3b\x79\x5a\xbe\xd8\x22\x71\x0e\xce\xfd\x06\xf0\xa2\x94\xca\xc0\x65\x25\xd6\x7c\x95\xe3\x95\xfc\x84\x02\x32\x25\x0b\x98\x44\xef\x26\x27\x7e\xe5\x6f\x68\x58\xca\x0c\xfb\x93\xe3\x4e\xfb\x95\xd1\xbb\x66\x65\x04\x3f\x04\x36\xbe\xa0\xc1\x41\xbf\xde\xa0\x96\xf9\x16\x95\x87\x0a\x5f\x4d\x4e\x4e\x58\x92\xa0\xd6\x53\x96\xe7\x33\x48\xa4\x30\x8a\x25\x06\x5e\x5d\xb3\xa2\xf4\x88\x97\x31\x92\x9b\x93\x13\x00\x80\xc5\x62\x01\x57\x1b\x04\xdc\xa2\x30\x60\x36\xcc\x00\xd7\x80\x05\x37\x06\x53\xd8\x6d\x50\x80\xc0\x1d\x18\xc2\xa0\x81\x29\x84\x82\x0b\x83\xa9\x05\x0e\xf7\x74\x08\xec\x4e\xfa\x37\xbb\x64\xca\x0a\x59\x09\xb3\x84\x3f\x2e\xf9\xf5\xd3\xef\x4e\xc1\xec\x4b\x5c\xc2\x5b\xa3\xb8\x58\xcf\x82\xed\xa5\x61\x39\xe8\xaa\x2c\xf3\x3d\xc8\x2c\x22\x5a\x03\x17\x80\xd7\x5c\x1b\x14\x09\xf6\x36\xdd\x32\x05\x86\xc0\xdf\x5a\xe8\x7a\xab\x16\xf7\x8b\xb4\xe0\x02\x5e\x33\xb3\xe9\xc1\xe6\x68\xdc\xe7\xb7\x46\x2a\xb6\x46\x5a\x44\xd4\x35\x3f\x5a\x2c\x7f\x68\x54\x16\x89\x1e\xc4\xf2\x27\xab\x72\x33\x8a\x65\x14\xe2\x75\xb5\xca\x79\xe2\x00\xda\xff\x07\xd7\xbf\xc1\x04\xf9\x16\xd5\x08\x48\x43\xe8\x65\x25\x12\xc3\xa5\x00\x23\x41\xa1\xa9\x94\x00\xb3\x41\x2b\x78\xed\x94\x4b\x3f\x1b\xf3\xe0\x24\xe7\x02\x85\xe9\xf3\xb5\xe5\xb8\x83\xac\x12\xb0\x46\x63\xa9\xbd\x22\x1c\xd3\xd9\x12\xde\xd1\x7f\xef\xe1\xc6\x82\xd0\x43\x04\xd2\x0e\x2f\x94\x62\xfb\xe6\xfb\xb9\xfb\xe7\xd9\x4f\xa1\x3a\xe7\x16\xd5\xf3\xe9\xec\x7d\x03\x5d\x93\x59\x23\xb0\x1f\x6e\x4f\x0e\x13\x44\xbe\x31\x4a\xcb\x96\xf6\x78\x83\x19\x9c\x83\xc6\x3c\x9b\xb3\x24\x21\x3b\x9c\x27\xac\x64\x2b\x9e\x73\xc3\x51\xcf\x57\x52\x29\xb9\x7b\xf6\xd5\x10\x75\x8b\xd2\x8a\x76\x81\xc1\x37\xfb\x69\xd6\xec\x43\xcf\xc5\x05\x94\x4c\xf0\x64\x3a\xf9\x45\x56\x79\x0a\x42\x1a\x70\x68\x81\x81\xc2\x0c\x15\xd9\x2c\xa9\x82\x84\x6e\xa9\x02\x55\x3b\x6c\x8b\xaa\x2b\x89\x9a\xfc\x79\xcb\xe8\x98\x4c\x48\x1c\x1e\x23\xad\x9c\x7e\xb0\x52\x5a\x02\x49\x65\xb6\x84\x17\x62\xff\xd6\xa8\x2a\x31\x17\xff\xa3\x12\x0a\x79\x27\xce\x23\x41\x91\x3f\x58\x9a\xea\x5f\xcd\xdb\x57\x2c\xd9\x40\x45\x3e\xad\x8d\x54\xa8\x81\x09\xe0\x42\x1b\x46\xc4\xc8\x0c\xa4\xc8\xf7\x96\x22\x0b\x4e\x11\xc8\x6c\x90\xbb\xd5\x6c\x8d\x51\xdc\xcc\xbc\xc7\x69\xbf\xcc\xc3\x30\x91\xc2\x5a\x6e\x51\x09\x4c\x61\xe5\xb0\x95\x0a\xed\xfb\x52\x6a\x43\x3e\x98\x72\x0b\xd8\xa0\xe3\xa2\x93\x7e\x6c\xf4\x35\x1b\xdc\xdb\xb8\x9b\xb0\x3c\xc7\x74\x1e\xed\x9e\x6c\x30\xf9\xa4\x61\xc3\xca\x12\x05\x30\x03\xaa\x12\x86\x17\x68\x41\x91\xc2\x3c\x6b\x28\xa4\xb8\xde\xc1\xd1\xe0\xa2\xac\x50\xa9\x04\x69\x85\x70\xfc\xaf\x10\x12\x85\x8c\xb2\x80\xe7\x8c\xc2\x06\x5e\x1b\x92\x50\x14\x45\xea\xb8\xb2\x6f\xd0\x11\xb9\x29\x66\x5c\x58\xe0\x53\xd0\x56\xc1\x0a\x89\x04\x21\x61\xc7\xf6\x90\x49\xa2\xad\x60\x39\x4f\xb8\xac\xb4\x53\x87\x91\x7e\x4f\x27\xc5\x56\x34\xb2\xf2\xdb\x72\x01\x8c\xab\x39\xbc\x00\x5d\x62\xc2\x59\x0e\x36\xd7\x28\x6b\x36\xc4\x01\x08\xc4\x54\x13\xa6\x55\x4b\x83\x91\x36\x6b\x35\xe8\xda\x8c\x16\x8b\x22\xf4\xad\x06\xa1\x25\x65\x19\xab\xc6\xf9\x41\x9d\x43\x43\x8d\xd8\x6c\x04\x2b\x96\xd7\xc6\x64\x36\x5c\x3b\x8b\x6d\xd6\x76\x33\x98\x5f\x1d\x67\xaf\x60\x21\xf9\xa8\x5b\xa9\x0f\x25\x99\x41\x88\x72\x3c\xc9\x0c\xae\x57\x75\xa6\x19\xcc\x31\xad\xbd\x90\x23\x6a\x6b\x07\x9e\x26\x28\x99\xd9\x90\xdd\x29\x0c\xbc\x59\x6f\xac\xe3\x9b\x7d\xc9\xc9\xf6\xac\x59\x59\xa7\x4b\x87\xa5\x11\x04\xf9\x97\x98\x75\xf2\x2a\x45\xfc\xe0\x67\x18\xd5\x82\xe8\x60\x23\x9a\x1e\x90\xcd\xed\x38\x0f\x4e\x4a\x31\x0b\xb5\xda\x6a\x1e\x36\x6c\x8b\xc0\xea\xa5\x4d\xa8\xdc\x1f\xcb\x48\x2b\x4b\xe2\xa3\xfd\x75\x88\x8d\xb2\xaf\xb1\x07\x72\xf1\xff\xba\x29\x22\xbe\x14\x43\x6f\x02\x53\x39\x9e\xa5\xd0\xc0\x86\x98\xba\x7f\xce\x0f\x76\x78\x17\xbd\xa4\xc7\xd6\x20\xe3\x05\xf6\xfc\xf2\x8a\xfe\x3e\x9f\xce\x4e\x1f\x00\xfa\x92\xeb\x32\x67\xfb\x07\x42\xdb\x18\xf2\x92\x19\xf6\x20\xf8\xab\xb6\xec\x7d\x3e\x8d\xd3\xee\xfb\xbb\xe4\xfa\x90\xba\x81\x1e\xbd\xe3\x26\xd9\x38\xb5\xdc\xf4\x28\x4e\x98\xc6\xe3\xe5\xbd\xec\xc1\x07\x7a\xbc\x13\xc1\x74\x10\x9a\x9e\xcc\x78\xad\x2c\x6b\x7b\x6b\xf9\xbc\x8f\x46\x67\xc0\xf4\xa3\xc3\x84\xf8\xc5\x17\x7d\xe5\xb5\xc4\x34\x4a\x7e\x10\x39\xa1\x89\x1c\x41\x50\xb3\xfc\x62\x90\xa2\xd9\x43\x55\xd6\x4a\x65\x58\x6b\x54\x53\x16\x98\x72\x06\xe7\x71\x5f\x3c\xff\x8d\xde\x8e\x2b\xcb\xca\x88\xe7\xb8\xec\x80\xfd\xeb\xea\xea\xf5\x25\xcf\xf1\x30\x64\xa5\xf2\x25\x4c\x36\xc6\x94\x7a\xb9\x58\x30\xad\xd1\xe8\xf9\x0e\x57\x9a\x1b\x7c\x4c\x68\xf5\x3c\x91\xc5\xe2\xfb\xec\xe9\x37\x3f\x7e\x97\x9c\x25\xff\x60\x3f\x24\x69\xfa\xf4\xbb\x6f\x57\x4f\x92\x1f\xbe\x39\xeb\x7c\x60\xdf\x7f\x9f\xac\x9e\x24\x3f\x7e\xfb\xf4\xc3\x65\x2e\x77\x1f\xfe\x92\x2a\x2d\x98\xfa\x34\xd7\xdb\xf5\x64\x94\x8e\x01\xcf\xad\x1f\x2b\x91\x2b\xdb\xf3\x4e\x78\xc1\xd6\xb8\xd0\xdb\xf5\xd7\xd7\x45\x3e\x8c\xad\xaf\x9d\x48\xb4\x7a\x58\xb6\x7a\xfa\xce\x7e\x7e\x3f\x0c\x7e\x8c\x3f\x79\xed\x8e\xcb\x5a\xb0\x82\x78\xf0\x8d\x40\x83\xcc\x35\xfb\x93\x71\x01\xe8\x7d\xb1\x92\xa4\xa2\x57\x97\x57\x07\x96\xa5\xa8\x13\xc5\x4b\xaa\x51\x97\x30\xb9\xa2\x94\x95\xd5\x5b\xd8\x2a\x8d\xca\xc6\x4a\x63\x0a\xcc\x96\xea\xbe\xe9\xa0\xaa\x6e\x83\x79\x09\x7b\x59\x41\x8a\x5b\xcc\xa5\xfd\x5f\x81\xa0\x2a\xf5\xf2\x0a\xfe\x4f\x0a\xd2\xe4\xfc\xc0\xde\x78\x6d\x50\x09\x96\xff\xf1\xe6\xd7\xae\x0d\xbe\x6a\x3f\x4d\x1b\x23\xf3\x7b\x3f\xce\xcc\x5c\x8a\x8c\x90\x4b\xb5\x9e\x1c\x30\x82\x5c\xae\xa5\x5e\x7a\x15\x1e\x10\x95\xa4\x62\x56\x2f\x07\xc2\x6a\xf8\x4c\xcc\x8e\x1b\x83\x6a\x72\x14\xb1\x7e\xb1\x75\x02\xa2\xf5\xc3\x2a\x97\xc9\xa7\x64\xc3\xb8\x98\x0c\x9b\x0b\xd8\x9c\x31\xf4\xf6\xc1\xb1\x23\x0c\x61\xe3\xd1\x23\xe8\x48\xa3\x7e\xb3\xee\x4c\x7d\x3d\x77\xb0\x29\xcd\x94\x2c\x96\xbd\xf2\x6f\x9c\xd1\xfb\x75\xa7\xae\x6a\x75\x84\x8e\x48\xef\xa8\xe4\x55\x8b\x63\xdc\xdd\xa2\x22\xbf\xcb\xce\xb8\x09\xc5\x95\x7b\xaf\xd6\x3a\x14\xa7\x1c\x89\x01\x60\x5b\x77\x8e\x83\x95\x4a\x6e\x79\x5a\xef\xb7\x28\x15\xdf\x32\x83\xfd\x91\xc0\xdd\x14\xff\xca\xc5\x27\x4c\x5d\xa4\xb4\x06\xf5\xd5\x4d\xdc\x6d\xd5\x95\xe6\xed\x60\xa5\xd4\xe5\xa3\x8f\x6e\x70\x04\x75\x37\x67\x9f\x8d\xc8\x35\xb3\xaf\x8a\xd2\xec\xed\xe2\x7a\x3c\xb7\x84\x69\x56\x09\x2a\x66\x7f\xba\x19\xe8\x2b\x6f\xef\x88\x02\xde\xce\x9e\x3d\x6e\x06\x21\xdd\x8d\xa6\x07\xdc\x7b\xf8\xd3\x03\xfd\x3b\xae\x42\x1f\x5a\xd3\x05\x58\xc6\xdd\x22\x9a\xf3\x46\x8a\x08\xbe\x1c\xc1\xdb\xed\x50\xe3\x20\x78\x3e\xd6\x61\xad\xd1\x10\x6e\xa9\x0c\xa6\xed\x24\x14\xa4\x4d\x58\xb6\xa7\x55\xbe\x07\x63\x90\x73\x6d\x07\x15\xae\x71\x8c\xc6\xae\x5c\x37\xf6\x6e\x6b\xf1\xd2\x8f\x37\xe0\x40\xcf\x33\xb0\x2f\x19\xcd\x8d\x33\xc9\x9f\xa5\xcc\xbb\xa6\x42\xb1\x54\xd7\x50\x16\xa0\xb3\xfc\x1c\x6e\x62\x01\xc4\xab\xdf\x59\xf7\x5f\xa3\xdd\x6c\x3a\x7b\x0f\xe7\x60\x54\x85\x83\xdd\x5c\x04\x78\x74\x2b\xc7\x75\x9f\xab\xa9\x69\x7c\x6c\xe6\x08\x3d\xd0\x40\x8e\xc9\xe5\x9d\xb1\x7d\xe1\xc5\x05\x64\x2c\xd7\x38\xac\x4e\xe0\x82\x1b\xce\x72\xfe\xb7\x9b\x52\xd4\x83\x1a\x66\xda\x81\x8f\x75\x26\x3b\x44\xe7\x45\x8b\x86\x00\xa7\x9d\x49\xcd\xac\xdb\x1f\x11\x7d\x35\xca\xf3\x1a\x79\x4f\x41\x3c\x45\x61\x78\xc6\x51\xc1\x39\x4c\x7a\x01\x73\xd2\xc7\x19\x24\x00\x38\x0f\x67\x20\xd3\x16\xd7\x32\xc0\x3b\x7b\xd4\xc7\xd1\xc6\x74\x38\x0f\x7a\xf5\x7b\x60\x08\xd3\xc9\x38\x8e\x88\xa1\x3a\x72\x4f\x02\x7c\x1d\xff\xfa\x27\x9a\x48\x15\x7e\xbc\x78\x60\x64\x16\x78\xc8\xcf\x0e\x88\xbc\xc2\xa9\xe4\x80\xe1\x74\xd5\xd1\xa1\x63\xc7\xcd\x26\x55\x6c\x17\xbe\x8c\x16\xb4\x87\x2b\xd6\xa3\xd9\x27\x37\x39\x76\xa7\x5c\xbe\x36\x65\x6a\x5d\x15\x28\x4c\x04\xc8\x44\xda\x60\xf7\xf1\xc0\x03\xd9\x93\xbc\x66\x6a\x3c\x1f\xdd\xfa\xdf\xc6\xe7\x12\x0a\x32\x76\x7a\x89\x45\x29\x15\x53\x7b\x3f\x6f\xae\x0f\xee\x6c\x99\x4c\x85\xb1\xcc\xd3\x08\x83\x3d\x06\x72\x27\x6a\x8e\x00\x85\xb0\x42\x2e\xd6\x60\x14\x13\x3a\x43\xa5\x30\x9d\xd3\x46\x2a\x98\x28\x09\xdc\x05\x31\x95\xf0\xd4\x33\x61\xbf\xad\x8c\x26\xc3\x16\xb3\x9b\x31\x83\x96\xc0\x8d\x1d\x27\xdb\x41\x6c\x29\xa9\x2b\x8b\x69\xc2\x5c\xa3\x9d\x53\x0d\x33\xee\x75\x1e\x27\xc8\xbf\xbc\x1c\xd9\x2a\x47\x37\xc8\xa8\x25\xdb\x39\x6e\xa4\xe4\xda\x4f\xd7\x87\x1d\x36\xfa\xf9\xd8\x2b\x69\xc8\x9e\x9e\x3d\x0e\xe7\xd4\x6d\x58\x70\x10\xb3\x31\x13\xf3\x62\xb8\x9f\x85\x79\x51\xcb\xd5\x7f\x30\xe9\x9a\x99\x35\x2d\x96\xa6\x3a\x42\xc3\x8d\x6e\xbc\xc9\x6b\xa8\xe3\x5c\x72\x27\x50\xe9\x23\xac\x8e\x6b\x60\x79\x2e\x77\xce\xaa\x52\xd4\x46\x49\x77\x9a\xa1\x69\x7b\x47\xda\x0a\x13\x56\x69\x6c\x0d\x39\xf6\x2b\x22\x39\x30\x58\x32\x4d\x54\x35\x25\x7e\x0c\x6f\x67\xe7\x7f\xfa\x41\x65\x4d\xec\x86\xc5\x7c\xad\x10\x05\xd9\x9a\xae\x0a\x6a\x06\x45\xea\x4e\x15\x32\x69\x4f\x47\xbc\xa1\x59\x0a\xeb\x33\x8e\x11\x93\x6a\x86\x60\x5e\x21\xbe\x75\x18\x2e\xc6\xba\x41\xbe\x69\x57\xe0\xd9\x63\xe7\xc0\x4c\x3f\x1a\xb2\xb5\xa3\x2d\xed\x6b\x87\xaf\x17\xa0\xe8\x89\xbe\xc0\x39\x9c\xcd\xcf\xa2\xef\xb5\x4a\xe2\x70\xd9\xb1\xbb\x6e\x79\x78\xa4\x01\xc6\x21\xc7\xe9\x9a\xbc\x0d\x58\x68\x4f\x7f\xa3\x92\xbd\x70\x57\x07\x11\xde\xc6\x08\x96\xe7\x14\x6e\x7c\xac\x98\xc3\x0b\x77\xe6\x53\x54\xda\xc5\x0c\x57\x23\xd5\xa7\x55\x3d\x8c\xb6\xff\xb2\x98\x1c\xee\x26\x06\x75\x8f\xe7\xe8\x85\x54\xa9\x3b\x4e\xb2\xc6\xeb\xbe\xc7\x18\x5d\x5f\xe9\xcf\x89\x98\x1b\x35\xd4\x05\x5a\x6d\x16\xba\x39\xbf\x71\x63\x08\x2a\x30\x8e\xb3\xab\x7e\x3d\x7e\x4c\x34\xba\x23\xb8\x9c\xcd\xcf\xc2\xc8\x02\xf1\x51\xa7\x3b\x07\x3b\x81\x91\x93\xbd\x3a\x7e\xb8\xc8\x62\xd9\x61\xf6\x6e\x84\x97\x84\x3b\xf9\x23\xdf\xac\x4f\xcb\xee\x77\x4a\xe6\x8f\xe1\x6e\x22\x29\x13\x1a\x77\x8d\xe3\x48\x8b\x23\x00\x1d\x6c\x7c\x6a\x83\x1b\xe9\xaf\xa8\xed\xc8\x04\xb7\x45\x4e\x47\xed\x2e\x84\xe8\x5a\xde\x51\x1a\x6c\x49\x7f\x48\x5e\x19\x6b\x4f\xba\xe3\x8d\xf0\xd3\xd7\x43\xf9\x06\x0b\x3e\x72\xa9\xc6\xfd\xad\x2f\xd5\xc4\x65\xfb\x3c\xa8\xe3\x3e\x2f\x7d\x75\x8c\x6c\x30\x90\x84\xe6\xf6\x59\x01\xe4\xcb\x06\x8f\x2f\x1b\x38\xbe\x40\xd0\x18\xf2\x9f\x87\x05\x8b\x46\x8d\x70\x47\xa4\xb8\x1d\xba\x1a\x44\x9a\xf1\x69\xa3\x2d\x2f\xea\xfb\x0f\xa7\x80\x59\x86\x89\xe1\x5b\xcc\xf7\xb0\xaa\x94\xb0\x35\x62\x9b\xa9\x7b\x2a\xff\xa9\x64\x8a\x15\xe0\x52\x68\x93\xc6\x83\x76\x4a\x0a\xc3\x78\x07\x8d\x95\x61\xa5\x44\x07\x1b\x5c\xfd\xfe\xf2\xf7\x25\xbc\xc1\x2d\xd7\xdc\x00\xcf\x40\x61\x21\xb7\x2c\x27\xa1\x26\x95\x36\xb2\x70\xa4\x57\x89\x91\x4a\x43\xc9\xb4\xc6\xfa\x9a\x00\xfc\xc5\xf3\xdc\x9e\xff\x5b\x05\xa6\x54\x22\x40\x55\xa6\x24\x20\xb2\xa3\x20\x70\xd4\x10\x6f\x11\xa1\x9e\x96\xae\xb9\xd9\x54\x2b\x3b\x2c\x75\xa3\xdd\x45\x96\xf3\x52\x2f\xca\x2a\xcf\x17\x4f\xbe\x7d\x32\xa8\x3b\xe2\xc1\x87\x09\x5f\x43\xf4\x15\x17\x16\x10\x3c\xb3\x82\x6a\x12\xfa\x73\xd2\xd5\xc0\xb8\xe7\x21\x01\xc4\x55\x23\xf3\xb0\x2b\xea\x78\x32\x04\x05\x03\xad\x0d\x6d\xc4\xf6\xb7\x21\xa9\x36\xa4\xc4\x5b\x3f\x39\x3b\xa3\xfa\x23\x5e\xd2\xbd\x43\x07\xe7\xb0\xf0\x1e\x15\x0d\x03\xdd\x55\xbc\xa8\x19\xff\xc5\x59\x6f\x7b\x6d\xc6\x06\x87\x6e\x94\xb7\x0e\xe5\xef\x1f\x92\x3f\xb3\x2d\x52\x68\xe0\x22\xba\x90\xe3\x50\x36\xff\x46\x55\xda\xb0\x97\x74\x19\x9c\xc5\x7c\x75\x6f\xf5\xc1\xb9\x2f\xc6\x46\xee\x26\x3c\x1a\x00\x7f\x1d\xf6\xdc\x5d\xe8\xf0\x42\x40\x07\xb8\x7f\xdf\x6f\x00\x3e\x3e\x7f\x7f\xd4\x51\x4b\x77\x72\x4e\x62\x9b\xfa\x91\xe1\x29\x18\xb9\x1c\xe6\x72\x36\xa4\xa0\x81\x4b\x02\x9d\xb1\x78\xd0\x85\xe2\x75\x29\x35\x86\x19\xdf\x2e\xfc\xe8\xe3\xe3\x47\x28\xd0\x6c\xa4\xab\xdf\xd7\x68\x5e\xd8\x59\x98\x9f\x22\xd5\xdf\xcc\x46\xc9\x6a\xed\x4c\xe1\x63\xcd\xe7\x47\xb0\x35\x46\xc6\x92\x50\xe3\x75\x1f\x00\x1f\x43\xc3\xff\x38\x88\xc9\x7f\x1e\x46\x14\x99\x4e\x68\xb8\xbf\xb0\xf2\xe0\x45\xb9\x5a\xc2\x5c\xeb\x0a\x9f\x7d\xe5\xc7\xc2\x23\xd2\x1d\xd4\x51\x84\xce\x8a\x5a\x6f\xa6\x1d\x12\x4e\x81\x99\xe5\xa0\x69\xcd\x22\xca\xeb\x21\xcd\x3d\xa9\x1e\x9f\xb8\x7f\x36\x23\x01\x45\x01\x13\x7d\x13\x0f\x4c\x8f\x18\x71\xe5\x69\xeb\xbd\xae\xc2\x9c\x8e\xec\xdc\x31\x73\x0b\x1c\x98\x79\x37\x48\xd5\xe9\xf1\xf6\xe4\xbf\x01\x00\x00\xff\xff\x47\xfe\x17\x8c\xf9\x2d\x00\x00" - -func exampletokenV2CdcBytes() ([]byte, error) { - return bindataRead( - _exampletokenV2Cdc, - "ExampleToken-v2.cdc", - ) -} - -func exampletokenV2Cdc() (*asset, error) { - bytes, err := exampletokenV2CdcBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "ExampleToken-v2.cdc", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x47, 0x53, 0xb3, 0x2e, 0xf5, 0x64, 0xc7, 0x31, 0x3e, 0xaf, 0x46, 0xba, 0x15, 0x76, 0xc7, 0xdb, 0x18, 0x81, 0x8a, 0xa1, 0x2, 0x4d, 0xfc, 0x77, 0x4a, 0xce, 0x62, 0xd, 0x18, 0x6a, 0x1b, 0xb}} - return a, nil -} - -var _exampletokenCdc = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x5a\xdd\x6f\xe3\x36\x12\x7f\xcf\x5f\x31\xe7\x03\x7a\x36\x9a\x38\xe9\xd7\x5e\x6b\xec\x76\x37\x7b\xdd\xe0\x0e\x68\x8b\x45\x9b\xb6\x0f\xc5\x62\x97\x96\xc6\x36\x2f\x12\xa9\x92\x94\x1d\x77\x91\xff\xfd\x30\xfc\x90\x48\x59\xb2\x1d\xa7\xe7\x97\xc4\x16\x67\x38\x9c\xf9\xcd\x07\x67\xc4\xcb\x4a\x2a\x03\xa3\x9b\x5a\x2c\xf9\xbc\xc0\x5b\x79\x87\x62\x74\x16\x7e\xfe\x01\x0d\xcb\x99\x61\xbf\x72\xdc\xe8\xf6\xe7\x64\x75\x67\xcd\x19\xcb\x32\xd4\x7a\xcc\x8a\x62\x02\x99\x14\x46\xb1\xcc\xc0\x9b\x7b\x56\x56\x9e\x60\x06\x09\x3d\x7c\x3c\x3b\x03\x00\xb8\xbc\xbc\x84\x5b\x69\x58\x01\xba\xae\xaa\x62\x0b\x72\x91\x90\x69\xe0\x02\xf0\x9e\x6b\x83\x22\x43\x4b\x12\x6f\xb5\x66\x0a\x0c\x91\xff\x6c\xa9\x67\xf0\xcb\x0d\xbf\x7f\xf6\xa5\x5d\xd7\xf0\xff\xd9\x48\xc5\x96\x08\x4c\xe4\xf0\xb6\x9e\x17\x3c\x83\xb7\xcc\xac\xf4\x0e\xb7\x02\x0d\xfc\xca\xea\xc2\x78\x0a\x5a\x35\x83\xe8\xcb\x30\x85\xe3\xeb\x08\xda\xff\x7b\xd7\xff\x84\x19\xf2\x35\xaa\x47\x90\x5c\xe7\x25\x17\x83\x42\xb5\x8a\x5c\x21\xe0\x1a\x85\x01\xb3\x62\x06\xb8\x06\x2c\xb9\x31\x98\xc3\x66\x85\x02\xcc\x0a\x5b\xdb\x70\x0d\x99\x42\x66\x30\xdf\xd9\xd1\xb1\x70\xea\xff\x8f\xe0\x86\xb3\x82\xff\x89\xf9\x98\xbb\xff\x53\x55\x4f\x8e\xdf\xde\xd9\x93\x29\x84\x0d\x37\xab\x5c\xb1\x8d\x80\x85\x92\x25\x30\xa7\xc3\xbd\x82\xfc\x16\x48\xc6\xac\x94\xb5\x30\x61\xff\x73\xcb\x62\x06\xd7\x79\xae\x50\xeb\x97\x27\xc9\x93\x63\x25\x35\xa7\x27\x46\x1e\x25\xcd\x77\x81\x60\x47\x1a\x23\x4f\x91\x45\xe0\x26\x96\xa7\xe4\xe2\x90\x61\x7e\xb0\x4b\x3a\xdb\x9f\x78\x78\x6d\x94\xdc\x1e\xd8\xef\x75\xad\xc4\x13\xf6\x63\xf6\x88\xf6\x5c\x0a\x14\x6a\x59\xab\x0c\x0f\x83\xd0\x9e\x52\xfd\xcb\xad\xa1\x07\x72\x83\xf9\xf5\x93\x64\x98\xd3\x41\x1e\x23\x83\x3d\x79\x23\x43\xb4\xdd\x1b\x96\xad\xa0\xd6\xa8\x40\x1b\xa9\x50\x03\x13\xc0\x85\x36\x4c\x64\x48\x71\x4c\x8a\x62\x6b\x9d\xce\xe2\x89\x02\x99\x59\x21\x77\xab\xd9\x12\x13\xb1\x17\xb5\xc8\x0c\x97\x2e\xde\xb5\x34\x14\xb2\x96\x72\x8d\xa4\x7b\x98\x3b\x6e\x95\x72\xa1\xac\x92\xda\x90\x3f\xe7\xdc\x12\x36\xec\xb8\xe8\x84\xda\xe0\xfc\x5b\x6b\xee\x8c\x15\x05\xe6\xd3\x64\xf7\x6c\x85\xd9\x9d\x86\x15\xab\x2a\xd2\x93\x01\x55\x0b\xc3\x4b\xb4\xa4\xb8\x46\x05\xac\x91\xd0\x2a\x2c\xe5\xd1\xf0\xfa\xc9\x2b\x95\x56\x08\x77\xfe\x39\x06\xf5\x86\x93\x51\x08\xc2\x7b\x43\x1a\x4a\x22\x92\xb5\x19\x89\xd9\xb0\x73\xe8\x5c\x70\x61\x89\xcf\x41\x4b\x7a\xae\xac\xcd\x84\x84\x0d\xdb\xc2\x42\x92\x6c\x25\x2b\x78\xc6\x65\xad\x9d\x39\x8c\xf4\x7b\x3a\x2d\xb6\xaa\x91\xb5\xdf\x96\x0b\x60\x5c\x4d\xe1\x1a\x74\x85\x19\x67\x85\x47\x5a\x0b\x0b\x81\x98\x6b\xe2\x34\x6f\x65\x30\xd2\x22\xb8\x61\xd7\x7a\x6d\xaa\x8a\x18\x43\x0d\x43\x2b\x4a\x27\x0b\x4e\xdf\x2a\xb9\xe6\x39\xaa\xf3\xce\xef\x21\x47\x74\x7f\x7f\xcd\x0a\x42\xd7\x39\x24\xf9\x77\x4a\x7a\x2f\xc8\x4c\x3e\xab\xc6\xb6\xb5\xe9\x11\xe6\x8e\xd0\x9f\x5e\xc3\xba\x09\x71\x7d\x29\xd5\xaf\x6e\xd2\x69\xc2\xb4\x4d\x09\xd6\x7e\x81\x33\xa1\x26\x9c\xd5\x6a\x9f\xb0\x42\x20\x6a\x88\x29\x7f\x8c\x3b\xac\x27\xf0\xb1\x79\x4e\x1f\x8d\xc5\x62\x1a\x58\xbe\x08\xcc\x9b\x25\x0f\xa9\x28\x37\x01\x93\x0e\x3b\xec\xce\x39\xa1\x0b\x52\xc0\xdc\x17\xb5\xac\x4b\x14\x26\x21\x24\xff\x09\x49\x48\x3b\x6a\x4f\x64\x13\x52\xe3\x80\xd3\xf4\xe4\xc6\xe3\x4a\xfb\x58\x62\x90\x6a\x23\xa6\xb6\xde\x5d\x43\xd8\xa9\xb5\x43\xcb\x4a\x16\x79\xc2\x81\x18\x97\x52\xe0\xb6\x59\x3a\x47\x2e\x96\x60\x14\x13\x7a\x81\x4a\x61\x3e\xa5\x6d\x14\x9a\x5a\x09\x6d\xd7\x0b\xdc\x14\xdb\x84\x4b\x70\x28\xbf\xa9\x4c\xdc\xca\x32\x76\x0e\x4a\x0e\xc3\x8d\xf5\xc5\x79\x94\xe4\x12\x5e\x58\x68\xdc\x90\x53\x25\x47\x4d\x96\xbc\xaa\x98\x62\x25\x84\xd0\x4f\xa0\xf2\xca\x22\x34\xb9\x44\xe2\x1c\xa5\x93\xd7\x49\xac\x14\x68\x96\x9d\x3b\x9c\xe5\xe3\x4e\xd0\xe2\x46\x0a\xc3\xb8\xb0\x1a\x59\x25\xec\x6a\x91\xeb\x5e\x01\x3d\x74\x53\x37\x09\xc5\x02\x9b\x17\x38\x21\xe2\x86\x55\x37\x81\xcd\xe0\x55\x4a\xea\x24\xda\x0b\xca\xe4\xeb\x85\xd7\x45\x42\x40\x69\x67\xb0\x6e\x71\x7f\x43\xdd\x62\x99\xc9\x8d\x40\xf5\x72\xca\x5c\xdd\x30\x49\x78\x79\x6d\x3d\xbf\x88\x43\x5a\xeb\x46\x8e\xdb\xe4\x51\x1e\xe2\xd5\x2e\xe7\xff\xc5\xac\xeb\x26\xd6\x35\x58\x9e\x6a\x1b\xb8\xd1\x8d\xa3\x7b\xbc\x25\x11\x05\xc1\x1e\x41\x0f\x78\x0d\xd7\xe0\x73\x37\x51\xfb\x82\xc3\x92\x69\xda\xd2\x89\x33\xc7\x8c\xd5\x1a\x5b\xe7\x4b\xb8\x6c\x48\xcc\xc8\xe1\xc8\xb5\x50\x85\xdd\x7d\x14\x6e\x31\xf5\x8f\x56\xde\x15\x4b\xcf\x32\x47\x14\x84\x34\x5d\x97\x98\xdb\xe3\xda\xa4\xb2\x90\x36\x39\x7a\x57\xf1\x25\xd1\x41\xa7\x70\x46\x3c\x0c\x65\x0b\x60\x67\x84\x0d\x2f\x8a\x41\x7f\xec\x0d\xc9\x04\x60\xbf\x7a\xec\x36\xec\x03\x6d\x37\x94\xd2\xc5\xc1\x7a\x1f\x3c\xbf\xf0\x75\xb6\xfe\x1b\xbc\x8a\x6f\x57\xd3\x54\xcf\x87\xb0\xfe\xa9\xe3\x37\xed\x46\xe5\x0e\xe4\x77\x8b\xe3\x84\xcc\xd5\xc8\x07\x71\x9f\xd0\xc0\x0b\xb8\x9a\x5e\x25\xcf\x03\x8a\xd2\x00\x13\xc1\xdf\x2f\x18\x77\xf5\xc2\x17\xe9\xa9\xbe\x25\xd6\x9d\x35\xf4\x49\x14\x15\x5d\x32\xe1\xc5\xf0\xa3\x8b\x84\x75\xc2\xf2\x61\xc8\x45\x09\x3c\x54\xca\xc8\x05\x2c\xd1\x18\x42\x0c\x2b\x0a\x8b\x9a\x90\xe5\xc1\xa6\x79\xe0\xb4\x29\x39\xa9\x2b\x06\x63\x29\x86\x71\xea\xe3\xc7\x35\xb9\xb8\x72\xdb\xdc\x6e\x2b\xd4\xae\xaa\x09\xf8\x8c\x59\xaf\x6d\x4d\x01\xb7\xae\x4e\x28\x6a\x6c\x20\x6b\xf3\xda\x3c\x4d\x46\xad\xba\xd7\x58\xc8\x8a\x82\x80\x91\x70\x27\xe4\x06\x36\x2b\x9e\xad\xc0\x3a\x0a\x1a\x57\x97\x55\x4c\xeb\x10\x41\x94\xab\x5a\xe8\x6c\xe3\x09\x94\x68\x56\x72\xc0\xe1\x92\xfa\x84\xe3\xc6\x7a\xc4\x12\x8d\x55\xcb\x78\x32\x83\xdf\xe9\x48\xef\x3e\xf6\x05\x4e\xfb\xe8\xf9\x70\xf3\x62\x7a\x73\x4b\x7f\xbf\x1d\x4f\xce\x77\x20\x40\x9f\xc3\xe4\xdf\x71\x5d\x15\x6c\xfb\x04\x0e\xd6\x0d\xbf\x63\x86\x9d\xcc\xe3\xb6\x05\xe1\xb7\xe3\xc9\xbb\xc7\x60\x2d\x45\x59\x5b\x23\xe3\x91\x00\x73\x81\x90\xcc\xe2\x02\x21\x89\x1a\x38\xe4\xa8\xb9\xf2\x90\x9a\xf6\xe3\x12\xb4\x51\x75\x66\x6a\x45\x80\xa8\x14\x52\x46\x08\xa8\x54\xf8\x47\x8d\xda\xf4\x31\x18\x0c\x94\x31\xaa\xde\x07\xb1\xb6\x15\x4e\x66\x70\x2d\xb6\x3f\xdb\xcd\x5e\x76\x13\xfc\x86\x9b\x6c\xe5\xa0\xb5\x1b\x08\x32\xa6\xf1\x18\x23\x3a\x14\xcd\x7a\xed\xe7\x4f\x7b\x90\xc1\xb8\x97\x9a\x3e\x0b\xe3\x71\xe6\x63\x67\x7c\xce\xc7\x60\x74\x62\xd3\xc0\x31\x8b\x5f\xf6\x43\xd1\x09\xd3\x40\xf6\x24\x71\x62\xc0\x1f\x21\x50\xb3\xfc\x65\xaf\x44\x93\x53\x4d\xd6\x6a\xa5\xdf\x6a\x94\x42\x4b\xcc\x39\x83\x17\x9d\x1b\xd7\x0f\xf4\xeb\x1e\x63\xf1\x02\x67\x1d\x92\x7f\xdf\xde\xbe\xbd\xe1\x05\x0e\x53\xd1\xa7\x56\xc5\x0c\x46\x2b\x63\x2a\x3d\xbb\xbc\x64\x5a\xa3\xd1\xd3\x0d\xce\x29\xa1\x5e\x10\x5b\x3d\xcd\x64\x79\xf9\xd5\xe2\xd9\xe7\xdf\x7c\x99\x5d\x65\xff\x64\x5f\x67\x79\xfe\xec\xcb\x2f\xe6\x9f\x65\x5f\x7f\x7e\xd5\x79\xc0\xbe\xfa\x2a\x9b\x7f\x96\x7d\xf3\xc5\xb3\xf7\x37\x85\xdc\xbc\xff\x4d\xaa\xbc\x64\xea\x6e\xaa\xd7\xcb\xd1\xa0\x1c\x03\x31\x88\x3e\x56\x1b\xa4\xd8\x19\x8c\x78\xc9\x96\x78\xa9\xd7\xcb\x4f\xef\xcb\xa2\x9f\xdb\xae\x65\x12\xb5\xea\x7e\xbd\xea\xf1\xef\xf6\xf1\xbb\x7e\xf2\x63\x7c\xc9\x5b\x76\x58\xd7\x82\x95\x74\x06\x1f\xe2\x1a\x66\xae\x84\x19\x0d\x2b\x40\x6f\xcb\xb9\x24\x13\xbd\xb9\xb9\xdd\xb3\x2c\x47\x9d\x29\x5e\x51\xe9\x3d\x83\x91\x4d\xa5\x8b\xb0\x85\x2d\x56\x9b\x6b\xa2\x2b\xbf\xd1\xcb\x41\x97\x46\x2c\x2a\xd8\xca\x3a\x64\x54\xfa\x5f\x81\xa0\xbb\xdd\xcd\x2d\xfc\x5d\x0a\xb2\xe4\x74\xcf\xde\x78\x6f\x50\x09\x56\xfc\xf2\xd3\xf7\x5d\x0c\xbe\x69\x1f\x8d\x1b\x90\xf9\xbd\x2f\x16\x66\x2a\xc5\x82\x98\x4b\xb5\x1c\xed\x01\x41\x21\x97\x52\xcf\xbc\x09\xf7\xa8\x4a\x66\x9c\x15\x7a\xd6\x13\x52\xe3\xcf\xc8\x6c\xb8\x31\xa8\x46\x47\x09\xeb\x17\x5b\x27\x20\x59\xdf\xcf\x0b\x99\xdd\x65\x2b\xc6\xc5\xa8\x1f\x2e\x90\x14\x5f\xf1\xe7\xe4\xb8\x11\x87\xaf\x27\xc4\xfb\xc0\x65\x18\xa5\x3a\xee\xf9\xef\x56\xee\xd1\x14\x60\xd8\x0c\x2a\xcc\x1b\x76\x99\xec\x8e\x22\xf6\x79\xbe\x93\x7e\x48\x96\x63\x78\x54\xbe\xdd\xe5\x78\x5c\x56\x8a\xaf\x99\xc1\x00\x40\xcb\xcc\xf2\x3a\x7c\x98\xef\xb9\xb8\xc3\xdc\x05\x22\x6b\xaf\x4f\x76\x25\xfa\xd8\xdf\x53\x7b\x18\x2c\xb2\xe2\x63\x9e\xb0\xc1\x81\xe6\xdc\xfe\x7d\x83\x6a\x4e\xd8\x37\x34\x11\xf7\x6f\xe0\xda\x07\x6f\xca\xca\x6c\x2d\x93\xd0\x19\x98\xc1\x78\x51\x0b\x2a\xa2\x7b\xae\x86\x07\x5c\xb7\xe9\x4d\x24\x94\xdd\x9d\xc6\x7b\xfc\xb2\xff\xd1\x89\x8e\x99\x16\xc1\xa7\x3a\x66\xc4\x65\x9c\xcc\x16\x87\x6e\x7d\x93\x81\x7b\x5e\xb4\x9d\xe0\xc5\x59\xba\xe0\xa1\x9d\x23\xa4\x3d\x9a\xb4\xc3\xe8\xac\xb0\xe1\x66\x05\x2c\x6e\xb9\xfc\x89\x4a\xb6\x7d\x72\x91\x37\x1d\x43\xde\x36\x04\x59\x51\x50\x21\xed\x1b\x83\x53\xb8\x76\xdd\xf1\xb2\xd6\xae\x41\xe8\x3a\xc1\xa1\xaf\x9f\x70\xb3\x03\x0d\x5f\x82\x1b\x3b\xf9\x19\x18\x62\xd0\x0f\x52\xe5\xee\x72\x67\x7b\x3c\xee\x79\xcb\x2d\xcb\x6c\xab\xd0\x35\x08\x99\xcb\x7f\xc1\x8d\x43\x57\x43\x37\x7d\x69\x97\x1b\xcd\xb6\xc2\xdd\xe9\x42\xdc\x38\x6c\x75\x13\x3a\x2e\x83\x1d\x78\xba\x14\xec\x42\x72\x06\xaf\xba\x08\x3f\xd0\x69\xbb\x9a\x5e\x4d\x62\xd3\xf5\x76\xf9\xed\xa4\x96\x6b\xa3\x98\x91\x3b\xed\xf8\x01\x43\x47\xd6\xeb\x1d\x93\x1d\x6c\xcc\xa6\x63\x31\x52\x4f\xc9\xee\x79\x59\x97\xf0\x47\xcd\x84\xe1\x66\x1b\x77\x6a\xfd\x98\x25\xec\x92\xc9\xba\xc8\xbd\x30\x83\x7d\xda\xee\x74\xc4\x35\xb2\x2c\xa5\x37\xba\x1b\x8d\xf8\x4d\x8e\xba\xa8\xb9\x2d\x7f\xc4\x8d\x63\x3e\x30\xdd\x9b\xc1\x2b\xbf\xf9\xc7\xdd\x7e\xd3\xde\xf1\x60\xf2\x75\x7f\x4f\xb5\x5f\x82\x01\x06\x7b\x3b\xac\xc3\x46\xed\xcc\x1d\x0f\x36\x6c\x48\xed\xaf\x8f\xa0\x19\x54\xab\x23\xb6\x48\xf7\x7c\x7a\x34\xd8\x1d\x6e\xee\xd3\x52\x60\x38\x1c\xc9\xc2\xfc\x2f\xb4\x96\x1d\xd6\xac\x4b\x33\x72\x8c\x10\x0d\xdc\x7c\x70\x25\x8b\x66\xa6\xf6\xb8\x59\x5a\x83\x88\x9d\xe6\xc6\xee\x60\xa2\x03\xf7\xb4\x15\xdd\x8c\xf3\xba\x5b\xad\x99\xea\xfa\x55\xdf\x2c\x2c\x35\x3e\x71\xd3\xd1\x49\xce\x6d\x23\x9d\x76\x2f\x43\x50\x36\xd1\xbb\x2e\xe7\x09\xab\x18\x31\x31\x45\x37\x8c\x3f\x66\x4c\xd3\xe7\xfe\x9d\x43\x3f\x6e\x22\xe3\x5e\x4c\x78\x8c\x97\x13\x85\x6b\x0b\xf7\x8c\x5e\x0e\x16\x1c\x95\xc2\x9e\x12\xc4\x1b\xd9\x36\x6e\x67\x30\x72\x06\x0a\xb2\xd9\xf4\x36\x47\x58\x5a\xd0\x2a\xb2\x8c\xb0\xe9\x72\xf7\x86\xea\xf9\x3c\xf7\x6d\xee\x8e\xbd\x07\xf8\x16\xa8\xb5\x63\x4a\x0a\x09\x58\x72\xac\x46\x7b\x2a\x81\x53\xda\xc9\x9f\xf6\x0d\x97\x76\x65\x85\xbe\x03\x1c\x9c\x4c\x75\xde\x20\xe9\x0e\x92\xe0\x49\xb3\x27\x3b\xeb\xed\x8f\xe8\x7d\xc3\xb5\xee\x71\x92\xef\x7f\x75\xbc\xa1\x48\x7c\x7c\xac\x69\x62\xe7\x1e\xc7\xf7\xa3\x86\x76\xb4\x16\x5e\x03\x39\x07\x5c\x2c\x30\x33\x7c\x8d\xc5\xd6\x6e\x1c\x3c\x29\xde\xbf\xeb\x43\xb4\xc1\x8f\xd2\xe0\xcc\x0d\xda\x5c\xfd\x15\xbd\xb1\xc3\x6a\x23\x4b\x66\x38\x85\x86\x2d\xe8\x7a\x6e\x5f\xa0\xc0\xbc\x99\xba\x26\x9c\xe2\x90\x93\xbe\x5d\x62\xc5\xae\x33\x23\xd5\x5f\x36\xe7\x8a\xc6\xc1\xb5\xea\x6f\x1a\x77\x23\x04\x2d\xf4\x11\xe2\xff\x3d\xdc\x22\x2a\x16\x30\x36\x3c\xcb\xea\x1f\x2d\x75\xdc\xa7\xf3\x42\xd4\xae\x2f\x44\x58\xb5\xde\x10\x1f\xc1\x82\x3e\x0d\x02\x9f\x5d\x5d\xc5\x23\x2e\xbb\xa2\x7b\xc9\x87\x17\x70\xe9\x0b\xef\xdd\x4b\x73\x0f\x69\x7b\x27\x27\xca\xca\x7e\x4b\x08\xc3\xcd\x27\xa5\xdd\x6d\x0b\x0c\x90\x87\x85\x29\x79\xf7\x6d\xc5\x21\xa9\xed\xba\xd8\xad\xc0\xd5\x21\x11\x42\xed\xc5\xa7\x9b\x37\xa3\x6c\x66\xef\x2a\x6c\x8d\x74\xed\xe1\x22\x5c\x4a\x5a\x34\x27\x30\xe9\x0f\x62\x5d\x53\x4c\xd2\xc3\xf8\x08\x32\xa5\x5d\xc6\xcf\x2f\x2c\xb3\x68\x82\xd9\xb5\xd0\xa4\xef\x3c\x0c\x9c\xee\x20\x63\x15\x9b\xf3\x82\x32\xb2\xcf\xee\xf6\xa2\x95\xc7\xaf\x8f\xe0\x7d\x25\x35\xc6\xc9\xd5\x2e\xfc\xe0\xaf\x4a\x1f\xfc\xa0\x0c\xcc\x4a\xc9\x7a\xe9\xb4\xf3\x21\x18\xe2\x03\xd8\x2a\x67\xc1\xb2\x48\x09\xc9\x39\x0a\x2e\xee\x9e\x7f\x32\xdc\x1a\xd9\x8d\xcd\x87\x9a\x44\x86\xa9\x25\x9a\x01\x7d\x34\x2b\x9f\xae\x18\xfb\x3a\xd9\x90\x76\xbc\x39\x3f\xc0\x82\x63\xd1\x4c\xf5\xe1\x43\x34\x96\xe8\xd7\xdc\xeb\x40\xd8\x28\x6e\x9f\xde\x8e\xed\x01\xf5\x2a\x72\x6f\x9b\xec\xd1\x5a\xb4\xb1\xcc\x26\xb9\x16\xda\xc9\xed\x73\xbc\x1f\xc9\x96\x36\x42\x72\xd7\x6b\x53\x83\xbd\xa1\xc0\xc7\x44\xfc\x7a\xa5\x5e\xc9\x4d\x54\x5f\x37\xef\xf1\x6d\x98\x06\xde\xbe\x36\xdc\x70\x89\x62\xe7\x9e\xb7\x8a\xfb\xdd\xf1\xe1\xec\xe1\xec\x7f\x01\x00\x00\xff\xff\x3a\x10\x8f\x4f\xb6\x2e\x00\x00" +var _exampletokenCdc = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xdc\x3a\x5b\x73\xdb\x36\xd6\xef\xfe\x15\x27\xfa\x66\xfa\x49\x53\x47\x72\x7a\xc9\xb6\x1a\x3b\x6e\xda\xc6\xbb\x3b\xd3\xce\x64\x12\xb7\x7d\xc8\x64\x12\x88\x3c\x94\xb0\x21\x01\x0e\x00\x4a\x56\x3d\xfe\xef\x3b\x07\x00\x49\x80\x17\x59\x76\xf2\xb4\x7c\xb1\x45\xe2\x1c\x9c\xfb\x0d\xe0\x45\x29\x95\x81\xab\x4a\xac\xf9\x2a\xc7\x6b\xf9\x09\x05\x64\x4a\x16\x30\x89\xde\x4d\x4e\xfc\xca\xdf\xd1\xb0\x94\x19\xf6\x27\xc7\x9d\xf6\x2b\xa3\x77\xcd\xca\x08\x7e\x08\x6c\x7c\x41\x83\x83\x7e\xbd\x41\x2d\xf3\x2d\x2a\x0f\x15\xbe\x9a\x9c\x9c\xb0\x24\x41\xad\xa7\x2c\xcf\x67\x90\x48\x61\x14\x4b\x0c\xbc\xba\x61\x45\xe9\x11\x2f\x63\x24\xb7\x27\x27\x00\x00\x8b\xc5\x02\xae\x37\x08\xb8\x45\x61\xc0\x6c\x98\x01\xae\x01\x0b\x6e\x0c\xa6\xb0\xdb\xa0\x00\x81\x3b\x30\x84\x41\x03\x53\x08\x05\x17\x06\x53\x0b\x1c\xee\xe9\x10\xd8\x9d\xf4\xef\x76\xc9\x94\x15\xb2\x12\x66\x09\x7f\x5c\xf1\x9b\xe7\xdf\x9d\x82\xd9\x97\xb8\x84\xb7\x46\x71\xb1\x9e\x05\xdb\x4b\xc3\x72\xd0\x55\x59\xe6\x7b\x90\x59\x44\xb4\x06\x2e\x00\x6f\xb8\x36\x28\x12\xec\x6d\xba\x65\x0a\x0c\x81\xbf\xb5\xd0\xf5\x56\x2d\xee\x97\x69\xc1\x05\xbc\x66\x66\xd3\x83\xcd\xd1\xb8\xcf\x6f\x8d\x54\x6c\x8d\xb4\x88\xa8\x6b\x7e\xb4\x58\xfe\xd0\xa8\x2c\x12\x3d\x88\xe5\x4f\x56\xe5\x66\x14\xcb\x28\xc4\xeb\x6a\x95\xf3\xc4\x01\xb4\xff\x0f\xae\x7f\x83\x09\xf2\x2d\xaa\x11\x90\x86\xd0\xab\x4a\x24\x86\x4b\x01\x46\x82\x42\x53\x29\x01\x66\x83\x56\xf0\xda\x29\x97\x7e\x36\xe6\xc1\x49\xce\x05\x0a\xd3\xe7\x6b\xcb\x71\x07\x59\x25\x60\x8d\xc6\x52\x7b\x4d\x38\xa6\xb3\x25\xbc\xa3\xff\xde\xc3\xad\x05\xa1\x87\x08\xa4\x1d\x5e\x2a\xc5\xf6\xcd\xf7\x0b\xf7\xcf\xf9\x4f\xa1\x3a\xe7\x16\xd5\x8b\xe9\xec\x7d\x03\x5d\x93\x59\x23\xb0\x1f\xee\x4e\x0e\x13\x44\xbe\x31\x4a\xcb\x96\xf6\x78\x83\x19\x5c\x80\xc6\x3c\x9b\xb3\x24\x21\x3b\x9c\x27\xac\x64\x2b\x9e\x73\xc3\x51\xcf\x57\x52\x29\xb9\x3b\xff\x6a\x88\xba\x45\x69\x45\xbb\xc0\xe0\x9b\xfd\x34\x6b\xf6\xa1\xe7\xf2\x12\x4a\x26\x78\x32\x9d\xfc\x22\xab\x3c\x05\x21\x0d\x38\xb4\xc0\x40\x61\x86\x8a\x6c\x96\x54\x41\x42\xb7\x54\x81\xaa\x1d\xb6\x45\xd5\x95\x44\x4d\xfe\xbc\x65\x74\x4c\x26\x24\x0e\x8f\x91\x56\x4e\x3f\x58\x29\x2d\x81\xa4\x32\x5b\xc2\x4b\xb1\x7f\x6b\x54\x95\x98\xcb\xff\x51\x09\x85\xbc\x13\xe7\x91\xa0\xc8\x1f\x2c\x4d\xf5\xaf\xe6\xed\x2b\x96\x6c\xa0\x22\x9f\xd6\x46\x2a\xd4\xc0\x04\x70\xa1\x0d\x23\x62\x64\x06\x52\xe4\x7b\x4b\x91\x05\xa7\x08\x64\x36\xc8\xdd\x6a\xb6\xc6\x28\x6e\x66\xde\xe3\xb4\x5f\xe6\x61\x98\x48\x61\x2d\xb7\xa8\x04\xa6\xb0\x72\xd8\x4a\x85\xf6\x7d\x29\xb5\x21\x1f\x4c\xb9\x05\x6c\xd0\x71\xd1\x49\x3f\x36\xfa\x9a\x0d\xee\x6d\xdc\x4d\x58\x9e\x63\x3a\x8f\x76\x4f\x36\x98\x7c\xd2\xb0\x61\x65\x89\x02\x98\x01\x55\x09\xc3\x0b\xb4\xa0\x48\x61\x9e\x35\x14\x52\x5c\xef\xe0\x68\x70\x51\x56\xa8\x54\x82\xb4\x42\x38\xfe\x57\x08\x89\x42\x46\x59\xc0\x73\x46\x61\x03\x6f\x0c\x49\x28\x8a\x22\x75\x5c\xd9\x37\xe8\x88\xdc\x14\x33\x2e\x2c\xf0\x29\x68\xab\x60\x85\x44\x82\x90\xb0\x63\x7b\xc8\x24\xd1\x56\xb0\x9c\x27\x5c\x56\xda\xa9\xc3\x48\xbf\xa7\x93\x62\x2b\x1a\x59\xf9\x6d\xb9\x00\xc6\xd5\x1c\x5e\x82\x2e\x31\xe1\x2c\x07\x9b\x6b\x94\x35\x1b\xe2\x00\x04\x62\xaa\x09\xd3\xaa\xa5\xc1\x48\x9b\xb5\x1a\x74\x6d\x46\x8b\x45\x11\xfa\x56\x83\xd0\x92\xb2\x8c\x55\xe3\xfc\xa0\xce\xa1\xa1\x46\x6c\x36\x82\x15\xcb\x6b\x63\x32\x1b\xae\x9d\xc5\x36\x6b\xbb\x19\xcc\xaf\x8e\xb3\x57\xb0\x90\x7c\xd4\xad\xd4\x87\x92\xcc\x20\x44\x39\x9e\x64\x06\xd7\xab\x3a\xd3\x0c\xe6\x98\xd6\x5e\xc8\x11\xb5\xb5\x03\x4f\x13\x94\xcc\x6c\xc8\xee\x14\x06\xde\xac\x37\xd6\xf1\xcd\xbe\xe4\x64\x7b\xd6\xac\xac\xd3\xa5\xc3\xd2\x08\x82\xfc\xaf\x98\x75\xf2\x2a\x45\xfc\xe0\x67\x18\xd5\x82\xe8\x60\x23\x9a\x1e\x90\xcd\xdd\x38\x0f\x4e\x4a\x31\x0b\xb5\xda\x6a\x1e\x36\x6c\x8b\xc0\xea\xa5\x4d\xa8\xdc\x1f\xcb\x48\x2b\x4b\xe2\xa3\xfd\x75\x88\x8d\xb2\xaf\xb1\x47\x72\xf1\xff\xba\x29\x22\xbe\x14\x43\x6f\x02\x53\x39\x9e\xa5\xd0\xc0\x86\x98\x7a\x78\xce\x0f\x76\x78\x17\xbd\xa4\xc7\xd6\x20\xe3\x05\xf6\xfc\xea\x9a\xfe\xbe\x98\xce\x4e\x1f\x01\xfa\x2b\xd7\x65\xce\xf6\x8f\x84\xb6\x31\xe4\x57\x66\xd8\xa3\xe0\xaf\xdb\xb2\xf7\xc5\x34\x4e\xbb\xef\xef\x93\xeb\x63\xea\x06\x7a\xf4\x8e\x9b\x64\xe3\xd4\x72\xdb\xa3\x38\x61\x1a\x8f\x97\xf7\xb2\x07\x1f\xe8\xf1\x5e\x04\xd3\x41\x68\x7a\x32\xe3\xb5\xb2\xac\xed\xad\xe5\xf3\x21\x1a\x9d\x01\xd3\x4f\x0e\x13\xe2\x17\x5f\xf6\x95\xd7\x12\xd3\x28\xf9\x51\xe4\x84\x26\x72\x04\x41\xcd\xf2\xcb\x41\x8a\x66\x8f\x55\x59\x2b\x95\x61\xad\x51\x4d\x59\x60\xca\x19\x5c\xc4\x7d\xf1\xfc\x77\x7a\x3b\xae\x2c\x2b\x23\x9e\xe3\xb2\x03\xf6\xaf\xeb\xeb\xd7\x57\x3c\xc7\xc3\x90\x95\xca\x97\x30\xd9\x18\x53\xea\xe5\x62\xc1\xb4\x46\xa3\xe7\x3b\x5c\x69\x6e\xf0\x29\xa1\xd5\xf3\x44\x16\x8b\xef\xb3\xe7\xdf\xfc\xf8\x5d\x72\x96\xfc\x83\xfd\x90\xa4\xe9\xf3\xef\xbe\x5d\x3d\x4b\x7e\xf8\xe6\xac\xf3\x81\x7d\xff\x7d\xb2\x7a\x96\xfc\xf8\xed\xf3\x0f\x57\xb9\xdc\x7d\xf8\x4b\xaa\xb4\x60\xea\xd3\x5c\x6f\xd7\x93\x51\x3a\x06\x3c\xb7\x7e\xac\x44\xae\x6d\xcf\x3b\xe1\x05\x5b\xe3\x42\x6f\xd7\x5f\xdf\x14\xf9\x30\xb6\xbe\x76\x22\xd1\xea\x61\xd9\xea\xe9\x3b\xfb\xf9\xfd\x30\xf8\x31\xfe\xe4\xb5\x3b\x2e\x6b\xc1\x0a\xe2\xc1\x37\x02\x0d\x32\xd7\xec\x4f\xc6\x05\xa0\xf7\xc5\x4a\x92\x8a\x5e\x5d\x5d\x1f\x58\x96\xa2\x4e\x14\x2f\xa9\x46\x5d\xc2\xe4\x9a\x52\x56\x56\x6f\x61\xab\x34\x2a\x1b\x2b\x8d\x29\x30\x5b\xaa\xfb\xa6\x83\xaa\xba\x0d\xe6\x25\xec\x65\x05\x29\x6e\x31\x97\xf6\x7f\x05\x82\xaa\xd4\xab\x6b\xf8\x3f\x29\x48\x93\xf3\x03\x7b\xe3\x8d\x41\x25\x58\xfe\xc7\x9b\xdf\xba\x36\xf8\xaa\xfd\x34\x6d\x8c\xcc\xef\xfd\x34\x33\x73\x29\x32\x42\x2e\xd5\x7a\x72\xc0\x08\x72\xb9\x96\x7a\xe9\x55\x78\x40\x54\x92\x8a\x59\xbd\x1c\x08\xab\xe1\x33\x31\x3b\x6e\x0c\xaa\xc9\x51\xc4\xfa\xc5\xd6\x09\x88\xd6\x0f\xab\x5c\x26\x9f\x92\x0d\xe3\x62\x32\x6c\x2e\x60\x73\xc6\xd0\xdb\x47\xc7\x8e\x30\x84\x8d\x47\x8f\xa0\x23\x8d\xfa\xcd\xba\x33\xf5\xf5\xdc\xc1\xa6\x34\x53\xb2\x58\xf6\xca\xbf\x71\x46\x1f\xd6\x9d\xba\xaa\xd5\x11\x3a\x22\xbd\xa3\x92\x57\x2d\x8e\x71\x77\x8b\x8a\xfc\x2e\x3b\xe3\x26\x14\x57\xee\xbd\x5a\xeb\x50\x9c\x72\x24\x06\x80\x6d\xdd\x39\x0e\x56\x2a\xb9\xe5\x69\xbd\xdf\xa2\x54\x7c\xcb\x0c\xf6\x47\x02\xf7\x53\xfc\x1b\x17\x9f\x30\x75\x91\xd2\x1a\xd4\x57\xb7\x71\xb7\x55\x57\x9a\x77\x83\x95\x52\x97\x8f\x3e\xba\xc1\x11\xd4\xfd\x9c\x7d\x36\x22\xd7\xcc\xbe\x2a\x4a\xb3\xb7\x8b\xeb\xf1\xdc\x12\xa6\x59\x25\xa8\x98\xfd\xe9\x76\xa0\xaf\xbc\xbb\x27\x0a\x78\x3b\x3b\x7f\xda\x0c\x42\xba\x1b\x4d\x0f\xb8\xf7\xf0\xa7\x47\xfa\x77\x5c\x85\x3e\xb6\xa6\x0b\xb0\x8c\xbb\x45\x34\xe7\x8d\x14\x11\x7c\x39\x82\xb7\xbb\xa1\xc6\x41\xf0\x7c\xac\xc3\x5a\xa3\x21\xdc\x52\x19\x4c\xdb\x49\x28\x48\x9b\xb0\x6c\x4f\xab\x7c\x0f\xc6\x20\xe7\xda\x0e\x2a\x5c\xe3\x18\x8d\x5d\xb9\x6e\xec\xdd\xd6\xe2\xa5\x1f\x6f\xc0\x81\x9e\x67\x60\x5f\x32\x9a\x5b\x67\x92\x3f\x4b\x99\x77\x4d\x85\x62\xa9\xae\xa1\x2c\x40\x67\xf9\x05\xdc\xc6\x02\x88\x57\xbf\xb3\xee\xbf\x46\xbb\xd9\x74\xf6\x1e\x2e\xc0\xa8\x0a\x07\xbb\xb9\x08\xf0\xe8\x56\x8e\xeb\x3e\x57\x53\xd3\xf8\xd8\xcc\x11\x7a\xa0\x81\x1c\x93\xcb\x3b\x63\xfb\xc2\xcb\x4b\xc8\x58\xae\x71\x58\x9d\xc0\x05\x37\x9c\xe5\xfc\x6f\x37\xa5\xa8\x07\x35\xcc\xb4\x03\x1f\xeb\x4c\x76\x88\xce\x8b\x16\x0d\x01\x4e\x3b\x93\x9a\x59\xb7\x3f\x22\xfa\x6a\x94\x17\x35\xf2\x9e\x82\x78\x8a\xc2\xf0\x8c\xa3\x82\x0b\x98\xf4\x02\xe6\xa4\x8f\x33\x48\x00\x70\x11\xce\x40\xa6\x2d\xae\x65\x80\x77\xf6\xa4\x8f\xa3\x8d\xe9\x70\x11\xf4\xea\x0f\xc0\x10\xa6\x93\x71\x1c\x11\x43\x75\xe4\x9e\x04\xf8\x3a\xfe\xf5\x4f\x34\x91\x2a\xfc\x78\xf1\xc0\xc8\x2c\xf0\x90\x9f\x1d\x10\x79\x85\x53\xc9\x01\xc3\xe9\xaa\xa3\x43\xc7\x8e\x9b\x4d\xaa\xd8\x2e\x7c\x19\x2d\x68\x0f\x57\xac\x47\xb3\x4f\x6e\x72\xec\x4e\xb9\x7c\x6d\xca\xd4\xba\x2a\x50\x98\x08\x90\x89\xb4\xc1\xee\xe3\x81\x07\xb2\x27\x79\xcd\xd4\x78\x3e\xba\xf5\xbf\x8d\xcf\x25\x14\x64\xec\xf4\x12\x8b\x52\x2a\xa6\xf6\x7e\xde\x5c\x1f\xdc\xd9\x32\x99\x0a\x63\x99\xa7\x11\x06\x7b\x0c\xe4\x4e\xd4\x1c\x01\x0a\x61\x85\x5c\xac\xc1\x28\x26\x74\x86\x4a\x61\x3a\xa7\x8d\x54\x30\x51\x12\xb8\x0b\x62\x2a\xe1\xa9\x67\xc2\x7e\x5b\x19\x4d\x86\x2d\x66\x37\x63\x06\x2d\x81\x1b\x3b\x4e\xb6\x83\xd8\x52\x52\x57\x16\xd3\x84\xb9\x46\x3b\xa7\x1a\x66\xdc\xeb\x3c\x4e\x90\x7f\x79\x39\xb2\x55\x8e\x6e\x90\x51\x4b\xb6\x73\xdc\x48\xc9\xb5\x9f\xae\x0f\x3b\x6c\xf4\xf3\xa9\x57\xd2\x90\x3d\x9d\x3f\x0d\xe7\xd4\x6d\x58\x70\x10\xb3\x31\x13\xf3\x62\x78\x98\x85\x79\x51\xcb\xd5\x7f\x30\xe9\x9a\x99\x35\x2d\x96\xa6\x3a\x42\xc3\x8d\x6e\xbc\xc9\x6b\xa8\xe3\x5c\x72\x27\x50\xe9\x23\xac\x8e\x6b\x60\x79\x2e\x77\xce\xaa\x52\xd4\x46\x49\x77\x9a\xa1\x69\x7b\x47\xda\x0a\x13\x56\x69\x6c\x0d\x39\xf6\x2b\x22\x39\x30\x58\x32\x4d\x54\x35\x25\x7e\x0c\x6f\x67\xe7\x7f\xfa\x41\x65\x4d\xec\x86\xc5\x7c\xad\x10\x05\xd9\x9a\xae\x0a\x6a\x06\x45\xea\x4e\x15\x32\x69\x4f\x47\xbc\xa1\x59\x0a\xeb\x33\x8e\x11\x93\x6a\x86\x60\x5e\x21\xbe\x75\x18\x2e\xc6\xba\x41\xbe\x69\x57\xe0\xfc\xa9\x73\x60\xa6\x9f\x0c\xd9\xda\xd1\x96\xf6\xb5\xc3\xd7\x0b\x50\xf4\x44\x5f\xe0\x02\xce\xe6\x67\xd1\xf7\x5a\x25\x71\xb8\xec\xd8\x5d\xb7\x3c\x3c\xd2\x00\xe3\x90\xe3\x74\x4d\xde\x06\x2c\xb4\xa7\xbf\x51\xc9\x5e\xb8\xab\x83\x08\x6f\x63\x04\xcb\x73\x0a\x37\x3e\x56\xcc\xe1\xa5\x3b\xf3\x29\x2a\xed\x62\x86\xab\x91\xea\xd3\xaa\x1e\x46\xdb\x7f\x59\x4c\x0e\x77\x13\x83\xba\xc7\x73\xf4\x42\xaa\xd4\x1d\x27\x59\xe3\x75\xdf\x63\x8c\xae\xaf\xf4\xe7\x44\xcc\x8d\x1a\xea\x02\xad\x36\x0b\xdd\x9c\xdf\xb8\x31\x04\x15\x18\xc7\xd9\x55\xbf\x1e\x3f\x26\x1a\xdd\x13\x5c\xce\xe6\x67\x61\x64\x81\xf8\xa8\xd3\x9d\x83\x9d\xc0\xc8\xc9\x5e\x1d\x3f\x5c\x64\xb1\xec\x30\x7b\x37\xc2\x4b\xc2\x9d\xfc\x91\x6f\xd6\xa7\x65\x0f\x3b\x25\xf3\xc7\x70\xb7\x91\x94\x09\x8d\xbb\xc6\x71\xa4\xc5\x11\x80\x0e\x36\x3e\xb5\xc1\x8d\xf4\x57\xd4\x76\x64\x82\xdb\x22\xa7\xa3\x76\x17\x42\x74\x2d\xef\x28\x0d\xb6\xa4\x3f\x26\xaf\x8c\xb5\x27\xdd\xf1\x46\xf8\xe9\xeb\xa1\x7c\x83\x05\x1f\xb9\x54\xe3\xfe\xd6\x97\x6a\xe2\xb2\x7d\x1e\xd4\x71\x9f\x97\xbe\x3a\x46\x36\x18\x48\x42\x73\xfb\xac\x00\xf2\x65\x83\xc7\x97\x0d\x1c\x5f\x20\x68\x0c\xf9\xcf\xe3\x82\x45\xa3\x46\xb8\x27\x52\xdc\x0d\x5d\x0d\x22\xcd\xf8\xb4\xd1\x96\x17\xf5\xfd\x87\x53\xc0\x2c\xc3\xc4\xf0\x2d\xe6\x7b\x58\x55\x4a\xd8\x1a\xb1\xcd\xd4\x3d\x95\xff\x54\x32\xc5\x0a\x70\x29\xb4\x49\xe3\x41\x3b\x25\x85\x61\xbc\x83\xc6\xca\xb0\x52\xa2\x87\xed\x2f\x9e\xe7\xf6\x0c\xdf\x2a\x21\xa5\x34\x0f\x55\x99\x12\x93\x64\x0b\x81\xf3\x37\x20\x6f\x11\xa1\x1e\x79\xae\xb9\xd9\x54\x2b\x3b\xf1\x74\xf3\xd9\x45\x96\xf3\x52\x2f\xca\x2a\xcf\x17\xcf\xbe\x7d\x36\xa8\x00\x22\xc4\xfb\xba\x2f\x04\xfa\xd2\x0f\xab\x00\x9e\x59\x6e\x9b\xac\xfc\x82\x04\xfe\x05\x22\x80\x2b\x27\xe6\x61\x5b\xd3\x71\x45\x7a\xe2\x1a\x85\x68\x9f\x9e\x3f\x25\xc0\x48\xe5\xb6\x5d\x0d\x89\xb6\x11\x22\x26\xe4\xd9\xd9\x19\x95\x13\xf1\x92\xee\x95\x38\xb8\x80\x85\x77\x90\x68\xb6\xe7\x6e\xd6\x45\xbd\xf5\x2f\xce\x18\xdb\x5b\x30\xd6\xd7\xbb\x41\xdb\xfa\x87\xbf\x4e\x48\xee\xc9\xb6\x48\x9e\xce\x45\x74\xbf\xc6\xa1\x6c\xfe\x8d\x8a\xae\x61\xa3\xef\x32\x38\x8b\xf9\xea\x5e\xd2\x83\x0b\x5f\x5b\x8d\x5c\x35\x78\x32\x00\xfe\x3a\x6c\xa1\xbb\xd0\xe1\xf9\x7e\x07\xb8\x7f\x7d\x6f\x00\x3e\x3e\x4e\x7f\xd2\x51\x4b\x77\x10\x4e\x62\x9b\xfa\x09\xe0\x29\x18\xb9\x1c\xe6\x72\x36\xa4\xa0\x81\x33\xff\xce\x94\x3b\x68\x2a\xf1\xa6\x94\x1a\xc3\x04\x6e\x17\x7e\xf4\xe1\xee\x23\x14\x68\x36\xd2\x95\xe3\x6b\x34\x2f\xed\x68\xcb\x0f\x85\xea\x6f\x66\xa3\x64\xb5\x76\xa6\xf0\xb1\xe6\xf3\x23\xd8\x92\x21\x63\x49\xa8\xf1\xba\xac\x87\x8f\xa1\x1b\x7c\x1c\xc4\xe4\x3f\x0f\x23\x8a\x4c\x27\x34\xdc\x5f\x58\x79\xf0\xde\x5b\x2d\x61\xae\x75\x85\xe7\x5f\xf9\x29\xef\x88\x74\x07\x75\x14\xa1\xb3\xa2\xd6\x9b\x69\x87\x84\x53\x60\x66\x39\x68\x5a\xb3\x88\xf2\x7a\xe6\xf2\x40\xaa\xc7\x07\xe8\x9f\xcd\x48\x40\x51\xc0\x44\xdf\xc4\x03\xd3\x23\x46\x5c\xb5\xd9\x7a\xaf\x2b\x18\xa7\x23\x3b\x77\xcc\xdc\x02\x07\x66\xde\x0d\x52\x75\xe8\xbb\x3b\xf9\x6f\x00\x00\x00\xff\xff\x6f\x74\x46\x01\xc8\x2d\x00\x00" func exampletokenCdcBytes() ([]byte, error) { return bindataRead( @@ -117,31 +95,11 @@ func exampletokenCdc() (*asset, error) { } info := bindataFileInfo{name: "ExampleToken.cdc", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa3, 0xe, 0x48, 0xc7, 0xcb, 0xdf, 0xfc, 0xeb, 0x95, 0x72, 0x60, 0x3e, 0xf8, 0x54, 0x6e, 0x1e, 0x6d, 0x7, 0x76, 0x31, 0xb2, 0xe9, 0x6c, 0xa3, 0xd0, 0x89, 0x1c, 0x68, 0x98, 0xb0, 0x42, 0x6c}} - return a, nil -} - -var _fungibletokenV2Cdc = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x59\x4b\x8f\xdb\x38\xf2\xbf\xeb\x53\x14\x3a\x87\xd8\xf9\x3b\xee\x39\xfc\xb1\x87\xc6\x66\x32\xc9\x64\xb2\xc8\x65\x11\x24\xbd\xc9\x61\xb1\x80\x69\xa9\x64\x71\x42\x91\x1a\x92\xb2\xe3\x6d\xf4\x77\x5f\x54\x91\xd4\xcb\x72\xb7\x3b\x8b\x39\x6c\x1f\x12\x5b\x22\xeb\xfd\xf8\x55\xf9\xfa\xc5\x8b\x2c\x7b\x06\xb7\x15\xc2\x7b\x65\x0e\xf0\xbe\xd5\x3b\xb9\x55\x08\xb7\xe6\x1b\x6a\x70\x5e\xe8\x42\xd8\x22\xcb\x9e\x3d\x83\x4d\x7a\xc9\xef\x36\x90\x1b\xed\xad\xc8\x7d\x96\xf1\xf5\xf9\x9b\x20\x1d\x68\x03\xca\xe8\x1d\x5a\x10\x1a\xa4\xf6\x68\x4b\x91\x63\xe6\x2b\xe1\x41\x28\x05\x65\xba\xea\xf9\x6a\xa2\xeb\xe0\x60\x5a\x55\x40\x25\xf6\xf4\x8a\x9e\x97\xc6\xd6\xe0\xcd\x3a\xcb\x3e\x94\x20\xa0\x75\x68\x1d\x1c\x84\xf6\x8e\x0e\x14\xd8\x28\x73\x04\x01\x1a\x0f\x13\x5a\x2b\xf0\x15\x4a\xdb\xcb\x5c\x18\x24\xc1\x3c\x68\xc4\x82\x2e\xcb\xba\x51\x58\xa3\xf6\x74\x12\x46\xaa\xf6\x32\xaf\x60\xdb\xfa\x48\x8a\x19\xb8\xac\x30\x67\x48\x74\x97\x1c\x14\x58\x4a\x8d\x05\x48\x0d\xbe\x92\xae\x93\x62\x1d\xec\xfa\x45\xb4\xca\x6f\xc0\xa2\x33\xad\xcd\x07\x37\xb3\xec\x37\x91\x57\x53\xfb\x74\xe7\xfc\xb1\x41\x66\xee\x4e\xb9\x9f\x27\x1a\x99\x7e\xb4\x66\x2f\x0b\xb4\x9b\x15\x6c\x3e\x61\x8e\x72\xcf\x9f\x85\x2e\x60\xf3\x56\x28\xa1\x73\x9c\xbb\xed\xd8\xdb\x6e\xa2\x5e\xae\x84\x45\x68\x2c\xbe\xcc\x8d\x2e\xa4\x97\x46\x3b\x26\xd5\x18\xe7\x87\xcf\xd8\xe7\x16\x9d\xb7\x32\xf7\x19\x09\x8a\xdf\x31\x6f\xe9\x25\x98\x92\x25\x2f\x5b\x9d\x87\xc3\x6c\x2e\x04\xd6\x64\xcd\x7c\x8f\x40\x7c\x1c\x36\xc2\x0a\x8f\xb0\xc5\x5c\xb4\x24\x8b\x87\x9d\xdc\xa3\xe3\xe3\x14\x14\xfc\x41\x6c\xa5\x92\xfe\x48\xb6\x71\x95\xb0\x98\x09\xb0\x58\xa2\x45\x9d\x73\x3c\x05\x37\x32\xf5\x20\x97\xd1\xea\x08\xf8\xbd\x31\x2e\x92\x2a\x25\xaa\xc2\xf5\x12\x65\x52\x83\xd1\x08\xc6\x42\x6d\x2c\x26\x89\x7b\x53\x50\x60\x52\x4c\x3b\x13\x05\x0a\x11\x3a\x91\xa6\x16\xdf\x10\xf2\xd6\x79\x53\x77\x16\x8e\xa6\xe9\x9c\x48\xb6\x19\x5b\x99\x02\xdc\xc0\x5e\x58\x69\x5a\x3a\x2d\xf5\xce\xc1\x41\xfa\x8a\xc9\x87\x68\x5c\x67\xef\x8d\x05\xfc\x2e\x88\xcc\x0a\x04\x94\xa2\xcd\xd1\x43\x2e\x34\x6c\xb1\xa7\x8e\x05\x6c\x8f\x29\xa1\xa4\xde\x65\xc1\x1c\x90\x82\x62\x14\x2d\x2f\xae\xb3\x4c\xd6\x8d\xb1\x1e\xbe\x48\x3c\x7c\x42\x67\xd4\x1e\x2d\x94\xd6\xd4\x70\x35\x7c\x74\x95\x65\xd7\xd7\xd7\xe3\xe4\xa1\x27\xa3\xa7\xb1\x40\x74\xb2\x88\x18\x2d\x16\x07\x85\xc2\xe2\x1f\xad\xb4\x73\x69\x35\x4e\x06\xa6\xdc\x0b\x0b\x5f\x11\x9c\x97\x4a\x85\xa2\x21\x3d\x08\x37\x2a\x3a\x50\xa1\xed\xe3\xc6\xf3\x37\x0e\x29\x53\x73\xe4\x94\xad\x62\x92\xad\x0f\xde\xaa\xd1\x57\xa6\x88\xce\xa9\x85\x3e\x42\x63\xcd\xef\xc8\xc5\x89\xd8\x04\x66\x54\x81\x48\x52\x66\x6a\xf4\xa4\xd6\xb8\x15\x93\x8c\x95\x23\x84\xf0\xf6\x48\xca\xd6\x28\xb4\xeb\x74\x5d\x73\x31\x0c\x61\xd0\x3f\xa5\xcf\xfc\xac\xf3\x72\xd0\x39\x19\xc5\x8d\xd2\xbd\x2f\x1d\x22\xcf\xd1\xb9\x85\x50\x6a\xd9\x49\x32\x29\x6b\x77\x59\x06\x00\x70\x7d\x0d\x6f\x34\xa0\xf6\xd2\x47\x3b\x97\xc6\x92\x2c\xe6\x20\xf5\x8e\xc9\x53\x98\x15\x56\x1c\x84\xe2\x98\xe7\x58\x0b\xfe\x17\x21\x81\x98\xd0\x90\xe5\x90\xdc\xd7\x74\x7b\xab\x30\xb1\xbc\xe6\x9e\x83\xfb\xe0\xd6\xa0\x32\xd6\xd2\x53\x68\x1e\x2a\xd4\x89\x09\x19\x2b\x71\xd7\x8f\xb0\xdc\x0f\x99\x2d\x44\x6d\x5a\xed\x6f\xe0\x1f\xef\xe5\xf7\xbf\xfc\xff\x8a\xef\xde\xc0\x9b\xa2\xb0\xe8\xdc\xeb\x15\x57\xcf\x1b\xf8\xec\xad\xd4\xbb\xe5\x8f\x88\x55\x60\x63\x9c\xf4\x21\x48\x1f\x16\xea\x5d\x38\x7a\x22\x93\x37\x17\x48\x94\x92\x32\x3d\x18\x89\xda\x47\x36\x8b\x8b\x94\xd1\x79\x2c\x5f\x31\x84\x42\x94\x90\x4f\x93\x21\x29\xe3\x13\x91\xa1\x33\xb9\x98\xa5\xc0\x62\xdf\x1f\x1b\x5c\x9f\xf0\xfd\xe0\xa1\x6b\x9f\x91\xe1\x98\x97\xd1\xb0\xd9\xa6\x1e\x42\x39\xb6\xea\xee\x0e\x4a\xb6\x42\x41\x25\xd2\x34\x18\xea\x7c\x63\x9c\x93\xb1\x4a\x9a\x12\x72\x8b\x82\x85\x88\x95\xb2\x89\x66\x70\xbd\xe8\xa4\x31\xf5\x5f\x6e\xe3\x64\x73\x61\xa5\x3a\xc6\x7e\xcc\x39\x68\x0e\x1a\xa2\x24\x63\x3d\x86\x3e\x3a\xed\x72\x7d\x21\x8c\x39\x92\x58\x26\x0b\x82\x6b\xb7\x11\xa4\x4c\x0d\x68\x0e\x1a\xed\x73\x37\x88\x87\x74\x99\x1a\xa2\x45\xdf\x5a\x0a\xa0\xd8\x78\xba\x02\x6e\xb1\x36\x7b\x8e\xa5\x50\xc8\x07\x17\x47\x44\x6e\x07\x2d\xf2\xb9\x8b\x7a\x80\xc2\x3d\x2a\x0a\xd6\xa6\xdd\x2a\x99\x27\x9c\x22\x5d\xc0\x5f\x1e\x04\xd9\x6f\xab\xb0\x1e\x11\x4b\xde\xe0\xce\xd7\x09\x0f\xce\x1b\x9b\x52\x7f\x60\x9c\x68\x53\x91\xe7\x14\xc5\x23\x42\x39\x17\x59\xe9\xa5\x50\xea\x08\x79\x28\x64\xb2\x6f\x9d\x0f\xeb\x13\xb8\xd6\xe2\x08\x3b\x4b\xa5\xd4\x50\x61\x4e\x7c\x3a\x1d\xa9\x63\xa5\x98\x20\x75\xe4\x5e\x78\x9c\x48\xd1\x74\x6d\x36\x82\x4b\x73\x70\xe0\x1a\xcc\x65\x29\xf3\x48\x37\xf6\x64\x13\xe9\x8e\x28\x70\x1c\x26\xdf\xf7\x40\xab\xb2\xa6\xdd\x55\x30\x00\x10\x97\x2a\x14\xb0\x00\x6b\x45\x46\x79\x44\x27\x76\xde\x25\x2a\x11\xad\x89\x1e\x23\xd9\x47\x34\x9e\xae\x47\xcc\x8e\x61\xe1\x5e\x92\x2f\xbb\xf8\x9f\x54\xb2\xe5\x0d\xfc\x72\xc7\x01\x7d\x0f\x77\x1d\x15\xfa\x23\x00\x38\x79\x14\x7b\xce\xc6\xa2\x8b\x10\xb5\x8c\x8a\x84\x78\xa3\x04\x81\xbd\x50\x2d\x9e\x5c\x0b\x57\xd6\x3b\xf4\x11\xa2\x2e\x96\xf0\xea\x15\x44\x61\x4e\x8e\xd3\xdf\xd5\xd7\xbe\x77\x85\x73\x50\xb7\xce\x13\x1c\x22\x76\x4e\xd4\x48\x20\x81\x3e\xc7\x42\x91\x60\x5d\xdf\x76\x58\xb3\xab\x13\xf2\xd4\x18\x4e\xfb\x4d\xf8\x3f\xf5\x1b\x87\xaa\x5c\x73\x38\xbc\x5e\x8b\x50\xe9\x53\xa1\xe7\x57\x3b\xf4\xb7\xc7\x06\x17\xcb\xb5\x2c\xa8\xe8\x96\x12\xed\x72\xc4\xe9\x3e\x1b\x7f\xba\xef\x3b\x43\xc2\xed\xff\x7d\x67\x88\xbd\x6c\xa6\x31\x48\x1d\x1d\x73\x41\x63\xf8\x8a\xa9\x1c\x4b\x9d\xab\xb6\x40\x10\xd0\x81\xff\x20\x46\x5e\x61\xfe\x6d\x6c\xee\x58\x84\x3a\x2a\x07\xec\x00\x15\x81\xe8\x4b\x30\x74\x30\x43\x00\x4a\x19\x0c\x6a\x52\x61\xd2\xa1\x79\xc0\xbc\x02\x25\xbf\x21\xb8\x46\x49\x46\x58\x35\xb4\x0d\xd5\xe9\x8e\x88\x43\x5d\x84\x17\x84\xbf\x65\xc9\x69\xe3\xa1\x51\x01\xee\xc3\xe5\x2d\x25\x39\x6b\xda\x52\xa2\xe9\xc1\x8b\x6f\xd8\xf7\x05\xea\x15\xf1\x8d\xa3\x66\x39\xef\x86\xd1\x28\xf8\x50\x26\xb3\x50\x94\xc0\x91\xe6\x22\x44\x67\x4a\xda\xe5\x58\xa4\x1d\xfa\xcf\x6d\x43\x88\x1f\x0b\x3e\x40\x21\x4a\x9d\x9a\xfc\xc8\x15\xbe\x6f\x63\x4a\x3a\x4f\x19\xb3\x0f\x73\x14\x1f\x8c\x78\x95\x51\x6c\x54\x9a\xe4\x68\xbc\x9b\x95\x6b\x2f\xf1\xc0\xc2\xcd\xf3\x5d\x2c\x6f\xe0\xee\x96\x53\xe6\xad\x31\xea\xa4\xc2\x58\x84\x3b\xf0\xb6\xc5\x1b\xb8\x2a\xda\xba\x3e\x5e\x8d\x72\x66\xa4\xd9\xa7\x28\xf7\xa1\x42\xee\x05\xc6\x72\xb8\x92\x61\x29\xd6\x74\x98\xa9\xa5\x8b\xf2\x86\x39\x89\xde\x8e\x52\x2d\x51\x7b\x93\xb4\xe6\xc8\x16\x3a\xde\x02\x9a\x13\x98\x90\xab\x78\x83\xf1\x3b\x15\x9c\x58\xd8\x48\x50\x22\x5a\x60\x39\x02\x08\xb3\x06\x91\xee\xd4\x1e\x8b\x50\x3d\xe8\xe3\x32\x58\xe4\x89\x06\x99\x14\x91\x1e\xa7\x8c\x30\x5e\x81\xe4\xe8\x55\x04\x11\x5d\x14\x87\x95\x0c\x77\xb5\x7e\x1f\xd3\x59\x67\x05\xb1\x2e\xaf\xe0\xd6\x0a\xed\x4a\xb4\xc6\xae\x3a\x34\x15\xd6\x0b\x69\x5a\xec\x31\x61\xdb\x83\x6d\xf2\x86\x4b\x3a\xc3\x11\xfd\x53\x52\x8c\x55\xb9\x19\x48\xd3\x33\x1e\x8e\xa9\xeb\x6e\x84\x1d\xa5\xe2\x29\x6c\xff\x14\x59\xbc\x43\xe7\xad\x39\x62\xb1\x88\x35\x2b\xf5\x3d\x78\xd5\x55\xf1\xae\x21\x4d\x72\xe9\x6f\xe8\xe7\x9a\xcb\xfe\x71\xe7\x0f\x89\x26\x86\xff\xc3\x79\x7a\x7d\x0d\x6f\x51\x99\x43\x68\x01\xe4\xeb\xe1\x3a\x22\x95\x74\xd7\xda\xd8\xb0\x6c\xab\x5f\x7a\x59\xc7\x35\x17\xc7\xdd\x94\x1e\xc3\xd6\x1d\xa6\xdc\xea\x66\x34\x02\x42\x82\xeb\x74\x17\x24\x31\x58\x63\x03\x18\xaf\x32\xd7\x61\x78\x5e\xc3\x88\xbe\x2c\x4f\x3a\xb4\xfb\xdc\x6e\x49\x9a\x85\x29\x43\x02\xfe\xf5\x97\xbb\x19\x4a\xf7\x3f\x2f\x96\xcb\x19\xd0\x13\x2b\xc0\xdd\x98\xec\x0d\xa7\xea\xfd\xb8\xe7\x03\x2a\x87\xf3\xb8\x29\x94\x30\x10\x1a\xb0\x6e\xfc\x11\x0a\xc9\x08\x5b\xd8\x63\xc2\x31\xb1\xb4\x04\x0c\xc5\xed\xbd\x33\xc3\xa1\x32\x50\x18\xfd\xdc\xcf\x51\xee\x17\x2d\xb3\xf6\x59\x81\x6b\xf3\x8a\x98\x8c\x5f\x7f\x3e\x48\x9f\x57\x5b\x23\x6c\xb1\x59\xc1\x86\x9f\xbd\x37\xf6\x20\x6c\x81\x76\x03\xe8\xf3\xf5\x59\x53\xdc\x9f\x85\x3a\x7f\x42\x61\x8c\x4c\x93\xf9\x67\x43\xf8\x9f\x44\xe4\x5f\xf0\xfa\x35\x94\x42\x39\x7c\xac\x8f\x30\x84\xf4\xc6\x8a\x1d\x85\x9c\xaf\x28\x00\x2d\xf6\x19\x9e\x3a\x80\x3f\x36\x32\xe7\x8c\xdc\x86\x0b\x58\x3c\x9a\x62\xef\x82\x1b\x3f\x07\xf2\x1f\x85\xaf\x28\x58\x06\x5f\x5f\x9f\x97\x29\x4c\x12\x63\x91\xa4\x1b\xcb\xc4\xdb\xaa\x34\x74\x0c\x06\x8d\x4b\x05\xfb\xc8\x17\x93\x5c\xfd\xb7\x1f\x14\xeb\xb9\xeb\x21\xd2\xa5\x12\xf2\x7a\x84\xde\xba\x2a\x4c\x50\x1d\x85\x5f\xfb\xb9\x89\xa6\xa6\x21\x74\x23\xe6\xa8\x69\xa6\xa1\x39\xca\xa3\xd5\xc2\x0f\xe0\xd9\x74\x31\xe9\x0d\xf9\xac\x75\x03\x8f\x85\xa5\x63\x3f\x3f\xe4\x42\x1b\x4d\xfe\x05\x2d\x6a\x74\x0d\xf5\xa2\x98\x8b\xad\x2e\xd0\xaa\x23\x49\x17\xf7\xd8\x17\x5a\x37\xc9\x33\x63\xdf\xf9\xb0\xd6\x52\x9d\x8b\xd6\x99\xad\xc5\x26\x8c\x29\x9b\x7e\x6f\xf1\x25\x3a\x21\x36\xaa\x07\x36\x17\x1a\x0f\xd3\xed\x45\x22\x4c\x80\xe9\xf4\xfe\x9f\x31\x57\xda\xb9\xf2\x78\xd2\x8c\xe1\xe7\x47\xa6\xc3\x37\x61\x24\xec\x67\xbd\x34\x1c\xaa\x30\x52\x0b\x4d\x18\x11\xff\x68\x85\x0a\xdf\x66\x7a\xf9\xcc\x78\x78\x7f\xe1\x10\x1c\xb7\xd0\x61\x45\x21\x54\xb7\x2f\x81\xcd\x16\x4b\x63\x71\xc3\x53\x50\x84\x10\xa1\x9e\x47\xa6\xfd\x82\x8d\x7f\xa5\x98\x23\x1e\x97\xc6\x5b\xdc\x49\xad\x29\x02\x27\xbf\xb0\xf4\xbf\xbd\xcc\xdc\xbe\xc0\xb6\xaf\x5e\x41\x90\x72\x71\x0a\x82\xe0\xe5\xc3\x76\xff\x7b\x17\x43\xc9\x98\xc3\xa9\x3c\x65\x6b\x6f\xe3\xc6\xe2\x9e\x7f\xf8\x48\xc7\x45\x98\xcb\xa6\x53\x7a\x7a\x7f\xce\x1d\xf7\x97\x0e\x5f\xa2\x28\x68\xf0\xea\x19\xc6\xf9\x6b\xe4\x7b\x39\xb3\xe6\xbb\x78\xf4\x9a\x43\x0e\x53\xd8\x40\x43\x86\x73\x68\x7d\xff\x1b\x40\x6e\x74\x6e\xd1\x47\x5c\x14\xcd\xd3\xef\xa2\x43\x89\x97\xae\xab\x4e\x53\x7a\xb1\x30\x0d\x26\x97\x6e\xdc\x49\x3b\xbf\x48\xed\x82\x84\x23\x5d\xd6\xd2\x7d\xd0\xce\xb3\xe3\xc7\xd0\x66\x79\x03\xf3\xde\xff\x55\x68\x02\xfa\xc9\xfa\xbc\x3c\xcc\x4d\xdd\x08\x3f\xf8\x9d\x93\xf4\x3b\xb3\x74\x99\xee\xd3\x59\x8c\x61\xfc\x85\xd5\xfa\x03\xcb\x97\x74\xe3\xe2\xe5\x0b\x9c\xcf\xe3\x27\x66\xc6\xff\xa5\x77\x27\x52\x2f\x7f\x28\x59\x5c\x5b\x3f\x9a\x25\x7d\x7c\x3c\x58\xac\x26\xd9\xc1\xab\x49\xfc\x8d\x60\x66\x4c\x8c\xb8\x7d\xd4\xc7\xf8\x33\xab\x89\x67\x46\x5d\x81\x83\xaa\x12\x94\x4f\xff\x46\x6b\x2e\xe9\x08\x5d\x92\x4c\x59\x2e\x9e\xbc\x5a\x3c\xb3\x23\xfc\x69\xfd\xd3\x0d\x5c\xdd\x56\x48\x82\xaa\xb8\x76\x4d\xf6\x08\xf6\x64\xb8\x31\x94\xf8\xbc\x99\xc2\xbf\xf7\xff\x09\x00\x00\xff\xff\xaa\x46\x21\xb3\x3f\x21\x00\x00" - -func fungibletokenV2CdcBytes() ([]byte, error) { - return bindataRead( - _fungibletokenV2Cdc, - "FungibleToken-v2.cdc", - ) -} - -func fungibletokenV2Cdc() (*asset, error) { - bytes, err := fungibletokenV2CdcBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "FungibleToken-v2.cdc", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xee, 0x38, 0x15, 0xb2, 0xa3, 0x2a, 0xcf, 0x4f, 0x15, 0x1e, 0x4b, 0x31, 0xdd, 0xcc, 0x96, 0xd0, 0xcd, 0xe8, 0xd4, 0x35, 0xbc, 0x76, 0xbc, 0xc, 0x91, 0x17, 0x70, 0xb2, 0x97, 0xdd, 0x19, 0x5f}} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfc, 0xad, 0xcc, 0x9b, 0x62, 0x90, 0x88, 0x29, 0x8f, 0x6d, 0x6c, 0xc2, 0xc4, 0x51, 0xe8, 0x9e, 0x16, 0x71, 0xd8, 0x7e, 0x97, 0x7c, 0xfe, 0x9c, 0x5, 0xb9, 0x58, 0x5a, 0xda, 0x74, 0x6e, 0xb6}} return a, nil } -var _fungibletokenCdc = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x5a\x5b\x8f\xdb\xc6\xf5\x7f\xe7\xa7\x38\xb0\x1f\xbc\xca\x5f\x2b\x19\xf9\x17\x01\xba\x68\x12\xaf\xd3\x2c\x60\xa0\x2d\x82\x78\x9b\x3c\x04\x41\x35\x22\x0f\xa5\x81\x87\x33\xcc\xcc\x50\x34\x63\xf8\xbb\x17\xe7\xcc\x0c\x6f\xa2\x76\xd7\x4e\x1f\x0a\xd4\x2f\x96\x28\xce\xb9\x9f\xdf\xb9\xcc\x6e\xbf\xf8\x22\xcb\x9e\xc3\xfd\x11\xe1\x4e\x99\x16\xee\x1a\x7d\x90\x7b\x85\x70\x6f\xde\xa1\x06\xe7\x85\x2e\x84\x2d\xb2\xec\xf9\x73\xd8\xa5\x1f\xf9\xb7\x1d\xe4\x46\x7b\x2b\x72\x0f\x52\x7b\xb4\xa5\xc8\x31\xcb\x88\x50\xff\x15\xfc\x51\x78\x10\x4a\xcd\xc9\xa6\x93\x0e\x5a\xd3\xa8\x02\x8e\xe2\x84\xe0\x0d\x3d\x2f\x8d\xad\xc0\x9b\x4d\xf6\xa6\x04\x01\x8d\x43\xeb\xa0\x15\xda\x3b\xfa\xbd\xc0\x5a\x99\x0e\x04\x68\x6c\xc1\x4f\x48\xad\xc1\x1f\x51\xda\xfe\x7b\x16\x28\x6b\xc4\x82\x4e\xca\xaa\x56\x58\xa1\xf6\xf4\x1a\x4c\x14\x19\xe4\xdd\xb0\xfc\x23\x22\x33\xf1\x4a\xa3\xc8\x46\xa4\x10\x51\xb1\x8d\x42\x07\x42\x17\xa0\x45\x25\xf5\x21\x63\x75\xfd\xc4\x02\xae\xc6\x5c\x96\x12\xdd\x26\x98\xf0\x27\xd1\x28\xbf\x03\x8b\xce\x34\x96\x0c\xf6\xbd\xc8\x8f\x20\xf2\xdc\x34\x2c\x9b\xf0\x60\x5a\xed\x82\x72\xc9\x3c\x49\x09\x96\x43\x90\xc0\xe4\x97\x1c\x33\x53\x32\x3b\x26\xda\xd3\x04\xe7\x8d\xc5\x02\xa4\x8e\x26\x49\xd4\xe9\xb9\x38\x44\x2d\xe7\x87\x8e\xc2\x41\x85\xfe\x68\x0a\x07\xbd\x1e\xa6\xd5\x68\x59\x43\xe3\x8f\x68\xa3\x3b\x72\xa1\x21\x17\x4a\x45\x95\x7e\xb0\xe6\x24\x0b\xb4\xbb\x35\xec\x7e\xc4\x1c\xe5\x89\x3f\xd3\xa9\xdd\x6b\xa1\x48\xd0\x41\xe1\xc1\x34\x8e\xc5\x70\xe3\x27\x50\x60\xae\x84\x45\xa8\x2d\x5e\xe7\x46\x17\xd2\x4b\xa3\x83\x89\x6b\xe3\xfc\xf8\x19\xcb\x68\xd1\x79\x2b\x73\x9f\x91\xb0\xf8\x1e\xf3\x86\x7e\x84\x68\x96\xb2\xd1\x79\x78\x39\x98\x22\xa8\x1c\xd4\xef\x80\xf8\x38\xac\x85\x15\x1e\x61\x8f\xb9\x68\x48\x16\x0f\x07\x79\x42\xc7\xaf\x93\xb6\xfc\x41\xec\xa5\x92\xbe\x23\x17\xb8\xa3\xb0\x98\x09\xb0\x58\xa2\x45\x9d\x73\x5c\x04\x33\x07\x83\x06\x17\x6a\xd5\x01\xbe\xaf\x8d\x8b\xa4\x4a\x89\xaa\x70\x83\x44\x99\xd4\x60\x34\x82\xb1\x50\x19\x8b\x49\xe2\xc1\x14\x9b\x2c\x7b\x43\xa9\xe3\x4c\x14\x28\x98\x7e\x26\x4d\x25\xde\x21\xe4\x8d\xf3\xa6\xea\x2d\x1c\x4d\xd3\x07\x3c\xd9\x66\x6a\x65\x4a\x24\x03\x27\x61\xa5\x69\xe8\x6d\xa9\x0f\x0e\x5a\xe9\x8f\x4c\x3e\x44\xde\x26\xbb\x33\x16\xf0\xbd\x20\x32\x6b\x10\x50\x8a\x26\x47\xcf\xbe\xdf\xe3\x40\x1d\x0b\xd8\x77\x29\x6f\x39\x07\xd8\x1c\x90\x82\x62\x92\x5c\xaf\x3b\x68\x9c\xd4\x87\x91\xac\xe4\xda\x41\xb4\x75\x54\xd3\x94\x17\x11\x23\x23\x09\x1c\xea\x82\x8f\xda\x10\x6f\x29\x5d\x6a\x44\x7b\xed\xcd\x35\xfd\xbf\x66\x95\x4c\xe3\x29\x6d\x88\x29\xa1\x00\x71\x62\x70\x20\x6d\x05\xe4\x48\x54\x15\x28\x2c\x0e\x68\xc1\x55\xc2\xfa\x9e\xd5\x06\xee\x4d\xe0\x14\xa9\x7b\x03\x42\x0f\x89\xb0\xce\x02\x3e\xc5\x24\x75\x64\x93\x8e\x99\x16\x56\xb4\x23\x5b\x42\x69\x4d\x35\x0e\x12\xc6\xaa\x90\x43\x1c\xb9\x05\xd6\xc6\x49\xdf\x87\x07\x18\x3d\xe1\xf4\xc2\xa5\xe0\x22\x88\x24\xd3\x7b\x0c\xf4\xad\xd0\xae\x44\xbb\xc9\xb2\x2f\xb6\x59\xb6\xdd\x6e\x61\x01\x80\x2f\x82\x6f\xef\xc5\x0d\x1d\xcd\x44\x9e\xa3\x73\x57\x42\xa9\xd5\x02\xb6\xcf\x40\xf3\x43\x96\x01\x00\x6c\xb7\x70\xab\x01\xb5\x97\x3e\xe2\x6b\x69\x2c\x21\xa4\x69\xd9\xe6\x47\xec\x2d\x22\x14\x87\xf9\xc8\x24\x22\xa8\xc5\x84\xc6\xcc\xc7\xe4\x7e\x4e\xa7\xf7\x0a\x13\xcb\xa0\xa5\x37\x5e\x28\xd0\x4d\xb5\x47\x3b\xa2\x2c\x35\xe0\x7b\xe9\x3c\x25\xe7\xa6\x3f\xf0\xc6\x83\x74\xd0\xd4\x31\x5d\x47\x01\x6c\xe9\x11\x6a\xd7\x58\x1c\x80\x2f\xd0\x76\x4d\x5d\xab\xae\xa7\xe1\xbc\xe8\x1c\x09\xda\x30\x66\x50\xfc\x05\x82\x85\xf0\x78\xa6\xc4\x49\xd8\x40\xe6\x2d\x53\xb9\x81\x7f\xde\xc9\xf7\x5f\xfd\x69\xaa\x03\x9e\x30\xc1\xbe\x74\x80\x95\xf4\x94\x51\x2d\x45\x07\x89\x31\x78\xc1\x41\x6e\x51\x78\x2c\xce\x8d\xc5\x24\xd8\x29\xee\x8d\x96\x5e\x0a\x25\x7f\xc7\xe2\x4a\x86\xcf\x53\xee\xab\xa7\xb3\x0f\xd6\x24\x94\x4c\x0e\xd4\x8f\x78\x6d\x24\x48\xf2\x9a\xbe\x12\x15\xd5\x9e\xc4\x7f\xcd\x24\x6e\xe0\xb6\x28\x2c\x3a\xf7\xed\x67\xc9\x13\xd3\x85\x4b\x1c\xe5\xe4\x13\xe4\xf9\x6b\x3a\x72\x26\x8f\x37\x17\xa5\x99\xa5\x11\x12\xc6\xe5\x11\xd0\x2d\xfe\xd6\x48\xcb\x11\xe4\x38\xe4\x93\x91\x08\x03\x13\x91\x59\xfa\x0f\x41\xc7\xa9\xd1\xd5\x43\x7c\x8e\xe3\xb4\x30\xe8\x40\x9b\x9e\xe1\x94\x97\xd1\xb0\xdb\xa7\xaa\x7a\x44\x8b\xeb\xfe\xec\xa8\x88\x29\x14\x54\x34\x4c\x1d\x03\xa9\x36\xce\xc9\x58\x37\x4c\x19\x62\x89\x84\x88\xb5\xa3\x8e\x68\xed\x06\xd1\x49\xe3\xc2\xb0\x1c\x1a\xc9\xa8\xc2\x4a\xd5\xc5\x56\x84\xa1\xcc\xb4\x1a\xa2\x24\x53\x3d\xc6\x4e\x38\xaf\xfb\x43\x69\x88\x10\x92\x58\xbe\x6d\xf6\x11\x97\xe6\x76\xe3\x36\x24\x81\xe0\xe4\x4c\xa8\x01\xbe\xb1\x14\x1a\x11\x24\xfb\x4a\x66\xb1\x32\x27\x2c\xfa\x8a\x36\x3a\x38\x21\x72\x3f\xea\x15\x5e\xb8\x28\x3e\x28\x3c\xa1\xa2\x30\xac\x9b\xbd\x92\xf9\x1a\xf6\x0d\x85\xa6\x74\xf4\x8c\xcc\x22\xc8\x6c\x7b\x85\xd5\x84\x58\x72\x02\xb7\x00\x43\x0f\x45\xbd\x57\x02\xc4\x91\x4d\xa6\x1d\xda\x84\x50\xce\x8d\x1e\xe7\xb0\xea\xb8\x56\x04\xee\x49\xd2\x87\xf5\x09\x5c\x2b\xd1\xc1\xc1\x0a\xed\x63\xff\x16\xf9\xf4\x3a\x52\xe9\x4e\xa1\x40\xea\xc8\x53\x42\xb2\x41\x8a\xba\xef\x37\x62\x33\x6f\x5a\x97\xda\xda\x7c\xd2\x17\x52\x2e\x32\xdd\x09\x05\x0e\xbf\xe4\xf2\x5e\x75\x7f\xb4\xa6\x39\x50\x0d\xee\x3b\xa9\xa7\x2a\x14\x9a\x22\xd6\x8a\x8c\xf2\x88\x4e\xec\xbc\xa7\xa8\x44\xb4\x66\x7a\x4c\x64\x9f\xd0\xf8\x3c\x3d\x5e\x51\xb7\x59\x41\x82\x20\x52\x2b\x7c\x1e\x95\x2f\x6f\xa8\xbf\x9a\x41\x2e\xc9\x71\x3a\x0b\xfe\x57\x21\xf2\x61\xa1\x9b\xa7\xc2\x21\xa4\x9e\x97\x60\x4d\xd1\x53\x4c\xfd\xd3\x7f\x89\x69\x3b\x2e\xb8\x2b\x7a\xbf\x3f\x3d\xc3\xce\xd5\x0d\xbc\x0a\x6c\x3f\xf4\x34\xe8\x1f\x75\xea\xb3\x47\x81\x17\xec\x2c\xba\x38\xfe\x94\xd1\xd0\x21\x1f\x58\x8d\x93\x50\x0d\x9e\x1d\x0b\x47\x36\x11\x68\xe0\xeb\xaf\x93\xf9\xce\xde\xa4\x7f\xcf\x7e\x1e\x9a\x8d\x68\xda\xaa\x71\x9e\x4c\x4a\x9c\x9c\xa8\x10\x44\xf0\x6b\xa2\x18\x5b\xef\xc1\x44\xac\xd3\xb3\x09\xf9\x8f\xd9\xf4\xd3\xc7\x3f\x50\x28\x62\xf5\x5a\xa8\x13\x5c\xcd\x9e\x58\x27\x7e\xc6\x84\xce\x52\xe7\xaa\x29\x90\xba\xd9\x34\x1d\x05\x31\xf2\x23\xe6\xef\xa6\xba\x46\x70\xea\xa9\xb4\xc8\xb3\x35\x39\x82\xa6\x8c\xa7\x0c\x19\x61\xbe\x0b\x43\x46\x06\x23\xac\x2a\x4c\x7a\x69\x79\xa2\x58\x83\x92\xef\x68\x20\x56\x92\x7b\xac\x8a\x9a\x27\xa1\x8b\xa1\xbd\xe2\x56\x9b\x7e\xa0\x96\x4a\x96\x9c\x4e\x1e\x6a\x15\xe6\x21\x78\x7a\x85\x49\x53\xe8\xbc\xc2\xdc\x8b\x77\x38\xd4\x09\xaa\x1d\xd1\x19\x8e\x6a\xe6\xb2\xf9\x87\x4c\xef\x6a\x7c\x2c\xb3\x43\x73\xf3\x78\x3e\x72\x16\x06\x2f\xb5\x52\x29\x0a\xcf\xbe\xa9\x59\xe4\x31\x56\x98\x52\x32\xbe\x7d\x15\x18\x86\x34\x5c\x4d\x95\x7d\x8d\xca\xb4\x54\xab\x7a\x60\x2a\x06\x30\xb9\xfb\xdb\x9b\x1f\xe0\xf9\x57\x7f\x86\xa3\xf7\xb5\xbb\xd9\x6e\x0f\xd2\x1f\x9b\xfd\x26\x37\xd5\xd6\xe8\x52\x99\x76\x5b\x2a\x59\xbb\xed\x5e\x99\xfd\xb6\x12\x52\xc7\xef\x5f\xbe\xfc\xf2\xff\x5f\x7e\xf9\xf2\xab\xeb\x32\x4e\x03\xd7\xec\xdd\x6b\x46\xa7\x6b\xb2\xd1\x75\x21\x5d\x6e\x4e\x68\xbb\x4d\x55\x2c\x23\x0d\x7d\xf9\x31\x56\x6d\x9e\x7f\x24\x57\x34\x61\xb9\x39\x89\xa3\x4e\x57\xe3\x68\x13\x11\x52\x29\xba\x55\x3a\x20\x74\x4a\x40\x5d\x93\xef\x80\xbc\xb8\x8b\x76\xd9\xc5\x55\xc6\xac\x10\x49\x17\x06\x2f\x99\x16\x3b\x11\x79\x76\x1f\xee\xbb\x1a\xff\xf2\xea\x4e\x99\x96\xfb\xc5\x0d\xcb\xf0\xcd\xd5\xea\x06\xbc\x6d\xf0\xe3\x2e\xcc\xa9\x25\x08\xdd\xcd\x53\x61\xc2\xa3\x49\x03\x7f\x81\x25\xab\xd1\xc7\x92\x88\x89\xb9\xc0\x1e\xab\xda\x77\x63\x23\x08\xc7\xda\xd4\x82\x12\x60\xb9\xee\x50\x93\xa8\x5f\xf8\x7e\x63\xd6\x27\xdb\x74\x49\xb7\x99\xed\x9b\x2e\xd7\xa6\xef\xa6\x5a\xcd\x04\x0f\x8d\x37\xbe\xaf\x31\xf7\x61\x17\xd5\xd4\x07\x2b\x0a\x9c\x6d\xdd\x42\xf1\x2c\x0a\xde\x52\x4d\x28\xcc\x5c\x21\x3c\x4f\x57\xc6\x7a\x17\x1c\x13\x1c\x36\xee\x61\xa5\x03\x8a\x22\xae\x0b\xec\x6e\x42\xcf\xb4\xb5\x10\x75\xad\x64\x1e\x65\x8b\xab\xb1\x07\x0a\x6f\xb4\xf4\x34\xd0\xa2\x00\xd8\xc3\x40\xa8\xb1\x31\xf4\xf6\xdd\x65\x30\xd8\x3c\x58\x41\xc3\xf8\x27\xb1\xe5\x54\x3d\xa0\x7f\x9b\x18\xb1\x37\x28\xd6\x1c\x85\x16\x47\xdd\x0d\xbc\x36\x46\x7d\x9c\x15\xcc\x3e\x7f\x19\xc4\xc9\x14\xe3\x8d\x4b\x02\xe5\x61\x66\xb5\x8d\xbe\xf6\xb2\x0a\x28\x15\xa2\x6b\x4e\x8f\x1b\xd2\x03\xfa\x18\x75\xe3\x31\x33\x04\xda\x04\xad\x28\xa8\x22\x84\x2f\x46\xd4\x06\x26\xf4\x65\x09\x0e\x55\xb9\x39\x20\xab\x77\xb5\xda\x48\x47\xfd\x3c\x7d\x36\xe5\x0d\xc4\xfc\x3a\x27\xf4\xcd\xd5\x6a\xb5\xd0\x2c\x44\x7f\x7d\x98\x12\x8d\xd9\x38\x2d\xcd\x80\xca\xe1\x72\xbf\x11\x30\x86\x62\x71\x29\xc5\xc6\x69\xca\xbd\x07\x07\x58\x6f\x84\xf6\x68\xa0\x30\xfa\x85\x5f\xa2\x3c\xac\x93\x17\xad\xb3\x06\xd7\xe4\x47\x62\x32\xfd\xf9\x6d\x2b\x7d\x7e\xdc\x1b\x61\x8b\xdd\x1a\x76\xfc\xec\xce\xd8\x56\xd8\x02\xed\x0e\xd0\xe7\x9b\x8b\xa6\xf8\xf8\x07\x3a\x92\x58\x7e\x82\xce\xc3\xf8\xc8\x5b\x49\x18\x2f\x91\x7b\x22\x84\x77\xa3\x3e\x86\x0a\x15\x45\x8b\xc6\x36\xbc\x18\x00\x21\xee\x24\xd6\xe3\x26\xa3\x27\x41\x41\x3b\xec\x23\x20\x37\xd6\x62\xee\x55\xf7\x49\xa5\x3c\x2e\x90\xcf\x2a\x79\xbf\xa3\x19\xb5\x71\xe2\xbc\x47\x5e\x4e\x4d\x61\xd3\xb1\xe9\x56\x86\x23\x59\x4b\x7f\x35\xfb\x75\x1e\xa1\x17\x3a\x5c\x0e\xd6\x51\xa3\x9a\xa8\x2c\x77\xaa\x49\xb3\xd4\x9f\x8e\x6d\x95\x1a\x91\xf0\x28\x11\xba\xdc\x93\x4e\x6c\x73\x97\xb6\x88\x71\x45\x1e\xa7\xe3\x78\x69\xf1\x77\xf4\xa2\x10\x5e\xc0\x4f\x12\x5b\x37\x5f\xe4\x8a\xd9\xb2\xf0\x51\x44\xbd\xd5\x20\xac\x15\x8c\xa7\x0c\x6c\x94\x52\x43\xa3\x33\x26\x4f\x88\xe8\x36\x70\x4f\x68\x1f\xf2\x2d\xf5\x3e\x8d\x63\xee\x13\x06\xe9\x5f\x41\x63\xb8\xa9\xe3\xb8\xf0\x4e\x9b\x16\xda\xa3\xcc\x8f\xc0\x1d\x17\xc6\xfd\x5d\x2d\xdc\x68\x9c\x70\x46\x9d\x90\xf4\xbb\x5a\xc5\xba\xb2\x5c\x1a\x2e\xe1\x35\x9b\x86\xe0\xe6\x17\x52\xe9\xd7\x99\xab\xa3\xe6\xbf\xfc\xfa\x54\x07\xb0\x38\xd4\x77\x56\xc9\xf6\x81\x99\xb1\xfd\x44\x1f\x4c\x1e\x6e\xb4\xa8\xf0\xf4\x3d\xff\xa2\xed\x43\xb3\x49\x44\x42\xb3\x49\x52\xa6\x34\x2e\xd0\x49\x1b\xad\xbd\x59\x76\x19\x38\x6f\x9b\xdc\x53\xf1\xb0\x58\x5b\x74\x69\xd2\x88\xe3\x0a\x3a\xbf\x44\xe0\x62\x33\x3a\x36\xf8\xbf\x92\x58\x5d\x8d\xab\x1b\xb8\xd5\xdd\x5b\x66\xf6\xed\xb2\x11\xb5\x54\x0f\x03\xd9\x68\xd0\x9e\xe3\xd8\x70\xbd\xe3\xcd\xa5\x1b\x81\xcd\x84\x58\xb8\x5e\x12\xe9\x8e\x88\x27\xa6\xdc\xf2\x32\x9d\x2c\x28\x75\x78\x34\x5f\x7c\x57\x28\xf4\x6c\xe0\x41\xee\x4c\x2e\x2c\xd6\x67\x17\x30\xee\xa1\x2b\xc7\x9e\x22\xc3\x00\xe7\x0e\x8e\x05\x9b\x5f\x18\xf6\x76\x08\x05\x3a\x86\xfc\x85\x3b\xb8\x09\x9a\x0f\x77\x71\xe3\xfb\x96\x30\x04\xf1\xad\x9b\x8b\xbd\x5c\x9c\x58\x8b\x74\x69\x45\xaf\x0c\x17\x57\xf0\x18\x76\xb3\xc0\x37\xfd\x96\x6f\xdd\x4f\x63\xeb\x4f\x02\xf3\xf3\x95\xc7\x93\x21\x3c\x92\x1c\x2e\xa5\x82\x7b\xa3\x85\xc3\x0d\xe3\xb0\x5c\x93\xbf\x4f\x7a\xf8\xc9\x4e\x28\xec\x7e\x7a\x30\x9b\xc2\xf1\x79\xe1\x0c\x14\x1e\x2e\x25\x97\x76\x9e\xbb\xb0\xae\xd8\x0d\x33\x1a\xd3\x7d\xe1\x26\x75\x15\x16\xf7\x9e\x7d\x55\x1e\xc6\x00\x17\x09\x13\xb0\x9e\x9f\xff\xaf\xdf\x4a\xfd\xe7\x97\x52\x76\xa9\x47\x9c\x54\xec\x6f\x1e\x59\x2d\xdd\x06\xa3\x0c\x52\xa7\xca\xad\xc2\xaa\x50\x68\x30\x16\xf0\xb7\x46\xa8\xf0\x6d\x61\xcb\xf4\xe0\x6e\x09\x1e\x5c\x9e\xd1\x54\xc4\x9e\xad\x31\xa7\x28\xec\x2f\x0b\x77\x7b\x2c\x8d\xc5\x1d\x6f\x71\xd0\x47\xb7\x50\x7d\x8d\x4c\x67\x0d\xdf\x12\xf1\x38\x65\xef\xf1\x20\x35\xfb\x67\x76\x85\x3e\x5c\xae\x2f\x9c\x7e\xbc\x11\x62\x01\xaf\xc6\x8f\x57\x70\xfd\xb0\xb5\xff\xd1\xc7\xf4\x7e\xd6\x28\x85\x8d\x41\x99\xee\xdf\xa3\xa4\xb5\xc5\x13\x4f\x86\xe9\x75\x11\xb6\x49\x4f\x5f\xec\xfd\x2f\xad\x8a\xce\xc7\xcd\x5b\xe7\xd0\xfa\x61\xe1\x32\x2d\x8d\x7d\x73\x91\x6e\xde\xc2\xa4\x1c\x16\x2a\xbc\x56\x9d\xd3\x8b\x03\xd6\x69\xf8\xa3\x08\xe9\xe2\xb6\x26\xa9\x16\xa9\x3d\x21\x4f\x49\xf6\x8d\x74\x6f\xe2\xdf\xbd\x5c\x4d\xc7\xc2\xd5\x0d\x2c\xc7\xd0\x77\x42\x6b\xe3\xfb\xe9\x9e\x31\x3f\x37\x55\x2d\xfc\xa8\xdd\x22\xfd\x3e\x23\x23\x9f\x14\xe3\xff\x97\x1e\xb3\x02\xe9\xf1\x67\x45\xbc\x6b\xaa\x47\x43\x7d\x70\xcf\xa7\xed\xb0\x6f\xe3\x0d\x88\xee\xe2\xdf\xbc\x98\x38\xd9\x4d\x6a\x0b\x3b\xf1\x28\x28\x2b\x7e\x47\x6b\xe6\xf3\x5e\x4f\x6d\x5c\x00\x86\xd3\xfd\x5f\x3c\xc1\x85\x06\x82\x62\x35\x70\xfd\x9e\x86\x75\x3e\x75\xb5\x04\xe7\x0b\x0e\x39\xbf\x24\x78\xb9\x79\x79\x03\xcf\xa2\x08\xaa\x4b\x93\x6a\x14\x86\x0d\xcb\x7f\x4d\x35\xd6\xe4\xd9\x99\x85\x3e\x66\xff\x0e\x00\x00\xff\xff\xa1\x3c\x04\x3f\x20\x27\x00\x00" +var _fungibletokenCdc = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x59\x4d\x93\xdb\xb8\xd1\xbe\xf3\x57\x74\x79\x0f\x3b\xf2\x2b\x6b\xf6\xf0\x56\x0e\x53\xb1\xbd\xfe\x9a\x2d\x5f\x52\x2e\xcf\xd8\x3e\x24\xa9\x08\x22\x9b\x22\xd6\x20\xc0\x05\x40\xc9\xca\xd4\xfc\xf7\x54\x37\x00\x7e\x89\x9a\x91\x9d\xda\x43\x7c\xf1\x88\x04\xba\x1b\xfd\xf1\xf4\xd3\xe0\xe5\xd3\xa7\x59\xf6\x13\xdc\x56\x08\xd7\xca\xec\xe1\xba\xd5\x5b\xb9\x51\x08\xb7\xe6\x2b\x6a\x70\x5e\xe8\x42\xd8\x22\xcb\x7e\xfa\x09\xd6\xe9\x25\xbf\x5b\x43\x6e\xb4\xb7\x22\xf7\x59\xc6\xdb\xe7\x77\x82\x74\xa0\x0d\x28\xa3\xb7\x68\x41\x68\x90\xda\xa3\x2d\x45\x8e\x99\xaf\x84\x07\xa1\x14\x94\x69\xab\xe7\xad\x49\xae\x83\xbd\x69\x55\x01\x95\xd8\xd1\x2b\x7a\x5e\x1a\x5b\x83\x37\xab\x2c\x7b\x5f\x82\x80\xd6\xa1\x75\xb0\x17\xda\x3b\x5a\x50\x60\xa3\xcc\x01\x04\x68\xdc\x4f\x64\x2d\xc1\x57\x28\x6d\x6f\x73\x61\x90\x0c\xf3\xa0\x11\x0b\xda\x2c\xeb\x46\x61\x8d\xda\xd3\x4a\x18\x1d\xb5\xb7\x79\x09\x9b\xd6\x47\x51\xac\xc0\x65\x85\x39\x21\xa2\xdb\xe4\xa0\xc0\x52\x6a\x2c\x40\x6a\xf0\x95\x74\x9d\x15\xab\xe0\xd7\xcf\xa2\x55\x7e\x0d\x16\x9d\x69\x6d\x3e\xd8\x99\x65\xef\x44\x5e\x4d\xfd\xd3\xad\xf3\x87\x06\x59\xb9\x3b\xd6\x7e\x5a\x68\x54\xfa\xc1\x9a\x9d\x2c\xd0\xae\x97\xb0\xfe\x88\x39\xca\x1d\xff\x2d\x74\x01\xeb\xd7\x42\x09\x9d\xe3\xdc\x6e\xc7\xd1\x76\x93\xe3\xe5\x4a\x58\x84\xc6\xe2\xb3\xdc\xe8\x42\x7a\x69\xb4\x63\x51\x8d\x71\x7e\xf8\x8c\x63\x6e\xd1\x79\x2b\x73\x9f\x91\xa1\xf8\x0d\xf3\x96\x5e\x82\x29\xd9\xf2\xb2\xd5\x79\x58\xcc\xee\x42\xe0\x93\xac\x58\xef\x01\x48\x8f\xc3\x46\x58\xe1\x11\x36\x98\x8b\x96\x6c\xf1\xb0\x95\x3b\x74\xbc\x9c\x92\x82\xff\x10\x1b\xa9\xa4\x3f\x90\x6f\x5c\x25\x2c\x66\x02\x2c\x96\x68\x51\xe7\x9c\x4f\x21\x8c\x2c\x3d\xd8\x65\xb4\x3a\x00\x7e\x6b\x8c\x8b\xa2\x4a\x89\xaa\x70\xbd\x45\x99\xd4\x60\x34\x82\xb1\x50\x1b\x8b\xc9\xe2\xde\x15\x94\x98\x94\xd3\xce\x44\x83\x42\x86\x4e\xac\xa9\xc5\x57\x84\xbc\x75\xde\xd4\x9d\x87\xa3\x6b\xba\x20\x92\x6f\xc6\x5e\xa6\x04\x37\xb0\x13\x56\x9a\x96\x56\x4b\xbd\x75\xb0\x97\xbe\x62\xf1\x21\x1b\x57\xd9\xb5\xb1\x80\xdf\x04\x89\x59\x82\x80\x52\xb4\x39\x7a\xc8\x85\x86\x0d\xf6\xd2\xb1\x80\xcd\x21\x15\x94\xd4\xdb\x2c\xb8\x03\x52\x52\x8c\xb2\xe5\xe9\x65\x96\xc9\xba\x31\xd6\xc3\x67\x89\xfb\x8f\xe8\x8c\xda\xa1\x85\xd2\x9a\x1a\x9e\x0c\x1f\x3d\xc9\xb2\xcb\xcb\xcb\x71\xf1\xd0\x93\xd1\xd3\x08\x10\x9d\x2d\x22\x66\x8b\xc5\x01\x50\x58\xfc\xa3\x95\x76\xae\xac\xc6\xc5\xc0\x92\x7b\x63\xe1\x0b\x82\xf3\x52\xa9\x00\x1a\xd2\x83\x70\x23\xd0\x81\x0a\x6d\x9f\x37\x9e\x7f\x71\x4a\x99\x9a\x33\xa7\x6c\x15\x8b\x6c\x7d\x88\x56\x8d\xbe\x32\x45\x0c\x4e\x2d\xf4\x01\x1a\x6b\x7e\x47\x06\x27\x52\x13\x94\x11\x02\x91\xa5\xac\xd4\xe8\x09\xd6\xb8\x25\x8b\x8c\xc8\x11\x52\x78\x73\xa0\xc3\xd6\x28\xb4\xeb\xce\xba\x62\x30\x0c\x69\xd0\x3f\xa5\xbf\xf9\x59\x17\xe5\x70\xe6\xe4\x14\x37\x2a\xf7\x1e\x3a\x44\x9e\xa3\x73\x17\x42\xa9\x45\x67\xc9\x04\xd6\xee\xb2\x0c\x00\xe0\xf2\x12\x5e\x69\x40\xed\xa5\x8f\x7e\x2e\x8d\x25\x5b\xcc\x5e\xea\x2d\x8b\xa7\x34\x2b\xac\xd8\x0b\xc5\x39\xcf\xb9\x16\xe2\x2f\x42\x01\xb1\xa0\xa1\xca\xa1\xb8\x2f\x69\xf7\x46\x61\x52\x79\xc9\x3d\x07\x77\x21\xac\xe1\xc8\x58\x4b\x4f\xa9\xb9\xaf\x50\x27\x25\xe4\xac\xa4\x5d\x3f\xa2\x72\x37\x54\x76\x21\x6a\xd3\x6a\x7f\x05\x9f\xae\xe5\xb7\xbf\xfc\xff\x92\xd1\xf2\x0a\x6e\xbc\x95\x7a\xbb\x64\x49\x57\xf0\xaa\x28\x2c\x3a\xf7\x32\xfc\xfe\xf4\xe9\xfd\xdb\x2b\xf8\xf4\x5e\x7b\x5a\xdf\x69\x1d\x3e\x5e\xfc\x88\xfd\x05\x36\xc6\x49\x1f\xb2\xf9\x61\xeb\xdf\x86\xa5\x8f\x18\xef\xcd\xd0\x74\x6f\xc6\x86\x77\xea\x4e\x18\xfe\xee\x01\xa3\x2b\x84\xad\x32\x1b\xa1\x60\xd3\x5a\x1d\xd3\x9f\x96\xe5\x42\x29\x5a\x45\x78\x23\x40\x1b\xfd\xec\xdf\x68\x0d\x6c\x42\xa7\x38\x71\x9a\xd7\xad\xd5\x67\xc4\xe1\x84\x9d\xaf\x07\xb2\x09\x44\x86\x8e\xef\x0b\x9a\xcf\xd1\x04\xdc\x72\x3d\xed\xe8\x30\xfb\x1f\xdd\x3e\xca\xea\x2d\x7a\x4f\x49\x1d\xed\x06\xc9\x08\xc8\x10\x34\xd2\x33\x3c\xcb\x71\x13\x4c\xa6\xc1\x1d\x2f\x4e\x0a\x7e\xc3\x50\xa5\x49\x78\x6c\x0f\xbb\x2e\xde\x53\xc9\x3b\x89\x7b\xb2\x94\xcc\x8a\x22\x2f\x16\xc9\x53\xbc\xe3\xbe\x77\x47\xc2\xe6\x73\xfc\x81\x74\xac\x3c\x76\xb1\x88\x24\x01\x2c\xc8\x09\x29\xb3\x09\xf8\x93\x90\x61\x4d\x73\x4f\x4b\xf8\xc2\x10\x70\x68\x70\x75\xa4\xf7\xbd\x87\x8e\x45\x45\x85\x63\x5d\x46\xc3\x7a\x93\xa8\x04\x41\xed\xb2\xdb\x3b\xe8\xdc\x0a\x05\x75\x4a\xd3\xc4\xfc\x6b\x8c\x73\x32\x36\x4b\x53\x42\x6e\x51\xb0\x11\xb1\x61\xc6\x50\x5b\xd7\x9b\x4e\x27\x26\x1a\xc6\x6c\x8e\xbc\x2b\xac\x54\x87\x48\xcb\x18\x8a\xcd\x5e\xa7\xa8\xac\xbe\x27\xce\x5d\x3f\x8c\x50\x99\x54\x26\x0f\x82\x6b\x37\x91\xab\x3e\xe8\xc0\x24\x7a\x24\x84\xf8\x91\x45\xdf\x5a\x82\x89\xc8\x43\xba\x7e\x6e\xb1\x36\x3b\x46\x8c\xd0\xd7\x07\x1b\x47\x42\x6e\x07\x8c\xe9\x67\x17\xcf\x03\x0a\x77\xa8\xa8\x6c\xd7\xf1\x80\x43\x08\x5e\xac\x47\x12\x6e\x0c\x11\x2d\x63\xe9\x98\x84\x4f\x41\x82\xf4\x4b\xa6\x3a\x81\x82\xa3\xa4\x56\xd9\x79\x14\xcc\x86\x7a\x20\x48\xef\x50\x95\x23\x69\x86\x49\x7e\x44\xff\x62\x40\xb8\xf8\x64\xeb\xa1\x1d\xeb\xf9\x53\xcd\x59\xcc\x45\xb2\x9f\x47\xf6\xc5\x15\xfc\x7a\xc7\xde\xbb\x1f\xd4\x23\xfd\x23\xf2\x39\x79\x14\xfb\xdd\xda\xa2\x8b\xf4\xb8\x64\x82\x66\xa2\xd3\x29\x1a\xb0\x13\xaa\xc5\xa3\x6d\x61\xcb\x6a\x58\xaa\xf0\xfc\x39\x44\x63\x8e\x96\xd3\xbf\x27\x5f\xfa\xbe\x19\xd6\x41\xdd\x3a\x4f\x54\x8c\xd4\x39\x51\x23\x11\x94\x19\xcc\xe8\x5b\x1e\x9f\xec\xc9\x91\x78\x82\xed\xe3\x5e\x17\xfe\x4f\x18\x4b\xc1\x21\x7b\x6f\x0f\x0d\x5e\x2c\x56\xb2\xa0\xb0\x94\x12\x6d\x6a\x7f\xbc\xc0\xec\x35\xda\x97\x2b\x11\xfa\xc9\x10\x91\xf9\x75\xdb\xca\xe2\xa8\x19\x46\x5f\xd0\xbb\xc5\xc8\xb4\xfb\x6c\xfc\xd7\x00\xbf\xd2\x90\xf1\xdf\xe3\x57\x6c\x70\x33\xf0\x25\x75\x8c\xe4\x19\xf0\xf5\x05\x13\x68\x48\x9d\xab\xb6\x40\x10\xd0\x4d\x2a\xc1\x8c\xbc\xc2\xfc\xeb\x38\x3e\x11\xb8\x3a\x29\x7b\xec\xd8\x1f\x31\xfe\x73\x08\x7f\x70\x43\x60\x75\x9d\x1c\x62\xe8\x85\x49\x8b\xe6\xd9\xfd\x12\x94\xfc\x8a\xe0\x1a\x25\xb9\xd1\xd4\xd0\x36\x84\x22\x9d\x10\x87\xba\x08\x2f\x68\x58\x90\x25\xd7\x9e\x87\x46\x85\xd9\x04\xce\x07\xbe\x14\xac\x29\xf0\x45\xd7\x83\x17\x5f\xb1\x47\x2d\x42\xb2\xf8\x86\x90\xe3\x44\x18\x46\x73\xeb\x43\xa5\xcf\x46\x51\xc5\x47\x99\x17\x21\x5b\x53\x95\x2f\xc6\x26\x6d\xd1\xdf\xb4\x0d\x8d\x27\x58\xf0\x02\x4a\x77\xea\x27\x14\x47\xa1\xd4\x61\x00\xb2\x4a\x3a\x4f\x25\xb6\x0b\x43\x1f\x2f\x8c\xe4\x9a\x29\x77\x3c\x34\xd9\xd1\x78\xf7\x68\xcf\x9e\xd1\x4b\xfd\xfb\xee\x96\xcb\xef\xb5\x31\xea\x7e\x6c\xeb\xc7\x68\xc9\xbe\x42\x06\x54\x63\x39\x01\x99\x76\xc9\x1d\x35\x40\x1a\xe9\xa5\x8b\x16\x84\x31\x8d\xde\x8e\x8a\x27\x49\x7b\x95\xce\xc1\xb9\x2a\x74\xdc\x05\x34\xa6\xb0\x20\x57\x31\x7a\xff\x4e\x98\x13\xb1\xcd\xdb\x96\xa7\x8f\x02\xcb\xc7\x69\x89\x74\xc7\x27\xbc\x08\xd8\x42\x7f\x2e\xc2\x19\xa7\x85\xde\xf3\xdb\x11\x5b\x28\x90\x82\xb1\x0c\xae\xee\x33\x2d\x34\x18\x1e\x99\xfb\x0b\x9e\xee\xbc\xcb\x44\xb5\x96\x70\x6b\x85\x76\x25\x5a\x63\x97\x5d\x5f\x0e\xf7\x15\x69\xfc\xec\xd9\x45\xdb\xf3\x5b\xf2\xaf\x4b\xa7\x80\x03\xfa\xef\x29\x03\x3e\xca\xd5\xc0\x9a\x5e\x71\x67\xd7\x70\x00\x5e\x75\xc3\xf1\xa4\x6e\xae\x25\xaa\x22\xa6\x9a\x15\x53\x50\x31\x25\x88\x87\x68\xa2\xb0\x69\x69\x47\x0e\xff\x4c\xe2\xf9\x3f\x54\x5e\x93\xf6\x4e\x53\x03\x2a\xb3\x0f\xc8\x4d\xe1\x1f\x5e\x79\x24\x24\x76\xad\x8d\x7d\xc6\xb6\xfa\x99\x97\x75\xbc\x4a\xe3\x54\x9c\xca\xe3\x4b\xa1\x2d\xa6\x02\x1a\x4e\x4a\x8d\x60\x78\xed\xf2\x26\xe6\x6f\xc4\xed\xf1\x75\xe9\x2a\x0c\xe8\x2b\x18\xc9\x97\xe5\x51\x93\x76\x37\xed\x86\xac\xb9\x30\x65\xa8\xb2\xbf\xfe\x7a\x37\x23\xe9\xfe\xc5\xc5\x62\x31\x43\x6e\x62\x99\xdf\x8d\xc5\x5e\x71\xdd\xdf\x8f\x5b\x35\xa0\x72\x38\xcf\x8f\x02\x4e\x31\x93\xab\x1b\x7f\x80\x42\x32\xc1\x14\xf6\x90\xf8\x4a\xc4\x8f\xc0\x95\xb8\x2b\x77\x6e\xd8\x57\x06\x0a\xa3\x7f\xf6\x73\x92\xfb\xcb\x9c\x59\xff\x2c\xc1\xb5\x79\x45\x4a\xc6\xaf\x6f\xf6\xd2\xe7\xd5\xc6\x08\x5b\xac\x97\xb0\xe6\x67\xd7\xc6\xee\x05\xd1\xd6\x35\xa0\xcf\x57\x27\x5d\x71\x7f\x92\xa1\x8c\x12\xfd\x4d\x68\xf6\xb2\x9c\x81\xe3\x1e\x40\x18\x8f\xa5\x1b\x80\xdc\xc9\x0c\x3e\x0f\x3d\x27\x01\x88\x46\xa7\xf0\xcd\x96\xc0\xdf\x49\xc8\x3f\xe1\xe5\x4b\x28\x85\x72\x78\xea\x40\xa9\xd9\x30\xd5\xf4\xc6\x8a\x2d\xa5\xac\xaf\x28\x81\x2d\xf6\x08\x91\xda\x84\x3f\x34\x32\xe7\x8a\xde\x84\x0d\x58\x3c\x5a\xa2\x6f\x43\x1a\xdc\x04\xf1\x1f\x84\xaf\x28\xd9\x06\x3f\x5f\x9e\xb6\xa9\x69\x37\x4a\xe6\x63\x93\xa4\x1b\xdb\xc4\x37\x6a\x22\x2d\xcd\x45\x13\x59\xd5\xb9\x86\x7d\xe0\x8d\xc9\xae\xfe\xd7\x0f\x9a\xf5\xb3\xeb\x99\xd1\xb9\x16\xf2\xec\x4e\x6f\x1d\x91\x3a\x10\xbd\x84\x37\xdd\x62\x10\x1e\xc4\x90\xb1\x91\x72\xd4\x34\xfb\x38\x10\xca\xa3\xd5\xc2\x0f\x58\xd9\xf4\xf2\xd4\x1b\x8a\x59\xeb\x06\x11\x0b\x17\xa3\xfd\x9c\x91\x0b\x6d\x34\xc5\x17\xb4\xa8\xd1\x35\xd4\xde\x62\x2d\xb7\xba\x40\xab\x0e\x64\x5d\xbc\x6b\x3f\xd3\xbb\xc9\x9e\x19\xff\xce\xa7\xb5\x96\xea\x54\xb6\xce\x8c\xd4\xeb\x30\xce\xac\xfb\xa1\xfa\x73\x0c\xc2\xf0\xda\x09\x66\xc7\x69\x8d\xfb\xe9\x48\x9d\x04\x53\x15\x1f\xef\xff\x33\xe6\x4f\x3b\x07\xaf\xa9\xb4\xfb\x29\xf2\xc5\x23\x53\xe4\xab\x30\x3a\xf6\x33\x61\x1a\x22\x15\x4d\xea\xbe\x12\x34\xbe\x03\xfe\xd1\x0a\x15\x7e\xcd\x70\x81\x99\x31\xf2\xfe\xcc\x61\x39\xde\x94\x83\x6b\x30\x97\x42\x75\xd7\x0d\xb0\xde\x60\x69\x2c\xae\x79\xf8\x89\x14\x24\xf4\x83\xa8\xb4\xbf\xfd\xe1\x2f\x29\x73\xc2\xe3\xc5\xf6\x06\xb7\x52\x6b\xca\xc0\xc9\x57\xa0\xfe\xfb\xd0\xcc\xee\x33\x7c\xfb\xfc\x39\x04\x2b\x2f\x8e\xde\x2d\xe0\xd9\xc3\x7e\xff\x5b\x97\x43\xc9\x99\xc3\xe9\x3d\x55\x6b\xef\xe3\xc6\xe2\x8e\x3f\xce\xa4\xe5\x22\x8c\x63\xd3\x69\x3e\xbd\x3f\x15\x8e\xfb\x73\x67\x2e\x51\x14\x34\x6f\xf5\x0a\xe3\xd8\x35\x8a\xfd\x51\xb3\xfa\x9e\x89\x6b\x8e\x79\x4c\x69\x07\x4d\x22\xce\xa1\xf5\xfd\x77\x8a\xdc\xe8\xdc\xa2\x8f\xbc\x2a\xba\xa7\xbf\x06\x0f\x10\x2f\x5d\x87\x4e\x53\x79\x11\x98\x06\xe3\x4d\x37\x13\xa5\x4f\x12\x51\xda\x19\x05\x47\x67\x59\x49\xf7\x5e\x3b\xcf\x81\x1f\x53\xa3\xc5\x15\xcc\x47\xff\x8d\xd0\x34\x3b\x24\xef\xf3\x57\xa4\xdc\xd4\x8d\xf0\x83\x6f\xb1\x74\xbe\x13\x97\x33\xd3\xab\x7c\x36\x63\x98\x7f\xe9\x9a\x26\xbd\x98\xb9\xa6\xf1\xe6\xc4\x25\x4d\xba\xf3\x1f\x5c\xd1\x4c\xae\xfd\x59\xea\x43\x17\x34\x70\xba\xe8\xbf\xb3\x8c\xfe\x2f\xbd\x3b\x3a\xe2\xe2\x87\x2a\xcb\xb5\xf5\xa3\x25\xd5\x27\xd3\x83\xc8\x36\x29\x25\xbe\x4c\xc6\x77\xc4\x69\x63\x15\x29\x65\xf6\x8e\x27\xe6\xf0\xdd\xd8\xc4\x35\xa3\x16\xc2\x19\x58\x09\x2a\xbe\xa3\xaf\x1e\xf0\x48\x45\x4d\x55\x5e\x7c\xf7\x7d\xe5\x89\x8b\xc7\x5f\x56\xbf\x5c\xc1\x93\xdb\x0a\xc9\x50\x75\x88\x8a\xa2\x3f\x82\x3f\x99\x9b\x0c\x2d\x3e\xed\x26\x18\xcf\xf0\xbf\x85\x8f\x40\xf1\xfb\x0f\xd1\x8b\x30\x0f\x1c\x26\x9f\x10\xe7\xbf\x65\xd1\xb9\x69\xc3\xc5\xbf\x42\x09\x9f\x83\x24\x32\x8e\x8d\xab\x14\xe9\x17\x74\xc2\x89\x3b\xb8\xb0\x46\x5f\x95\x46\x7b\x52\x45\x85\x87\xa7\x6f\x3e\x43\x85\x84\x55\xe3\x12\xe9\x5d\x52\xa0\xf3\xd6\x1c\x06\x43\xf4\x7d\x76\xff\x9f\x00\x00\x00\xff\xff\x01\x9a\xa6\x18\x2f\x23\x00\x00" func fungibletokenCdcBytes() ([]byte, error) { return bindataRead( @@ -157,7 +115,7 @@ func fungibletokenCdc() (*asset, error) { } info := bindataFileInfo{name: "FungibleToken.cdc", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x52, 0x36, 0x55, 0xb, 0xd2, 0x99, 0x3, 0x4a, 0xb1, 0x10, 0x3a, 0x8a, 0x68, 0xdc, 0x45, 0x66, 0xe8, 0xf2, 0x59, 0x1d, 0xe1, 0x20, 0xd7, 0x39, 0x91, 0x12, 0xd2, 0x59, 0x65, 0xe7, 0x3e, 0xcf}} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x84, 0x19, 0xf5, 0x51, 0xc8, 0x1a, 0xe7, 0xaa, 0x2, 0xe6, 0x36, 0xff, 0xcb, 0x4, 0x94, 0x18, 0x83, 0x37, 0x1e, 0x80, 0x9a, 0x9d, 0x2c, 0x64, 0x46, 0xf, 0x4f, 0xdd, 0xd6, 0xa9, 0xa9, 0xaf}} return a, nil } @@ -241,7 +199,7 @@ func utilityMetadataviewsCdc() (*asset, error) { return a, nil } -var _utilityNonfungibletokenCdc = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x59\x5b\x6f\x23\xb7\x15\x7e\x9f\x5f\x71\xea\x00\xb5\x1d\x68\xe5\x3e\x14\x7d\x30\x10\x6c\x36\x71\x5c\x08\x28\xdc\x60\xa3\x4d\x1e\x23\x6a\x78\xa4\x61\xc3\x21\x67\x49\x8e\xb4\x82\xb3\xff\xbd\x38\x87\x97\x99\xd1\xc5\xbb\x6e\xf7\x21\xb1\x46\xc3\x8f\xe7\xf2\x9d\xab\xee\xbe\xfd\xb6\xaa\xbe\xf9\x06\x96\x0d\xc2\xa3\xb6\x7b\x78\xb2\xe6\xcd\x63\x6f\xb6\x6a\xad\x11\x96\xf6\x0f\x34\xe0\x83\x30\x52\x38\xc9\x2f\xae\x9e\xac\xc9\xdf\xf3\xd7\x2b\xa8\xad\x09\x4e\xd4\x01\x94\x09\xe8\x36\xa2\xc6\xaa\x22\xbc\xf2\x11\x42\x23\x02\x08\xad\xcf\xa1\xe7\xd3\x1e\x7c\x63\x7b\x2d\xe9\xc1\xc6\xba\x16\x82\x9d\x57\x8b\x0d\x08\xe8\x3d\x3a\xd8\x0b\x13\x3c\x04\x0b\x12\x3b\x6d\x0f\x20\xc0\xe0\x1e\x9e\x1e\x97\x05\x60\x06\xa1\x41\xe5\x06\x71\xf6\x0c\x67\x10\x65\x15\x2c\xa8\xb6\xd3\xd8\xa2\x09\xf4\x1a\x1c\x6b\x31\x08\x3b\x67\xe1\xc7\x38\x6d\xef\x03\x6c\xac\x26\xf3\x90\x12\x74\xde\xf5\x1a\x3d\x08\x23\xc1\x88\x56\x99\x6d\xc5\x2a\x86\x89\xd6\xbe\xc3\x5a\x6d\x14\xfa\x79\xb2\xdc\xe3\x72\x05\x0e\xbd\xed\x5d\x36\x51\x6d\x1d\x96\x47\x10\x0e\x5d\xb2\x95\xc3\xce\xa1\x47\x52\x59\x18\xd6\x52\x19\x46\xf7\xad\x70\xa1\x88\x96\x80\x7f\xb4\x5a\x63\x1d\x94\x35\x2b\x78\x3f\xc1\x1f\xa0\x09\xd5\x07\xeb\x48\x6a\xb6\xe8\xb5\x4f\xd6\xcb\x67\xe7\xd5\x82\x5c\x58\xeb\x5e\xf2\x4b\x1b\xdc\xc3\xa6\x37\xfc\x1d\x5b\x5e\xb0\x05\x48\x0a\xbb\x37\xe8\xe8\x11\x0a\xaf\xf4\xa1\x6a\xed\x0e\x21\x90\x1d\x3d\x09\x4a\x66\xb1\x7d\x00\xbb\xe1\xb7\xc7\x57\xb0\xbc\x3f\x3b\xbb\x53\x12\xdd\x8a\xdf\x5c\xbd\xc7\x1a\xd5\x8e\x3e\x16\x71\x8b\x11\x3d\xeb\xe1\xc7\x4f\x40\x62\xad\x85\xc3\x91\x70\x7b\x15\x1a\xf0\xb6\x45\xe8\x1c\x32\x68\x67\x3d\x9b\x49\x2a\x7e\xa3\x4a\x56\xfd\xd8\x2b\x87\x2c\xd4\x60\x33\xd2\x23\x79\xb7\x46\x17\x84\x32\xc9\xa7\x0c\xb4\xc6\x46\xec\x94\x75\x25\x0a\x7c\x24\xc8\x01\x48\x04\x8f\x9d\x70\x22\x20\xac\xb1\x16\x3d\x89\x19\x60\xab\x76\xe8\xf9\x0e\x26\x2e\xfd\x21\xd6\x4a\xab\x70\xa0\x9b\x7c\x43\xe7\x04\x38\xdc\xa0\x43\x53\x23\x71\x33\x12\x77\x2c\x12\x89\x6b\x8d\x3e\x00\x7e\xea\xac\x4f\x78\x1b\x85\x5a\x46\xd6\x0d\xba\x2b\x03\xd6\x20\x58\x07\xad\x75\x58\x25\x9b\x0f\xe6\x9a\xc3\x82\x62\xcf\xdb\x24\x18\x09\xe5\x8f\xa5\x6a\xc5\x1f\x08\x75\xef\x83\x6d\x8b\x13\x92\xd1\x26\x71\x33\x75\x04\x45\xa3\x85\x9d\x70\xca\xf6\x04\xa9\xcc\x36\xf9\x82\xe0\x23\x1f\xe6\x55\xf5\xc3\x01\x7a\x4f\xf6\x2c\xc8\xac\xc2\x00\x34\x4b\x42\xd9\x0d\x53\x72\xca\x71\x0f\xb5\x30\xe0\xd1\xc8\x8a\x4e\xb9\x48\x96\xcc\xb6\x0e\xd1\xbd\x09\xf6\x0d\xfd\x7f\xc6\x77\x13\xf1\xc8\x65\x66\x4b\xf2\xf1\x25\x9c\x0c\x48\x2c\x01\x35\x12\xaa\x06\x8d\x72\x8b\xae\x3a\x09\xa7\xa5\xe5\xab\x72\xd4\x11\xeb\x8d\x0d\x0d\x3a\x16\x71\x56\xb2\x11\xa7\x16\x4f\xb6\x39\x30\xb4\x74\x22\x86\xc6\xd3\xe3\xb2\xda\x38\xdb\x9e\xf8\x94\xd3\x93\x81\x3a\x67\x10\x89\x9d\xf5\x2a\x14\x4f\x82\x35\x93\xbb\xae\x7d\x35\xe5\x68\x6d\xc9\x13\x21\xd2\x37\x38\x61\xfc\x06\xdd\xbc\xaa\xbe\xbd\xab\x2a\xd5\x76\xd6\x05\xf8\x55\xe1\x9e\x12\x80\xde\xa1\x03\x96\xe2\x6a\xfc\xe8\xaa\xaa\xee\xee\xee\x38\xd7\xb7\x44\xf3\x71\xf6\x1c\x25\x40\xf8\x37\x0b\x31\xfe\x96\xdc\xaa\x35\x9f\x4e\x57\xb1\x07\x47\xd4\x50\x7e\x94\xfe\xef\xee\xee\x2a\x51\xd7\xe8\xfd\x8d\xd0\xfa\x76\xb8\xe4\x24\xed\x3e\x57\x15\x00\x00\x01\xbf\x33\x80\x26\xa8\x90\x20\x37\xd6\xc5\x8c\xc3\x9e\x6c\xb0\x98\x59\x68\x4e\x2c\xd1\xff\xac\xa4\x80\x5f\x45\xaf\x03\x23\x8d\xaf\x1d\xc3\xfd\x96\x4f\xaf\x35\x7e\xdd\x9d\x7d\x27\x45\x48\x5c\x8d\x7f\x03\xee\x38\x25\xf3\x6b\x6c\xbe\x17\xaf\xfc\x40\x87\xa6\xf7\xfd\xb4\x8b\xd6\x12\xe1\xb4\xee\x61\xab\x02\xec\x89\x23\xa4\x6d\x8b\x41\xd0\x71\xd2\x35\x97\x00\x9f\xe4\x90\x05\x6f\x11\x38\x3a\x38\x53\xac\x91\x21\x02\x4a\x58\x1f\x98\x67\xd9\x72\x2b\x7a\xfe\xf4\xb8\xfc\x10\x4f\xaf\x0a\xe7\x0a\x4e\x8c\x0e\x03\xab\x22\xf3\x2a\xab\x22\x87\x54\x05\x31\x55\xc5\xc8\x20\x1d\xf6\xe2\x54\x24\x62\xd7\xd8\x0a\x9d\x4b\x56\xf3\x9d\x68\x5b\x0a\x73\xf6\xd9\x20\x9f\x4a\x4f\x06\xea\xfb\xeb\x51\xcd\xf0\x05\x39\xe7\x58\xd6\xb6\xb6\x32\x52\x82\xea\xcd\xe8\x75\x4a\x84\x2c\x5b\x23\x7c\xac\xc0\x42\x0f\xaa\x44\x57\x15\xc4\xa4\xcf\xe8\x32\xb2\x7b\x63\x65\xe4\x3b\x99\x94\x6c\x41\xef\x6d\x31\x96\xf7\x53\xab\x14\xb4\xa9\x09\xd8\xd3\x94\x57\x3d\x15\x05\x6f\x21\x75\x08\xca\xc9\x37\x9d\x70\xe1\x00\xca\x48\xfc\x44\x06\x21\x17\xb6\xd6\xa8\x60\x63\xb9\x88\x06\x2b\x70\x44\xc0\x8f\x3d\xba\x43\x2c\x2a\xd1\xde\x03\x41\x72\xb6\x89\x55\x79\x6a\xbb\x79\x06\x39\x25\xea\xae\x50\x14\xe5\x8d\x92\xf7\xf0\x61\x61\xc2\x3f\xfe\x3e\x83\xbe\x1f\x7f\x62\xd0\x7b\x78\x27\xa5\x43\xef\xdf\xce\xb8\x49\xb9\x87\x5f\x82\x53\x66\x7b\x7b\x02\xbb\x53\xb1\x6b\x80\x29\xe5\x6e\x7e\x07\xb3\x09\xef\x71\x73\x0f\xa2\x0f\xcd\x4d\xa1\xd9\x2d\xfc\xf5\xf9\x38\x29\xcc\x9f\x1e\x97\x9f\x23\xf4\x33\xff\x97\xfe\x71\x74\x8c\xc5\x8d\x78\xf3\x2d\x86\xc5\xc3\xcd\x6d\x16\x3b\x3d\xa5\x0f\x45\xf6\xf4\x8c\x3f\xbd\x9d\x8b\xa8\x49\x56\x64\x80\x59\x1e\x3a\xbc\xb9\x9d\x2b\x49\x2e\xde\x28\x74\x51\x84\xcf\xd5\xd9\xf0\x55\xbe\x44\x1b\xc7\xac\x88\x19\x89\x9e\xe7\x44\x65\x66\xe5\xa0\x32\x52\xd5\x22\xe4\x80\x8c\xfd\xd3\x49\x7b\x94\x90\x63\x5c\x15\x14\x76\xf0\xd4\x91\x1c\xfa\x27\xa7\x95\x07\x63\x43\x6c\xc0\xc8\x29\xb6\x37\xe1\xda\x73\xd7\x27\xb6\x38\x83\x15\x01\xad\x0a\xb3\x57\x46\xe9\xd5\x97\x08\x92\xd3\xe6\x0b\x0c\x21\xd4\xcb\x04\x39\x67\xbb\x4b\x86\x4b\x25\x11\x25\xd7\xdd\x49\xdf\x78\xa2\x7d\xc8\x36\x4d\xbd\xd1\xd7\x98\x74\x8c\xff\x25\xc5\x1f\xe2\xbb\x2f\xe8\x1d\xec\x57\x68\xbd\x98\xce\x40\x29\x7b\xfa\x38\x53\x0c\x93\xce\x45\x61\x4e\x3b\x62\x3a\x7f\x3f\xa9\xf4\xf3\x52\xf2\x87\x70\xc9\x69\xa8\x37\xea\x63\x8f\xb0\x78\x48\x96\x17\x75\xc3\xe9\xbb\x11\xbe\xbc\x7b\x36\x7e\x53\x5c\x65\x75\xab\x11\xf2\x19\x6b\xe5\xa9\xe3\x01\x7d\x70\xf6\x30\xc9\x28\xf0\x1d\x78\xd4\x27\x91\x3a\xfd\x32\x06\x6c\x34\x62\x7e\xfb\x4c\x40\x4e\xf4\xfb\x27\x86\x71\x23\x1d\x9b\xb5\xa1\x38\x71\x65\xa1\x4f\x76\x6f\xfc\xe4\xe0\x0f\x96\xaa\x9d\xdb\xf6\x6d\x9c\xb0\x1c\x82\xed\x88\x2d\x42\x4f\xe7\x9c\xd4\x02\xd6\x8d\xb5\x1e\x27\x10\x8d\xdd\x13\xab\x1c\x86\xde\x19\x0f\xbe\x5f\x47\xbf\x4a\xec\xd0\x48\x8a\x73\x6b\x60\xcf\x63\xef\xe4\x9e\x2e\x8e\x3e\x72\x02\xf6\x68\x1d\xe0\x27\x41\xdd\xd4\x0c\xd4\x06\x56\x64\x87\x15\x57\x30\x01\x3b\xa1\x7b\x9c\xc1\xba\x0f\xb0\x52\x72\x05\xd2\xa2\x37\xd7\x71\xda\x65\x01\x27\x50\x54\x4a\xa2\xb8\xb0\x6f\x54\x72\x36\x47\x05\x59\x84\xe7\x4b\x9b\xa4\xa6\x9b\xa8\xe4\x22\x85\x9e\x80\x2b\x89\x1b\xea\xa2\xae\x26\x78\x8b\x0d\xac\xa3\xb5\x52\xc2\x48\x6d\x2c\x2b\x3b\x4c\x29\x3c\x59\x82\x00\x6a\xf3\x75\x14\x8b\x24\xf9\x0f\xb1\x3c\xde\x36\x41\xa5\x83\x73\x58\x92\x83\x1a\xd4\x9d\xe7\x6e\x80\x2a\xe1\xbe\xb1\x74\x95\xb9\x0e\xe0\x7b\x87\xd1\x82\x21\x4f\x5b\xda\xda\x3f\xc8\xb4\xd4\x7f\x8d\xf1\x26\xd8\xdf\xd3\x44\xd6\x26\x2a\x51\x08\x10\x8d\x72\x62\x90\xe8\x95\x43\x59\x5a\xb7\xa3\x43\xc4\x4b\xde\x5c\xc8\x7c\x20\x31\x60\x6d\x9d\xb3\xfb\xcb\x77\x26\x8b\xbe\x03\x1f\x5c\x5f\x87\x9e\xa7\xfa\x34\xc2\xe7\xa4\x4f\xd3\x27\x7a\xca\x3e\x14\x64\xf3\xb3\xe1\x97\x22\xef\x97\x7e\xfd\xf4\xb8\xbc\x49\x3a\x1c\x3a\xa2\x45\x09\x99\x5b\xb8\xbf\x54\x34\xdf\x8e\x32\x00\xfd\x4b\x62\x19\xa5\xcb\xe3\xcf\xb9\xa8\x9d\xc9\x50\x16\x5a\x94\x8a\x1a\xdd\x5c\x7c\xfc\xd0\x5d\x0c\xc3\xc8\x6b\x92\x55\x1e\xf5\x73\xa3\x9f\x32\xc8\x6f\x98\xda\xdd\x3c\x3a\xe5\xce\x3a\xdf\xd6\xe5\x73\x03\x54\x6e\xff\x28\x6b\xaa\x9a\xcd\x9a\x8f\x8f\xa1\x13\x52\x62\x91\xf0\xfc\x7e\x9c\x3f\x83\x4d\xe9\x4a\x2b\x1f\x90\x9a\xa5\xfc\xbd\x4e\x80\x79\x28\x4b\x1d\xd8\xc4\xc9\x45\x56\x87\xad\xdd\x61\xd9\xcc\x14\x99\x47\x55\x87\x5a\xb6\xf8\x92\x0a\xa5\xcb\x64\x8e\x4f\xa3\x2b\x70\x38\x73\xd9\x8e\xdb\xa2\x03\x15\x45\x6e\x84\xe9\xc8\xe2\x81\x62\xf3\xc3\x87\xc5\x03\xb5\xb5\xc6\x86\x63\xd2\x8c\xa7\x9a\xc8\x9e\x2c\xe5\x4d\xfe\x63\xf1\x50\x88\x73\x0f\xdf\x3f\x13\x4d\x8e\x58\xc2\xbb\x92\xe9\xa3\x48\x1e\xdf\xeb\x90\xd3\x36\x7c\xf7\x1d\x8c\x21\xaf\x96\x51\xbe\x14\x27\x43\xb7\x12\xab\x39\xd7\xb7\x75\x9c\x55\xbd\x68\x91\x0c\x3d\x0d\x82\xc5\xc3\xd5\xc9\x95\xcc\x89\x49\xcb\x31\x15\x22\xd7\x8e\xf4\x34\x16\x8d\xd8\x7f\x70\xd1\x38\xdf\xe2\x0d\x18\x17\x5a\xbc\x69\x6c\x7c\x7d\x94\x24\xb6\xf8\xec\xe1\xff\x2d\x44\xf2\xfa\x6b\x1a\x22\x77\x85\x8b\x81\x67\x88\x44\x36\xc1\x7f\xe5\x9a\xc2\x3c\x13\x52\x8e\x69\x76\x24\xc4\x71\xba\x3a\xce\x36\xe9\x96\x1b\x76\x5b\x26\xc8\x51\xa1\xe5\x8c\xd4\xd1\xd8\x8f\xf2\xe9\x71\x49\x56\xf4\xa5\xf4\x09\x8e\xa6\xbc\xbb\x09\xfc\xdd\x50\x7f\x5d\x56\x8e\xee\xed\xc2\x97\x9b\x8e\x93\x8b\xa8\x07\x79\x5e\xb2\x23\x7f\xb0\x56\x7f\x9e\x8a\xf6\x3e\x49\x91\xa3\x26\x86\x09\x1b\x62\xab\x76\x34\x4b\x53\xf6\xa7\x02\xc7\xf7\xc7\xd9\x78\x1a\xac\x13\xbc\x77\x27\xbd\x63\x1d\x9b\x69\xec\xc8\xda\x87\x88\x97\x26\xf6\x51\x79\x83\xe0\x7a\x24\xec\x54\x45\x5f\xd6\x53\xf9\x63\x35\x47\xb9\xfe\x36\x2a\x7a\xcc\xc0\xf7\x71\x79\x59\xf6\x14\x51\x09\x53\x3b\x0c\x47\x2b\xe4\xf1\x78\xbb\xc6\xbc\x2e\x95\x79\x85\x5c\xb6\x36\x94\xf0\xf2\x16\xe2\x35\x84\x1d\x18\x76\x5f\xf2\xfb\xac\xd0\x78\x76\xbe\x37\x1d\xed\xb2\x9e\xcf\xb9\x30\x95\x67\x36\x5e\x1e\x59\xa0\x13\xa1\x19\x29\x7b\xe2\xb1\x4b\x24\x7a\x88\x38\xbf\x44\x98\x9f\x45\x68\x88\x45\xa3\x8f\x6f\xbf\x28\x42\xd7\xaf\xb5\xaa\xff\x5f\x09\x7e\x66\x94\x2c\xc0\xf0\xe9\xe8\xfe\x27\xeb\x5a\xa1\xf5\x01\xf6\x98\x56\x8b\xc3\xaa\x3a\x4d\x0d\x23\x5a\xa6\x4a\x31\x41\x10\xf9\xd7\x86\x1a\xa4\xe2\xd7\x84\x8b\xfb\x66\xee\xcc\xf2\xdc\x11\xfb\xc8\xb8\xad\xa3\x2e\x12\x0c\x92\xfc\xf4\x2e\x91\x9b\x37\xc8\x13\x58\x0f\xda\x9a\x2d\xa7\x9d\xb4\xb7\x8c\x6b\x9a\x61\xff\x2c\x22\xbc\xc3\xa9\x4a\xb5\x43\x11\xf0\xa7\xb6\x0b\x87\x91\xeb\xe3\x53\xce\x61\x48\x5f\x5d\xc8\x56\x10\x37\xbd\x31\xb4\x8f\x2b\xe8\x68\x97\x82\x87\xb8\xfe\xda\xc7\x86\xf4\x62\x92\x3b\x2b\xcc\x0d\xd7\xc3\xe1\xf3\xab\xcb\xe2\xbf\xd0\x6c\xc9\xb1\x54\x1a\xff\x96\x2a\x62\xbc\x49\x8e\xdd\x95\x4b\x21\x2b\xfc\x97\xab\x8b\x15\xe7\xa5\xe4\x1f\x73\xff\x69\xb2\x1f\x6f\xae\x06\xbf\x9f\x98\x92\x4f\xa5\x86\x22\x9d\x54\x12\x84\x73\xe2\xf0\x8a\xc2\x70\x76\x4d\x73\x6c\x34\x87\x67\x6c\x36\xea\xf8\xc6\xab\xef\xd8\x8c\xa5\xb4\x34\xf9\x15\x6b\x58\x25\x9f\x81\xca\x8d\xe0\xe5\x53\x9c\xf0\x75\x4b\x0e\x14\x7a\x2f\x0e\xf9\xe7\x13\x1a\xf0\x24\xfa\xa0\x8c\x98\x50\x6e\x04\x3e\xac\x96\xc9\x70\x45\xd2\x56\x79\xcf\x56\x8e\xcb\xcb\xfc\x4b\x49\x4c\x79\xd4\x43\x52\xd0\xae\x71\x68\x36\xcf\x61\x13\x62\x23\x9c\x8c\x33\x18\x25\x6f\x15\x97\x8b\x47\x5d\xe9\xf9\xbe\x68\xbc\x91\x60\x11\x8f\xbb\xa2\xf8\x30\x4d\xd2\xf6\xc5\x96\xa8\x9c\x7f\x45\x47\x74\x3c\x7b\xa7\x1f\x91\x5a\xdb\x9b\x5c\xfe\xe3\xb2\x69\x28\x35\xaf\x48\x98\x39\x98\xee\xa9\xd5\xaa\x5e\x7e\x3d\x4e\x63\x34\x21\xfd\x3e\x9e\x8b\xbe\x7a\x2c\xba\x10\xd9\x37\x31\xb4\x29\x9c\x8d\xd2\xb7\xf0\xe7\x9f\xf9\xd1\xdb\x71\x17\xac\xe4\xed\x3d\x9c\x1c\xa6\x7f\x57\x3f\x0a\x43\xdd\x47\x94\x8f\x63\xb6\x6c\x27\xe2\x60\x39\x34\xcc\x31\xbb\x4d\xb6\xeb\x65\x14\x68\x45\xa8\x9b\x12\xaf\x79\xd1\x9e\x7f\x4e\x96\x97\x52\x08\xbc\x3c\xf1\x7d\xae\xfe\x1b\x00\x00\xff\xff\xda\x9e\x9c\x04\xed\x1f\x00\x00" +var _utilityNonfungibletokenCdc = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x59\x5b\x6f\x1b\xc7\x15\x7e\xdf\x5f\x71\xaa\x00\x15\x15\xd0\x54\x1f\x8a\x3e\x08\x08\x1c\x3b\x8a\x0a\x02\x85\x6a\xd8\x74\xf2\x18\x0e\x77\x0e\xc9\xa9\x77\x67\xd6\x33\xb3\xa4\x09\xc5\xff\xbd\x38\x67\x2e\x3b\xcb\x8b\x6c\xb5\x7e\x48\xc4\xe5\xce\x37\xe7\xf2\x9d\x2b\x6f\x7f\xfc\xb1\xaa\x7e\xf8\x01\x16\x5b\x84\x87\xc6\xec\xe1\xd1\xe8\x57\x0f\xbd\xde\xa8\x55\x83\xb0\x30\x9f\x50\x83\xf3\x42\x4b\x61\x25\xbf\xb8\x7c\x34\x3a\x7d\xcf\x5f\x2f\xa1\x36\xda\x5b\x51\x7b\x50\xda\xa3\x5d\x8b\x1a\xab\x8a\xf0\xf2\x47\xf0\x5b\xe1\x41\x34\xcd\x39\xf4\x74\xda\x81\xdb\x9a\xbe\x91\xf4\x60\x6d\x6c\x0b\xde\xcc\xaa\xf9\x1a\x04\xf4\x0e\x2d\xec\x85\xf6\x0e\xbc\x01\x89\x5d\x63\x0e\x20\x40\xe3\x1e\x1e\x1f\x16\x19\x60\x0a\x7e\x8b\xca\x0e\xe2\xec\x19\x4e\x23\xca\xca\x1b\x50\x6d\xd7\x60\x8b\xda\xd3\x6b\x70\xac\xc5\x20\xec\x8c\x85\x2f\x71\xda\xde\x79\x58\x9b\x86\xcc\x43\x4a\xd0\x79\xdb\x37\xe8\x40\x68\x09\x5a\xb4\x4a\x6f\x2a\x56\xd1\x8f\xb4\x76\x1d\xd6\x6a\xad\xd0\xcd\xa2\xe5\x1e\x16\x4b\xb0\xe8\x4c\x6f\x93\x89\x6a\x63\x31\x3f\x02\x7f\xe8\xa2\xad\x2c\x76\x16\x1d\x92\xca\x42\xb3\x96\x4a\x33\xba\x6b\x85\xf5\x59\xb4\x08\xfc\x8b\x69\x1a\xac\xbd\x32\x7a\x09\xef\x47\xf8\x03\x34\xa1\x3a\x6f\x2c\x49\xcd\x16\xbd\x76\xd1\x7a\xe9\xec\xac\x9a\x93\x0b\xeb\xa6\x97\xfc\xd2\x1a\xf7\xb0\xee\x35\x7f\xc7\x96\x17\x6c\x01\x92\xc2\xec\x35\x5a\x7a\x84\xc2\xa9\xe6\x50\xb5\x66\x87\xe0\xc9\x8e\x8e\x04\x25\xb3\x98\xde\x83\x59\xf3\xdb\xe5\x15\x2c\xef\x3b\x6b\x76\x4a\xa2\x5d\xf2\x9b\xcb\xf7\x58\xa3\xda\xd1\xc7\x2c\x6e\x36\xa2\x63\x3d\x5c\xf9\x04\x24\xd6\x8d\xb0\x58\x08\xb7\x57\x7e\x0b\xce\xb4\x08\x9d\x45\x06\xed\x8c\x63\x33\x49\xc5\x6f\x54\xd1\xaa\x9f\x7b\x65\x91\x85\x1a\x6c\x46\x7a\x44\xef\xd6\x68\xbd\x50\x3a\xfa\x94\x81\x56\xb8\x15\x3b\x65\x6c\x8e\x02\x17\x08\x72\x00\x12\xc1\x61\x27\xac\xf0\x08\x2b\xac\x45\x4f\x62\x7a\xd8\xa8\x1d\x3a\xbe\x83\x89\x4b\x7f\x88\x95\x6a\x94\x3f\xd0\x4d\x6e\x4b\xe7\x04\x58\x5c\xa3\x45\x5d\x23\x71\x33\x10\xb7\x14\x89\xc4\x35\xba\x39\x00\x7e\xe9\x8c\x8b\x78\x6b\x85\x8d\x0c\xac\x1b\x74\x57\x1a\x8c\x46\x30\x16\x5a\x63\xb1\x8a\x36\x1f\xcc\x35\x83\x39\xc5\x9e\x33\x51\x30\x12\xca\x1d\x4b\xd5\x8a\x4f\x08\x75\xef\xbc\x69\xb3\x13\xa2\xd1\x46\x71\x33\x76\x04\x45\xa3\x81\x9d\xb0\xca\xf4\x04\xa9\xf4\x26\xfa\x82\xe0\x03\x1f\x66\x55\xf5\xf6\x00\xbd\x23\x7b\x66\x64\x56\x61\x00\x9a\x46\xa1\xcc\x9a\x29\x39\xe6\xb8\x83\x5a\x68\x70\xa8\x65\x45\xa7\x6c\x20\x4b\x62\x5b\x87\x68\x5f\x79\xf3\x8a\xfe\x3f\xe5\xbb\x89\x78\xe4\x32\xbd\x21\xf9\xf8\x12\x4e\x06\x24\x96\x80\x1a\x09\xb5\x81\x06\xe5\x06\x6d\x75\x12\x4e\x0b\xc3\x57\xa5\xa8\x23\xd6\x6b\xe3\xb7\x68\x59\xc4\x69\xce\x46\x9c\x5a\x1c\xd9\xe6\xc0\xd0\xd2\x8a\x10\x1a\x8f\x0f\x8b\x6a\x6d\x4d\x7b\xe2\x53\x4e\x4f\x1a\xea\x94\x41\x24\x76\xc6\x29\x9f\x3d\x09\x46\x8f\xee\xba\x76\xd5\x98\xa3\xb5\x21\x4f\xf8\x40\x5f\x6f\x85\x76\x6b\xb4\xb3\xaa\xfa\xf1\xb6\xaa\x54\xdb\x19\xeb\xe1\x37\x85\x7b\x4a\x00\xcd\x0e\x2d\xb0\x14\x57\xe5\xa3\xab\xaa\xba\xbd\xbd\xe5\x5c\xdf\x12\xcd\xcb\xec\x59\x24\x40\xf8\x37\x0b\x51\x7e\x4b\x6e\x6d\x1a\x3e\x1d\xaf\x62\x0f\x16\xd4\x50\xae\x48\xff\xb7\xb7\xb7\x95\xa8\x6b\x74\x6e\x22\x9a\xe6\x66\xb8\xe4\x24\xed\x3e\x55\x15\x00\x00\x01\xbf\xd1\x80\xda\x2b\x1f\x21\xd7\xc6\x86\x8c\xc3\x9e\xdc\x62\x36\xb3\x68\x38\xb1\x04\xff\xb3\x92\x02\x7e\x13\x7d\xe3\x19\xa9\xbc\xb6\x84\xfb\x3d\x9d\x5e\x35\xf8\x7d\x77\xf6\x9d\x14\x3e\x72\x35\xfc\x0d\xb8\xe3\x94\xcc\xaf\xb1\xf9\x9e\xbd\xf2\x23\x1d\x1a\xdf\xf7\xeb\x2e\x58\x4b\xf8\xd3\xba\x87\xad\xf2\xb0\x27\x8e\x90\xb6\x2d\x7a\x41\xc7\x49\xd7\x54\x02\x5c\x94\x43\x66\xbc\xb9\xe7\xe8\xe0\x4c\xb1\x42\x86\xf0\x28\x61\x75\x60\x9e\x25\xcb\x2d\xe9\xf9\xe3\xc3\xe2\x63\x38\xbd\xcc\x9c\xcb\x38\x21\x3a\x34\x2c\xb3\xcc\xcb\xa4\x8a\x1c\x52\x15\x84\x54\x15\x22\x83\x74\xd8\x8b\x53\x91\x88\x5d\xa5\x15\x3a\x1b\xad\xe6\x3a\xd1\xb6\x14\xe6\xec\xb3\x41\x3e\x15\x9f\x0c\xd4\x77\xd7\x45\xcd\x70\x19\x39\xe5\x58\xd6\xb6\x36\x32\x50\x82\xea\x4d\xf1\x3a\x25\x42\x96\x6d\x2b\x5c\xa8\xc0\xa2\x19\x54\x09\xae\xca\x88\x51\x9f\xe2\x32\xb2\xfb\xd6\xc8\xc0\x77\x32\x29\xd9\x82\xde\xdb\x60\x28\xef\xa7\x56\xc9\x68\x63\x13\xb0\xa7\x29\xaf\x3a\x2a\x0a\xce\x40\xec\x10\x94\x95\xaf\x3a\x61\xfd\x01\x94\x96\xf8\x85\x0c\x42\x2e\x6c\x8d\x56\xde\x84\x72\x11\x0c\x96\xe1\x88\x80\x9f\x7b\xb4\x87\x50\x54\x82\xbd\x07\x82\xa4\x6c\x13\xaa\xf2\xd8\x76\xb3\x04\x72\x4a\xd4\x5d\xa6\x28\xca\x89\x92\x77\xf0\x71\xae\xfd\x3f\xfe\x3e\x85\xbe\x2f\x3f\x31\xe8\x1d\xbc\x91\xd2\xa2\x73\xaf\xa7\xdc\xa4\xdc\xc1\x07\x6f\x95\xde\xdc\x9c\xc0\xee\x54\xe8\x1a\x60\x4c\xb9\xc9\x1f\xa0\xd7\xfe\x3d\xae\xef\x40\xf4\x7e\x3b\xc9\x34\xbb\x81\xbf\x3e\x1d\x27\x85\xd9\xe3\xc3\xe2\x6b\x80\x7e\xe2\xff\xd2\x3f\x8e\x8e\x52\xdc\x80\x37\xdb\xa0\x9f\xdf\x4f\x6e\x92\xd8\xf1\x29\x7d\xc8\xb2\xc7\x67\xfc\xe9\xf5\x4c\x04\x4d\x92\x22\x03\xcc\xe2\xd0\xe1\xe4\x66\xa6\x24\xb9\x78\xad\xd0\x06\x11\xbe\x56\x67\xc3\x57\xb9\x1c\x6d\x1c\xb3\x22\x64\x24\x7a\x9e\x12\x95\x9e\xe6\x83\x4a\x4b\x55\x0b\x9f\x02\x32\xf4\x4f\x27\xed\x51\x44\x0e\x71\x95\x51\xd8\xc1\x63\x47\x72\xe8\x9f\x9c\x56\x0e\xb4\xf1\xa1\x01\x23\xa7\x98\x5e\xfb\x6b\xc7\x5d\x9f\xd8\xe0\x14\x96\x04\xb4\xcc\xcc\x5e\x6a\xd5\x2c\xbf\x45\x90\x94\x36\x9f\x61\x08\xa1\x5e\x26\xc8\x39\xdb\x5d\x32\x5c\x2c\x89\x28\xb9\xee\x8e\xfa\xc6\x13\xed\x7d\xb2\x69\xec\x8d\xbe\xc7\xa4\x25\xfe\xb7\x14\xbf\x0f\xef\x3e\xa3\xb7\x37\xdf\xa1\xf5\x7c\x3c\x03\xc5\xec\xe9\xc2\x4c\x31\x4c\x3a\x17\x85\x39\xed\x88\xe9\xfc\xdd\xa8\xd2\xcf\x72\xc9\x1f\xc2\x25\xa5\xa1\x5e\xab\xcf\x3d\xc2\xfc\x3e\x5a\x5e\xd4\x5b\x4e\xdf\x5b\xe1\xf2\xbb\x67\xe3\x37\xc6\x55\x52\xb7\x2a\x90\xcf\x58\x2b\x4d\x1d\xf7\xe8\xbc\x35\x07\x94\x93\xd2\x56\xf0\x13\x38\x6c\x52\x54\x06\x4b\xf1\x83\xf3\x51\x37\x52\xe2\x9f\xe8\xcb\x6e\x39\x74\x64\x43\x05\xe2\xf2\x41\x9f\xcc\x5e\xbb\xd1\xc1\xb7\x86\x4a\x9a\xdd\xf4\x6d\x18\xa3\x2c\x82\xe9\x88\x12\xa2\x19\x0f\x33\xb1\xcf\xab\xb7\xc6\x38\x1c\x41\x6c\xcd\x9e\xa8\x63\xd1\xf7\x56\x3b\x70\xfd\x2a\x38\x4f\x62\x87\x5a\x52\x30\x1b\x0d\x7b\x9e\x6d\x47\xf7\x74\x61\xbe\x91\x23\xb0\x07\x63\x01\xbf\x08\x6a\x99\xa6\xa0\xd6\xb0\x24\x3b\x2c\xb9\x4c\x09\xd8\x89\xa6\xc7\x29\xac\x7a\x0f\x4b\x25\x97\x20\x0d\x3a\x7d\x1d\x46\x5a\x16\x70\x04\x45\xf5\x22\x88\x0b\xfb\xad\x8a\x1e\x65\xea\x93\x45\x78\x88\x34\x51\x6a\xba\x89\xea\x2a\x52\x7c\x09\xb8\x92\xb8\xa6\x56\xe9\x6a\x84\x37\x5f\xc3\x2a\x58\x2b\x66\x85\xd8\xab\xb2\xb2\xc3\x28\xc2\xe3\x23\x08\xa0\x5e\xbe\x09\x62\x91\x24\xff\x21\x2a\x87\xdb\x46\xa8\x74\x70\x06\x0b\x72\xd0\x16\x9b\xce\x71\xc9\xa7\x72\xb7\xdf\x1a\xba\x4a\x5f\x7b\x70\xbd\xc5\x60\x41\x9f\x46\xaa\xc6\x98\x4f\x64\x5a\x6a\xb2\x4a\xbc\x11\xf6\xcf\x34\x76\xb5\x91\x4a\xc4\x73\xa2\x51\x8a\x7e\x89\x4e\x59\x94\xb9\x3f\x3b\x3a\x44\xbc\xe4\xf5\x84\x4c\x07\x22\x03\x56\xc6\x5a\xb3\xbf\x7c\x67\xb4\xe8\x1b\x70\xde\xf6\xb5\xef\x79\x74\x8f\x73\x7a\xca\xec\x34\x62\xa2\xa3\x14\x43\x91\x34\x3b\x1b\x63\x31\xbc\x3e\xf4\xab\xc7\x87\xc5\x24\xea\x70\xe8\x88\x16\x39\x64\x6e\xe0\xee\x52\x65\x7c\x5d\x84\x39\xfd\x8b\x62\x69\xd5\xe4\xc7\x5f\x53\xe5\x3a\x93\x86\x0c\xb4\x28\x15\x75\xb3\xa9\xc2\xb8\xa1\x85\x18\x26\x8e\x97\x64\xa4\x34\xcf\xa7\x6e\x3e\xa6\x89\xdf\x31\xf6\xb4\x69\x3e\x4a\xed\x73\xba\xad\x4b\xe7\x06\xa8\xd4\xe3\x51\x6a\x54\x35\x9b\x35\x1d\x2f\xa1\x23\x52\x64\x91\x70\xfc\x7e\x18\x32\xbd\x89\x39\xa9\x51\xce\x23\x75\x44\xe9\xfb\x26\x02\xa6\xc9\x2b\xb6\x59\x23\x27\x67\x59\x2d\xb6\x66\x87\x79\xfd\x92\x65\x2e\x4a\x0b\xf5\x65\xe1\x25\xe5\x73\x2b\xc9\x1c\x1f\x47\x97\xe7\x70\xe6\xda\x1c\x56\x42\x07\xaa\x7c\xdc\xed\xd2\x91\xf9\x3d\xc5\xe6\xc7\x8f\xf3\x7b\xea\x5d\xb5\xf1\xc7\xa4\x29\x47\x97\xc0\x9e\x24\xe5\x24\xfd\x31\xbf\xcf\xc4\xb9\x83\x9f\x9f\x88\x26\x47\x2c\xe1\x85\xc8\xf8\x51\x20\x8f\xeb\x1b\x9f\xba\x28\xf8\xe9\x27\x28\x21\xaf\x16\x41\xbe\x18\x27\x43\x4b\x12\x4a\x36\x17\xb1\x55\x18\x48\x9d\x68\x91\x0c\x3d\x0e\x82\xf9\xfd\xd5\xc9\x95\xcc\x89\x51\x5f\x31\x16\x22\xd5\xd9\xf8\x34\x14\x8d\xd0\x64\x70\xd1\x38\xdf\xc7\x0d\x18\x17\xfa\xb8\x71\x6c\x7c\x7f\x94\x44\xb6\xb8\xe4\xe1\xff\x2d\x44\xd2\x8e\x6b\x1c\x22\xb7\x99\x8b\x9e\x07\x85\x48\x36\xc1\x7f\xa5\x9a\xc2\x3c\x13\x52\x96\x34\x3b\x12\xe2\x38\x5d\x1d\x67\x9b\x78\xcb\x84\xdd\x96\x08\x72\x54\x68\x39\x23\x75\x34\xdb\xa3\x7c\x7c\x58\x90\x15\x5d\x2e\x7d\x82\xa3\x29\x2d\x68\x3c\x7f\x37\xd4\x5f\x9b\x94\xa3\x7b\x3b\xff\xed\xce\xe2\xe4\x22\x6a\x34\x9e\x16\xec\xc8\xb7\xc6\x34\x5f\xc7\xa2\xbd\x8f\x52\xa4\xa8\x09\x61\xc2\x86\xd8\xa8\x1d\x0d\xcc\x94\xfd\xa9\xc0\xf1\xfd\x61\x00\x1e\x07\xeb\x08\xef\xcd\x49\x83\x58\x87\x8e\x19\x3b\xb2\xf6\x21\xe0\xc5\xb1\xbc\x28\x6f\xe0\x6d\x8f\x84\x1d\xab\xe8\xf3\x7a\x2a\x77\xac\x66\x91\xeb\x6f\x82\xa2\xc7\x0c\x7c\x1f\x36\x94\x79\x19\x11\x94\xd0\xb5\x45\x7f\xb4\x27\x2e\x67\xd8\x15\xa6\x9d\xa8\x4c\x7b\xe2\xbc\x9a\xa1\x84\x97\x56\x0d\x2f\x21\xec\xc0\xb0\xbb\x9c\xdf\xa7\x99\xc6\xd3\xf3\x0d\x68\xb1\xb0\x7a\x3a\xe7\xc2\x58\x9e\xd9\x78\x69\x2e\x81\x4e\xf8\x6d\xa1\xec\x89\xc7\x2e\x91\xe8\x3e\xe0\x7c\x08\x30\xef\x84\xdf\x12\x8b\x8a\x8f\xaf\xbf\x29\x42\xd7\xaf\x1a\x55\xff\xbf\x12\xbc\x63\x94\x24\xc0\xf0\xe9\xe8\xfe\x47\x63\x5b\xd1\x34\x07\xd8\x63\xdc\x1f\x0e\xfb\xe8\x38\x1a\x14\xb4\x8c\x95\x62\x84\x20\xd2\x4f\x0a\x35\x48\xc5\xaf\x09\x1b\x96\xca\xdc\x99\xa5\xe1\x22\xf4\x91\x61\x25\x47\x5d\x24\x68\x24\xf9\xe9\x5d\x22\x37\xaf\x89\x47\xb0\x0e\x1a\xa3\x37\x9c\x76\xe2\x72\x32\xec\x62\x86\x25\xb3\x08\xf0\x16\xc7\x2a\xd5\x16\x85\xc7\x5f\xdb\xce\x1f\x0a\xd7\x87\xa7\x9c\xc3\x90\xbe\xba\x90\xad\x20\xac\x73\x43\x68\x1f\x57\xd0\x62\x61\x82\x87\xb0\xe3\xda\x87\x86\xf4\x62\x92\x3b\x2b\xcc\x84\xeb\xe1\xf0\xf9\xc5\x65\xf1\x5f\xa8\x37\xe4\x58\x2a\x8d\x7f\x8b\x15\x31\xdc\x24\x4b\x77\xa5\x52\xc8\x0a\xff\xe5\xea\x62\xc5\x79\x2e\xf9\x87\xdc\x7f\x9a\xec\xcb\xf5\xd4\xe0\xf7\x13\x53\xf2\xa9\xd8\x50\xc4\x93\x4a\x82\xb0\x56\x1c\x5e\x50\x18\xce\xee\x62\x8e\x8d\x66\xf1\x8c\xcd\x8a\x8e\xaf\xdc\x6f\x87\x66\x2c\xa6\xa5\xd1\x4f\x55\xc3\xbe\xf8\x0c\x54\x6a\x04\x2f\x9f\xe2\x84\xdf\xb4\xe4\x40\xd1\xec\xc5\x21\xfd\x46\x42\x03\x9e\x44\xe7\x95\x16\x23\xca\x15\xe0\xc3\xfe\x98\x0c\x97\x25\x6d\x95\x73\x6c\xe5\xb0\xa1\x4c\x3f\x87\x84\x94\x47\x3d\x24\x05\xed\x0a\x87\x66\xf3\x1c\x36\x21\x6e\x85\x95\x61\x06\xa3\xe4\xad\xc2\x06\xf1\xa8\x2b\x3d\xdf\x17\x95\x6b\x07\x16\xf1\xb8\x2b\x0a\x0f\xe3\x24\x6d\x9e\x6d\x89\xf2\xf9\x17\x74\x44\xc7\xb3\x77\xfc\xa5\xa8\x35\xbd\x4e\xe5\x3f\x6c\x94\x86\x52\xf3\x82\x84\x99\x82\xe9\x8e\x5a\xad\xea\xf9\xd7\xc3\x34\x46\x13\xd2\x1f\xe5\x5c\xf4\xdd\x63\xd1\x85\xc8\x9e\x84\xd0\xa6\x70\xd6\xaa\xb9\x81\x3f\xff\x4c\x8f\x5e\x97\x5d\xb0\x92\x37\x77\x70\x72\x98\xfe\x5d\xfd\x22\x34\x75\x1f\x41\x3e\x8e\xd9\xbc\x9d\x08\x83\xe5\xd0\x30\x87\xec\x36\x5a\xa1\xe7\x51\xa0\x15\xbe\xde\xe6\x78\x4d\xdb\xf4\xf4\x9b\xb1\xbc\x94\x42\xe0\xf9\x89\xef\x6b\xf5\xdf\x00\x00\x00\xff\xff\x8f\x1e\x43\x1e\xd2\x1f\x00\x00" func utilityNonfungibletokenCdcBytes() ([]byte, error) { return bindataRead( @@ -257,7 +215,7 @@ func utilityNonfungibletokenCdc() (*asset, error) { } info := bindataFileInfo{name: "utility/NonFungibleToken.cdc", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3c, 0x22, 0x37, 0x39, 0xbc, 0xc2, 0x40, 0xa8, 0xff, 0xbc, 0xbc, 0x37, 0x3f, 0xf0, 0x1f, 0xf1, 0x6a, 0x6b, 0xcc, 0xa3, 0x58, 0xd2, 0x68, 0x7f, 0x6a, 0x18, 0xf9, 0x69, 0x8d, 0xb8, 0x72, 0x6f}} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x60, 0x42, 0x44, 0xc0, 0x85, 0x59, 0xa9, 0xf, 0xc2, 0x3a, 0xce, 0xe3, 0xb7, 0xb5, 0x85, 0xfe, 0x87, 0xb2, 0x84, 0x26, 0xa8, 0x47, 0x24, 0xf4, 0x3d, 0xf3, 0x15, 0x43, 0xee, 0xc6, 0xae, 0x46}} return a, nil } @@ -301,7 +259,7 @@ func utilityTokenforwardingCdc() (*asset, error) { return a, nil } -var _utilityViewresolverCdc = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x94\x4f\x8b\x23\x37\x10\xc5\xef\xfe\x14\x2f\x7b\x48\x6c\x08\xee\x4b\xc8\xc1\x97\x64\xc8\x32\x30\x87\x2c\x21\x71\xf6\xb2\x2c\x41\x6e\x95\xdd\x62\xd4\x52\xa7\x54\xb2\xb7\x19\xe6\xbb\x87\x92\xfc\xa7\xc7\x9e\x25\xcb\xf8\xd4\xc8\x5d\xf5\x5e\xfd\x9e\xba\x9a\x06\x6b\xf3\x48\x01\x5b\x8e\x3d\xa4\x23\x7c\xb8\x5f\xe3\x77\x12\x63\x8d\x18\x24\x31\xc1\x1a\xb6\x3f\x42\x3a\x97\xd0\xc6\x20\x6c\x5a\x01\x7d\x19\x62\xa2\x04\x13\xe0\x82\x10\x6f\x4d\x4b\x90\x08\x4f\x32\x6b\x1a\x98\x30\xc6\x40\xd8\x44\xe6\x78\x80\xb9\xd4\x99\x60\xc1\x94\xa2\xdf\x13\xf6\x8e\x0e\x09\x31\xc0\xc9\x72\xd6\x34\x5a\xb7\x56\x91\x83\xf3\x1e\xc6\xfb\x78\xc0\x18\xb3\x76\x8d\x1b\x31\x4e\x95\xb6\x91\x7b\x23\x2e\x06\x98\x4d\xcc\x32\xed\x7c\x70\xd2\xe9\x51\xa0\x96\x52\x32\xec\xfc\x88\xc7\x10\x0f\x2e\xec\xd4\x8e\x74\xe5\xa1\x54\x55\x3d\xdc\x79\x5f\x04\x02\x91\x85\x4b\x70\x92\x60\xac\x65\x4a\xa9\xf8\x0c\xa6\xa7\xf2\x30\xc6\xfc\x03\x13\x76\x31\x5a\x75\xb3\x8b\xdf\xcd\x4c\xab\x2a\x73\xe3\xfd\xe2\x62\xe1\x42\xe2\xa3\xa3\xc3\x9f\x75\x4c\xc6\xd3\x0c\x00\x9a\xa6\xc1\x7d\x0e\x6d\x71\x2f\x9d\x11\x30\x49\xe6\x90\x74\xd4\x02\xfe\x0c\xfd\x63\x01\xe3\xfa\xc1\x53\x4f\x41\xc8\x62\x33\x96\x37\x2a\x39\x1d\xe4\xa4\x79\x6a\x7d\x96\xf8\xb5\x76\xc5\x5d\x80\x61\x36\x23\xe2\x16\xeb\x71\xa0\x04\x4b\x5b\x17\xb4\x56\x3b\x4d\x9b\x97\x1c\x96\x95\xfd\xde\xf8\x4c\x35\x81\x0d\x21\xa7\xa2\x7d\x6e\x7e\xfa\x59\xda\x93\x8f\x03\x71\x52\x1e\x4a\x19\x87\xce\xb5\x1d\x06\xc3\xa6\x27\x21\xd6\xf3\xc1\xa4\xf2\xff\xc5\x39\xe9\x64\xf3\x05\x7a\x92\x2e\xda\xe5\x0b\xf3\x53\xa2\xea\x08\xdb\x1c\xb0\x23\x29\x30\xe6\x8b\x15\x3e\xe9\x18\x9f\x8f\x34\xf5\x77\x9c\xf4\xd3\xe7\x72\xf2\x3c\xfb\x2a\xe6\x22\x9d\x60\x54\xb7\x12\xae\x02\x91\xeb\xad\x96\xf8\x48\x61\x79\x8b\xb2\x4c\x53\xde\x5d\x61\xdd\x51\xe1\xa8\x3c\x75\x20\x4b\xc9\xf1\x11\xde\xf2\x96\x3e\x92\x70\x6e\x25\xb3\x8e\x3e\x30\x25\x0a\x72\x62\xcf\xf4\x6f\xa6\x24\xd7\xc5\x37\x14\x14\xc0\x94\xdb\x3f\x27\x2b\xe3\x40\x8b\x15\xee\xc2\xf8\x57\x11\xf9\xe5\x96\x49\x70\xfe\x1a\xca\x1f\x1c\xf7\xce\x2a\x86\x22\xa1\xc1\x18\x24\x12\x1d\xe8\x05\x97\xb4\x3c\xdb\x47\xe4\x73\xbd\x3a\xc9\xdc\x12\xe6\xb4\xdc\x2d\xf5\xc3\xff\x70\xbf\x5e\xa0\xd5\x0d\x70\xba\x4c\x15\xe7\x8b\x85\x30\x54\xd9\x8b\xea\xb9\xa1\xa2\xa8\x2b\xa0\xc4\xe4\x04\x29\x0f\x43\x64\x49\x5f\x47\x72\x36\x71\xd1\xb8\xfa\xcc\xde\x76\x95\x6e\xaf\x53\xa5\xf7\x5a\xc7\xb7\xc4\xf2\x4a\x34\x17\x81\x49\x48\x77\xd8\x71\xcc\x83\x66\x52\x8c\x1f\x75\x58\xa1\x5a\xfa\x52\x37\xc1\xc3\xfb\x37\x01\xfa\x2d\x7a\x4f\xf5\xbb\xf8\x1f\x54\x75\x6d\x4f\x77\xd8\xdc\xd9\x15\xfe\x7e\x08\xf2\xf3\x4f\x8b\x15\xbe\x7f\x3a\x9d\x3f\x5f\x0f\x39\x30\xe1\x09\xc2\x99\x56\x78\x67\x73\xdf\x8f\xef\x26\x18\x5f\x07\x3a\x8d\xe8\xe1\x7d\x0d\xa8\x6a\x5d\x47\xf4\x2d\xdd\x9f\x67\xcf\xb3\xff\x02\x00\x00\xff\xff\xe7\x2e\x12\xaa\xd5\x06\x00\x00" +var _utilityViewresolverCdc = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x94\xc1\x6e\xf3\x36\x10\x84\xef\x7e\x8a\xe9\xa5\xb5\x81\x42\xba\x14\x3d\xf8\xd2\x1a\xfd\x11\x20\x87\xfe\x28\x5a\x37\x97\x20\x28\x68\x71\x6d\x11\xa1\x49\x75\xb9\xb2\x22\x04\x79\xf7\x62\x49\xcb\x76\xe2\xa4\x2d\xa2\x93\x40\x89\x3b\x33\xdf\x92\x5b\xd7\x58\x9b\x47\x0a\xd8\x72\xdc\x43\x5a\xc2\xd7\x9b\x35\x7e\x25\x31\xd6\x88\x41\x12\x13\xac\x61\xfb\x3d\xa4\x75\x09\x4d\x0c\xc2\xa6\x11\xd0\x53\x17\x13\x25\x98\x00\x17\x84\x78\x6b\x1a\x82\x44\x78\x92\x59\x5d\xc3\x84\x31\x06\xc2\x26\x32\xc7\x01\xe6\xbc\xcf\x04\x0b\xa6\x14\xfd\x81\x70\x70\x34\x24\xc4\x00\x27\xd5\xac\xae\x75\xdf\x5a\x45\x06\xe7\x3d\x8c\xf7\x71\xc0\x18\x7b\xad\x1a\x37\x62\x9c\x2a\x6d\x23\xef\x8d\xb8\x18\x60\x36\xb1\x97\xcb\xca\x83\x93\x56\x97\x02\x35\x94\x92\x61\xe7\x47\x3c\x86\x38\xb8\xb0\x53\x3b\xd2\xe6\x97\xbc\xab\xe8\x61\xe5\x7d\x16\x08\x44\x16\x2e\xc1\x49\x82\xb1\x96\x29\xa5\xec\x33\x98\x3d\xe5\x97\x31\xf6\xdf\x31\x61\x17\xa3\x55\x37\xbb\xf8\xcd\xcc\x34\xaa\x32\x37\xde\x2f\xce\x16\xce\x24\xee\x1c\x0d\xbf\x97\x98\x8c\xe7\x19\x00\xd4\x75\x8d\x9b\x3e\x34\xd9\xbd\xb4\x46\xc0\x24\x3d\x87\xa4\x51\x33\xf8\x13\xf4\xbb\x0c\xc6\xed\x3b\x4f\x7b\x0a\x42\x16\x9b\x31\xff\x51\xc8\x69\x90\x49\x73\x2a\x7d\x92\xf8\xb9\x54\xc5\x2a\xc0\x30\x9b\x11\x71\x8b\xf5\xd8\x51\x82\xa5\xad\x0b\xba\x57\x2b\x5d\x16\xcf\x7d\xa8\x0a\xfb\x83\xf1\x3d\x95\x0e\x6c\x08\x7d\xca\xda\xa7\xe2\xd3\x63\xe9\x40\x3e\x76\xc4\x49\x79\x28\x65\x0c\xad\x6b\x5a\x74\x86\xcd\x9e\x84\x58\xd7\x3b\x93\xf2\xf7\xb3\x73\xd2\x64\xf3\x05\xf6\x24\x6d\xb4\xd5\x2b\xf3\x97\x44\xd5\x11\xb6\x7d\xc0\x8e\x24\xc3\x98\x2f\x96\xb8\xd7\x18\x0f\x47\x9a\xfa\x1c\x93\xde\x3f\xe4\x95\x97\xd9\x87\x98\xb3\x74\x82\x51\xdd\x42\xb8\x08\x44\x2e\xa7\x5a\xe2\x23\x85\xea\x1a\x65\x4e\x93\xff\x5d\x62\xdd\x52\xe6\xa8\x3c\x35\x90\xa5\xe4\xf8\x08\xaf\xba\xa6\x8f\x24\xdc\x37\xd2\xb3\x46\xef\x98\x12\x05\x99\xd8\x33\xfd\xdd\x53\x92\xb7\x9b\xaf\x28\x28\x80\x4b\x6e\x7f\x4d\x56\xc6\x8e\x16\x4b\xac\xc2\xf8\x47\x16\xf9\xe9\x9a\x49\x70\xfe\x2d\x94\xdf\x38\x1e\x9c\x55\x0c\x59\x42\x1b\x63\x90\x48\x34\xd0\x2b\x2e\xa9\x3a\xd9\x47\xe4\xd3\x7e\x75\xd2\x73\x43\x98\x53\xb5\xab\xf4\xe2\x7f\xbd\x59\x2f\xd0\xe8\x04\x98\x0e\x53\xc1\xf9\x6a\x20\x74\x45\xf6\xac\x7a\x2a\xa8\x28\xca\x08\xc8\x6d\x72\x82\xd4\x77\x5d\x64\x49\x1f\x23\x39\x99\x38\x6b\xbc\xb9\x66\x9f\x3b\x4a\xd7\xc7\xa9\xd0\x7b\xaf\xe2\x67\xda\xf2\x4e\x6b\xce\x02\x17\x4d\x5a\x61\xc7\xb1\xef\xb4\x27\xd9\xf8\x51\x87\x15\xaa\xa5\xa7\x32\x09\x6e\xbf\x7c\x0a\xd0\x2f\xd1\x7b\x2a\xf7\xe2\x3f\x50\x95\xb1\x7d\x39\xc3\xe6\xce\x2e\xf1\xe7\x6d\x90\x1f\x7f\x58\x2c\xf1\xed\xf3\xb4\xfe\xf2\xbf\x43\xfe\x5b\x5f\x6e\xbf\x94\xae\x14\x81\xe9\x3a\xbf\xcc\xfe\x09\x00\x00\xff\xff\x90\x57\x5a\xe7\x9c\x06\x00\x00" func utilityViewresolverCdcBytes() ([]byte, error) { return bindataRead( @@ -317,7 +275,7 @@ func utilityViewresolverCdc() (*asset, error) { } info := bindataFileInfo{name: "utility/ViewResolver.cdc", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x45, 0x7e, 0xf3, 0xe5, 0x5b, 0x39, 0x26, 0xa7, 0x5e, 0x11, 0x17, 0xf8, 0xb0, 0x7f, 0xc4, 0xf4, 0x39, 0xb1, 0xb2, 0x3c, 0xd, 0x4f, 0x47, 0xf3, 0x7b, 0x6f, 0x33, 0x4b, 0xf9, 0x42, 0x29, 0x37}} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x80, 0x83, 0xcc, 0xf0, 0x8f, 0xd, 0x91, 0xba, 0xf8, 0x42, 0xe0, 0x0, 0xaf, 0xbf, 0x21, 0x68, 0x4a, 0x18, 0xaa, 0x77, 0xfb, 0xc5, 0x3b, 0x76, 0x1c, 0xda, 0xe, 0xc3, 0x67, 0x2c, 0xc7, 0x5a}} return a, nil } @@ -412,9 +370,7 @@ func AssetNames() []string { // _bindata is a table, holding each asset generator, mapped to its name. var _bindata = map[string]func() (*asset, error){ - "ExampleToken-v2.cdc": exampletokenV2Cdc, "ExampleToken.cdc": exampletokenCdc, - "FungibleToken-v2.cdc": fungibletokenV2Cdc, "FungibleToken.cdc": fungibletokenCdc, "FungibleTokenMetadataViews.cdc": fungibletokenmetadataviewsCdc, "FungibleTokenSwitchboard.cdc": fungibletokenswitchboardCdc, @@ -470,9 +426,7 @@ type bintree struct { } var _bintree = &bintree{nil, map[string]*bintree{ - "ExampleToken-v2.cdc": {exampletokenV2Cdc, map[string]*bintree{}}, "ExampleToken.cdc": {exampletokenCdc, map[string]*bintree{}}, - "FungibleToken-v2.cdc": {fungibletokenV2Cdc, map[string]*bintree{}}, "FungibleToken.cdc": {fungibletokenCdc, map[string]*bintree{}}, "FungibleTokenMetadataViews.cdc": {fungibletokenmetadataviewsCdc, map[string]*bintree{}}, "FungibleTokenSwitchboard.cdc": {fungibletokenswitchboardCdc, map[string]*bintree{}}, diff --git a/lib/go/templates/forward_templates.go b/lib/go/templates/forward_templates.go index 40815530..0dc724e0 100644 --- a/lib/go/templates/forward_templates.go +++ b/lib/go/templates/forward_templates.go @@ -3,10 +3,6 @@ package templates //go:generate go run github.com/kevinburke/go-bindata/go-bindata -prefix ../../../transactions -o internal/assets/assets.go -pkg assets -nometadata -nomemcopy ../../../transactions/... import ( - "strings" - - "github.com/onflow/flow-go-sdk" - "github.com/onflow/flow-ft/lib/go/templates/internal/assets" ) @@ -19,10 +15,6 @@ const ( createAccountPrivateForwarderFilename = "privateForwarder/create_account_private_forwarder.cdc" ) -const ( - defaultPrivateForwardAddr = "\"PrivateReceiverForwarder\"" -) - func GenerateDeployPrivateForwardingScript() []byte { code := assets.MustAssetString(deployPrivateForwardingFilanems) @@ -31,50 +23,26 @@ func GenerateDeployPrivateForwardingScript() []byte { // GenerateCreateForwarderScript creates a script that instantiates // a new forwarder instance in an account -func GenerateCreatePrivateForwarderScript(fungibleAddr, forwardingAddr, tokenAddr flow.Address, tokenName string) []byte { +func GenerateCreatePrivateForwarderScript(env Environment) []byte { code := assets.MustAssetString(createPrivateForwarderFilename) - code = strings.ReplaceAll( - code, - defaultPrivateForwardAddr, - "0x"+forwardingAddr.String(), - ) - - return replaceAddresses(code, fungibleAddr, tokenAddr, flow.EmptyAddress, flow.EmptyAddress, flow.EmptyAddress, flow.EmptyAddress, tokenName) + return []byte(ReplaceAddresses(code, env)) } -func GenerateSetupAccountPrivateForwarderScript(fungibleAddr, forwardingAddr, tokenAddr flow.Address, tokenName string) []byte { +func GenerateSetupAccountPrivateForwarderScript(env Environment) []byte { code := assets.MustAssetString(setupAccountPrivateForwarderFilename) - code = strings.ReplaceAll( - code, - defaultPrivateForwardAddr, - "0x"+forwardingAddr.String(), - ) - - return replaceAddresses(code, fungibleAddr, tokenAddr, flow.EmptyAddress, flow.EmptyAddress, flow.EmptyAddress, flow.EmptyAddress, tokenName) + return []byte(ReplaceAddresses(code, env)) } -func GenerateTransferPrivateManyAccountsScript(fungibleAddr, forwardingAddr, tokenAddr flow.Address, tokenName string) []byte { +func GenerateTransferPrivateManyAccountsScript(env Environment) []byte { code := assets.MustAssetString(transferPrivateManyAccountsFilename) - code = strings.ReplaceAll( - code, - defaultPrivateForwardAddr, - "0x"+forwardingAddr.String(), - ) - - return replaceAddresses(code, fungibleAddr, tokenAddr, flow.EmptyAddress, flow.EmptyAddress, flow.EmptyAddress, flow.EmptyAddress, tokenName) + return []byte(ReplaceAddresses(code, env)) } -func GenerateCreateAccountPrivateForwarderScript(fungibleAddr, forwardingAddr, tokenAddr flow.Address, tokenName string) []byte { +func GenerateCreateAccountPrivateForwarderScript(env Environment) []byte { code := assets.MustAssetString(createAccountPrivateForwarderFilename) - code = strings.ReplaceAll( - code, - defaultPrivateForwardAddr, - "0x"+forwardingAddr.String(), - ) - - return replaceAddresses(code, fungibleAddr, tokenAddr, flow.EmptyAddress, flow.EmptyAddress, flow.EmptyAddress, flow.EmptyAddress, tokenName) + return []byte(ReplaceAddresses(code, env)) } diff --git a/lib/go/templates/go.mod b/lib/go/templates/go.mod index 24932a5c..5711b9f7 100644 --- a/lib/go/templates/go.mod +++ b/lib/go/templates/go.mod @@ -19,15 +19,18 @@ require ( github.com/go-test/deep v1.1.0 // indirect github.com/k0kubun/pp v3.0.1+incompatible // indirect github.com/klauspost/cpuid/v2 v2.2.4 // indirect + github.com/kr/pretty v0.3.1 // indirect + github.com/kr/text v0.2.0 // indirect github.com/logrusorgru/aurora/v4 v4.0.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.16 // indirect + github.com/mattn/go-isatty v0.0.17 // indirect github.com/onflow/atree v0.6.1-0.20230711151834-86040b30171f // indirect - github.com/onflow/cadence v1.0.0-preview.1 // indirect + github.com/onflow/cadence v1.0.0-preview.1.0.20231213191345-0ff20e15e7e1 // indirect github.com/onflow/flow-go/crypto v0.24.7 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rivo/uniseg v0.4.4 // indirect + github.com/rogpeppe/go-internal v1.9.0 // indirect github.com/stretchr/testify v1.8.4 // indirect github.com/texttheater/golang-levenshtein/levenshtein v0.0.0-20200805054039-cae8b0eaed6c // indirect github.com/turbolent/prettier v0.0.0-20220320183459-661cc755135d // indirect diff --git a/lib/go/templates/go.sum b/lib/go/templates/go.sum index e3a54201..f4cb2dfb 100644 --- a/lib/go/templates/go.sum +++ b/lib/go/templates/go.sum @@ -35,6 +35,7 @@ github.com/cespare/xxhash/v2 v2.0.1-0.20190104013014-3767db7a7e18/go.mod h1:HD5P github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -94,9 +95,13 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGi github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= github.com/logrusorgru/aurora/v4 v4.0.0 h1:sRjfPpun/63iADiSvGGjgA1cAYegEWMPCJdUpJYn9JA= @@ -109,6 +114,8 @@ github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HN github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= @@ -121,6 +128,8 @@ github.com/onflow/atree v0.6.1-0.20230711151834-86040b30171f h1:Z8/PgTqOgOg02MTR github.com/onflow/atree v0.6.1-0.20230711151834-86040b30171f/go.mod h1:xvP61FoOs95K7IYdIYRnNcYQGf4nbF/uuJ0tHf4DRuM= github.com/onflow/cadence v1.0.0-preview.1 h1:Y/q/43aDc93/1Atsxx3+e2V/dZiQuF1TqkXEVboA5pY= github.com/onflow/cadence v1.0.0-preview.1/go.mod h1:Q5Up9Kt+J6zuAFmgrsiKz6t//E/hR5/iuVjH62pdztk= +github.com/onflow/cadence v1.0.0-preview.1.0.20231213191345-0ff20e15e7e1 h1:xIFPRIA/pmyplEu5JxuMCfC6zfdqRW7QDHYJ8ogCNuc= +github.com/onflow/cadence v1.0.0-preview.1.0.20231213191345-0ff20e15e7e1/go.mod h1:60RhxKY5V4DXFQfvXQa48eZZVN19O7Lu9cp53FM54vo= github.com/onflow/flow-go-sdk v0.44.0-stable-cadence.2 h1:vUVO6m85BiT8c50Oc8YGc3CU+sGqiKW9FZbmiRph2dU= github.com/onflow/flow-go-sdk v0.44.0-stable-cadence.2/go.mod h1:mbLrR3MkYbi9LH3yasDj1jrR4QTR8vjRLVFCm4jMHn0= github.com/onflow/flow-go/crypto v0.24.7 h1:RCLuB83At4z5wkAyUCF7MYEnPoIIOHghJaODuJyEoW0= @@ -131,6 +140,7 @@ github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -146,6 +156,7 @@ github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= diff --git a/lib/go/templates/script_templates.go b/lib/go/templates/script_templates.go index faa8e6ac..979cfc8a 100644 --- a/lib/go/templates/script_templates.go +++ b/lib/go/templates/script_templates.go @@ -2,7 +2,6 @@ package templates import ( "github.com/onflow/flow-ft/lib/go/templates/internal/assets" - "github.com/onflow/flow-go-sdk" ) const ( @@ -15,27 +14,27 @@ const ( // GenerateInspectVaultScript creates a script that retrieves a // Vault from the array in storage and makes assertions about // its balance. If these assertions fail, the script panics. -func GenerateInspectVaultScript(fungibleAddr, tokenAddr flow.Address, tokenName string) []byte { +func GenerateInspectVaultScript(env Environment) []byte { code := assets.MustAssetString(scriptsPath + readBalanceFilename) - return replaceAddresses(code, fungibleAddr, tokenAddr, flow.EmptyAddress, flow.EmptyAddress, flow.EmptyAddress, flow.EmptyAddress, tokenName) + return []byte(ReplaceAddresses(code, env)) } // GenerateInspectSupplyScript creates a script that reads // the total supply of tokens in existence // and makes assertions about the number -func GenerateInspectSupplyScript(fungibleAddr, tokenAddr flow.Address, tokenName string) []byte { +func GenerateInspectSupplyScript(env Environment) []byte { code := assets.MustAssetString(scriptsPath + readSupplyFilename) - return replaceAddresses(code, fungibleAddr, tokenAddr, flow.EmptyAddress, flow.EmptyAddress, flow.EmptyAddress, flow.EmptyAddress, tokenName) + return []byte(ReplaceAddresses(code, env)) } // GenerateInspectSupplyViewScript creates a script that reads // the total supply of tokens in existence through a metadata view -func GenerateInspectSupplyViewScript(fungibleAddr, tokenAddr, metadataViewsAddr, ftMetadataViewsAddr, viewResolverAddr flow.Address, tokenName string) []byte { +func GenerateInspectSupplyViewScript(env Environment) []byte { code := assets.MustAssetString(scriptsPath + readSupplyViewFilename) - return replaceAddresses(code, fungibleAddr, tokenAddr, flow.EmptyAddress, metadataViewsAddr, ftMetadataViewsAddr, viewResolverAddr, tokenName) + return []byte(ReplaceAddresses(code, env)) } diff --git a/lib/go/templates/templates.go b/lib/go/templates/templates.go index c6d0737b..175aa084 100644 --- a/lib/go/templates/templates.go +++ b/lib/go/templates/templates.go @@ -4,10 +4,9 @@ package templates import ( "bytes" + "fmt" "regexp" "strings" - - "github.com/onflow/flow-go-sdk" ) var ( @@ -16,27 +15,95 @@ var ( ) var ( - placeholderFungibleToken = regexp.MustCompile(`"FungibleToken"`) - placeholderExampleToken = regexp.MustCompile(`"ExampleToken"`) - placeholderForwarding = regexp.MustCompile(`"TokenForwarding"`) - placeholderMetadataViews = regexp.MustCompile(`"MetadataViews"`) - placeholderFTMetadataViews = regexp.MustCompile(`"FungibleTokenMetadataViews"`) - placeholderViewResolver = regexp.MustCompile(`"ViewResolver"`) + placeholderFungibleToken = "\"FungibleToken\"" + placeholderExampleToken = "\"ExampleToken\"" + placeholderForwarding = "\"TokenForwarding\"" + placeholderPrivateForwardAddr = "\"PrivateReceiverForwarder\"" + placeholderSwitchboard = "\"FungibleTokenSwitchboard\"" + placeholderMetadataViews = "\"MetadataViews\"" + placeholderFTMetadataViews = "\"FungibleTokenMetadataViews\"" + placeholderViewResolver = "\"ViewResolver\"" ) -func replaceAddresses(code string, ftAddress, tokenAddress, forwardingAddress, metadataViewsAddress, ftMetadataViewsAddr, viewResolverAddr flow.Address, tokenName string) []byte { - code = placeholderFungibleToken.ReplaceAllString(code, "0x"+ftAddress.String()) - code = placeholderExampleToken.ReplaceAllString(code, "0x"+tokenAddress.String()) - code = placeholderForwarding.ReplaceAllString(code, "0x"+forwardingAddress.String()) - code = placeholderMetadataViews.ReplaceAllString(code, "0x"+metadataViewsAddress.String()) - code = placeholderFTMetadataViews.ReplaceAllString(code, "0x"+ftMetadataViewsAddr.String()) - code = placeholderViewResolver.ReplaceAllString(code, "0x"+viewResolverAddr.String()) +type Environment struct { + Network string + FungibleTokenAddress string + ExampleTokenAddress string + TokenForwardingAddress string + PrivateForwardingAddress string + MetadataViewsAddress string + FungibleTokenMetadataViewsAddress string + ViewResolverAddress string + SwitchboardAddress string +} + +func withHexPrefix(address string) string { + if address == "" { + return "" + } + + if address[0:2] == "0x" { + return address + } + + return fmt.Sprintf("0x%s", address) +} + +func ReplaceAddresses(code string, env Environment) string { + + code = strings.ReplaceAll( + code, + placeholderFungibleToken, + withHexPrefix(env.FungibleTokenAddress), + ) + + code = strings.ReplaceAll( + code, + placeholderExampleToken, + withHexPrefix(env.ExampleTokenAddress), + ) + + code = strings.ReplaceAll( + code, + placeholderForwarding, + withHexPrefix(env.TokenForwardingAddress), + ) + + code = strings.ReplaceAll( + code, + placeholderPrivateForwardAddr, + withHexPrefix(env.PrivateForwardingAddress), + ) + + code = strings.ReplaceAll( + code, + placeholderMetadataViews, + withHexPrefix(env.MetadataViewsAddress), + ) + + code = strings.ReplaceAll( + code, + placeholderFTMetadataViews, + withHexPrefix(env.FungibleTokenMetadataViewsAddress), + ) + + code = strings.ReplaceAll( + code, + placeholderViewResolver, + withHexPrefix(env.ViewResolverAddress), + ) + + code = strings.ReplaceAll( + code, + placeholderSwitchboard, + withHexPrefix(env.SwitchboardAddress), + ) - storageName := MakeFirstLowerCase(tokenName) - code = defaultTokenName.ReplaceAllString(code, tokenName) - code = defaultTokenStorage.ReplaceAllString(code, storageName) + // storageName := MakeFirstLowerCase(tokenName) + // code = defaultTokenName.ReplaceAllString(code, tokenName) + // code = defaultTokenStorage.ReplaceAllString(code, storageName) - return []byte(code) + return code } // MakeFirstLowerCase makes the first letter in a string lowercase diff --git a/lib/go/templates/transaction_templates.go b/lib/go/templates/transaction_templates.go index bfcae22d..b9d4b7e3 100644 --- a/lib/go/templates/transaction_templates.go +++ b/lib/go/templates/transaction_templates.go @@ -3,10 +3,6 @@ package templates //go:generate go run github.com/kevinburke/go-bindata/go-bindata -prefix ../../../transactions -o internal/assets/assets.go -pkg assets -nometadata -nomemcopy ../../../transactions/... import ( - "fmt" - - "github.com/onflow/flow-go-sdk" - _ "github.com/kevinburke/go-bindata" "github.com/onflow/flow-ft/lib/go/templates/internal/assets" @@ -26,119 +22,61 @@ const ( // a new Vault instance and stores it in storage. // balance is an argument to the Vault constructor. // The Vault must have been deployed already. -func GenerateCreateTokenScript(fungibleAddr, tokenAddr, metadataViewsAddr, viewResolverAddr flow.Address, tokenName string) []byte { +func GenerateCreateTokenScript(env Environment) []byte { code := assets.MustAssetString(setupAccountFilename) - return replaceAddresses(code, fungibleAddr, tokenAddr, flow.EmptyAddress, metadataViewsAddr, flow.EmptyAddress, viewResolverAddr, tokenName) -} - -// GenerateDestroyVaultScript creates a script that withdraws -// tokens from a vault and destroys the tokens -func GenerateDestroyVaultScript(fungibleAddr, tokenAddr flow.Address, tokenName string, withdrawAmount int) []byte { - storageName := MakeFirstLowerCase(tokenName) - - template := ` - import FungibleToken from 0x%[1]s - import %[3]s from 0x%[2]s - - transaction { - prepare(acct: auth(SaveValue, LoadValue) &Account) { - let vault <- acct.storage.load<@%[3]s.Vault>(from: /storage/%[4]sVault) - ?? panic("Couldn't load Vault from storage") - - let withdrawVault <- vault.withdraw(amount: %[5]d.0) - - acct.storage.save(<-vault, to: /storage/%[4]sVault) - - destroy withdrawVault - } - } - ` - - return []byte(fmt.Sprintf(template, fungibleAddr, tokenAddr, tokenName, storageName, withdrawAmount)) + return []byte(ReplaceAddresses(code, env)) } // GenerateTransferVaultScript creates a script that withdraws an tokens from an account // and deposits it to another account's vault -func GenerateTransferVaultScript(fungibleAddr, tokenAddr flow.Address, tokenName string) []byte { +func GenerateTransferVaultScript(env Environment) []byte { code := assets.MustAssetString(transferTokensFilename) - return replaceAddresses(code, fungibleAddr, tokenAddr, flow.EmptyAddress, flow.EmptyAddress, flow.EmptyAddress, flow.EmptyAddress, tokenName) + return []byte(ReplaceAddresses(code, env)) } // GenerateTransferGenericVaultScript creates a script that withdraws an tokens from an account // and deposits it to another account's vault for any vault type -func GenerateTransferGenericVaultScript(fungibleAddr flow.Address) []byte { +func GenerateTransferGenericVaultScript(env Environment) []byte { code := assets.MustAssetString(genericTransferFilename) - return replaceAddresses(code, fungibleAddr, flow.EmptyAddress, flow.EmptyAddress, flow.EmptyAddress, flow.EmptyAddress, flow.EmptyAddress, "") + return []byte(ReplaceAddresses(code, env)) } // GenerateTransferManyAccountsScript creates a script that transfers the same number of tokens // to a list of accounts -func GenerateTransferManyAccountsScript(fungibleAddr, tokenAddr flow.Address, tokenName string) []byte { +func GenerateTransferManyAccountsScript(env Environment) []byte { code := assets.MustAssetString(transferManyAccountsFilename) - return replaceAddresses(code, fungibleAddr, tokenAddr, flow.EmptyAddress, flow.EmptyAddress, flow.EmptyAddress, flow.EmptyAddress, tokenName) + return []byte(ReplaceAddresses(code, env)) } // GenerateMintTokensScript creates a script that uses the admin resource // to mint new tokens and deposit them in a Vault -func GenerateMintTokensScript(fungibleAddr, tokenAddr flow.Address, tokenName string) []byte { +func GenerateMintTokensScript(env Environment) []byte { code := assets.MustAssetString(mintTokensFilename) - return replaceAddresses(code, fungibleAddr, tokenAddr, flow.EmptyAddress, flow.EmptyAddress, flow.EmptyAddress, flow.EmptyAddress, tokenName) + return []byte(ReplaceAddresses(code, env)) } // GenerateBurnTokensScript creates a script that uses the admin resource // to destroy tokens and deposit them in a Vault -func GenerateBurnTokensScript(fungibleAddr, tokenAddr flow.Address, tokenName string) []byte { +func GenerateBurnTokensScript(env Environment) []byte { code := assets.MustAssetString(burnTokensFilename) - return replaceAddresses(code, fungibleAddr, tokenAddr, flow.EmptyAddress, flow.EmptyAddress, flow.EmptyAddress, flow.EmptyAddress, tokenName) -} - -// GenerateTransferInvalidVaultScript creates a script that withdraws an tokens from an account -// and tries to deposit it into a vault of the wrong type. Should fail -func GenerateTransferInvalidVaultScript(fungibleAddr, tokenAddr, otherTokenAddr, receiverAddr flow.Address, tokenName, otherTokenName string, amount int) []byte { - storageName := MakeFirstLowerCase(tokenName) - - otherStorageName := MakeFirstLowerCase(otherTokenName) - - template := ` - import FungibleToken from 0x%s - import %s from 0x%s - import %s from 0x%s - - transaction { - prepare(acct: auth(BorrowValue) &Account) { - let recipient = getAccount(0x%s) - - let providerRef = acct.storage.borrow<&{FungibleToken.Provider}>(from: /storage/%sVault) - ?? panic("Could not borrow Provider reference to the Vault!") - - let receiverRef = recipient.capabilities.borrow<&{FungibleToken.Receiver}>(/public/%sReceiver) - ?? panic("Could not borrow receiver reference to the recipient's Vault") - - let tokens <- providerRef.withdraw(amount: %d.0) - - receiverRef.deposit(from: <-tokens) - } - } - ` - - return []byte(fmt.Sprintf(template, fungibleAddr, tokenName, tokenAddr, otherTokenName, otherTokenAddr, receiverAddr, storageName, otherStorageName, amount)) + return []byte(ReplaceAddresses(code, env)) } // GenerateCreateForwarderScript creates a script that instantiates // a new forwarder instance in an account -func GenerateCreateForwarderScript(fungibleAddr, forwardingAddr, tokenAddr flow.Address, tokenName string) []byte { +func GenerateCreateForwarderScript(env Environment) []byte { code := assets.MustAssetString(createForwarderFilename) - return replaceAddresses(code, fungibleAddr, tokenAddr, forwardingAddr, flow.EmptyAddress, flow.EmptyAddress, flow.EmptyAddress, tokenName) + return []byte(ReplaceAddresses(code, env)) } diff --git a/lib/go/test/forwarding_test.go b/lib/go/test/forwarding_test.go index f49a9555..a1516685 100644 --- a/lib/go/test/forwarding_test.go +++ b/lib/go/test/forwarding_test.go @@ -22,11 +22,12 @@ func TestPrivateForwarder(t *testing.T) { serviceSigner, _ := b.ServiceKey().Signer() + env := templates.Environment{} + exampleTokenAccountKey, exampleTokenSigner := accountKeys.NewWithSigner() - fungibleAddr, _, exampleTokenAddr, _, _, _ := - DeployTokenContracts(b, adapter, t, []*flow.AccountKey{exampleTokenAccountKey}) + exampleTokenAddr := deployTokenContracts(b, adapter, t, []*flow.AccountKey{exampleTokenAccountKey}, &env) - forwardingCode := contracts.PrivateReceiverForwarder(fungibleAddr.String()) + forwardingCode := contracts.PrivateReceiverForwarder(env.FungibleTokenAddress) cadenceCode := bytesToCadenceArray(forwardingCode) name, _ := cadence.NewString("PrivateReceiverForwarder") @@ -51,17 +52,14 @@ func TestPrivateForwarder(t *testing.T) { false, ) + env.PrivateForwardingAddress = env.ExampleTokenAddress + joshAccountKey, joshSigner := accountKeys.NewWithSigner() joshAddress, _ := adapter.CreateAccount(context.Background(), []*flow.AccountKey{joshAccountKey}, nil) t.Run("Should be able to set up an account to accept private deposits", func(t *testing.T) { - script := templates.GenerateSetupAccountPrivateForwarderScript( - fungibleAddr, - exampleTokenAddr, - exampleTokenAddr, - "ExampleToken", - ) + script := templates.GenerateSetupAccountPrivateForwarderScript(env) tx := flow.NewTransaction(). SetScript(script). @@ -97,7 +95,7 @@ func TestPrivateForwarder(t *testing.T) { recipientPairs := make([]cadence.KeyValuePair, 1) recipientPairs[0] = pair - script := templates.GenerateTransferPrivateManyAccountsScript(fungibleAddr, exampleTokenAddr, exampleTokenAddr, "ExampleToken") + script := templates.GenerateTransferPrivateManyAccountsScript(env) tx = flow.NewTransaction(). SetScript(script). SetGasLimit(100). @@ -125,7 +123,7 @@ func TestPrivateForwarder(t *testing.T) { ) // Assert that the vaults' balances are correct - script = templates.GenerateInspectVaultScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + script = templates.GenerateInspectVaultScript(env) result, err := b.ExecuteScript( script, [][]byte{ @@ -139,7 +137,7 @@ func TestPrivateForwarder(t *testing.T) { balance := result.Value assertEqual(t, CadenceUFix64("700.0"), balance) - script = templates.GenerateInspectVaultScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + script = templates.GenerateInspectVaultScript(env) result, err = b.ExecuteScript( script, [][]byte{ @@ -153,19 +151,14 @@ func TestPrivateForwarder(t *testing.T) { balance = result.Value assertEqual(t, CadenceUFix64("300.0"), balance) - script = templates.GenerateInspectSupplyScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + script = templates.GenerateInspectSupplyScript(env) supply := executeScriptAndCheck(t, b, script, nil) assertEqual(t, CadenceUFix64("1000.0"), supply) }) t.Run("Should be able to create a new account with private forwarder", func(t *testing.T) { - script := templates.GenerateCreateAccountPrivateForwarderScript( - fungibleAddr, - exampleTokenAddr, - exampleTokenAddr, - "ExampleToken", - ) + script := templates.GenerateCreateAccountPrivateForwarderScript(env) tx = flow.NewTransaction(). SetScript(script). SetGasLimit(100). @@ -194,12 +187,7 @@ func TestPrivateForwarder(t *testing.T) { t.Run("Should be able to do account setup a second time without change", func(t *testing.T) { - script := templates.GenerateSetupAccountPrivateForwarderScript( - fungibleAddr, - exampleTokenAddr, - exampleTokenAddr, - "ExampleToken", - ) + script := templates.GenerateSetupAccountPrivateForwarderScript(env) // send the same transaction one more time for the same address that's already set up tx := flow.NewTransaction(). diff --git a/lib/go/test/go.mod b/lib/go/test/go.mod index 7ee545e3..b7ea10d9 100644 --- a/lib/go/test/go.mod +++ b/lib/go/test/go.mod @@ -3,26 +3,35 @@ module github.com/onflow/flow-ft/lib/go/test go 1.18 require ( - github.com/onflow/cadence v1.0.0-preview.1.0.20231211223059-394691058b70 - github.com/onflow/flow-emulator v0.54.1-0.20230919150501-db4da71c768b - github.com/onflow/flow-ft/lib/go/contracts v0.7.1-0.20230913160646-09adc7d3b513 + github.com/onflow/cadence v1.0.0-preview.1.0.20231213191345-0ff20e15e7e1 + github.com/onflow/flow-emulator v0.59.1-0.20231218185945-9116c416533f + github.com/onflow/flow-ft/lib/go/contracts v0.7.1-0.20231212194336-a2802ba36596 github.com/onflow/flow-ft/lib/go/templates v0.0.0-00010101000000-000000000000 github.com/onflow/flow-go-sdk v0.44.0-stable-cadence.2 - github.com/onflow/flow-nft/lib/go/contracts v1.1.1-0.20230915224343-ca2663ed82cf + github.com/onflow/flow-nft/lib/go/contracts v1.1.1-0.20231213195450-0b951b342b14 github.com/rs/zerolog v1.29.0 github.com/stretchr/testify v1.8.4 ) require ( + github.com/DataDog/zstd v1.5.2 // indirect github.com/SaveTheRbtz/mph v0.1.2 // indirect + github.com/StackExchange/wmi v1.2.1 // indirect + github.com/VictoriaMetrics/fastcache v1.12.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bits-and-blooms/bitset v1.7.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.2.1 // indirect + github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 github.com/cenkalti/backoff/v4 v4.2.1 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/cockroachdb/errors v1.9.1 // indirect + github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect + github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06 // indirect + github.com/cockroachdb/redact v1.1.3 // indirect github.com/coreos/go-semver v0.3.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/deckarep/golang-set/v2 v2.1.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect github.com/dgraph-io/badger/v2 v2.2007.4 // indirect github.com/dgraph-io/ristretto v0.1.0 // indirect @@ -30,25 +39,31 @@ require ( github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/ef-ds/deque v1.0.4 // indirect - github.com/ethereum/go-ethereum v1.12.1 // indirect + github.com/ethereum/go-ethereum v1.12.0 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/fxamacker/cbor/v2 v2.4.1-0.20230228173756-c0c9f774e40c // indirect github.com/fxamacker/circlehash v0.3.0 // indirect + github.com/getsentry/sentry-go v0.18.0 // indirect github.com/glebarez/go-sqlite v1.21.1 // indirect github.com/go-logr/logr v1.2.4 // indirect github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-redis/redis/v8 v8.11.5 // indirect - github.com/go-test/deep v1.1.0 // indirect + github.com/go-stack/stack v1.8.1 // indirect + github.com/gofrs/flock v0.8.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/glog v1.1.0 // indirect + github.com/golang/glog v1.1.2 // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect - github.com/google/uuid v1.3.0 // indirect + github.com/google/uuid v1.3.1 // indirect + github.com/gorilla/websocket v1.5.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect - github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect + github.com/hashicorp/golang-lru v0.5.4 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.2 // indirect github.com/hashicorp/hcl v1.0.0 // indirect + github.com/holiman/bloomfilter/v2 v2.0.3 // indirect github.com/holiman/uint256 v1.2.3 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/ipfs/bbloom v0.0.4 // indirect @@ -76,6 +91,7 @@ require ( github.com/magiconair/properties v1.8.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.19 // indirect + github.com/mattn/go-runewidth v0.0.14 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect @@ -88,12 +104,13 @@ require ( github.com/multiformats/go-multihash v0.2.3 // indirect github.com/multiformats/go-multistream v0.4.1 // indirect github.com/multiformats/go-varint v0.0.7 // indirect + github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/onflow/atree v0.6.1-0.20230711151834-86040b30171f // indirect - github.com/onflow/flow-core-contracts/lib/go/contracts v1.2.4-0.20230915224512-fa9343b5af21 // indirect - github.com/onflow/flow-core-contracts/lib/go/templates v1.2.4-0.20230915224512-fa9343b5af21 // indirect - github.com/onflow/flow-go v0.31.1-0.20230915232445-43aebfd0ae6a // indirect - github.com/onflow/flow-go/crypto v0.24.9 // indirect - github.com/onflow/flow/protobuf/go/flow v0.3.2-0.20230628215638-83439d22e0ce // indirect + github.com/onflow/flow-core-contracts/lib/go/contracts v0.15.1-0.20231212203043-37cbe453d425 // indirect + github.com/onflow/flow-core-contracts/lib/go/templates v0.15.1-0.20231204202154-f8dfacb39d86 // indirect + github.com/onflow/flow-go v0.32.4-0.20231214190912-4c4527a42fb0 // indirect + github.com/onflow/flow-go/crypto v0.25.0 // indirect + github.com/onflow/flow/protobuf/go/flow v0.3.2-0.20231124194313-106cc495def6 // indirect github.com/onflow/sdks v0.5.1-0.20230912225508-b35402f12bba // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect @@ -111,16 +128,21 @@ require ( github.com/rivo/uniseg v0.4.4 // indirect github.com/rogpeppe/go-internal v1.9.0 // indirect github.com/sethvargo/go-retry v0.2.3 // indirect + github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect github.com/slok/go-http-metrics v0.10.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/spf13/afero v1.9.3 // indirect github.com/spf13/cast v1.5.0 // indirect - github.com/spf13/cobra v1.7.0 // indirect + github.com/spf13/cobra v1.8.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.15.0 // indirect + github.com/stretchr/objx v0.5.0 // indirect github.com/subosito/gotenv v1.4.2 // indirect + github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect github.com/texttheater/golang-levenshtein/levenshtein v0.0.0-20200805054039-cae8b0eaed6c // indirect + github.com/tklauser/go-sysconf v0.3.12 // indirect + github.com/tklauser/numcpus v0.6.1 // indirect github.com/turbolent/prettier v0.0.0-20220320183459-661cc755135d // indirect github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect github.com/vmihailenco/msgpack/v4 v4.3.11 // indirect @@ -139,19 +161,22 @@ require ( go.uber.org/atomic v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.24.0 // indirect - golang.org/x/crypto v0.14.0 // indirect + golang.org/x/crypto v0.16.0 // indirect golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.13.0 // indirect - golang.org/x/text v0.13.0 // indirect + golang.org/x/net v0.19.0 // indirect + golang.org/x/sync v0.5.0 // indirect + golang.org/x/sys v0.15.0 // indirect + golang.org/x/text v0.14.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect gonum.org/v1/gonum v0.13.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect - google.golang.org/grpc v1.56.1 // indirect - google.golang.org/protobuf v1.30.0 // indirect + google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/grpc v1.59.0 // indirect + google.golang.org/protobuf v1.31.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/yaml.v3 v3.0.1 // indirect lukechampine.com/blake3 v1.2.1 // indirect modernc.org/libc v1.22.3 // indirect @@ -160,6 +185,8 @@ require ( modernc.org/sqlite v1.21.1 // indirect ) +replace github.com/onflow/flow-nft/lib/go/contracts => ../../../../flow/flow-nft/lib/go/contracts + replace github.com/onflow/flow-ft/lib/go/contracts => ../contracts replace github.com/onflow/flow-ft/lib/go/templates => ../templates diff --git a/lib/go/test/go.sum b/lib/go/test/go.sum index 1606b0f4..6200e459 100644 --- a/lib/go/test/go.sum +++ b/lib/go/test/go.sum @@ -520,6 +520,7 @@ cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcP dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= +github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= @@ -535,20 +536,32 @@ github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6L github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= +github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= +github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= +github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= +github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OneOfOne/xxhash v1.2.5 h1:zl/OfRA6nftbBK9qTohYBJ5xvw6C/oNKizR7cZGl3cI= github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= +github.com/OneOfOne/xxhash v1.2.8 h1:31czK/TI9sNkxIKfaUfGlU47BAxQ0ztGgd9vPyqimf8= github.com/SaveTheRbtz/mph v0.1.2 h1:5l3W496Up+7BNOVJQnJhzcGBh+wWfxWdmPUAkx3WmaM= github.com/SaveTheRbtz/mph v0.1.2/go.mod h1:V4+WtKQPe2+dEA5os1WnGsEB0NR9qgqqgIiSt73+sT4= +github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= +github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= github.com/VictoriaMetrics/fastcache v1.5.3/go.mod h1:+jv9Ckb+za/P1ZRg/sulP5Ni1v49daAVERr0H3CuscE= +github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= +github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWkuxnzWhEzLwhP9w653o= +github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= @@ -573,6 +586,7 @@ github.com/aws/aws-sdk-go-v2/service/sso v1.12.6/go.mod h1:Y1VOmit/Fn6Tz1uFAeCO6 github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.6/go.mod h1:Lh/bc9XUf8CfOY6Jp5aIkQtN+j1mc+nExc+KXj9jx2s= github.com/aws/aws-sdk-go-v2/service/sts v1.18.7/go.mod h1:JuTnSoeePXmMVe9G8NcjjwgOKEfZ4cOjMuT2IBT/2eI= github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/benbjohnson/clock v1.3.5 h1:VvXlSJBzZpA/zum6Sj74hxwYI2DIxRWuNIoXAzHZz5o= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -589,6 +603,8 @@ github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnC github.com/btcsuite/btcd/btcec/v2 v2.2.1 h1:xP60mv8fvp+0khmrN0zTdPC3cNm24rfeE6lh2R/Yv3E= github.com/btcsuite/btcd/btcec/v2 v2.2.1/go.mod h1:9/CSmJxmuvqzX9Wh2fXMWToLOHhPd11lSPuIupwTkI8= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6sjybR934QNHSJZPTQ= +github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/bytecodealliance/wasmtime-go/v7 v7.0.0/go.mod h1:bu6fic7trDt20w+LMooX7j3fsOwv4/ln6j8gAdP6vmA= github.com/c-bata/go-prompt v0.2.5/go.mod h1:vFnjEGDIIA/Lib7giyE4E9c50Lvl8j0S+7FVlAwDAVw= github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= @@ -620,21 +636,30 @@ github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= +github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= +github.com/cockroachdb/datadriven v1.0.3-0.20230801171734-e384cf455877 h1:1MLK4YpFtIEo3ZtMA5C795Wtv5VuUnrXX7mQG+aHg6o= +github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= +github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= +github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06 h1:T+Np/xtzIjYM/P5NAw0e2Rf1FGvzDau1h54MKvx8G7w= +github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06/go.mod h1:bynZ3gvVyhlvjLI7PT6dmZ7g76xzJ7HpxfjgkzCGz6s= +github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= +github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dave/astrid v0.0.0-20170323122508-8c2895878b14/go.mod h1:Sth2QfxfATb/nW4EsrSi2KyJmbcniZ8TgTaji17D6ms= @@ -649,13 +674,15 @@ github.com/dave/rebecca v0.9.1/go.mod h1:N6XYdMD/OKw3lkF3ywh8Z6wPGuwNFDNtWYEMFWE github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= +github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI= +github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= +github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= @@ -669,7 +696,6 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cu github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dop251/goja v0.0.0-20200219165308-d1232e640a87/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= @@ -678,8 +704,8 @@ github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+m github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/ef-ds/deque v1.0.4 h1:iFAZNmveMT9WERAkqLJ+oaABF9AcVQ5AjXem/hroniI= github.com/ef-ds/deque v1.0.4/go.mod h1:gXDnTC3yqvBcHbq2lcExjtAcVrOnJCbMcZXmuj8Z4tg= +github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= github.com/elastic/gosigar v0.8.1-0.20180330100440-37f05ff46ffa/go.mod h1:cdorVVzy1fhmEqmtgqkoE3bYtCfSCkVyjTyCIo22xvs= -github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/4= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -693,17 +719,19 @@ github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= +github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= github.com/ethereum/go-ethereum v1.9.13/go.mod h1:qwN9d1GLyDh0N7Ab8bMGd0H9knaji2jOBm2RrMGjXls= -github.com/ethereum/go-ethereum v1.12.1 h1:1kXDPxhLfyySuQYIfRxVBGYuaHdxNNxevA73vjIwsgk= -github.com/ethereum/go-ethereum v1.12.1/go.mod h1:zKetLweqBR8ZS+1O9iJWI8DvmmD2NzD19apjEWDCsnw= +github.com/ethereum/go-ethereum v1.12.0 h1:bdnhLPtqETd4m3mS8BGMNvBTf36bO5bx/hxE2zljOa0= +github.com/ethereum/go-ethereum v1.12.0/go.mod h1:/oo2X/dZLJjf2mJ6YT9wcWxa4nNJDBKDBU6sFIpx1Gs= +github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/flynn/noise v1.0.0 h1:DlTHqmzmvcEiKj+4RYo/imoswx/4r6iBlCMfVtrMXpQ= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/fxamacker/cbor/v2 v2.4.1-0.20220515183430-ad2eae63303f/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= @@ -711,11 +739,19 @@ github.com/fxamacker/cbor/v2 v2.4.1-0.20230228173756-c0c9f774e40c h1:5tm/Wbs9d9r github.com/fxamacker/cbor/v2 v2.4.1-0.20230228173756-c0c9f774e40c/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= github.com/fxamacker/circlehash v0.3.0 h1:XKdvTtIJV9t7DDUtsf0RIpC1OcxZtPbmgIH7ekx28WA= github.com/fxamacker/circlehash v0.3.0/go.mod h1:3aq3OfVvsWtkWMb6A1owjOQFA+TLsD5FgJflnaQwtMM= -github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= +github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= +github.com/getsentry/sentry-go v0.12.0/go.mod h1:NSap0JBYWzHND8oMbyi0+XZhUalc1TBdRL1M71JZW2c= +github.com/getsentry/sentry-go v0.18.0 h1:MtBW5H9QgdcJabtZcuJG80BMOwaBpkRDZkxRkNC1sN0= +github.com/getsentry/sentry-go v0.18.0/go.mod h1:Kgon4Mby+FJ7ZWHFUAZgVaIa8sxHtnRJRLTXZr51aKQ= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= +github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= github.com/glebarez/go-sqlite v1.21.1 h1:7MZyUPh2XTrHS7xNEHQbrhfMZuPSzhkm2A1qgg0y5NY= github.com/glebarez/go-sqlite v1.21.1/go.mod h1:ISs8MF6yk5cL4n/43rSOmVMGJJjHYr7L2MbZZ5Q4E2E= +github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= +github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= @@ -732,39 +768,48 @@ github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpx github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= -github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= -github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= -github.com/go-playground/validator/v10 v10.14.1 h1:9c50NUPC30zyuKprjL3vNZ0m5oG+jU0zvx4AqHGnv4k= github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= +github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= github.com/go-test/deep v1.0.5/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8= -github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg= github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= +github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= +github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= +github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= +github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= +github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= -github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= -github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= +github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -804,6 +849,7 @@ github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= @@ -823,7 +869,8 @@ github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8 github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -848,8 +895,9 @@ github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 h1:hR7/MlvK23p6+lIw9S github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= @@ -868,9 +916,12 @@ github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57Q github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= @@ -879,29 +930,32 @@ github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFb github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 h1:lLT7ZLSzGLI08vc9cpd+tYmNWjdKDqyr/2L+f6U12Fk= github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= -github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= -github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.0.0-20160813221303-0a025b7e63ad/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru/v2 v2.0.2 h1:Dwmkdr5Nc/oBiXgJS3CDHNhJtIHkuZ3DZF5twqnfBdU= +github.com/hashicorp/golang-lru/v2 v2.0.2/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= +github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.2.3 h1:K8UWO1HUJpRMXBxbmaY1Y8IAMZC/RsKB+ArEnnK4l5o= github.com/holiman/uint256 v1.2.3/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huin/goupnp v0.0.0-20161224104101-679507af18f3/go.mod h1:MZ2ZmwcBpvOoJ22IJsc7va19ZwoheaBk43rKg12SKag= -github.com/huin/goupnp v1.2.0 h1:uOKW26NG1hsSSbXIZ1IR7XP9Gjd1U8pnLaCMgntmkmY= +github.com/hydrogen18/memlistener v0.0.0-20200120041712-dcc25e7acd91/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= @@ -935,24 +989,26 @@ github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY= github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= github.com/ipfs/go-metrics-interface v0.0.1 h1:j+cpbjYvu4R8zbleSs36gvB7jR+wsL2fGD6n0jO4kdg= github.com/ipfs/go-metrics-interface v0.0.1/go.mod h1:6s6euYU4zowdslK0GKHmqaIZ3j/b/tL7HTWtJ4VPgWY= -github.com/ipld/go-ipld-prime v0.20.0 h1:Ud3VwE9ClxpO2LkCYP7vWPc0Fo+dYdYzgxUJZ3uRG4g= +github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= +github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= +github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk= +github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g= +github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= -github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88 h1:uC1QfSlInpQF+M0ao65imhwqKnz3Q2z/d8PWZRMQvDM= @@ -962,6 +1018,11 @@ github.com/k0kubun/pp v3.0.1+incompatible h1:3tqvf7QgUnZ5tXO6pNAZlrvHgl6DvifjDrd github.com/k0kubun/pp v3.0.1+incompatible/go.mod h1:GWse8YhT0p8pT4ir3ZgBbfZild3tgzSScAn6HmfYukg= github.com/k0kubun/pp/v3 v3.2.0/go.mod h1:ODtJQbQcIRfAD3N+theGCV1m/CBxweERz2dapdz1EwA= github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= +github.com/kataras/golog v0.0.10/go.mod h1:yJ8YKCmyL+nWjERB90Qwn+bdyBZsaQwU3bTVFgkFIp8= +github.com/kataras/iris/v12 v12.1.8/go.mod h1:LMYy4VlP67TQ3Zgriz8RE2h2kMZV2SgMYbq3UhfoFmE= +github.com/kataras/neffos v0.0.14/go.mod h1:8lqADm8PnbeFfL7CLXh1WHw53dG27MC3pgi2R1rmoTE= +github.com/kataras/pio v0.0.2/go.mod h1:hAoW0t9UmXi4R5Oyq5Z4irTbaTsOemSrDGUtaTl7Dro= +github.com/kataras/sitemap v0.0.5/go.mod h1:KY2eugMKiPwsJgx7+U103YZehfvNGOXURubcGyk0Bz8= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/kevinburke/go-bindata v3.22.0+incompatible/go.mod h1:/pEEZ72flUW2p0yi30bslSp9YqD9pysLxunQDdb2CPM= github.com/kevinburke/go-bindata v3.24.0+incompatible h1:qajFA3D0pH94OTLU4zcCCKCDgR+Zr2cZK/RPJHDdFoY= @@ -970,19 +1031,20 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= +github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI= github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= github.com/klauspost/cpuid/v2 v2.2.0/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= -github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/koron/go-ssdp v0.0.4 h1:1IDwrghSKYM7yLf7XCzbByg2sJ/JcNOZRXS2jczTwz0= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -996,27 +1058,21 @@ github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/labstack/echo/v4 v4.5.0/go.mod h1:czIriw4a0C1dFun+ObrXp7ok03xON0N1awStJ6ArI7Y= +github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= -github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= -github.com/libp2p/go-addr-util v0.1.0 h1:acKsntI33w2bTU7tC9a0SaPimJGfSI0bFKC18ChxeVI= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= -github.com/libp2p/go-flow-metrics v0.1.0 h1:0iPhMI8PskQwzh57jB9WxIuIOQ0r+15PChFGkx3Q3WM= github.com/libp2p/go-libp2p v0.28.1 h1:YurK+ZAI6cKfASLJBVFkpVBdl3wGhFi6fusOt725ii8= github.com/libp2p/go-libp2p v0.28.1/go.mod h1:s3Xabc9LSwOcnv9UD4nORnXKTsWkPMkIMB/JIGXVnzk= github.com/libp2p/go-libp2p-asn-util v0.3.0 h1:gMDcMyYiZKkocGXDQ5nsUQyquC9+H+iLEQHwOCZ7s8s= -github.com/libp2p/go-libp2p-kad-dht v0.24.2 h1:zd7myKBKCmtZBhI3I0zm8xBkb28v3gmSEtQfBdAdFwc= github.com/libp2p/go-libp2p-kbucket v0.6.3 h1:p507271wWzpy2f1XxPzCQG9NiN6R6lHL9GiSErbQQo0= github.com/libp2p/go-libp2p-pubsub v0.9.3 h1:ihcz9oIBMaCK9kcx+yHWm3mLAFBMAUsM4ux42aikDxo= -github.com/libp2p/go-libp2p-record v0.2.0 h1:oiNUOCWno2BFuxt3my4i1frNrt7PerzB3queqa1NkQ0= github.com/libp2p/go-msgio v0.3.0 h1:mf3Z8B1xcFN314sWX+2vOTShIE0Mmn2TXn3YCUQGNj0= -github.com/libp2p/go-nat v0.2.0 h1:Tyz+bUFAYqGyJ/ppPPymMGbIgNRH+WqC5QrT5fKrrGk= -github.com/libp2p/go-netroute v0.2.1 h1:V8kVrpD8GK0Riv15/7VN6RbUQ3URNZVosw7H2v9tksU= -github.com/libp2p/go-reuseport v0.3.0 h1:iiZslO5byUYZEg9iCwJGf5h+sf1Agmqx2V2FDjPyvUw= -github.com/libp2p/go-yamux/v4 v4.0.0 h1:+Y80dV2Yx/kv7Y7JKu0LECyVdMXm1VUoko+VQ9rBfZQ= github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8= github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/logrusorgru/aurora/v4 v4.0.0 h1:sRjfPpun/63iADiSvGGjgA1cAYegEWMPCJdUpJYn9JA= @@ -1026,17 +1082,21 @@ github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuz github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= @@ -1049,14 +1109,16 @@ github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= +github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mattn/go-tty v0.0.3/go.mod h1:ihxohKRERHTVzN+aSVRwACLCeqIoZAWpoICkkvrWyR0= +github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= +github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= github.com/miekg/dns v1.1.54 h1:5jon9mWcb0sFJGpnI99tOMhCPyJ+RPVz5b63MQG0VWI= -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= @@ -1069,8 +1131,11 @@ github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrk github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= @@ -1083,7 +1148,6 @@ github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a github.com/multiformats/go-multiaddr v0.9.0 h1:3h4V1LHIk5w4hJHekMKWALPXErDfz/sggzwC/NcqbDQ= github.com/multiformats/go-multiaddr v0.9.0/go.mod h1:mI67Lb1EeTOYb8GQfL/7wpIZwc46ElrvzhYnoJOmTT0= github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= -github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g= github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk= @@ -1098,50 +1162,54 @@ github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXS github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= +github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= +github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onflow/atree v0.6.1-0.20230711151834-86040b30171f h1:Z8/PgTqOgOg02MTRpTBYO2k16FE6z4wEOtaC2WBR9Xo= github.com/onflow/atree v0.6.1-0.20230711151834-86040b30171f/go.mod h1:xvP61FoOs95K7IYdIYRnNcYQGf4nbF/uuJ0tHf4DRuM= -github.com/onflow/cadence v0.41.0-stable-cadence.1.0.20230908213403-8f1134670ed0/go.mod h1:Q5Up9Kt+J6zuAFmgrsiKz6t//E/hR5/iuVjH62pdztk= -github.com/onflow/cadence v1.0.0-preview.1 h1:Y/q/43aDc93/1Atsxx3+e2V/dZiQuF1TqkXEVboA5pY= github.com/onflow/cadence v1.0.0-preview.1/go.mod h1:Q5Up9Kt+J6zuAFmgrsiKz6t//E/hR5/iuVjH62pdztk= -github.com/onflow/cadence v1.0.0-preview.1.0.20231211223059-394691058b70 h1:MOSvy30agrcUJzhY9Q3EHmSjvUtN3F2aIEBNjzsvWmg= -github.com/onflow/cadence v1.0.0-preview.1.0.20231211223059-394691058b70/go.mod h1:60RhxKY5V4DXFQfvXQa48eZZVN19O7Lu9cp53FM54vo= -github.com/onflow/flow-core-contracts/lib/go/contracts v1.2.4-0.20230915224512-fa9343b5af21 h1:v6Orh4HCFzPr+z1WfC7WLHSfzH+hK3kJq1LQHgsTfJI= -github.com/onflow/flow-core-contracts/lib/go/contracts v1.2.4-0.20230915224512-fa9343b5af21/go.mod h1:jynQxJ+wcEZ5LilKDUIUWY6IOO+CSYhcggWleswq20Y= -github.com/onflow/flow-core-contracts/lib/go/templates v1.2.4-0.20230915224512-fa9343b5af21 h1:kfVOhI/hpyJeqicjedYzFjCofOQgGwY0wYA9Rh7GPy4= -github.com/onflow/flow-core-contracts/lib/go/templates v1.2.4-0.20230915224512-fa9343b5af21/go.mod h1:AoTO8J5w/PMPAlccqBiC0rVmd6cU+0ggL2o2ohhjRzU= -github.com/onflow/flow-emulator v0.54.1-0.20230919150501-db4da71c768b h1:wv8SNS+wAAh4aXy+rJUMh3yTi+EjHRBKMmrj9Ul8r1U= -github.com/onflow/flow-emulator v0.54.1-0.20230919150501-db4da71c768b/go.mod h1:P3i4hk0kryL0tniig5/cOK+0GdlemwCF55yeOosd8L0= -github.com/onflow/flow-go v0.31.1-0.20230915232445-43aebfd0ae6a h1:dIimYZH6Y2y7MFKKlKyWmz9n9JSMQ3n4sTj3qLFtPxE= -github.com/onflow/flow-go v0.31.1-0.20230915232445-43aebfd0ae6a/go.mod h1:kqlBoVAVDSi2VbLX71WOmx/vfzRrQSTu3Yw0baUoHIg= -github.com/onflow/flow-go-sdk v0.44.0-stable-cadence.1.0.20230915213126-68e7ffb5595f/go.mod h1:tc3I2xIc+ThMUIW2Jkam1pquKpuRDTLGP79INkCGZg4= +github.com/onflow/cadence v1.0.0-preview.1.0.20231213191345-0ff20e15e7e1 h1:xIFPRIA/pmyplEu5JxuMCfC6zfdqRW7QDHYJ8ogCNuc= +github.com/onflow/cadence v1.0.0-preview.1.0.20231213191345-0ff20e15e7e1/go.mod h1:60RhxKY5V4DXFQfvXQa48eZZVN19O7Lu9cp53FM54vo= +github.com/onflow/flow-core-contracts/lib/go/contracts v0.15.1-0.20231212203043-37cbe453d425 h1:zvLHFxySeg61/dgp/IbvaN+k4BXPuAhBOslrPQjrX9Q= +github.com/onflow/flow-core-contracts/lib/go/contracts v0.15.1-0.20231212203043-37cbe453d425/go.mod h1:N+1bEs/159Efg75hSQIkb90FVinxUMxL/6mA3I6dXtQ= +github.com/onflow/flow-core-contracts/lib/go/templates v0.15.1-0.20231204202154-f8dfacb39d86 h1:5dDtY8iItVVvIY+YXbavGDMaVz4Gq7sq4ILF/cZb7/8= +github.com/onflow/flow-core-contracts/lib/go/templates v0.15.1-0.20231204202154-f8dfacb39d86/go.mod h1:6XIbPht7u7ADszXSHI2APY+OL78XVaUU8+OdgWEElAY= +github.com/onflow/flow-emulator v0.59.1-0.20231218185945-9116c416533f h1:OiCv5EW0RScRkNqZQ6wH+BtkiipRcjhCMo3uXfjMRr4= +github.com/onflow/flow-emulator v0.59.1-0.20231218185945-9116c416533f/go.mod h1:mzbYJhEebev+x55s7CY1Iv8jXYv3GHYklBiXGdXWO98= +github.com/onflow/flow-go v0.32.4-0.20231214190912-4c4527a42fb0 h1:cWH+cVzRmogm75GgmxecUoDYMSi2yZMv3/PgVM41N9o= +github.com/onflow/flow-go v0.32.4-0.20231214190912-4c4527a42fb0/go.mod h1:PsXOc6UemYCzE7SXn3geQrpn7YdNaixkwuyPZp0cwjg= github.com/onflow/flow-go-sdk v0.44.0-stable-cadence.2 h1:vUVO6m85BiT8c50Oc8YGc3CU+sGqiKW9FZbmiRph2dU= github.com/onflow/flow-go-sdk v0.44.0-stable-cadence.2/go.mod h1:mbLrR3MkYbi9LH3yasDj1jrR4QTR8vjRLVFCm4jMHn0= github.com/onflow/flow-go/crypto v0.24.7/go.mod h1:fqCzkIBBMRRkciVrvW21rECKq1oD7Q6u+bCI78lfNX0= -github.com/onflow/flow-go/crypto v0.24.9 h1:0EQp+kSZYJepMIiSypfJVe7tzsPcb6UXOdOtsTCDhBs= -github.com/onflow/flow-go/crypto v0.24.9/go.mod h1:fqCzkIBBMRRkciVrvW21rECKq1oD7Q6u+bCI78lfNX0= -github.com/onflow/flow-nft/lib/go/contracts v1.1.1-0.20230915224343-ca2663ed82cf h1:G3RFroB2Aj1d9CyJwl9JcZYWiOF75TB6L84/QSBUPds= -github.com/onflow/flow-nft/lib/go/contracts v1.1.1-0.20230915224343-ca2663ed82cf/go.mod h1:W7S4wW94sefM+/uAdtrQP1S2I4aVbYJPxWlyNAUT0yI= +github.com/onflow/flow-go/crypto v0.25.0 h1:6lmoiAQ3APCF+nV7f4f2AXL3PuDKqQiWqRJXmjrMEq4= +github.com/onflow/flow-go/crypto v0.25.0/go.mod h1:OOb2vYcS8AOCajBClhHTJ0NKftFl1RQgTQ0+Vh4nbqk= github.com/onflow/flow/protobuf/go/flow v0.3.2-0.20221202093946-932d1c70e288/go.mod h1:gQxYqCfkI8lpnKsmIjwtN2mV/N2PIwc1I+RUK4HPIc8= -github.com/onflow/flow/protobuf/go/flow v0.3.2-0.20230628215638-83439d22e0ce h1:YQKijiQaq8SF1ayNqp3VVcwbBGXSnuHNHq4GQmVGybE= -github.com/onflow/flow/protobuf/go/flow v0.3.2-0.20230628215638-83439d22e0ce/go.mod h1:NA2pX2nw8zuaxfKphhKsk00kWLwfd+tv8mS23YXO4Sk= +github.com/onflow/flow/protobuf/go/flow v0.3.2-0.20231124194313-106cc495def6 h1:KMN+OEVaw7KAgxL3p8ux7CMuyTvacAlYTbasOqowh4M= +github.com/onflow/flow/protobuf/go/flow v0.3.2-0.20231124194313-106cc495def6/go.mod h1:NA2pX2nw8zuaxfKphhKsk00kWLwfd+tv8mS23YXO4Sk= github.com/onflow/sdks v0.5.1-0.20230912225508-b35402f12bba h1:rIehuhO6bj4FkwE4VzwEjX7MoAlOhUJENBJLqDqVxAo= github.com/onflow/sdks v0.5.1-0.20230912225508-b35402f12bba/go.mod h1:F0dj0EyHC55kknLkeD10js4mo14yTdMotnWMslPirrU= github.com/onflow/wal v0.0.0-20230529184820-bc9f8244608d h1:gAEqYPn3DS83rHIKEpsajnppVD1+zwuYPFyeDVFaQvg= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.9.7 h1:06xGQy5www2oN160RtEZoTvnP2sPhEfePYmCDc2szss= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= -github.com/opencontainers/runtime-spec v1.0.2 h1:UfAcuLBJB9Coz72x1hgl8O5RVzTdNiaglX6v2DM6FI0= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= @@ -1158,6 +1226,8 @@ github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -1168,7 +1238,6 @@ github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qR github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/polydawn/refmt v0.89.0 h1:ADJTApkvkeBZsN0tBTx8QjpD9JkmxbKp0cxfr9qszm4= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= @@ -1193,12 +1262,6 @@ github.com/psiemens/graceland v1.0.0 h1:L580AVV4Q2XLcPpmvxJRH9UpEAYr/eu2jBKmMglh github.com/psiemens/graceland v1.0.0/go.mod h1:1Tof+vt1LbmcZFE0lzgdwMN0QBymAChG3FRgDx8XisU= github.com/psiemens/sconfig v0.1.0 h1:xfWqW+TRpih7mXZIqKYTmpRhlZLQ1kbxV8EjllPv76s= github.com/psiemens/sconfig v0.1.0/go.mod h1:+MLKqdledP/8G3rOBpknbLh0IclCf4WneJUtS26JB2U= -github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= -github.com/quic-go/qtls-go1-19 v0.3.2 h1:tFxjCFcTQzK+oMxG6Zcvp4Dq8dx4yD3dDiIiyc86Z5U= -github.com/quic-go/qtls-go1-20 v0.2.2 h1:WLOPx6OY/hxtTxKV1Zrq20FtXtDEkeY00CGQm8GEa3E= -github.com/quic-go/quic-go v0.33.0 h1:ItNoTDN/Fm/zBlq769lLJc8ECe9gYaW40veHCCco7y0= -github.com/quic-go/webtransport-go v0.5.3 h1:5XMlzemqB4qmOlgIus5zB45AcZ2kCgCy2EptUrfOPWU= -github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= @@ -1211,6 +1274,7 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= @@ -1223,17 +1287,24 @@ github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= +github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= github.com/schollz/progressbar/v3 v3.8.3/go.mod h1:pWnVCjSBZsT2X3nx9HfRdnCDrpbevliMeoEVhStwHko= github.com/schollz/progressbar/v3 v3.13.1 h1:o8rySDYiQ59Mwzy2FELeHY5ZARXZTVJC7iHD6PEFUiE= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sethvargo/go-retry v0.2.3 h1:oYlgvIvsju3jNbottWABtbnoLC+GDtLdBHxKWxQm/iU= github.com/sethvargo/go-retry v0.2.3/go.mod h1:1afjQuvh7s4gflMObvjLPaWgluLLyhA1wmVZ6KLpICw= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= github.com/slok/go-http-metrics v0.10.0 h1:rh0LaYEKza5eaYRGDXujKrOln57nHBi4TtVhmNEpbgM= github.com/slok/go-http-metrics v0.10.0/go.mod h1:lFqdaS4kWMfUKCSukjC47PdCeTk+hXDUVm8kLHRqJ38= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.0.1-0.20190317074736-539464a789e9/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -1249,8 +1320,8 @@ github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= -github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= +github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= @@ -1284,31 +1355,49 @@ github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXl github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/supranational/blst v0.3.10/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= -github.com/supranational/blst v0.3.11-0.20230406105308-e9dfc5ee724b h1:u49mjRnygnB34h8OKbnNJFVUtWSKIKb1KukdV8bILUM= github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d/go.mod h1:9OrXJhf154huy1nPWmuSrkgjPUtUNhA+Zmy+6AESzuA= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/texttheater/golang-levenshtein/levenshtein v0.0.0-20200805054039-cae8b0eaed6c h1:HelZ2kAFadG0La9d+4htN4HzQ68Bm2iM9qKMSMES6xg= github.com/texttheater/golang-levenshtein/levenshtein v0.0.0-20200805054039-cae8b0eaed6c/go.mod h1:JlzghshsemAMDGZLytTFY8C1JQxQPhnatWqNwUXjggo= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/turbolent/prettier v0.0.0-20220320183459-661cc755135d h1:5JInRQbk5UBX8JfUvKh2oYTLMVwj3p6n+wapDDm7hko= github.com/turbolent/prettier v0.0.0-20220320183459-661cc755135d/go.mod h1:Nlx5Y115XQvNcIdIy7dZXaNSUpzwBSge4/Ivk93/Yog= github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= +github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI= github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= github.com/vmihailenco/msgpack/v4 v4.3.11 h1:Q47CePddpNGNhk4GCnAx9DDtASi2rasatE0cd26cZoE= github.com/vmihailenco/msgpack/v4 v4.3.11/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= github.com/vmihailenco/tagparser v0.1.1 h1:quXMXlA39OCbd2wAdTsGDlK9RkOk6Wuw+x37wVyIuWY= github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= -github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 h1:EKhdznlJHPMoKr0XTrX+IlJs1LH3lyx2nfr1dOlZ79k= -github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM= github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= +github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= +github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= +github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -1333,7 +1422,6 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/otel v1.8.0/go.mod h1:2pkj+iMj0o03Y+cW6/m8Y4WkRdYN3AvCXCnzRMp9yvM= go.opentelemetry.io/otel v1.14.0/go.mod h1:o4buv+dJzx8rohcUeRmWUZhqupFvzWis188WlggnNeU= @@ -1362,8 +1450,6 @@ go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/dig v1.17.0 h1:5Chju+tUvcC+N7N6EV08BJz41UZuO3BmHcN4A287ZLI= -go.uber.org/fx v1.19.2 h1:SyFgYQFr1Wl0AYstE8vyYIzP4bFz2URrScjwC4cwUvY= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= @@ -1384,10 +1470,13 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200311171314-f7b00557c8c4/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= @@ -1395,8 +1484,8 @@ golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= +golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1467,6 +1556,7 @@ golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -1475,6 +1565,7 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1485,9 +1576,11 @@ golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= @@ -1500,6 +1593,7 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1520,8 +1614,8 @@ golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1566,8 +1660,8 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= +golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1585,7 +1679,11 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1602,8 +1700,10 @@ golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200918174421-af09f7315aff/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1619,6 +1719,7 @@ golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1660,8 +1761,10 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1670,7 +1773,7 @@ golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= +golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1686,22 +1789,26 @@ golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -1761,7 +1868,7 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= +golang.org/x/tools v0.16.0 h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1847,6 +1954,7 @@ google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1974,8 +2082,13 @@ google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d h1:VBu5YqKPv6XiJ199exd8Br+Aetz+o08F+PLMnwJQHAY= +google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d h1:DoPTO70H+bcDXcd39vOqb2viZxgqeBeSGtZ55yZU4/Q= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -2015,8 +2128,8 @@ google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCD google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/grpc v1.56.1 h1:z0dNfjIl0VpaZ9iSVjA6daGatAYwPGstTjt5vkRMFkQ= -google.golang.org/grpc v1.56.1/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= +google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -2034,8 +2147,9 @@ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -2045,8 +2159,13 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= +gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= +gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= +gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200316214253-d7b0ff38cac9/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= @@ -2060,8 +2179,9 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/lib/go/test/test.go b/lib/go/test/test.go index 14bb8736..94934194 100644 --- a/lib/go/test/test.go +++ b/lib/go/test/test.go @@ -6,6 +6,7 @@ import ( "io/ioutil" "testing" + "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/onflow/cadence" jsoncdc "github.com/onflow/cadence/encoding/json" "github.com/onflow/flow-emulator/convert" @@ -21,8 +22,12 @@ import ( "github.com/rs/zerolog" ) +// this is added to resolve the issue with chainhash ambiguous import, +// the code is not used, but it's needed to force go.mod specify and retain chainhash version +// workaround for issue: https://github.com/golang/go/issues/27899 +var _ = chainhash.Hash{} + // Sets up testing and emulator objects and initialize the emulator default addresses -// func newTestSetup(t *testing.T) (emulator.Emulator, *adapters.SDKAdapter, *test.AccountKeys) { // Set for parallel processing t.Parallel() @@ -211,12 +216,11 @@ func bytesToCadenceArray(b []byte) cadence.Array { // assertEqual asserts that two objects are equal. // -// assertEqual(t, 123, 123) +// assertEqual(t, 123, 123) // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). Function equality // cannot be determined and will always fail. -// func assertEqual(t *testing.T, expected, actual interface{}) bool { if assert.ObjectsAreEqual(expected, actual) { diff --git a/lib/go/test/token_test.go b/lib/go/test/token_test.go index 3155f941..92f7648e 100644 --- a/lib/go/test/token_test.go +++ b/lib/go/test/token_test.go @@ -1,7 +1,6 @@ package test import ( - "context" "testing" "github.com/stretchr/testify/assert" @@ -16,62 +15,61 @@ import ( "github.com/onflow/flow-ft/lib/go/templates" ) +// Steps: +// +// 1. All the token contracts deploy properly +// 2. Total supply is initialized to 1000.0 func TestTokenDeployment(t *testing.T) { b, adapter, accountKeys := newTestSetup(t) exampleTokenAccountKey, _ := accountKeys.NewWithSigner() - fungibleAddr, _, exampleTokenAddr, _, _, _ := DeployTokenContracts(b, adapter, t, []*flow.AccountKey{exampleTokenAccountKey}) + + env := templates.Environment{} + + _ = deployTokenContracts(b, adapter, t, []*flow.AccountKey{exampleTokenAccountKey}, &env) t.Run("Should have initialized Supply field correctly", func(t *testing.T) { - script := templates.GenerateInspectSupplyScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + script := templates.GenerateInspectSupplyScript(env) supply := executeScriptAndCheck(t, b, script, nil) assert.Equal(t, CadenceUFix64("1000.0"), supply) }) } -func TestCreateToken(t *testing.T) { +// Steps: +// +// 1. Create an empty vault that doesn't change the total supply +// (verify directly and through the metadata view) +func TestTokenSetupAccount(t *testing.T) { b, adapter, accountKeys := newTestSetup(t) - serviceSigner, _ := b.ServiceKey().Signer() - exampleTokenAccountKey, _ := accountKeys.NewWithSigner() - fungibleAddr, resolverAddr, exampleTokenAddr, _, metadataViewsAddr, fungibleMetadataViewsAddr := DeployTokenContracts(b, adapter, t, []*flow.AccountKey{exampleTokenAccountKey}) - joshAccountKey, joshSigner := accountKeys.NewWithSigner() - joshAddress, _ := adapter.CreateAccount(context.Background(), []*flow.AccountKey{joshAccountKey}, nil) + env := templates.Environment{} + _ = deployTokenContracts(b, adapter, t, []*flow.AccountKey{exampleTokenAccountKey}, &env) t.Run("Should be able to create empty Vault that doesn't affect supply", func(t *testing.T) { - script := templates.GenerateCreateTokenScript(fungibleAddr, exampleTokenAddr, metadataViewsAddr, resolverAddr, "ExampleToken") - tx := createTxWithTemplateAndAuthorizer(b, script, joshAddress) - - signAndSubmit( - t, b, tx, - []flow.Address{ - b.ServiceKey().Address, - joshAddress, - }, - []crypto.Signer{ - serviceSigner, - joshSigner, - }, - false, + joshAddress, _, _ := createAccountWithVault(b, adapter, t, + accountKeys, + env, ) - script = templates.GenerateInspectVaultScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + // Make sure the vault balance is zero + script := templates.GenerateInspectVaultScript(env) result := executeScriptAndCheck(t, b, script, [][]byte{ jsoncdc.MustEncode(cadence.Address(joshAddress)), }, ) - assert.Equal(t, CadenceUFix64("0.0"), result) - script = templates.GenerateInspectSupplyScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + // Directly query the total supply to make sure it hasn't changed + script = templates.GenerateInspectSupplyScript(env) supply := executeScriptAndCheck(t, b, script, nil) assert.Equal(t, CadenceUFix64("1000.0"), supply) - script = templates.GenerateInspectSupplyViewScript(fungibleAddr, exampleTokenAddr, metadataViewsAddr, fungibleMetadataViewsAddr, resolverAddr, "ExampleToken") + // Query the total supply via the metadata view to make sure it is also correct + script = templates.GenerateInspectSupplyViewScript(env) supply = executeScriptAndCheck(t, b, script, [][]byte{ jsoncdc.MustEncode(cadence.Address(joshAddress)), }) @@ -79,37 +77,27 @@ func TestCreateToken(t *testing.T) { }) } -func TestExternalTransfers(t *testing.T) { +// Steps: +// +// 1. Make sure extra tokens cannot be withdrawn +// 2. Test a regular transfer +// 3. Test a transfer to multiple accounts +func TestTokenExternalTransfers(t *testing.T) { b, adapter, accountKeys := newTestSetup(t) serviceSigner, _ := b.ServiceKey().Signer() exampleTokenAccountKey, exampleTokenSigner := accountKeys.NewWithSigner() - fungibleAddr, resolverAddr, exampleTokenAddr, forwardingAddr, metadataViewsAddr, _ := - DeployTokenContracts(b, adapter, t, []*flow.AccountKey{exampleTokenAccountKey}) - - joshAccountKey, joshSigner := accountKeys.NewWithSigner() - joshAddress, _ := adapter.CreateAccount(context.Background(), []*flow.AccountKey{joshAccountKey}, nil) - - // then deploy the tokens to an account - script := templates.GenerateCreateTokenScript(fungibleAddr, exampleTokenAddr, metadataViewsAddr, resolverAddr, "ExampleToken") - tx := createTxWithTemplateAndAuthorizer(b, script, joshAddress) - - signAndSubmit( - t, b, tx, - []flow.Address{ - b.ServiceKey().Address, - joshAddress, - }, - []crypto.Signer{ - serviceSigner, - joshSigner, - }, - false, + env := templates.Environment{} + exampleTokenAddr := deployTokenContracts(b, adapter, t, []*flow.AccountKey{exampleTokenAccountKey}, &env) + + joshAddress, _, joshSigner := createAccountWithVault(b, adapter, t, + accountKeys, + env, ) t.Run("Shouldn't be able to withdraw more than the balance of the Vault", func(t *testing.T) { - script := templates.GenerateTransferVaultScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + script := templates.GenerateTransferVaultScript(env) tx := createTxWithTemplateAndAuthorizer(b, script, exampleTokenAddr) _ = tx.AddArgument(CadenceUFix64("30000.0")) @@ -129,29 +117,29 @@ func TestExternalTransfers(t *testing.T) { ) // Assert that the vaults' balances are correct - script = templates.GenerateInspectVaultScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + // Sender vault + script = templates.GenerateInspectVaultScript(env) result := executeScriptAndCheck(t, b, script, [][]byte{ jsoncdc.MustEncode(cadence.Address(exampleTokenAddr)), }, ) - assert.Equal(t, CadenceUFix64("1000.0"), result) - script = templates.GenerateInspectVaultScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + // Receiver Vault + script = templates.GenerateInspectVaultScript(env) result = executeScriptAndCheck(t, b, script, [][]byte{ jsoncdc.MustEncode(cadence.Address(joshAddress)), }, ) - assert.Equal(t, CadenceUFix64("0.0"), result) }) t.Run("Should be able to withdraw and deposit tokens from a vault", func(t *testing.T) { - script := templates.GenerateTransferVaultScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + script := templates.GenerateTransferVaultScript(env) tx := createTxWithTemplateAndAuthorizer(b, script, exampleTokenAddr) @@ -172,27 +160,28 @@ func TestExternalTransfers(t *testing.T) { ) // Assert that the vaults' balances are correct - script = templates.GenerateInspectVaultScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + // Sender vault + script = templates.GenerateInspectVaultScript(env) result := executeScriptAndCheck(t, b, script, [][]byte{ jsoncdc.MustEncode(cadence.Address(exampleTokenAddr)), }, ) - assert.Equal(t, CadenceUFix64("700.0"), result) - script = templates.GenerateInspectVaultScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + // Receiver Vault + script = templates.GenerateInspectVaultScript(env) result = executeScriptAndCheck(t, b, script, [][]byte{ jsoncdc.MustEncode(cadence.Address(joshAddress)), }, ) - assert.Equal(t, CadenceUFix64("300.0"), result) - script = templates.GenerateInspectSupplyScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + // Supply should not have changed + script = templates.GenerateInspectSupplyScript(env) supply := executeScriptAndCheck(t, b, script, nil) assert.Equal(t, CadenceUFix64("1000.0"), supply) }) @@ -206,7 +195,7 @@ func TestExternalTransfers(t *testing.T) { recipientPairs := make([]cadence.KeyValuePair, 1) recipientPairs[0] = pair - script := templates.GenerateTransferManyAccountsScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + script := templates.GenerateTransferManyAccountsScript(env) tx := flow.NewTransaction(). SetScript(script). @@ -235,7 +224,8 @@ func TestExternalTransfers(t *testing.T) { ) // Assert that the vaults' balances are correct - script = templates.GenerateInspectVaultScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + // Sender vault + script = templates.GenerateInspectVaultScript(env) result, err := b.ExecuteScript( script, [][]byte{ @@ -249,7 +239,8 @@ func TestExternalTransfers(t *testing.T) { balance := result.Value assert.Equal(t, CadenceUFix64("400.0"), balance) - script = templates.GenerateInspectVaultScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + // Receiver Vault + script = templates.GenerateInspectVaultScript(env) result, err = b.ExecuteScript( script, [][]byte{ @@ -263,96 +254,89 @@ func TestExternalTransfers(t *testing.T) { balance = result.Value assert.Equal(t, CadenceUFix64("600.0"), balance) - script = templates.GenerateInspectSupplyScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + // Supply should not have changed + script = templates.GenerateInspectSupplyScript(env) supply := executeScriptAndCheck(t, b, script, nil) assert.Equal(t, CadenceUFix64("1000.0"), supply) }) - t.Run("Should be able to transfer tokens through a forwarder from a vault", func(t *testing.T) { + t.Run("Should be able to transfer tokens with the generic transfer transaction", func(t *testing.T) { - script := templates.GenerateCreateForwarderScript( - fungibleAddr, - forwardingAddr, - exampleTokenAddr, - "ExampleToken", - ) + script := templates.GenerateTransferGenericVaultScript(env) tx := createTxWithTemplateAndAuthorizer(b, script, joshAddress) + _ = tx.AddArgument(CadenceUFix64("300.0")) _ = tx.AddArgument(cadence.NewAddress(exampleTokenAddr)) - signAndSubmit( - t, b, tx, - []flow.Address{ - b.ServiceKey().Address, - joshAddress, - }, - []crypto.Signer{ - serviceSigner, - joshSigner, - }, - false, - ) - - script = templates.GenerateTransferVaultScript(fungibleAddr, exampleTokenAddr, "ExampleToken") - tx = createTxWithTemplateAndAuthorizer(b, script, exampleTokenAddr) + storagePath := cadence.Path{Domain: common.PathDomainStorage, Identifier: "exampleTokenVault"} + publicPath := cadence.Path{Domain: common.PathDomainPublic, Identifier: "exampleTokenReceiver"} - _ = tx.AddArgument(CadenceUFix64("300.0")) - _ = tx.AddArgument(cadence.NewAddress(joshAddress)) + _ = tx.AddArgument(storagePath) + _ = tx.AddArgument(publicPath) signAndSubmit( t, b, tx, []flow.Address{ b.ServiceKey().Address, - exampleTokenAddr, + joshAddress, }, []crypto.Signer{ serviceSigner, - exampleTokenSigner, + joshSigner, }, false, ) // Assert that the vaults' balances are correct - script = templates.GenerateInspectVaultScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + script = templates.GenerateInspectVaultScript(env) result := executeScriptAndCheck(t, b, script, [][]byte{ jsoncdc.MustEncode(cadence.Address(exampleTokenAddr)), }, ) - assertEqual(t, CadenceUFix64("400.0"), result) + assertEqual(t, CadenceUFix64("700.0"), result) - script = templates.GenerateInspectVaultScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + script = templates.GenerateInspectVaultScript(env) result = executeScriptAndCheck(t, b, script, [][]byte{ jsoncdc.MustEncode(cadence.Address(joshAddress)), }, ) - assertEqual(t, CadenceUFix64("600.0"), result) + assertEqual(t, CadenceUFix64("300.0"), result) - script = templates.GenerateInspectSupplyScript(fungibleAddr, exampleTokenAddr, "ExampleToken") - supply := executeScriptAndCheck(t, b, script, nil) - assertEqual(t, CadenceUFix64("1000.0"), supply) }) +} - t.Run("Should be able to transfer tokens with the generic transfer transaction", func(t *testing.T) { +// Steps: +// +// 1. Setup a forwarder in josh's account to forward to the token address +// 2. Test a transfer from the token account to josh, which will go back to the token account +func TestTokenForwarding(t *testing.T) { + b, adapter, accountKeys := newTestSetup(t) - script := templates.GenerateTransferGenericVaultScript( - fungibleAddr, - ) + serviceSigner, _ := b.ServiceKey().Signer() - tx := createTxWithTemplateAndAuthorizer(b, script, joshAddress) + env := templates.Environment{} - _ = tx.AddArgument(CadenceUFix64("300.0")) - _ = tx.AddArgument(cadence.NewAddress(exampleTokenAddr)) + exampleTokenAccountKey, exampleTokenSigner := accountKeys.NewWithSigner() + exampleTokenAddr := deployTokenContracts(b, adapter, t, []*flow.AccountKey{exampleTokenAccountKey}, &env) - storagePath := cadence.Path{Domain: common.PathDomainStorage, Identifier: "exampleTokenVault"} - publicPath := cadence.Path{Domain: common.PathDomainPublic, Identifier: "exampleTokenReceiver"} + joshAddress, _, joshSigner := createAccountWithVault(b, adapter, t, + accountKeys, + env, + ) - _ = tx.AddArgument(storagePath) - _ = tx.AddArgument(publicPath) + t.Run("Should be able to transfer tokens through a forwarder from a vault", func(t *testing.T) { + + // Setup the forwarder in josh's account to forward to the token addr + script := templates.GenerateCreateForwarderScript(env) + + tx := createTxWithTemplateAndAuthorizer(b, script, joshAddress) + + _ = tx.AddArgument(cadence.NewAddress(exampleTokenAddr)) signAndSubmit( t, b, tx, @@ -367,161 +351,71 @@ func TestExternalTransfers(t *testing.T) { false, ) - // Assert that the vaults' balances are correct - script = templates.GenerateInspectVaultScript(fungibleAddr, exampleTokenAddr, "ExampleToken") - result := executeScriptAndCheck(t, b, - script, - [][]byte{ - jsoncdc.MustEncode(cadence.Address(exampleTokenAddr)), - }, - ) - assertEqual(t, CadenceUFix64("700.0"), result) - - script = templates.GenerateInspectVaultScript(fungibleAddr, exampleTokenAddr, "ExampleToken") - result = executeScriptAndCheck(t, b, - script, - [][]byte{ - jsoncdc.MustEncode(cadence.Address(joshAddress)), - }, - ) - assertEqual(t, CadenceUFix64("300.0"), result) - - }) -} - -func TestVaultDestroy(t *testing.T) { - b, adapter, accountKeys := newTestSetup(t) - - serviceSigner, _ := b.ServiceKey().Signer() - - exampleTokenAccountKey, exampleTokenSigner := accountKeys.NewWithSigner() - fungibleAddr, resolverAddr, exampleTokenAddr, _, metadataViewsAddr, _ := DeployTokenContracts(b, adapter, t, []*flow.AccountKey{exampleTokenAccountKey}) - - joshAccountKey, joshSigner := accountKeys.NewWithSigner() - joshAddress, _ := adapter.CreateAccount(context.Background(), []*flow.AccountKey{joshAccountKey}, nil) - - // then deploy the tokens to an account - script := templates.GenerateCreateTokenScript(fungibleAddr, exampleTokenAddr, metadataViewsAddr, resolverAddr, "ExampleToken") - tx := flow.NewTransaction(). - SetScript(script). - SetGasLimit(100). - SetProposalKey( - b.ServiceKey().Address, - b.ServiceKey().Index, - b.ServiceKey().SequenceNumber, - ). - SetPayer(b.ServiceKey().Address). - AddAuthorizer(joshAddress) - - signAndSubmit( - t, b, tx, - []flow.Address{ - b.ServiceKey().Address, - joshAddress, - }, - []crypto.Signer{ - serviceSigner, - joshSigner, - }, - false, - ) - - script = templates.GenerateTransferVaultScript(fungibleAddr, exampleTokenAddr, "ExampleToken") - tx = flow.NewTransaction(). - SetScript(script). - SetGasLimit(100). - SetProposalKey( - b.ServiceKey().Address, - b.ServiceKey().Index, - b.ServiceKey().SequenceNumber, - ). - SetPayer(b.ServiceKey().Address). - AddAuthorizer(exampleTokenAddr) - - _ = tx.AddArgument(CadenceUFix64("300.0")) - _ = tx.AddArgument(cadence.NewAddress(joshAddress)) - - signAndSubmit( - t, b, tx, - []flow.Address{ - b.ServiceKey().Address, - exampleTokenAddr, - }, - []crypto.Signer{ - serviceSigner, - exampleTokenSigner, - }, - false, - ) + // Transfer tokens from the token account to josh + // which will be forwarded back to the token account + script = templates.GenerateTransferVaultScript(env) + tx = createTxWithTemplateAndAuthorizer(b, script, exampleTokenAddr) - t.Run("Should not subtract tokens from supply when they are destroyed with `destroy`", func(t *testing.T) { - script := templates.GenerateDestroyVaultScript(fungibleAddr, exampleTokenAddr, "ExampleToken", 100) - tx := createTxWithTemplateAndAuthorizer( - b, script, exampleTokenAddr) + _ = tx.AddArgument(CadenceUFix64("300.0")) + _ = tx.AddArgument(cadence.NewAddress(joshAddress)) signAndSubmit( t, b, tx, - []flow.Address{b.ServiceKey().Address, exampleTokenAddr}, - []crypto.Signer{serviceSigner, exampleTokenSigner}, + []flow.Address{ + b.ServiceKey().Address, + exampleTokenAddr, + }, + []crypto.Signer{ + serviceSigner, + exampleTokenSigner, + }, false, ) - // Assert that the vaults' balances are correct - script = templates.GenerateInspectVaultScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + // Assert that the vaults' balances are correct (the same as before) + // Token account (sender) + script = templates.GenerateInspectVaultScript(env) result := executeScriptAndCheck(t, b, script, [][]byte{ jsoncdc.MustEncode(cadence.Address(exampleTokenAddr)), }, ) + assertEqual(t, CadenceUFix64("1000.0"), result) - assert.Equal(t, CadenceUFix64("600.0"), result) - - script = templates.GenerateInspectSupplyScript(fungibleAddr, exampleTokenAddr, "ExampleToken") - supply := executeScriptAndCheck(t, b, script, nil) - assert.Equal(t, CadenceUFix64("1000.0"), supply) + // Receiver account + script = templates.GenerateInspectVaultScript(env) + result = executeScriptAndCheck(t, b, + script, + [][]byte{ + jsoncdc.MustEncode(cadence.Address(joshAddress)), + }, + ) + assertEqual(t, CadenceUFix64("0.0"), result) }) } +// Steps: +// +// 1. Mint tokens with the ExampleToken Admin (verify that supply and balances are increased) +// 2. Burn tokens, which will decrease the supply and balances func TestMintingAndBurning(t *testing.T) { b, adapter, accountKeys := newTestSetup(t) serviceSigner, _ := b.ServiceKey().Signer() + env := templates.Environment{} + exampleTokenAccountKey, exampleTokenSigner := accountKeys.NewWithSigner() - fungibleAddr, resolverAddr, exampleTokenAddr, _, metadataViewsAddr, _ := DeployTokenContracts(b, adapter, t, []*flow.AccountKey{exampleTokenAccountKey}) - - joshAccountKey, joshSigner := accountKeys.NewWithSigner() - joshAddress, _ := adapter.CreateAccount(context.Background(), []*flow.AccountKey{joshAccountKey}, nil) - - // then deploy the tokens to an account - script := templates.GenerateCreateTokenScript(fungibleAddr, exampleTokenAddr, metadataViewsAddr, resolverAddr, "ExampleToken") - tx := flow.NewTransaction(). - SetScript(script). - SetGasLimit(100). - SetProposalKey( - b.ServiceKey().Address, - b.ServiceKey().Index, - b.ServiceKey().SequenceNumber, - ). - SetPayer(b.ServiceKey().Address). - AddAuthorizer(joshAddress) - - signAndSubmit( - t, b, tx, - []flow.Address{ - b.ServiceKey().Address, - joshAddress, - }, - []crypto.Signer{ - serviceSigner, - joshSigner, - }, - false, + exampleTokenAddr := deployTokenContracts(b, adapter, t, []*flow.AccountKey{exampleTokenAccountKey}, &env) + + joshAddress, _, _ := createAccountWithVault(b, adapter, t, + accountKeys, + env, ) t.Run("Should mint tokens, deposit, and update balance and total supply", func(t *testing.T) { - script := templates.GenerateMintTokensScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + script := templates.GenerateMintTokensScript(env) tx := createTxWithTemplateAndAuthorizer( b, script, exampleTokenAddr) @@ -542,18 +436,19 @@ func TestMintingAndBurning(t *testing.T) { ) // Assert that the vaults' balances are correct - script = templates.GenerateInspectVaultScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + // token account should not have increased + script = templates.GenerateInspectVaultScript(env) result := executeScriptAndCheck(t, b, script, [][]byte{ jsoncdc.MustEncode(cadence.Address(exampleTokenAddr)), }, ) - assert.Equal(t, CadenceUFix64("1000.0"), result) // Assert that the vaults' balances are correct - script = templates.GenerateInspectVaultScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + // Josh account should have increased by 50, the amount minted + script = templates.GenerateInspectVaultScript(env) result = executeScriptAndCheck(t, b, script, [][]byte{ @@ -563,13 +458,13 @@ func TestMintingAndBurning(t *testing.T) { assert.Equal(t, CadenceUFix64("50.0"), result) - script = templates.GenerateInspectSupplyScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + script = templates.GenerateInspectSupplyScript(env) supply := executeScriptAndCheck(t, b, script, nil) assert.Equal(t, CadenceUFix64("1050.0"), supply) }) t.Run("Should burn tokens and update balance and total supply", func(t *testing.T) { - script := templates.GenerateBurnTokensScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + script := templates.GenerateBurnTokensScript(env) tx := createTxWithTemplateAndAuthorizer( b, script, exampleTokenAddr) @@ -589,17 +484,18 @@ func TestMintingAndBurning(t *testing.T) { ) // Assert that the vaults' balances are correct - script = templates.GenerateInspectVaultScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + // token account balance should have decreased by the burned amount + script = templates.GenerateInspectVaultScript(env) result := executeScriptAndCheck(t, b, script, [][]byte{ jsoncdc.MustEncode(cadence.Address(exampleTokenAddr)), }, ) - assert.Equal(t, CadenceUFix64("950.0"), result) - script = templates.GenerateInspectSupplyScript(fungibleAddr, exampleTokenAddr, "ExampleToken") + // total supply also decreases by the burned amount + script = templates.GenerateInspectSupplyScript(env) supply := executeScriptAndCheck(t, b, script, nil) assert.Equal(t, CadenceUFix64("1000.0"), supply) }) diff --git a/lib/go/test/token_test_helpers.go b/lib/go/test/token_test_helpers.go index de60c5bd..c96c6a27 100644 --- a/lib/go/test/token_test_helpers.go +++ b/lib/go/test/token_test_helpers.go @@ -4,9 +4,13 @@ import ( "context" "testing" + "github.com/onflow/flow-ft/lib/go/templates" + "github.com/onflow/flow-emulator/adapters" "github.com/onflow/flow-emulator/emulator" + "github.com/onflow/flow-go-sdk/crypto" sdktemplates "github.com/onflow/flow-go-sdk/templates" + "github.com/onflow/flow-go-sdk/test" "github.com/stretchr/testify/assert" "github.com/onflow/flow-go-sdk" @@ -18,18 +22,14 @@ import ( // Deploys the FungibleToken, ExampleToken, and TokenForwarding contracts // to different accounts and returns their addresses -func DeployTokenContracts( +func deployTokenContracts( b emulator.Emulator, adapter *adapters.SDKAdapter, t *testing.T, key []*flow.AccountKey, + env *templates.Environment, ) ( - fungibleAddr flow.Address, - viewResolverAddr flow.Address, tokenAddr flow.Address, - forwardingAddr flow.Address, - metadataViewsAddr flow.Address, - fungibleMetadataViewsAddr flow.Address, ) { var err error @@ -44,9 +44,10 @@ func DeployTokenContracts( }, ) assert.NoError(t, err) + env.ViewResolverAddress = resolverAddress.Hex() // Deploy the NonFungibleToken contract - nonFungibleTokenCode := nftcontracts.NonFungibleTokenV2(resolverAddress) + nonFungibleTokenCode := nftcontracts.NonFungibleToken(resolverAddress) nftAddress, err := adapter.CreateAccount(context.Background(), nil, []sdktemplates.Contract{ @@ -59,8 +60,8 @@ func DeployTokenContracts( assert.NoError(t, err) // Deploy the FungibleToken contract - fungibleTokenCode := contracts.FungibleTokenV2(resolverAddress.String()) - fungibleAddr, err = adapter.CreateAccount(context.Background(), + fungibleTokenCode := contracts.FungibleToken(resolverAddress.String()) + fungibleAddr, err := adapter.CreateAccount(context.Background(), nil, []sdktemplates.Contract{ { @@ -70,13 +71,11 @@ func DeployTokenContracts( }, ) assert.NoError(t, err) - - _, err = b.CommitBlock() - assert.NoError(t, err) + env.FungibleTokenAddress = fungibleAddr.Hex() // Deploy the MetadataViews contract metadataViewsCode := nftcontracts.MetadataViews(fungibleAddr, nftAddress, resolverAddress) - metadataViewsAddr, err = adapter.CreateAccount(context.Background(), + metadataViewsAddr, err := adapter.CreateAccount(context.Background(), nil, []sdktemplates.Contract{ { @@ -86,10 +85,11 @@ func DeployTokenContracts( }, ) assert.NoError(t, err) + env.MetadataViewsAddress = metadataViewsAddr.Hex() // Deploy the FungibleTokenMetadataViews contract fungibleTokenMetadataViewsCode := contracts.FungibleTokenMetadataViews(fungibleAddr.String(), metadataViewsAddr.String(), resolverAddress.String()) - fungibleMetadataViewsAddr, err = adapter.CreateAccount(context.Background(), + fungibleMetadataViewsAddr, err := adapter.CreateAccount(context.Background(), nil, []sdktemplates.Contract{ { @@ -99,24 +99,10 @@ func DeployTokenContracts( }, ) assert.NoError(t, err) - - _, err = b.CommitBlock() - assert.NoError(t, err) - - // Deploy the MultipleVaults contract interface - multipleVaultsAddress, err := adapter.CreateAccount(context.Background(), - key, - []sdktemplates.Contract{ - { - Name: "MultipleVaults", - Source: string(contracts.MultipleVaults(fungibleAddr.String())), - }, - }, - ) - assert.NoError(t, err) + env.FungibleTokenMetadataViewsAddress = fungibleMetadataViewsAddr.Hex() // Deploy the ExampleToken contract - exampleTokenCode := contracts.ExampleTokenV2(fungibleAddr.String(), metadataViewsAddr.String(), fungibleMetadataViewsAddr.String(), resolverAddress.String(), multipleVaultsAddress.String()) + exampleTokenCode := contracts.ExampleToken(fungibleAddr.String(), metadataViewsAddr.String(), fungibleMetadataViewsAddr.String(), resolverAddress.String(), "") tokenAddr, err = adapter.CreateAccount(context.Background(), key, []sdktemplates.Contract{ @@ -127,13 +113,11 @@ func DeployTokenContracts( }, ) assert.NoError(t, err) - - _, err = b.CommitBlock() - assert.NoError(t, err) + env.ExampleTokenAddress = tokenAddr.Hex() // Deploy the TokenForwarding contract forwardingCode := contracts.TokenForwarding(fungibleAddr.String()) - forwardingAddr, err = adapter.CreateAccount(context.Background(), + forwardingAddr, err := adapter.CreateAccount(context.Background(), key, []sdktemplates.Contract{ { @@ -143,13 +127,11 @@ func DeployTokenContracts( }, ) assert.NoError(t, err) - - _, err = b.CommitBlock() - assert.NoError(t, err) + env.TokenForwardingAddress = forwardingAddr.Hex() // Deploy the FungibleTokenSwitchboard contract switchboardCode := contracts.FungibleTokenSwitchboard(fungibleAddr.String()) - _, err = adapter.CreateAccount(context.Background(), + switchboardAddr, err := adapter.CreateAccount(context.Background(), key, []sdktemplates.Contract{ { @@ -159,9 +141,43 @@ func DeployTokenContracts( }, ) assert.NoError(t, err) + env.SwitchboardAddress = switchboardAddr.Hex() _, err = b.CommitBlock() assert.NoError(t, err) - return fungibleAddr, resolverAddress, tokenAddr, forwardingAddr, metadataViewsAddr, fungibleMetadataViewsAddr + return tokenAddr +} + +func createAccountWithVault( + b emulator.Emulator, + adapter *adapters.SDKAdapter, + t *testing.T, + keys *test.AccountKeys, + env templates.Environment, +) ( + flow.Address, *flow.AccountKey, crypto.Signer, +) { + + newAccountKey, newSigner := keys.NewWithSigner() + newAddress, _ := adapter.CreateAccount(context.Background(), []*flow.AccountKey{newAccountKey}, nil) + + serviceSigner, _ := b.ServiceKey().Signer() + + // Setup new account with an empty vault + script := templates.GenerateCreateTokenScript(env) + tx := createTxWithTemplateAndAuthorizer(b, script, newAddress) + signAndSubmit( + t, b, tx, + []flow.Address{ + b.ServiceKey().Address, + newAddress, + }, + []crypto.Signer{ + serviceSigner, + newSigner, + }, + false, + ) + return newAddress, newAccountKey, newSigner } diff --git a/tests/example_token_tests.cdc b/tests/example_token_tests.cdc index 4a838fb8..72e68bf8 100644 --- a/tests/example_token_tests.cdc +++ b/tests/example_token_tests.cdc @@ -1,36 +1,21 @@ import Test import BlockchainHelpers +import "test_helpers.cdc" import "FungibleTokenMetadataViews" import "ExampleToken" +import "FungibleToken" access(all) let admin = Test.getAccount(0x0000000000000007) access(all) let recipient = Test.createAccount() access(all) fun setup() { - var err = Test.deployContract( - name: "FungibleTokenMetadataViews", - path: "../contracts/FungibleTokenMetadataViews.cdc", - arguments: [] - ) - Test.expect(err, Test.beNil()) - - err = Test.deployContract( - name: "ExampleToken", - path: "../contracts/ExampleToken-v2.cdc", - arguments: [] - ) - Test.expect(err, Test.beNil()) -} - -access(all) -fun testTokensInitializedEventEmitted() { - let typ = Type() - let events = Test.eventsOfType(typ) - Test.assertEqual(1, events.length) - - let tokensInitializedEvent = events[0] as! ExampleToken.TokensInitialized - Test.assertEqual(1000.0, tokensInitializedEvent.initialSupply) + deploy("ViewResolver", "../contracts/utility/ViewResolver.cdc") + deploy("FungibleToken", "../contracts/FungibleToken.cdc") + deploy("NonFungibleToken", "../contracts/utility/NonFungibleToken.cdc") + deploy("MetadataViews", "../contracts/utility/MetadataViews.cdc") + deploy("FungibleTokenMetadataViews", "../contracts/FungibleTokenMetadataViews.cdc") + deploy("ExampleToken", "../contracts/ExampleToken.cdc") } access(all) @@ -94,20 +79,14 @@ fun testMintTokens() { let tokensMintedEvent = events[0] as! ExampleToken.TokensMinted Test.assertEqual(250.0, tokensMintedEvent.amount) - typ = Type() + typ = Type() events = Test.eventsOfType(typ) Test.assertEqual(1, events.length) - let minterCreatedEvent = events[0] as! ExampleToken.MinterCreated - Test.assertEqual(250.0, minterCreatedEvent.allowedAmount) - - typ = Type() - events = Test.eventsOfType(typ) - Test.assertEqual(1, events.length) - - let tokensDepositedEvent = events[0] as! ExampleToken.TokensDeposited + let tokensDepositedEvent = events[0] as! FungibleToken.Deposit Test.assertEqual(250.0, tokensDepositedEvent.amount) Test.assertEqual(recipient.address, tokensDepositedEvent.to!) + Test.assertEqual("A.0000000000000007.ExampleToken.Vault", tokensDepositedEvent.type) // Test that the totalSupply increased by the amount of minted tokens let scriptResult = executeScript( @@ -129,14 +108,14 @@ fun testTransferTokens() { ) Test.expect(txResult, Test.beSucceeded()) - var typ = Type() + var typ = Type() Test.assertEqual(2, Test.eventsOfType(typ).length) - typ = Type() + typ = Type() let events = Test.eventsOfType(typ) Test.assertEqual(1, events.length) - let tokensWithdrawnEvent = events[0] as! ExampleToken.TokensWithdrawn + let tokensWithdrawnEvent = events[0] as! FungibleToken.Withdraw Test.assertEqual(50.0, tokensWithdrawnEvent.amount) Test.assertEqual(recipient.address, tokensWithdrawnEvent.from!) @@ -184,16 +163,13 @@ fun testBurnTokens() { ) Test.expect(txResult, Test.beSucceeded()) - var typ = Type() - var events = Test.eventsOfType(typ) - Test.assertEqual(1, events.length) - - typ = Type() - events = Test.eventsOfType(typ) + let type = Type() + let events = Test.eventsOfType(type) Test.assertEqual(1, events.length) - let tokensBurnedEvent = events[0] as! ExampleToken.TokensBurned + let tokensBurnedEvent = events[0] as! FungibleToken.Burn Test.assertEqual(50.0, tokensBurnedEvent.amount) + Test.assertEqual("A.0000000000000007.ExampleToken.Vault", tokensBurnedEvent.type) let scriptResult = executeScript( "../transactions/scripts/get_balance.cdc", diff --git a/tests/metadata_views_tests.cdc b/tests/metadata_views_tests.cdc index f1d9370a..6fcb3f1a 100644 --- a/tests/metadata_views_tests.cdc +++ b/tests/metadata_views_tests.cdc @@ -1,17 +1,27 @@ import Test +import BlockchainHelpers import "test_helpers.cdc" +import "ViewResolver" +import "FungibleTokenMetadataViews" +import "ExampleToken" +import "FungibleToken" -// access(all) let blockchain = Test.newEmulatorBlockchain() -access(all) let sourceAccount = blockchain.createAccount() -access(all) let accounts: {String: Test.TestAccount} = {} +/* Test Setup */ -access(all) let exampleToken = "ExampleToken" +access(all) fun setup() { + deploy("ViewResolver", "../contracts/utility/ViewResolver.cdc") + deploy("FungibleToken", "../contracts/FungibleToken.cdc") + deploy("NonFungibleToken", "../contracts/utility/NonFungibleToken.cdc") + deploy("MetadataViews", "../contracts/utility/MetadataViews.cdc") + deploy("FungibleTokenMetadataViews", "../contracts/FungibleTokenMetadataViews.cdc") + deploy("ExampleToken", "../contracts/ExampleToken.cdc") +} /* Test Cases */ access(all) fun testSetupAccountUsingFTView() { - let alice = blockchain.createAccount() - let bob = blockchain.createAccount() + let alice = Test.createAccount() + let bob = Test.createAccount() setupExampleToken(alice) let aliceBalance = getExampleTokenBalance(alice) @@ -23,7 +33,7 @@ access(all) fun testSetupAccountUsingFTView() { } access(all) fun testRetrieveVaultDisplayInfo() { - let alice = blockchain.createAccount() + let alice = Test.createAccount() setupExampleToken(alice) let result = scriptExecutor("test/example_token_vault_display_strict_equal.cdc", [alice.address])! as! Bool @@ -43,48 +53,4 @@ access(all) fun setupExampleToken(_ acct: Test.TestAccount) { access(all) fun getExampleTokenBalance(_ acct: Test.TestAccount): UFix64 { let balance: UFix64? = (scriptExecutor("get_balance.cdc", [acct.address])! as! UFix64) return balance! -} - -/* Test Helper */ - -access(all) fun getTestAccount(_ name: String): Test.TestAccount { - if accounts[name] == nil { - accounts[name] = blockchain.createAccount() - } - - return accounts[name]! -} - -/* Test Setup */ - -access(all) fun setup() { - - let sourceAccount = blockchain.createAccount() - - accounts["FungibleToken"] = sourceAccount - accounts["NonFungibleToken"] = sourceAccount - accounts["ViewResolver"] = sourceAccount - accounts["MetadataViews"] = sourceAccount - accounts["FungibleTokenMetadataViews"] = sourceAccount - accounts["ExampleToken"] = sourceAccount - - blockchain.useConfiguration( - Test.Configuration( - addresses: { - "FungibleToken": sourceAccount.address, - "NonFungibleToken": sourceAccount.address, - "ViewResolver": sourceAccount.address, - "MetadataViews": sourceAccount.address, - "FungibleTokenMetadataViews": sourceAccount.address, - "ExampleToken": sourceAccount.address - } - ) - ) - - deploy("ViewResolver", sourceAccount, "../contracts/utility/ViewResolver.cdc") - deploy("FungibleToken", sourceAccount, "../contracts/FungibleToken-v2.cdc") - deploy("NonFungibleToken", sourceAccount, "../contracts/utility/NonFungibleToken.cdc") - deploy("MetadataViews", sourceAccount, "../contracts/utility/MetadataViews.cdc") - deploy("FungibleTokenMetadataViews", sourceAccount, "../contracts/FungibleTokenMetadataViews.cdc") - deploy("ExampleToken", sourceAccount, "../contracts/ExampleToken-v2.cdc") -} +} \ No newline at end of file diff --git a/tests/private_receiver_forwarder_tests.cdc b/tests/private_receiver_forwarder_tests.cdc index 0b9eab75..bd16d56a 100644 --- a/tests/private_receiver_forwarder_tests.cdc +++ b/tests/private_receiver_forwarder_tests.cdc @@ -1,39 +1,63 @@ import Test +import BlockchainHelpers import "test_helpers.cdc" +import "ExampleToken" -access(all) let sourceAccount = blockchain.createAccount() -access(all) let accounts: {String: Test.TestAccount} = {} - -access(all) let exampleToken = "ExampleToken" +/* Test Setup */ +access(all) let admin = Test.getAccount(0x0000000000000007) access(all) let senderStoragePath = /storage/Sender access(all) let privateReceiverStoragePath = /storage/PrivateReceiver access(all) let privateReceiverPublicPath = /public/PrivateReceiver +access(all) fun setup() { + + // helper nft contract so we can actually talk to nfts with tests + deploy("ViewResolver", "../contracts/utility/ViewResolver.cdc") + deploy("FungibleToken", "../contracts/FungibleToken.cdc") + deploy("NonFungibleToken", "../contracts/utility/NonFungibleToken.cdc") + deploy("MetadataViews", "../contracts/utility/MetadataViews.cdc") + deploy("FungibleTokenMetadataViews", "../contracts/FungibleTokenMetadataViews.cdc") + deploy("ExampleToken", "../contracts/ExampleToken.cdc") + deployWithArgs( + "PrivateReceiverForwarder", + "../contracts/utility/PrivateReceiverForwarder.cdc", + args: [ + senderStoragePath, + privateReceiverStoragePath, + privateReceiverPublicPath + ] + ) +} + /* Test Cases */ access(all) fun testSetupForwader() { - let alice = blockchain.createAccount() - txExecutor("privateForwarder/setup_and_create_forwarder.cdc", [sourceAccount], [], nil, nil) + let alice = Test.createAccount() + let txResult = executeTransaction( + "../transactions/privateForwarder/setup_and_create_forwarder.cdc", + [], + alice + ) + Test.expect(txResult, Test.beSucceeded()) } access(all) fun testTransferPrivateTokens() { - let sender = getTestAccount(exampleToken) - let senderBalanceBefore = getExampleTokenBalance(sender) + let senderBalanceBefore = getExampleTokenBalance(admin) assert(senderBalanceBefore == 1000.0, message: "ExampleToken balance should be 1000.0") - let recipient = blockchain.createAccount() + let recipient = Test.createAccount() let recipientAmount = 300.0 let pair = {recipient.address: recipientAmount} - txExecutor("privateForwarder/setup_and_create_forwarder.cdc", [recipient], [], nil, nil) - txExecutor("privateForwarder/transfer_private_many_accounts.cdc", [sender], [pair], nil, nil) + txExecutor("../transactions/privateForwarder/setup_and_create_forwarder.cdc", [recipient], [], nil, nil) + txExecutor("../transactions/privateForwarder/transfer_private_many_accounts.cdc", [admin], [pair], nil, nil) let recipientBalance = getExampleTokenBalance(recipient) Test.assertEqual(recipientAmount, recipientBalance) - let senderBalanceAfter = getExampleTokenBalance(sender) + let senderBalanceAfter = getExampleTokenBalance(admin) Test.assertEqual(senderBalanceBefore - recipientAmount, senderBalanceAfter) } @@ -49,7 +73,7 @@ access(all) fun mintExampleToken(_ acct: Test.TestAccount, recipient: Address, a } access(all) fun setupTokenForwarder(_ acct: Test.TestAccount) { - txExecutor("privateForwarder/setup_and_create_forwarder.cdc", [acct], [], nil, nil) + txExecutor("../transactions/privateForwarder/setup_and_create_forwarder.cdc", [acct], [], nil, nil) } /* Script Helpers */ @@ -58,60 +82,3 @@ access(all) fun getExampleTokenBalance(_ acct: Test.TestAccount): UFix64 { let balance: UFix64? = (scriptExecutor("get_balance.cdc", [acct.address])! as! UFix64) return balance! } - -/* Test Helper */ - -access(all) fun getTestAccount(_ name: String): Test.TestAccount { - if accounts[name] == nil { - accounts[name] = blockchain.createAccount() - } - - return accounts[name]! -} - -/* Test Setup */ - -access(all) fun setup() { - - let sourceAccount = blockchain.createAccount() - - accounts["FungibleToken"] = sourceAccount - accounts["NonFungibleToken"] = sourceAccount - accounts["ViewResolver"] = sourceAccount - accounts["MetadataViews"] = sourceAccount - accounts["FungibleTokenMetadataViews"] = sourceAccount - accounts["ExampleToken"] = sourceAccount - accounts["PrivateReceiverForwarder"] = sourceAccount - - blockchain.useConfiguration( - Test.Configuration( - addresses: { - "FungibleToken": sourceAccount.address, - "NonFungibleToken": sourceAccount.address, - "ViewResolver": sourceAccount.address, - "MetadataViews": sourceAccount.address, - "FungibleTokenMetadataViews": sourceAccount.address, - "ExampleToken": sourceAccount.address, - "PrivateReceiverForwarder": sourceAccount.address - } - ) - ) - - // helper nft contract so we can actually talk to nfts with tests - deploy("ViewResolver", sourceAccount, "../contracts/utility/ViewResolver.cdc") - deploy("FungibleToken", sourceAccount, "../contracts/FungibleToken-v2.cdc") - deploy("NonFungibleToken", sourceAccount, "../contracts/utility/NonFungibleToken.cdc") - deploy("MetadataViews", sourceAccount, "../contracts/utility/MetadataViews.cdc") - deploy("FungibleTokenMetadataViews", sourceAccount, "../contracts/FungibleTokenMetadataViews.cdc") - deploy("ExampleToken", sourceAccount, "../contracts/ExampleToken-v2.cdc") - deployWithArgs( - "PrivateReceiverForwarder", - sourceAccount, - "../contracts/utility/PrivateReceiverForwarder.cdc", - args: [ - senderStoragePath, - privateReceiverStoragePath, - privateReceiverPublicPath - ] - ) -} diff --git a/tests/scripts/get_supported_vault_types.cdc b/tests/scripts/get_supported_vault_types.cdc index 20950a5e..c08fa105 100644 --- a/tests/scripts/get_supported_vault_types.cdc +++ b/tests/scripts/get_supported_vault_types.cdc @@ -4,7 +4,7 @@ import "FungibleToken" /// `target` address should hold the capability which conforms with FungibleToken.Receiver restricted type /// while it doesn't matter whether capability refers to fungible token or a custom receiver like /// `FungibleTokenSwitchboard` or `TokenReceiver`. However `targetPath` tells where the capability stores -pub fun main(target: Address, targetPath: PublicPath): {Type: Bool} { +access(all) fun main(target: Address, targetPath: PublicPath): {Type: Bool} { // Access the capability for the provided target address let capabilityRef = getAccount(target).capabilities.borrow<&{FungibleToken.Receiver}>(targetPath) diff --git a/tests/scripts/get_token_metadata.cdc b/tests/scripts/get_token_metadata.cdc index d16f8614..a0750f94 100644 --- a/tests/scripts/get_token_metadata.cdc +++ b/tests/scripts/get_token_metadata.cdc @@ -4,6 +4,7 @@ import "ExampleToken" import "FungibleTokenMetadataViews" import "MetadataViews" +import "ViewResolver" access(all) fun main(address: Address): Bool { let account = getAccount(address) diff --git a/tests/scripts/get_unsupported_view.cdc b/tests/scripts/get_unsupported_view.cdc index b72631c8..3f123bea 100644 --- a/tests/scripts/get_unsupported_view.cdc +++ b/tests/scripts/get_unsupported_view.cdc @@ -4,8 +4,9 @@ import "ExampleToken" import "MetadataViews" +import "FungibleToken" -pub fun main(address: Address, type: Type): AnyStruct? { +access(all) fun main(address: Address, type: Type): AnyStruct? { let account = getAccount(address) let vaultRef = account.capabilities.borrow<&{FungibleToken.Vault}>(ExampleToken.VaultPublicPath) ?? panic("Could not borrow Balance reference to the Vault") diff --git a/tests/scripts/get_vault_display.cdc b/tests/scripts/get_vault_display.cdc index 50fdbf16..96330c16 100644 --- a/tests/scripts/get_vault_display.cdc +++ b/tests/scripts/get_vault_display.cdc @@ -4,8 +4,9 @@ import "ExampleToken" import "FungibleTokenMetadataViews" import "MetadataViews" +import "ViewResolver" -pub fun main(address: Address): FungibleTokenMetadataViews.FTDisplay { +access(all) fun main(address: Address): FungibleTokenMetadataViews.FTDisplay { let account = getAccount(address) let vaultRef = account.capabilities.borrow<&{ViewResolver.Resolver}>(ExampleToken.VaultPublicPath) diff --git a/tests/scripts/get_views.cdc b/tests/scripts/get_views.cdc index 7c1f6fe5..95f8eef9 100644 --- a/tests/scripts/get_views.cdc +++ b/tests/scripts/get_views.cdc @@ -4,8 +4,9 @@ import "MetadataViews" import "ExampleToken" import "FungibleTokenMetadataViews" +import "FungibleToken" -pub fun main(address: Address): [Type] { +access(all) fun main(address: Address): [Type] { let account = getAccount(address) let vaultRef = account.capabilities.borrow<&{FungibleToken.Vault}>(ExampleToken.VaultPublicPath) diff --git a/tests/switchboard_tests.cdc b/tests/switchboard_tests.cdc index 294bcd91..57dab81c 100644 --- a/tests/switchboard_tests.cdc +++ b/tests/switchboard_tests.cdc @@ -1,14 +1,20 @@ import Test import BlockchainHelpers +import "test_helpers.cdc" import "FungibleTokenMetadataViews" import "ExampleToken" import "FungibleTokenSwitchboard" +import "FungibleToken" access(all) let admin = Test.getAccount(0x0000000000000007) access(all) let recipient = Test.createAccount() access(all) fun setup() { + deploy("ViewResolver", "../contracts/utility/ViewResolver.cdc") + deploy("FungibleToken", "../contracts/FungibleToken.cdc") + deploy("NonFungibleToken", "../contracts/utility/NonFungibleToken.cdc") + deploy("MetadataViews", "../contracts/utility/MetadataViews.cdc") var err = Test.deployContract( name: "FungibleTokenMetadataViews", path: "../contracts/FungibleTokenMetadataViews.cdc", @@ -18,7 +24,7 @@ fun setup() { err = Test.deployContract( name: "ExampleToken", - path: "../contracts/ExampleToken-v2.cdc", + path: "../contracts/ExampleToken.cdc", arguments: [] ) Test.expect(err, Test.beNil()) diff --git a/tests/test_helpers.cdc b/tests/test_helpers.cdc index aba50fe7..e0405a93 100644 --- a/tests/test_helpers.cdc +++ b/tests/test_helpers.cdc @@ -1,5 +1,4 @@ // Helper functions. All of the following were taken from -// https://github.com/onflow/Offers/blob/fd380659f0836e5ce401aa99a2975166b2da5cb0/lib/cadence/test/Offers.cdc // - deploy // - scriptExecutor // - txExecutor @@ -7,39 +6,29 @@ import Test -access(all) let blockchain = Test.newEmulatorBlockchain() - -access(all) fun deploy(_ contractName: String, _ account: Test.TestAccount, _ path: String) { - let err = blockchain.deployContract( +access(all) fun deploy(_ contractName: String, _ path: String) { + let err = Test.deployContract( name: contractName, - code: Test.readFile(path), - account: account, + path: path, arguments: [], ) Test.expect(err, Test.beNil()) - if err != nil { - panic(err!.message) - } } -access(all) fun deployWithArgs(_ contractName: String, _ account: Test.TestAccount, _ path: String, args: [AnyStruct]) { - let err = blockchain.deployContract( +access(all) fun deployWithArgs(_ contractName: String, _ path: String, args: [AnyStruct]) { + let err = Test.deployContract( name: contractName, - code: Test.readFile(path), - account: account, + path: path, arguments: args, ) Test.expect(err, Test.beNil()) - if err != nil { - panic(err!.message) - } } access(all) fun scriptExecutor(_ scriptName: String, _ arguments: [AnyStruct]): AnyStruct? { let scriptCode = loadCode(scriptName, "transactions/scripts") - let scriptResult = blockchain.executeScript(scriptCode, arguments) + let scriptResult = Test.executeScript(scriptCode, arguments) if let failureError = scriptResult.error { panic( @@ -52,7 +41,7 @@ access(all) fun scriptExecutor(_ scriptName: String, _ arguments: [AnyStruct]): access(all) fun expectScriptFailure(_ scriptName: String, _ arguments: [AnyStruct]): String { let scriptCode = loadCode(scriptName, "transactions/scripts") - let scriptResult = blockchain.executeScript(scriptCode, arguments) + let scriptResult = Test.executeScript(scriptCode, arguments) assert(scriptResult.error != nil, message: "script error was expected but there is no error message") return scriptResult.error!.message @@ -73,7 +62,7 @@ access(all) fun txExecutor(_ txName: String, _ signers: [Test.TestAccount], _ ar arguments: arguments, ) - let txResult = blockchain.executeTransaction(tx) + let txResult = Test.executeTransaction(tx) if let err = txResult.error { if let expectedErrorMessage = expectedError { let ptr = getErrorMessagePointer(errorType: expectedErrorType!)