{"abi":[{"name":"ImplementationSet","type":"event","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"OwnerSet","type":"event","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"fallback","payable":true,"stateMutability":"payable"},{"name":"_getImplementation","type":"function","inputs":[],"outputs":[{"name":"implementation","type":"address","internalType":"address"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"_getOwner","type":"function","inputs":[],"outputs":[{"name":"owner","type":"address","internalType":"address"}],"payable":false,"constant":true,"stateMutability":"view"},{"name":"_setAndInitializeImplementation","type":"function","inputs":[{"name":"implementation","type":"address","internalType":"address"},{"name":"callbackData","type":"bytes","internalType":"bytes"}],"outputs":[],"payable":true,"constant":false,"stateMutability":"payable"},{"name":"_setImplementation","type":"function","inputs":[{"name":"implementation","type":"address","internalType":"address"}],"outputs":[],"payable":false,"constant":false,"stateMutability":"nonpayable"},{"name":"_transferOwnership","type":"function","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"payable":false,"constant":false,"stateMutability":"nonpayable"}],"metadata":{"compiler":{"version":"0.5.17+commit.d19bba13"},"language":"Solidity","output":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"ImplementationSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"OwnerSet","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"_getImplementation","outputs":[{"internalType":"address","name":"implementation","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_getOwner","outputs":[{"internalType":"address","name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"callbackData","type":"bytes"}],"name":"_setAndInitializeImplementation","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"name":"_setImplementation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"_transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}],"devdoc":{"methods":{"_setAndInitializeImplementation(address,bytes)":{"details":"Throws if the initialization callback fails.If the target contract does not need initialization, use setImplementation instead.","params":{"callbackData":"The abi-encoded function call to perform in the implementation contract.","implementation":"Address of the new target contract."}},"_setImplementation(address)":{"details":"If the target contract needs to be initialized, call setAndInitializeImplementation instead.","params":{"implementation":"Address of the new target contract."}},"_transferOwnership(address)":{"params":{"newOwner":"Address of the new owner account."}}}},"userdoc":{"methods":{"_getImplementation()":{"notice":"Returns the implementation address."},"_getOwner()":{"notice":"Returns the Proxy owner's address."},"_setAndInitializeImplementation(address,bytes)":{"notice":"Sets the address of the implementation contract and calls into it."},"_setImplementation(address)":{"notice":"Sets the address of the implementation contract."},"_transferOwnership(address)":{"notice":"Transfers ownership of Proxy to a new owner."}}}},"settings":{"compilationTarget":{"lib/mento-core-2.6.5/contracts/tokens/StableTokenZARProxy.sol":"StableTokenZARProxy"},"evmVersion":"istanbul","libraries":{"AddressLinkedList":"0x6200f54d73491d56b8d7a975c9ee18efb4d518df","AddressSortedLinkedListWithMedian":"0xed477a99035d0c1e11369f1d7a4e587893cc002b"},"optimizer":{"enabled":true,"runs":10000},"remappings":[":@celo/=lib/mento-core-2.6.0/node_modules/@celo/contracts/",":@chainlink/contracts/=lib/mento-core-2.6.5/lib/foundry-chainlink-toolkit/lib/chainlink-brownie-contracts/contracts/src/",":@openzeppelin/=lib/mento-core-2.6.5/lib/foundry-chainlink-toolkit/lib/openzeppelin-contracts/",":@prb/test/=lib/mento-core-2.6.5/lib/prb-math/lib/prb-test/src/",":celo-foundry/=lib/celo-foundry/src/",":celo/=node_modules/@celo/",":chainlink-brownie-contracts/=lib/mento-core-2.6.5/lib/foundry-chainlink-toolkit/lib/chainlink-brownie-contracts/contracts/src/v0.6/vendor/@arbitrum/nitro-contracts/src/",":contracts/=contracts/",":ds-test/=lib/celo-foundry/lib/forge-std/lib/ds-test/src/",":forge-std-next/=lib/forge-std-next/src/",":forge-std/=lib/celo-foundry/lib/forge-std/src/",":foundry-chainlink-toolkit/=lib/mento-core-2.6.5/lib/foundry-chainlink-toolkit/",":mento-core-2.0.0/=lib/mento-core-2.0.0/contracts/",":mento-core-2.1.0/=lib/mento-core-2.1.0/contracts/",":mento-core-2.2.0/=lib/mento-core-2.2.0/contracts/",":mento-core-2.3.1/=lib/mento-core-2.3.1/contracts/",":mento-core-2.5.0/=lib/mento-core-2.5.0/contracts/",":mento-core-2.6.0-oz/=lib/mento-core-2.6.0/lib/openzeppelin-contracts-next/",":mento-core-2.6.0/=lib/mento-core-2.6.0/contracts/",":mento-core-2.6.2/=lib/mento-core-2.6.2/contracts/",":mento-core-2.6.3/=lib/mento-core-2.6.3/contracts/",":mento-core-2.6.4/=lib/mento-core-2.6.4/contracts/",":mento-core-2.6.5/=lib/mento-core-2.6.5/contracts/",":mento-std/=lib/mento-core-2.6.5/lib/mento-std/src/",":merkle-distributor/=lib/merkle-distributor/contracts/",":openzeppelin-contracts-next/=lib/mento-core-2.6.5/lib/openzeppelin-contracts-next/",":openzeppelin-contracts-upgradeable/=lib/mento-core-2.6.5/lib/openzeppelin-contracts-upgradeable/",":openzeppelin-contracts/=lib/mento-core-2.6.5/lib/openzeppelin-contracts-next/",":openzeppelin-solidity/=lib/mento-core-2.0.0/lib/openzeppelin-contracts/",":prb-math/=lib/mento-core-2.6.5/lib/prb-math/src/",":prb-test/=lib/mento-core-2.6.5/lib/prb-math/lib/prb-test/src/",":prb/math/=lib/mento-core-2.6.5/lib/prb-math/src/",":safe-contracts/=lib/mento-core-2.6.5/lib/safe-contracts/",":src/=lib/mento-core-2.6.5/lib/prb-math/src/",":test/=lib/mento-core-2.6.5/test/"]},"sources":{"lib/mento-core-2.0.0/lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x1a8e5072509c5ea7365eb1d48030b9be865140c8fb779968da0a459a0e174a11","urls":["bzz-raw://03335b7b07c7c8c8d613cfdd8ec39a0b5ec133ee510bf2fe6cc5a496767bef4b","dweb:/ipfs/Qmebp4nzPja645c9yXSdJkGq96oU3am3LUnG2K3R7XxyKf"]},"lib/mento-core-2.6.5/contracts/tokens/StableTokenZARProxy.sol":{"keccak256":"0x884771b459e9e79df5d7e76afeb329d821bbd4444241f99b90288488c9bc7147","urls":["bzz-raw://5050aa3224e4a9572defa80427eaeda9f88207e7da5470f0972d0562a39554f4","dweb:/ipfs/QmZrJRJrxpqyw9ozFpxfEZHa4zyphnB8VeRFBn6JMDeq6S"]},"node_modules/@celo/contracts/common/Proxy.sol":{"keccak256":"0x650f2a079da45a71970749c9039dece5986835225035b29eca4df1c1dab0d6ac","urls":["bzz-raw://cb6c36af368fa26a6fb5f033941536e73ebd1aafad5162f073f318a30f4ee349","dweb:/ipfs/QmaWNhRtpPU4iGDnWjBYRZobUvJYwGQJvtaPZMtbzjjZB3"]}},"version":1},"sources":{"lib/mento-core-2.0.0/lib/openzeppelin-contracts/contracts/utils/Address.sol":{"content":"pragma solidity ^0.5.5;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n    /**\n     * @dev Returns true if `account` is a contract.\n     *\n     * [IMPORTANT]\n     * ====\n     * It is unsafe to assume that an address for which this function returns\n     * false is an externally-owned account (EOA) and not a contract.\n     *\n     * Among others, `isContract` will return false for the following \n     * types of addresses:\n     *\n     *  - an externally-owned account\n     *  - a contract in construction\n     *  - an address where a contract will be created\n     *  - an address where a contract lived, but was destroyed\n     * ====\n     */\n    function isContract(address account) internal view returns (bool) {\n        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts\n        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned\n        // for accounts without code, i.e. `keccak256('')`\n        bytes32 codehash;\n        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;\n        // solhint-disable-next-line no-inline-assembly\n        assembly { codehash := extcodehash(account) }\n        return (codehash != accountHash && codehash != 0x0);\n    }\n\n    /**\n     * @dev Converts an `address` into `address payable`. Note that this is\n     * simply a type cast: the actual underlying value is not changed.\n     *\n     * _Available since v2.4.0._\n     */\n    function toPayable(address account) internal pure returns (address payable) {\n        return address(uint160(account));\n    }\n\n    /**\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n     * `recipient`, forwarding all available gas and reverting on errors.\n     *\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\n     * imposed by `transfer`, making them unable to receive funds via\n     * `transfer`. {sendValue} removes this limitation.\n     *\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n     *\n     * IMPORTANT: because control is transferred to `recipient`, care must be\n     * taken to not create reentrancy vulnerabilities. Consider using\n     * {ReentrancyGuard} or the\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n     *\n     * _Available since v2.4.0._\n     */\n    function sendValue(address payable recipient, uint256 amount) internal {\n        require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n        // solhint-disable-next-line avoid-call-value\n        (bool success, ) = recipient.call.value(amount)(\"\");\n        require(success, \"Address: unable to send value, recipient may have reverted\");\n    }\n}\n"},"lib/mento-core-2.6.5/contracts/tokens/StableTokenZARProxy.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\npragma solidity ^0.5.13;\n\nimport \"celo/contracts/common/Proxy.sol\";\n\n/* solhint-disable-next-line no-empty-blocks */\ncontract StableTokenZARProxy is Proxy {}\n"},"node_modules/@celo/contracts/common/Proxy.sol":{"content":"pragma solidity ^0.5.13;\n/* solhint-disable no-inline-assembly, no-complex-fallback, avoid-low-level-calls */\n\nimport \"openzeppelin-solidity/contracts/utils/Address.sol\";\n\n/**\n * @title A Proxy utilizing the Unstructured Storage pattern.\n */\ncontract Proxy {\n  // Used to store the address of the owner.\n  bytes32 private constant OWNER_POSITION = bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1);\n  // Used to store the address of the implementation contract.\n  bytes32 private constant IMPLEMENTATION_POSITION = bytes32(\n    uint256(keccak256(\"eip1967.proxy.implementation\")) - 1\n  );\n\n  event OwnerSet(address indexed owner);\n  event ImplementationSet(address indexed implementation);\n\n  constructor() public {\n    _setOwner(msg.sender);\n  }\n\n  /**\n   * @notice Throws if called by any account other than the owner.\n   */\n  modifier onlyOwner() {\n    require(msg.sender == _getOwner(), \"sender was not owner\");\n    _;\n  }\n\n  /**\n   * @notice Delegates calls to the implementation contract.\n   */\n  function() external payable {\n    bytes32 implementationPosition = IMPLEMENTATION_POSITION;\n\n    address implementationAddress;\n\n    // Load the address of the implementation contract from an explicit storage slot.\n    assembly {\n      implementationAddress := sload(implementationPosition)\n    }\n\n    // Avoid checking if address is a contract or executing delegated call when\n    // implementation address is 0x0\n    require(implementationAddress != address(0), \"No Implementation set\");\n    require(Address.isContract(implementationAddress), \"Invalid contract address\");\n\n    assembly {\n      // Extract the position of the transaction data (i.e. function ID and arguments).\n      let newCallDataPosition := mload(0x40)\n      mstore(0x40, add(newCallDataPosition, calldatasize))\n      calldatacopy(newCallDataPosition, 0, calldatasize)\n\n      // Call the smart contract at `implementationAddress` in the context of the proxy contract,\n      // with the same msg.sender and value.\n      let delegatecallSuccess := delegatecall(\n        gas,\n        implementationAddress,\n        newCallDataPosition,\n        calldatasize,\n        0,\n        0\n      )\n\n      // Copy the return value of the call so it can be returned.\n      let returnDataSize := returndatasize\n      let returnDataPosition := mload(0x40)\n      mstore(0x40, add(returnDataPosition, returnDataSize))\n      returndatacopy(returnDataPosition, 0, returnDataSize)\n\n      // Revert or return depending on whether or not the call was successful.\n      switch delegatecallSuccess\n        case 0 {\n          revert(returnDataPosition, returnDataSize)\n        }\n        default {\n          return(returnDataPosition, returnDataSize)\n        }\n    }\n  }\n\n  /**\n   * @notice Transfers ownership of Proxy to a new owner.\n   * @param newOwner Address of the new owner account.\n   */\n  function _transferOwnership(address newOwner) external onlyOwner {\n    _setOwner(newOwner);\n  }\n\n  /**\n   * @notice Sets the address of the implementation contract and calls into it.\n   * @param implementation Address of the new target contract.\n   * @param callbackData The abi-encoded function call to perform in the implementation\n   * contract.\n   * @dev Throws if the initialization callback fails.\n   * @dev If the target contract does not need initialization, use\n   * setImplementation instead.\n   */\n  function _setAndInitializeImplementation(address implementation, bytes calldata callbackData)\n    external\n    payable\n    onlyOwner\n  {\n    _setImplementation(implementation);\n    bool success;\n    bytes memory returnValue;\n    (success, returnValue) = implementation.delegatecall(callbackData);\n    require(success, \"initialization callback failed\");\n  }\n\n  /**\n   * @notice Returns the implementation address.\n   */\n  function _getImplementation() external view returns (address implementation) {\n    bytes32 implementationPosition = IMPLEMENTATION_POSITION;\n    // Load the address of the implementation contract from an explicit storage slot.\n    assembly {\n      implementation := sload(implementationPosition)\n    }\n  }\n\n  /**\n   * @notice Sets the address of the implementation contract.\n   * @param implementation Address of the new target contract.\n   * @dev If the target contract needs to be initialized, call\n   * setAndInitializeImplementation instead.\n   */\n  function _setImplementation(address implementation) public onlyOwner {\n    bytes32 implementationPosition = IMPLEMENTATION_POSITION;\n\n    require(Address.isContract(implementation), \"Invalid contract address\");\n\n    // Store the address of the implementation contract in an explicit storage slot.\n    assembly {\n      sstore(implementationPosition, implementation)\n    }\n\n    emit ImplementationSet(implementation);\n  }\n\n  /**\n   * @notice Returns the Proxy owner's address.\n   */\n  function _getOwner() public view returns (address owner) {\n    bytes32 position = OWNER_POSITION;\n    // Load the address of the contract owner from an explicit storage slot.\n    assembly {\n      owner := sload(position)\n    }\n  }\n\n  function _setOwner(address newOwner) internal {\n    require(newOwner != address(0), \"owner cannot be 0\");\n    bytes32 position = OWNER_POSITION;\n    // Store the address of the contract owner in an explicit storage slot.\n    assembly {\n      sstore(position, newOwner)\n    }\n    emit OwnerSet(newOwner);\n  }\n}\n"}},"matchId":"6231134","creationMatch":"match","runtimeMatch":"match","verifiedAt":"2025-03-22T23:00:07Z","match":"match","chainId":"42220","address":"0x4c35853A3B4e647fD266f4de678dCc8fEC410BF6"}