{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC20SafeTransfersFacet",
  "sourceName": "contracts/token/ERC20/facets/ERC20SafeTransfersFacet.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IForwarderRegistry",
          "name": "forwarderRegistry",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "ERC20ApprovalToAddressZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "allowance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "decrement",
          "type": "uint256"
        }
      ],
      "name": "ERC20InsufficientAllowance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "ERC20InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "ERC20SafeTransferRejected",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "ERC20TransferToAddressZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "IllegalInterfaceId",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "NotProxyAdmin",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "initERC20SafeTransfersStorage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeTransfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a034606657601f610b9838819003918201601f19168301916001600160401b03831184841017606b57808492602094604052833981010312606657516001600160a01b0381168103606657608052604051610b1690816100828239608051816106470152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001257600080fd5b60003560e01c8063b88d4fde14610241578063d294f8eb146101075763eb7955491461003d57600080fd5b346101025760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101025761007461050a565b60243560443567ffffffffffffffff81116101025761009790369060040161052d565b9190927f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee926100d083836100c9610630565b809761093f565b813b6100e2575b602060405160018152f35b6100f8946100f19136916105cb565b9280610773565b38808080806100d7565b600080fd5b346101025760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101025761013e610630565b73ffffffffffffffffffffffffffffffffffffffff807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610354169116908103610214577f53f41a97000000000000000000000000000000000000000000000000000000006000527fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d6020527f56711464edcafe4e82a7e7542dffa87959622899ee5b1c678e1763c8a0b334a980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055005b7f673a31a10000000000000000000000000000000000000000000000000000000060005260045260246000fd5b346101025760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101025761027861050a565b60243573ffffffffffffffffffffffffffffffffffffffff811681036101025760443560643567ffffffffffffffff8111610102576102bb90369060040161052d565b9290937f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee936102e8610630565b9484848473ffffffffffffffffffffffffffffffffffffffff89169373ffffffffffffffffffffffffffffffffffffffff821694808603610360575b5061032f945061093f565b823b61034057602060405160018152f35b6103559561034f9136916105cb565b93610773565b8080808080806100d7565b925092505080156104dc578487928792856000527f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef602052604060002081600052602052604060002054957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff871415806104d3575b61040e575b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925602061032f98604051908152a38b610324565b9350939094809250039080821015610490575061032f93889388937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560208a95836000527f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef8252604060002085600052825280604060002055985050506103da565b889150608493604051937f137ad6ab0000000000000000000000000000000000000000000000000000000085526004850152602484015260448301526064820152fd5b508515156103d5565b827ff7e1ac0f0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361010257565b9181601f840112156101025782359167ffffffffffffffff8311610102576020838186019501011161010257565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761059c57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b92919267ffffffffffffffff821161059c576040519161061360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116018461055b565b829481845281830111610102578281602093846000960137010152565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168015610764573233148015610769575b610764577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c908033149081156106bb575b506106b857503390565b90565b60649150602090604051928380927f019a20280000000000000000000000000000000000000000000000000000000082528660048301523360248301523060448301525afa90811561075857600091610716575b50386106ae565b6020813d602011610750575b8161072f6020938361055b565b8101031261074c575190811515820361074957503861070f565b80fd5b5080fd5b3d9150610722565b6040513d6000823e3d90fd5b503390565b5060183610610677565b9290939173ffffffffffffffffffffffffffffffffffffffff8091169481604051957f4fc358590000000000000000000000000000000000000000000000000000000087521660048601521660248401526044830152608060648301528181519182608483015260005b83811061092757505060a4817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8560008560209886010152011681010301816000865af1908115610758576000916108ac575b507fffffffff000000000000000000000000000000000000000000000000000000007f4fc358590000000000000000000000000000000000000000000000000000000091160361087f5750565b7f6d4497360000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6020813d60201161091f575b816108c56020938361055b565b8101031261074c5751907fffffffff000000000000000000000000000000000000000000000000000000008216820361074957507fffffffff00000000000000000000000000000000000000000000000000000000610832565b3d91506108b8565b602082820181015160a48784010152859350016107dd565b929173ffffffffffffffffffffffffffffffffffffffff16928315610a9c57826109a9575b50602073ffffffffffffffffffffffffffffffffffffffff7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef926040519485521692a3565b73ffffffffffffffffffffffffffffffffffffffff8216600052806020526040600020548381039080821015610a5057508260209273ffffffffffffffffffffffffffffffffffffffff9287847fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef971603610a29575b5050925050610964565b83831660005281855260406000205586600052835260406000208581540190553880610a1f565b849073ffffffffffffffffffffffffffffffffffffffff857fe450d38c000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b73ffffffffffffffffffffffffffffffffffffffff827f754f425b000000000000000000000000000000000000000000000000000000006000521660045260246000fdfea2646970667358221220d1f9b01cdc3baec385c7895da10587a42bcec1e0aadc2bed37caa90c13cde77a64736f6c634300081e0033",
  "deployedBytecode": "0x6080604052600436101561001257600080fd5b60003560e01c8063b88d4fde14610241578063d294f8eb146101075763eb7955491461003d57600080fd5b346101025760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101025761007461050a565b60243560443567ffffffffffffffff81116101025761009790369060040161052d565b9190927f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee926100d083836100c9610630565b809761093f565b813b6100e2575b602060405160018152f35b6100f8946100f19136916105cb565b9280610773565b38808080806100d7565b600080fd5b346101025760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101025761013e610630565b73ffffffffffffffffffffffffffffffffffffffff807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610354169116908103610214577f53f41a97000000000000000000000000000000000000000000000000000000006000527fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d6020527f56711464edcafe4e82a7e7542dffa87959622899ee5b1c678e1763c8a0b334a980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055005b7f673a31a10000000000000000000000000000000000000000000000000000000060005260045260246000fd5b346101025760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101025761027861050a565b60243573ffffffffffffffffffffffffffffffffffffffff811681036101025760443560643567ffffffffffffffff8111610102576102bb90369060040161052d565b9290937f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee936102e8610630565b9484848473ffffffffffffffffffffffffffffffffffffffff89169373ffffffffffffffffffffffffffffffffffffffff821694808603610360575b5061032f945061093f565b823b61034057602060405160018152f35b6103559561034f9136916105cb565b93610773565b8080808080806100d7565b925092505080156104dc578487928792856000527f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef602052604060002081600052602052604060002054957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff871415806104d3575b61040e575b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925602061032f98604051908152a38b610324565b9350939094809250039080821015610490575061032f93889388937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560208a95836000527f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef8252604060002085600052825280604060002055985050506103da565b889150608493604051937f137ad6ab0000000000000000000000000000000000000000000000000000000085526004850152602484015260448301526064820152fd5b508515156103d5565b827ff7e1ac0f0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361010257565b9181601f840112156101025782359167ffffffffffffffff8311610102576020838186019501011161010257565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761059c57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b92919267ffffffffffffffff821161059c576040519161061360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116018461055b565b829481845281830111610102578281602093846000960137010152565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168015610764573233148015610769575b610764577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c908033149081156106bb575b506106b857503390565b90565b60649150602090604051928380927f019a20280000000000000000000000000000000000000000000000000000000082528660048301523360248301523060448301525afa90811561075857600091610716575b50386106ae565b6020813d602011610750575b8161072f6020938361055b565b8101031261074c575190811515820361074957503861070f565b80fd5b5080fd5b3d9150610722565b6040513d6000823e3d90fd5b503390565b5060183610610677565b9290939173ffffffffffffffffffffffffffffffffffffffff8091169481604051957f4fc358590000000000000000000000000000000000000000000000000000000087521660048601521660248401526044830152608060648301528181519182608483015260005b83811061092757505060a4817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8560008560209886010152011681010301816000865af1908115610758576000916108ac575b507fffffffff000000000000000000000000000000000000000000000000000000007f4fc358590000000000000000000000000000000000000000000000000000000091160361087f5750565b7f6d4497360000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6020813d60201161091f575b816108c56020938361055b565b8101031261074c5751907fffffffff000000000000000000000000000000000000000000000000000000008216820361074957507fffffffff00000000000000000000000000000000000000000000000000000000610832565b3d91506108b8565b602082820181015160a48784010152859350016107dd565b929173ffffffffffffffffffffffffffffffffffffffff16928315610a9c57826109a9575b50602073ffffffffffffffffffffffffffffffffffffffff7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef926040519485521692a3565b73ffffffffffffffffffffffffffffffffffffffff8216600052806020526040600020548381039080821015610a5057508260209273ffffffffffffffffffffffffffffffffffffffff9287847fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef971603610a29575b5050925050610964565b83831660005281855260406000205586600052835260406000208581540190553880610a1f565b849073ffffffffffffffffffffffffffffffffffffffff857fe450d38c000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b73ffffffffffffffffffffffffffffffffffffffff827f754f425b000000000000000000000000000000000000000000000000000000006000521660045260246000fdfea2646970667358221220d1f9b01cdc3baec385c7895da10587a42bcec1e0aadc2bed37caa90c13cde77a64736f6c634300081e0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
